var request;
var dcpType = 1; // General flag indicating what type of return data decomposition is used
var ajax_returnData;
var queryString;
var dcpObjRecv = {} ;

var isNav = (navigator.appName == "Netscape");

function initReq(reqType,url,isAsynch){
    if(isNav)
    	request.onload=handleResponse;
    else
    	request.onreadystatechange=handleResponse;
    
    request.open(reqType,url,isAsynch);
    request.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded; charset=UTF-8");
    request.send(queryString);
    
}

function httpRequest(reqType,url,asynch, decomposeType, decomposeObject){


    dcpType = decomposeType;
    dcpObjRecv = decomposeObject;
    
    //Mozilla-based browsers
    if(window.XMLHttpRequest){
        request = new XMLHttpRequest(  );

    } else if (window.ActiveXObject){
        request=new ActiveXObject("Msxml2.XMLHTTP");
		
        if (! request){
            request=new ActiveXObject("Microsoft.XMLHTTP");

        }
    }
    if(request){
    	
        initReq(reqType,url,asynch);
        
    } else {
        alert("Your browser does not permit the use of all "+
              "of this application's features!");
			 
    }

}

function handleResponse(  ){
    try{
    
        if(request.readyState == 4){
            if(request.status == 200){
              		
               		if(dcpType == 1)
               			decomposeSelectVal(request.responseText, dcpObjRecv);
               		else
               			ajax_returnData = request.responseText;
            } else {
                alert(
                        "A problem occurred with communicating "+
                        "between the XMLHttpRequest object and the "+
                        "server program.");
            }
        }//end outer if
    } catch (err) {
        alert("It does not appear that the server "+
              "is available for this application. Please"+
              " try again very soon. \\nError: "+err.message);
    }
}

function reconstructSelect(select, labels, values) {
	var selectOptions = select.options;
	
	while(selectOptions.length > 0)
		select.options[0] = null;
	for(x=0; x< labels.length; x++) {
		var elemRef = document.createElement("option");
		elemRef.value = values[x];
		elemRef.label = labels[x];
		elemRef.text = labels[x];
		if(isNav) { 
			elemRef.innerHTML = labels[x];
   			select.add(elemRef, null);
		}
		else
			select.add(elemRef);
	}
}
var opt = {};

opt.optLabels = new Array();
opt.optVals = new Array();



var countrySelect;
var stateSelect;
var citySelect;
var citypartSelect;
var mallSelect;

var isIE = (navigator.appName == "Microsoft Internet Explorer");

function addEvent(myObject, myEventType, myFunction)
{
 // for netscape type browsers
 if(myObject.addEventListener)
 {

  myObject.addEventListener(myEventType, myFunction, false);
  return true;
 }
// for IE
 else if (myObject.attachEvent)
 {
  var r = myObject.attachEvent('on' + myEventType, myFunction);
  return r;
  }
 // return false for anything else unsupported
 else
 {
 return false;
 }
}

function mkDummySelect(element, value, save_var) {
	element.options.length = 0;
	var elemRef = d.createElement("option");
	elemRef.value = value;
	elemRef.label = "*";
	elemRef.text = "*";
	if(isNav) { 
		elemRef.innerHTML = "*";
   		element.add(elemRef, null);
	}
	else
		element.add(elemRef);
		
	element.value = value; lcSaved[save_var] = value;	
	
}
function lcsInit_elements() {
	countrySelect = d.getElementById("country");
	stateSelect = d.getElementById("state");
	citySelect = d.getElementById("city");
	citypartSelect = d.getElementById("citypart");
	mallSelect = d.getElementById("mall_select");
	if(lcSaved.useMALL) {
		mall_select = d.getElementById("mall_select");
    	mall_sel_div = d.getElementById("mall_select_div");
	}
}

function lcsInit() {
	lcsInit_elements();
	if(lcSaved.useMALL)
		mall_select_Init();
	// Check if form has been submitted	
	if(lcSaved.CN == undefined) {
		initCountry(0);
	} else {
		initCountry(1);
	}
	


};

function checkSaveLocation(select, saveVar, valToSet) {

	var found = 0;
	for(x=0;x<select.options.length;x++) {
		if(select.options[x].value == lcSaved[saveVar]) {
			select.value = lcSaved[saveVar];
			return;
		}
	}

	select.value = valToSet;
	lcSaved[saveVar] = valToSet;

}

function initCountry(initialState){

    var countrySelOptions = countrySelect.options;
    
	var itemsVal = lcSaved.defVAL;
		
    if (initialState == 1) {
		getSelectInfo("CN", "0", countrySelect);
		reconstructSelect(countrySelect, opt.optLabels, opt.optVals);
		checkSaveLocation(countrySelect,"CN",itemsVal);
		if (countrySelect.value < 0) {
			if (lcSaved.useMALL) 
				mkDummySelect(mallSelect, itemsVal, "ML");
			mkDummySelect(stateSelect, itemsVal, "CS");
			mkDummySelect(citySelect, itemsVal, "CC");
			mkDummySelect(citypartSelect, itemsVal, "CP");
		}
		else {
			getSelectInfo("CS", lcSaved.CN, stateSelect);
			reconstructSelect(stateSelect, opt.optLabels, opt.optVals);
			checkSaveLocation(stateSelect,"CS",itemsVal);
			if (stateSelect.value < 0) {
				if(stateSelect.value == -4) itemsVal = -4;
				if (lcSaved.useMALL) 
					mkDummySelect(mallSelect, itemsVal, "ML");
				mkDummySelect(citySelect, itemsVal, "CC");
				mkDummySelect(citypartSelect, itemsVal, "CP");
			}
			else {
				getSelectInfo("CC", lcSaved.CS, citySelect);
				reconstructSelect(citySelect, opt.optLabels, opt.optVals);
				checkSaveLocation(citySelect,"CC",itemsVal);
				if (citySelect.value < 0) {
					if (lcSaved.useMALL) 
						mkDummySelect(mallSelect, itemsVal, "ML");
					if(citySelect.value == -4)	
						mkDummySelect(citypartSelect, -4, "CP");
					else
						mkDummySelect(citypartSelect, itemsVal, "CP");
				}
				else {
					getSelectInfo("CP", lcSaved.CC, citypartSelect);
					reconstructSelect(citypartSelect, opt.optLabels, opt.optVals);
					checkSaveLocation(citypartSelect,"CP",itemsVal);
					if (lcSaved.useMALL) {
						if (citypartSelect.value < 0) {
							mkDummySelect(mallSelect, itemsVal, "ML");
						}
						else {
							mall_select_update("citypart",lcSaved.CP);
							checkSaveLocation(mallSelect, "ML", itemsVal);
						}
					}
				}
			}
		}
	}
	else {
	
		getSelectInfo("CN", "0", countrySelect);
		reconstructSelect(countrySelect, opt.optLabels, opt.optVals);
		if (lcSaved.useMALL) {
			mkDummySelect(mallSelect, itemsVal, "ML");
		}
		
		mkDummySelect(stateSelect, itemsVal, "CS");
		mkDummySelect(citySelect, itemsVal, "CC");
		mkDummySelect(citypartSelect, itemsVal, "CP");
	}
    if(lcSaved.useMALL)
		mall_select_Init();
    
}



function decomposeSelectVal(rdata, opt_Object) {
	var resp_parts = rdata.split("#");
	opt_Object.optLabels = resp_parts[0].split(",");
	opt_Object.optVals = resp_parts[1].split(",");
}

function getSelectInfo(locType, locID, selectElement){

	selectElement.innerHTML = "<option selected>Loading...</option>";
	var modeSel = "";
	var url = "";
	var locDep = "-4";
	
	if (lcSaved.totals) {

		url = ContextPath+"/LCS?getLocFiltered=1&lng="+CurrentLocale+"&cn="+lcSaved.CN+"&cs="+
		lcSaved.CS+"&cc="+lcSaved.CC + "&cp="+lcSaved.CP+"&locType="+locType+"&cf="+run_mode;
		
	} else	 
		url = ContextPath + "/LCS?lct=" + locType + "&lID=" + locID + "&lng=" + CurrentLocale + lcSaved.Opts;
		
    httpRequest("GET",url,false, 1, opt);

}

function countryChanged() {

		sel_Value = lcSaved.defVAL;
		
		lcSaved.CN = countrySelect.value;

			mkDummySelect(stateSelect,sel_Value, "CS");
			mkDummySelect(citySelect,sel_Value, "CC"); 
			mkDummySelect(citypartSelect,sel_Value, "CP");
		if (lcSaved.useMALL)	 
			mkDummySelect(mallSelect,sel_Value, "ML");
						
		if(parseInt(countrySelect.value)< 0) 
			return;
	
    	var stateSelOptions = stateSelect.options;
	 	lcSaved.CN = countrySelect.options[countrySelect.selectedIndex].value;
	 	getSelectInfo("CS", countrySelect.options[countrySelect.selectedIndex].value, stateSelect);
	 	reconstructSelect(stateSelect, opt.optLabels, opt.optVals);
		stateSelect.selectedIndex = 0;
		citySelect.selectedIndex = citypartSelect.selectedIndex = 0;

}

function stateChanged() {

	sel_Value = lcSaved.defVAL;

	lcSaved.CS = stateSelect.value;
	mkDummySelect(citySelect,sel_Value, "CC");
	mkDummySelect(citypartSelect,sel_Value, "CP");
	
	if (lcSaved.useMALL)	
		mkDummySelect(mallSelect,sel_Value, "ML");
	
	if(parseInt(stateSelect.value) < 0) {
			if(lcSaved.CS == -4) {
			mkDummySelect(citySelect,-4,"CC");
			mkDummySelect(citypartSelect,-4,"CP");
			if (lcSaved.useMALL)
				mkDummySelect(mallSelect,-4,"ML");
		}
		return;
	}
		
	
    var citySelOptions = citySelect.options;
	lcSaved.CS = stateSelect.options[stateSelect.selectedIndex].value;
	getSelectInfo("CC", stateSelect.options[stateSelect.selectedIndex].value, citySelect);
	
	reconstructSelect(citySelect, opt.optLabels, opt.optVals);
	
	citySelect.selectedIndex = 0;

	if(citySelect.value == -4)
		mkDummySelect(citypartSelect,-4,"CP");

}

function cityChanged(){
	sel_Value = lcSaved.defVAL;
	
	lcSaved.CC = citySelect.value;
	
	mkDummySelect(citypartSelect, sel_Value, "CP");

	if (lcSaved.useMALL) {
		mkDummySelect(mallSelect, sel_Value, "ML");
		mall_select_update("city",citySelect.value);
	}
	if (parseInt(citySelect.value) < 0) { // Please choose...
			if(lcSaved.CC == -4) {
			mkDummySelect(citypartSelect,-4,"CP");
			if (lcSaved.useMALL)
				mkDummySelect(mallSelect,-4,"ML");
		}
		return;
	}
		
	var citypartSelOptions = citypartSelect.options;
	lcSaved.CC = citySelect.options[citySelect.selectedIndex].value;
	getSelectInfo("CP", citySelect.options[citySelect.selectedIndex].value, citypartSelect);
	
	reconstructSelect(citypartSelect, opt.optLabels, opt.optVals);
	citypartSelect.selectedIndex = 0;
	



}
function citypartChanged() {

	lcSaved.CP = citypartSelect.value; 
	mkDummySelect(mallSelect, -4, "ML");
	if (parseInt(citypartSelect.value) < 0) { // Please choose...
			if(lcSaved.CP == -4) {
				if (lcSaved.useMALL)
				mkDummySelect(mallSelect,-4,"ML");
		}
		 return;
	}
	
	if (lcSaved.useMALL) {
		mall_select_update("citypart", citypartSelect.value);
	}
	
    var mallSelOptions = mallSelect.options;
	lcSaved.CP = citypartSelect.options[citypartSelect.selectedIndex].value;
	mallSelect.selectedIndex = 0;


}

function mallChanged() {
	lcSaved.ML = mallSelect.value;
	getMallAddr(mallSelect);
}


var malls_sel = {};
malls_sel.optLabels = new Array();
malls_sel.optVals = new Array();
malls_sel.Deps = new Array();
malls_sel.DepCits = new Array();

var mallAddr = "";

var isNav = (navigator.appName == "Netscape");

var mall_check_cb;
var mall_check_div;
var mall_add;
var mall_inp;
var mall_sel_div;
var mall_addr;

var mall_select;
var mall_select_div;

function mall_select_update(target_name, target_value) {
	if(target_value > 0) {
		if(lcSaved.useMALLDIV)
			mall_select.removeAttribute("disabled");

			var url = ContextPath + "/LCS?lct=ML&lID=" + d.getElementById(target_name).value + "&ctype=" + target_name + "&lng=" + CurrentLocale + lcSaved.Opts;
			httpRequest("GET", url, false, 0, 0);
			
			var retData = ajax_returnData;
			var retDataSplitted = retData.split('\r');
			malls_sel.optLabels = retDataSplitted[0].split('\n');
			malls_sel.optVals = retDataSplitted[1].split('\n');
			malls_sel.Deps = retDataSplitted[2].split('\n');
			malls_sel.DepCits = retDataSplitted[3].split('\n');
			
			reconstructSelect(mall_select, malls_sel.optLabels, malls_sel.optVals);
			
			// Check if single choice - hide view address button
			if(malls_sel.optLabels.length < 2 && lcSaved.useMALLDIV)
				d.getElementById("mall_addr_link").innerHTML = "";
		
		
	} else {
		if (lcSaved.useMALLDIV) {
			mall_select.setAttribute("disabled", "disabled");
			d.getElementById("mall_addr_link").innerHTML = "";
		}
	}
}
// Function enables button that used for forming address
function addr_button_Enable(event) {
// Catch event properties	
var e = event || window.event;
var target = e.target || e.srcElement;

mall_select_update(target.name, target.value);

	
}


function getMallAddr(mall_select) {
	var mladr;
	
	if(mall_select.value > 0) {
		if (lcSaved.useMALLDIV) {
			var url = ContextPath + "/LCS?lct=MLA&lID=" + mall_select.value + "&lng=" + CurrentLocale;
			httpRequest("GET", url, false, 0, mladr);
			mallAddr = ajax_returnData; ajax_returnData = "";
			d.getElementById("mall_addr_link").innerHTML = "&nbsp;" + "<input type='button' class='dt10pt-vm' onclick='showMallAddr()' value='" + hM.edtViewAddress + "'></input>";
		}
		if (malls_sel.DepCits[mall_select.selectedIndex] != "0") 
			lcSaved.CC =  d.getElementById("city").value = malls_sel.DepCits[mall_select.selectedIndex];
			
		if(malls_sel.Deps[mall_select.selectedIndex] != "0")
			lcSaved.CP = d.getElementById("citypart").value = malls_sel.Deps[mall_select.selectedIndex];	
		 
	} else
		if(lcSaved.useMALLDIV)
			d.getElementById("mall_addr_link").innerHTML = "";
}


function mall_select_Init() {
	if(lcSaved.ML !== ""  && lcSaved.useMALLDIV) {
		mall_select.removeAttribute("disabled");
		mall_select_update("city",d.getElementById("city").value);
		
		mall_select.value = lcSaved.ML;
		if(lcSaved.ML != "-3" && lcSaved.ML != "-1")
			getMallAddr(mall_select);
	}
	
}

function showMallAddr() {
	alert(mallAddr);
}



function reconstructCats(select, labels, values, counters) {
	var selectOptions = select.options;
	while(selectOptions.length > 0)
		select.options[0] = null;
	
	for(x=0; x< labels.length; x++) {
		var elemRef = d.createElement("option");
		elemRef.value = values[x];

		if(counters[x] > 0) {
			elemRef.label = labels[x]+" ("+counters[x]+")";
			elemRef.text = labels[x]+" ("+counters[x]+")";
		} else {
			elemRef.label = labels[x];
			elemRef.text = labels[x];
		}
		//elemRef.innerHTML = labels[x];
		if(isNav) { 
			if(counters[x] > 0)
				elemRef.innerHTML = labels[x]+" ("+counters[x]+")";
			else
				elemRef.innerHTML = labels[x];
   			select.add(elemRef, null);
		}
		else
			select.add(elemRef);
	}
	var EncString;
	if(isNav) {
			for(x=0;x<select.options.length;x++) {
				var elemRef = select.options[x];
				EncString = elemRef.innerHTML;
				elemRef.innerHTML = EncString.replace(" ","&nbsp;");
			}
		}
		
}

function formCategories() {
		var CatSelect = d.getElementById("category");
		var cat_data;

		
		if (typeof(cats_vals) === "undefined") {
			var url = ContextPath + "/CTS?lng=" + CurrentLocale;
			if (run_mode != "") 
				url += "&lcsMode=cards&totals=1&cf=" + run_mode +
				"&cn=" +
				lcSaved.CN +
				"&cs=" +
				lcSaved.CS +
				"&cc=" +
				lcSaved.CC +
				"&cp=" +
				lcSaved.CP +
				"&ml=" +
				lcSaved.ML;
			
			//alert(url);	
			httpRequest("GET", url, false, 0, 0);
			cat_data = ajax_returnData;
			ajax_returnData = "";
		} else {
			cat_data = cats_vals; cats_vals = undefined;
		}
   		var cats_top = cat_data.split("#");
   		categories_sel.optVals = cats_top[1].split(",");
   		categories_sel.optLabels = cats_top[0].split(",");
		if(run_mode != "")
   			categories_sel.optCounters = cats_top[2].split(",");
   		reconstructCats(CatSelect, categories_sel.optLabels, categories_sel.optVals, categories_sel.optCounters);
		   		
   		if(CategorySave != "null")  {
   			for(x=0;x<CatSelect.options.length;x++)
   				if(CatSelect.options[x].value == CategorySave) {
   					CatSelect.value = CategorySave;
   					catChange(1);
   					break;
   					}
   		} else			
   			d.getElementById("category").value = "-4"; 
}
function catChange(init) {

	var catSelect = d.getElementById("category");
	var catTopLevelEl = d.getElementById("cat_toplevel");
	
	if(parseInt(catSelect.value) > 100) {
		var catTL = catSelect.value;
		var y = 0;
					
		for(x=0;x<catSelect.options.length;x++) 
			if(catSelect.options[x].value == catTL) {
				y = x; break;
				//catTopLevelEl.value = catSelect.options[x].label;
			}
			
		while(catSelect.options[x].value > 100)
			x--;
		catTopLevelEl.value = catSelect.options[x].label;		
		catTopLevelEl.style.visibility = "visible";
		catTopLevelEl.style.width = "120px";
	} else {
		catTopLevelEl.value = "";
		catTopLevelEl.style.visibility = "hidden";
		catTopLevelEl.style.width = "0px";
	}
	CategorySave = catSelect.value;
	
	if(init != 1 && run_mode != "") {
		d.getElementById("refresh_btn").disabled = false;
		d.getElementById("refresh_btn").style.border = 'solid black 2px';
		}
}