Namespace.Register("km7");

km7.fixJson = function (jsonString) {
	
	var _response = jsonString;
	if(jsonString.indexOf("<pre>") >= 0) {
	        _response = jsonString.split("<pre>")[1].split("</pre>")[0];	       
	}
	
	try {
		ret = eval("(" + _response + ")");
		return ret;
	} catch (e) {
		BBT.log(e + " " + jsonString);
		return null;
	}
	
}; 


Namespace.Register("km7.selectGrid");

km7.selectGrid._dependences = { "category": ["brand", "phototype"], 
				"brand": ["parentmodel", "model"],
				"color": [],
				"parentmodel": ["model"],
				"model": ["type", "doors", "finish", "modelversion", "color"], 
				"phototype": ["subphototype"], 
				"subphototype" : [],
				"doors" :[],
				"type": [],
				"finish": [],
				"modelversion": [] };

km7.selectGrid.fillDependences = function (field) {	
	km7.selectGrid.removeDependences(field);

	jQuery.each(km7.selectGrid._dependences[field], function (i) {
			// Ignoramos los selects que no existan
			var aux = km7.selectGrid._dependences[field][i];
			if (jQuery("[name='" + aux + "']").length > 0) {
				km7.selectGrid.getOptions(aux);
			}
		});
};

km7.selectGrid.removeDependences = function (field) {
	try {
		jQuery.each(km7.selectGrid._dependences[field], function (i) {
			var selectName = km7.selectGrid._dependences[field][i];
			var headerClone = jQuery("[name='" + selectName + "'] option:first").clone();
			jQuery("[name='" + selectName + "'] option").remove();
			jQuery("[name='" + selectName + "']").append(headerClone);

			jQuery("[name=" + selectName + "]").attr("disabled", "disabled");
			km7.selectGrid.removeDependences(selectName);
		});
	} catch (e) {
		alert("falta definicion de las dependencias de " + field);
	}
};

km7.selectGrid.getOptions = function (selectName) {
	var category = BBT.getFieldValue("category");

	var dynamicAppend = BBT.getFieldValue("allowDynamicAppend");
	if (dynamicAppend == null) {
		dynamicAppend = 0;
	}

	var langCode = "";
	if(BBT.getGETParams()["langCode"] != null) {
		langCode = BBT.getGETParams()["langCode"];
	}
	
	switch(selectName){
		
	case "brand":
	jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "brand", params: category}, function (response) { km7.selectGrid._fillAjaxCombo("brand", response); });
		break;

	case "parentmodel":
		var brand = BBT.getFieldValue("brand");
		
		if(brand != null && category != null) {
			jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "parentmodel", params: brand + "," + category}, function (response) { km7.selectGrid._fillAjaxCombo("parentmodel", response); });
		}
		break;
		
	case "model":
		if (jQuery("[name='parentmodel']").length > 0) {
			var parentmodel = BBT.getFieldValue("parentmodel");

			if(parentmodel != null && category != null) {
				jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "model", params: parentmodel + "," + category}, function (response) { km7.selectGrid._fillAjaxCombo("model", response); });			
			}
		} else {
			// No tenemos modelo padre, tiramos de brand
			var brand = BBT.getFieldValue("brand");
			
			if(brand != null && category != null) {
				jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "modelFromBrand", params: brand + "," + category}, function (response) { km7.selectGrid._fillAjaxCombo("model", response); });			
			}
		}
		break;
		
	case "type":
		var model = BBT.getFieldValue("model");
		if (model != null) {
			var doors = BBT.getFieldValue("doors");
			if (doors != null) {
				jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "typeFromModelAndDoors", params: model + "," + doors}, function (response) { km7.selectGrid._fillAjaxCombo("type", response) });
			} else {	
				jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "type", params: model}, function (response) { km7.selectGrid._fillAjaxCombo("type", response) });
			}
		}
		break;

	case "color":
		if(BBT.getFieldValue("model") != null
		   && document.domain == 'www.km77.com') {
			jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "colorFromModel", params: BBT.getFieldValue("model"), "dynamicAppend": dynamicAppend}, function (response) { km7.selectGrid._fillAjaxCombo("color", response) });
		} else if(BBT.getFieldValue("brand") != null) {
			jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "color", params: BBT.getFieldValue("brand"), "dynamicAppend": dynamicAppend}, function (response) { km7.selectGrid._fillAjaxCombo("color", response) });
		}
		break;

	case "finish":
		var model = BBT.getFieldValue("model");
		if (model != null) {
			jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "finish", params: model, "dynamicAppend": dynamicAppend}, function (response) { km7.selectGrid._fillAjaxCombo("finish", response) });
		}
		break;

	case "modelversion":
		var model = BBT.getFieldValue("model");
		if (model != null) {
			jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "modelversion", params: model, "dynamicAppend": dynamicAppend}, function (response) { km7.selectGrid._fillAjaxCombo("modelversion", response) });
		}
		break;

	case "doors":
		var model = BBT.getFieldValue("model");
		if (model != null) {
			var type = BBT.getFieldValue("type");
			if (type != null) {
				jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "doorsFromModelAndType", params: model + "," + type}, function (response) { km7.selectGrid._fillAjaxCombo("type", response) });
			} else {	
				jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "doors", params: model}, function (response) { km7.selectGrid._fillAjaxCombo("doors", response) });
			}
		}
		break;

		
	case "phototype":	   
		jQuery.get("/fotos/getData/getPhotoOptions.json", { field: "phototype", params: 0}, function (response) { km7.selectGrid._fillAjaxCombo("phototype", response) });
		break;

	case "subphototype":
		var phototype = BBT.getFieldValue("phototype");
		if (phototype != null) {
			jQuery.get("/fotos/getData/getPhotoOptions.json", { langCode: langCode, field: "subphototype", params: phototype, "dynamicAppend": dynamicAppend}, function (response) { km7.selectGrid._fillAjaxCombo("subphototype", response) });
		}
		break;

	default:
		//alert("error: km7.selectGrid.getOptions " + selectName );
	}
	return true;


};

km7.selectGrid._fillAjaxCombo = function (selectName, _response) {
	try {
		var response = eval("(" + _response + ")");
	} catch (e) {
		//alert("error: km7.selectGrid.fillAjaxCombo");
		return false;
	}

	var headerClone = jQuery("[name='" + selectName + "'] option:first").clone();
	jQuery("[name='" + selectName + "'] option").remove();
	jQuery("[name='" + selectName + "']").append(headerClone);
	
	if(response["error"] != 0) {
		//alert(response["message"]);
		km7.selectGrid.removeDependences(selectName);
		return false;
	}

	jQuery("[name='" + selectName + "']").removeAttr("disabled");

	var nOptions = 0;
	jQuery.each(response["datas"], function (i, data) {
			// Contamos todas las opciones que no sean "<Nuevo xx">
			if (data.toString().charAt(0) != '&') {
				nOptions++;
			}

			jQuery("[name='" + selectName + "']").append("<option value='" + i + "'>" + response["datas"][i] + "</option>");
		});

	// Si solo hay una opcion y estamos en admin, la seleccionamos
	if (nOptions == 1
	    && document.domain == 'admin.km77.com'
	    && document.location.pathname != '/gallery/list' ) {
		jQuery("[name='" + selectName + "'] option:selected").removeAttr("selected");
		jQuery("[name='" + selectName + "'] option:eq(1)").attr("selected", "selected");
	}

	km7.selectGrid.fillDependences(selectName);

	try {
		km7["fillAjaxComboCallBack_" + selectName]();
	} catch(e) {
		// no hay callback para este combo
	}
	      

}; 
	
km7.userError = function (text) {
	alert(text);
};


km7._searchMapper = {"brand" : "brandId",
		     "model" : "modelId",
		     "parentmodel" : "parentModelId",
		     "doors" : "numDoors",
		     "finish": "finishId",
		     "modelversion" : "modelVersionId",
		     "type": "carType",
		     "color": "colorId",
		     "phototype" : "photoType",
		     "subphototype" : "photoSubType",
		     "minCreationDate" : "minCreationDate",
		     "maxCreationDate" : "maxCreationDate",
		     "page" : 1
		     };

km7.search = function () {
	jQuery(".btn-search").val("Buscando...");

	if(BBT.getFieldValue("contentId") != null) {
		jQuery.get("/edit/geteditcontenturl.json", {contentId: BBT.getFieldValue("contentId")}, function (_response) {
				
				var response = km7.fixJson(_response);
				if (response["error"] == 0) {
					window.location = response["url"];
					jQuery(".btn-search").val("Cargando contenido...");
				} else {
					alert(response["message"]);
					jQuery(".btn-search").val("Buscar");
				}
			});
		return false;
	}

	var getData = "";
	var cat = BBT.getFieldValue("category");
	getData = "categoryId=" + cat;

	jQuery.each(km7._searchMapper, function (i, data) {
			var value = BBT.getFieldValue(i);
			if (value != null) {
				getData = getData + "&" + km7._searchMapper[i] + "=" + value;
			}
		});
	
	parent.location = "/fotos/buscador.html?" + getData;	
};
