var productsearchXmlHttp = null;

function productsearchCreateXmlHttp() {
	try {
		productsearchXmlHttp = new XMLHttpRequest();
	} catch (e) {
		try {
			productsearchXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) { 
			return false;
		}
 	}
	return true;
}

function productsearchChange(field) {
	var getValue = function(field) {
		if( document.getElementById(field).options )
			return document.getElementById(field).options[document.getElementById(field).selectedIndex].value;
		else
			return document.getElementById(field).value;
	}

	if( !productsearchCreateXmlHttp || ! productsearchCreateXmlHttp() ) { // If no request object is available, submit form
		if( field ) return ! field.form.submit();
		else return true;
	}

	if ( field ) { // If a field has been changed, reset its dependencies
		document.getElementById("productsearchLevel0").disabled = true;
		document.getElementById("productsearchLevel1").disabled = true;
		document.getElementById("productsearchLevel2").disabled = true;
		document.getElementById("productsearchLevel3").disabled = true;
		
		var level0 = getValue("productsearchLevel0");
		var level1 = getValue("productsearchLevel1");
		var level2 = getValue("productsearchLevel2");
		var level3 = getValue("productsearchLevel3");
		
		productsearchXmlHttp.onreadystatechange = function () { // Set callback hook to request object
			if( productsearchXmlHttp.readyState != 4 ) return true; // Response state is not ready yet
			if( productsearchXmlHttp.status != 200 ) return true; // Response status is invalid
			//alert(productsearchXmlHttp.responseText); 
			var responseXml = productsearchXmlHttp.responseXML;
			if( ! responseXml ) return false; // Response representation is not available
			try {
				responseXml.normalizeDocument();
			} catch( e ){ ; }
			if( ! responseXml.documentElement ) return false; // XML representation is invalid
			try {
				for( var i = 0; i < productsearchFields.length; i++ ) {
					var field = productsearchFields[i];
					var selectionBox = document.getElementById( field[0] );
					var nodeList = responseXml.getElementsByTagName( field[1] );
					if( nodeList && selectionBox) {
						dseClearSelect(selectionBox);
						if (field[2]) dseAddOption(selectionBox, field[2], "", false, true);
						for( var j = 0; j < nodeList.length; j++ ) {
							var value = nodeList[j].getAttribute('value');
							var text = (nodeList[j].firstChild? nodeList[j].firstChild.nodeValue: value);
							var disabled = (nodeList[j].getAttribute("group") == "group");
							var selected = (nodeList[j].getAttribute("selected") == "selected");
							dseAddOption(selectionBox, text, value, disabled, selected);
						}
						selectionBox.parentNode.style.display = nodeList.length > 0? "block": "none";
					}
					selectionBox.disabled = false;
     			}
			} catch ( e ) { ; }
			return true;
		}
		productsearchXmlHttp.open("GET", productsearchAjaxURL + "&mode=ajax&level0="+escape(level0)+"&level1="+escape(level1)+"&level2="+escape(level2)+"&level3="+escape(level3)); // Create parameterized XML request address
		productsearchXmlHttp.send(null); // Send XML request
		return false;
 	}
	return false;
}

function productsearchSubmit() {
	var form = document.getElementById("productsearchForm");
	if (form) form.submit();
}
function productsearchReset() {
	var form = document.getElementById("productsearchForm");
	if (form) form.reset();
}

//disabled options
function dseAddOptionW3C(select, text, value, disabled, selected) {
	var option = document.createElement("option");
	option.value = value;
	if (disabled) option.className = "FormOptionDisabled";
	option.text = text;
	option.disabled = disabled;
	if (selected) option.selected = true;
	select.add(option, null);
	if (selected) select.selectedIndex = select.length -1;
	return select.length - 1;
}

function dseAddOptionIE6(select, text, value, disabled, selected) {
	var option = null;
	if (disabled) {
		option = document.createElement("optGroup");
		if (disabled) option.className = "FormOptionDisabled";
		option.label = text;
	} else {
		option = document.createElement("option");
		option.appendChild(document.createTextNode(text));
		if (disabled) option.className = "FormOptionDisabled";
		option.value = value;
		 /* IE6 preSet Hack */
		if (dseIE6First && selected) option.selected = true;
	}
	select.appendChild(option);
	if (selected) select.selectedIndex = select.length -1;
	return select.length - 1;
}

/*  IE implementation (not showing disabled options) */
function dseAddOptionIE(select, text, value, disabled, selected) {
	if (disabled) return -1;
	var option = document.createElement("option");
	option.value = value;
	if (disabled) option.className = "FormOptionDisabled";
	option.text = text;
	if (selected) option.selected = true;
	select.add(option);
	if (selected) select.selectedIndex = select.length -1;
	return select.length - 1;
}

function dseClearSelectW3C(select) {
	select.length = 0;
	dseClearSelectIE6(select);
}

function dseClearSelectIE6(select) {
	while (select.firstChild) select.removeChild(select.firstChild);            
}

function dseInit() {
	dseClearSelect = dseClearSelectW3C;
	dseAddOption = dseAddOptionW3C;
	if (window.opera) {
		/*  alert("Opera") // works with this version for W3c */
	} else if (document.all) {
		if (navigator.appVersion.indexOf("MSIE") > -1 && navigator.appVersion.indexOf("MSIE 5") == -1 && navigator.appVersion.indexOf("MSIE 4") == -1) {
			/* alert("not IE 4/IE 5") // needs workaround with &lt;optGroup&gt;-tags */
			dseAddOption = dseAddOptionIE6;
			dseClearSelect = dseClearSelectIE6;
		} else {
			/* alert("IE 5") // doesn't support disabled options */
			dseAddOption = dseAddOptionIE;
		}
	} else if (navigator.appVersion.indexOf("KHTML") > -1) {
		/*  alert("KHTML") // same as IE */
		dseAddOption = dseAddOptionIE; 
	} else {
		/*  alert("w3c") // GECKO */
	}
}

var dseAddOption;
var dseIE6First = false;

