/**
*	AJAX Object
*/

function qStringToObject(strQS) {
	var objQS = new Object();
	arrPairs = strQS.split("&");
	for(var i=0; i<arrPairs.length; i++) {
		var thisPair = arrPairs[i].split("=");
		objQS[thisPair[0]] = unescape(thisPair[1]);
	}
	return objQS;
};

function ajaxObject(url, vars, callbackFunc) {
	var that=this;
	var updating = false;

	this.send = function() {
		if (updating==true) { return false; }
		updating=true;
		var AJAX = null;
		if (window.XMLHttpRequest) {
			// Mozilla
			AJAX=new XMLHttpRequest();
		} else {
			// IE
			AJAX=new ActiveXObject("Microsoft.XMLHTTP");
		}
		if (AJAX==null) {
			alert("Your browser doesn't support AJAX.");													  
			return false;
		} else {
			AJAX.onreadystatechange = function() {
				if (AJAX.readyState==4 || AJAX.readyState=="complete") {
					eval(callbackFunc+'("'+AJAX.responseText+'");');
					delete AJAX;
					updating=false;
				}
			}
			var timestamp = new Date();
			var uri=urlCall+'?'+vars+'&timestamp='+(timestamp*1);
			AJAX.open("GET", uri, true);
			AJAX.send(null);
			return true;
		}					 
	}
		
	var urlCall = url;
};

// Globals
var State, Letter = null;

function setSelectMessage(str) {
	var oSrc = document.getElementById("browse_data");
	oSrc.options.length = 0;
	oSrc.options[0] = new Option(str, null);
	oSrc.options[0].disabled = true;
};

function getData(sState, sLetter) {
	
	var oSrc = document.getElementById("browse_data");
	
	if(sState != null) {
		
		State = sState;
		setSelectMessage("Select a letter");
		
		// Set 'current' class for selected state
		var allStates = document.getElementById("states").getElementsByTagName("a");
		for(var i = 0; i < allStates.length; i++) {
			if(allStates[i].innerHTML == sState) {
				allStates[i].className = "selected";
			}
			else {
				allStates[i].className = "";
			}
		}
		
		// Go back for data
		getData(null, Letter);
	}
	
	if(sLetter != null) {
		
		Letter = sLetter;
		
		// Set 'current' class for selected letter
		var allLetters = document.getElementById("alphabet").getElementsByTagName("a");
		for(var i = 0; i < allLetters.length; i++) {
			if(allLetters[i].innerHTML == sLetter) {
				allLetters[i].className = "selected";
			}
			else {
				allLetters[i].className = "";
			}
		}
	}
	
	if(State && Letter) {
		// We have values for State & Letter, go get the data
		setSelectMessage("Retrieving data..");
		var dataCall = new ajaxObject("browse.ajax.cfm", "State=" + State + "&Letter=" + Letter, "populateData");
		dataCall.send();	
	}

};

function selectContainsValue(obj, str) {
	
	for(var i = 0; i < obj.options.length; i++) {
		if(obj.options[i].value == str) {
			return true;
		}
	}
	
	return false;
};

function populateData(str) {
	
	var oSrc = document.getElementById("browse_data");
	
	if(str) {
		// Results returned, loop through and populate oSrc with options
		var aSuburbs = str.split(",");
		var iLen = aSuburbs.length - 1;
		var count = 0;
		for(var i = 0; i < iLen; i++) {
			var aPair = aSuburbs[i].split(";");
			oSrc.options[i] = new Option(aPair[0] + " (" + aPair[1] + ")", aSuburbs[i]);
		}
		sortSuburbs(oSrc);
	}
	else {
		// No results returned
		setSelectMessage("No results found for '" + Letter + "' in " + State);
		var iLen = 0;
	}
	
};

function addRemSuburbs(sAction) {
	
	var oSrc = document.getElementById("browse_data");
	var oDst = document.getElementById("browse_cart");
	
	switch(sAction) {
		case "add":
			var oOptions = oSrc.options;
			/* 	
			We are counting backwards here in case this script is modified to MOVE
			the required option node to oDst, rather than duplicating it. 
			*/
			var c = oOptions.length - 1;
			for(var i = c; i >= 0; i--) {
				if(oOptions[i].selected == true && !selectContainsValue(oDst, oOptions[i].value)) {
					// If value is not already present in oDst, duplicate the option and append to oDst
					oDst.options[oDst.options.length] = new Option(oOptions[i].text, oOptions[i].value);
				}
			}
			sortSuburbs(oDst);
			break;
			
		case "rem":
			var oOptions = oDst.options;
			/* 	
			We are counting backwards here in case this script is modified to MOVE
			the required option node to oSrc, rather than removing it. 
			*/
			var c = oOptions.length - 1;
			for(var i = c; i >= 0; i--) {
				if(oOptions[i].selected == true) {
					oOptions[i].parentNode.removeChild(oOptions[i]);
				}
			}
			sortSuburbs(oSrc);
			break;
	}
	
	return false;
};


function sortSuburbs(obj) {
	
	arrOptions = new Array();
	for(i=0; i<obj.length; i++)  {
		arrOptions[i] = obj.options[i].value + "|" + obj.options[i].text;
	}
	arrOptions.sort();
	
	for(i=0; i<obj.length; i++)  {
		obj.options[i].value = arrOptions[i].split("|")[0];
		obj.options[i].text = arrOptions[i].split("|")[1];
	}	
	
};


function saveSuburbs(oForm,bypass) {	
	var formOK = false;
	if(bypass || (document.getElementById('add_data_method_manual') && document.getElementById('add_data_method_manual').checked)) {		
		var oDst = document.getElementById("browse_cart");
		var oOptions = oDst.options;		
		for(var i = 0; i < oOptions.length; i++) {
			oOptions[i].selected = true;
			formOK = true;
		}
	}
	else {
		if(document.getElementById('FileContents').value != '') {
			formOK = true;
		}
	}
	
	return formOK;
};




