function AJAXInteraction(url, callback, prodType){
        var req = init();
        req.onreadystatechange = processRequest;

        function init(){
                if(window.XMLHttpRequest){
                        return new XMLHttpRequest();
		}
		else if(window.ActiveXObject){
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}

	function processRequest(){
		//readyState of 4 signifies request is complete
		if(document.getElementById("NoWheels") != null){
				var el = document.getElementById('NoWheels');
				el.style.display = "none";
		}
		if(req.readyState == 4){
			//status of 200 signifies successful HTTP call
			if(req.status == 200){
				if(callback) callback(req.responseXML);
			} else{
			     if(prodType == 'wheels') {
				if(document.selectModelWheels.autoModel.length <= 0){ 
				el = document.getElementById('NoWheels');
				el.style.display = "block";
				} else{
					if(document.getElementById("gotires") != null){
						getAvailableProducts('tires');
					}else{
						document.selectModelWheels.submit();
					}
				}
			     } else { 
				if(document.selectModel.autoModel.length <= 0){ 
				} else{
					if(document.getElementById("gotires") != null){
						getAvailableProducts('tires');
					}else{
						showTRObject("loading");
						document.selectModel.submit();
					}
				}
			     }
			}
		}
	}

	this.doGet=function(){
		req.open("GET", url, true);
		req.send(null);
	}
}

function showTRObject(myID)  {
	var el = document.getElementById(myID);
	el.style.display = "block";
	//needed for Safari 2.0.2
  	if(navigator.userAgent.indexOf("Safari") != -1 &&
     	   navigator.userAgent.indexOf("Mac") != -1) {
		window.resizeTo(self.outerWidth + 1, self.outerHeight);
		window.resizeTo(self.outerWidth - 1, self.outerHeight);
	}
}

function populateAutoYears(){
  if(document.selectModelWheels.autoMake.value != "#"){
  	var targetMake = document.selectModelWheels.autoMake.value;
		var url = "/ValidationServlet?autoMake=" + targetMake + "&autoYearsNeeded=true&search=wheel";
		var ajax = new AJAXInteraction(url, yearCallbackWheels,'wheels');
		ajax.doGet();
	}
}

function populateTBCAutoYears(){
  if(document.selectModel.autoMake.value != "#"){
  	var targetMake = document.selectModel.autoMake.value;
		var url = "/ValidationServlet?autoMake=" + targetMake + "&autoYearsNeeded=true&TBC=true";
		var ajax = new AJAXInteraction(url, yearCallback,'tires');
		ajax.doGet();
	}
}

function populateAutoModels(){
	if(document.selectModelWheels.autoYear.value != "#" &&
		 document.selectModelWheels.autoYear.value != ""  &&
		 document.selectModelWheels.autoMake.value != "#" &&
	   document.selectModelWheels.autoMake.value != ""){
		var targetYear = document.selectModelWheels.autoYear.value;
		var targetMake = document.selectModelWheels.autoMake.value;
		
		var url = "/ValidationServlet?autoYear=" + targetYear + "&autoMake=" + targetMake + "&search=wheel";
		var ajax = new AJAXInteraction(url, validateCallbackWheels,'wheels');
		ajax.doGet();
	}
		var el = document.selectModel.autoModelSelect;
		el.style.display = "none";
		el = document.selectModel.autoModClarSelect;
		el.style.display = "none";
}

function populateTBCAutoModels(){
	if(document.selectModel.autoYear.value != "#" &&
		 document.selectModel.autoYear.value != ""  &&
		 document.selectModel.autoMake.value != "#" &&
	   document.selectModel.autoMake.value != ""){
		var targetYear = document.selectModel.autoYear.value;
		var targetMake = document.selectModel.autoMake.value;
		
		var url = "/ValidationServlet?autoYear=" + targetYear + "&autoMake=" + targetMake + "&TBC=true";
		var ajax = new AJAXInteraction(url, validateCallback, 'tires');
		ajax.doGet();
	}
}

function populateModClar(){
	if(document.selectModelWheels.autoYear.value != "#" &&
	   document.selectModelWheels.autoMake.value != "#" &&
	   document.selectModelWheels.autoModel.value != "#"){
		var targetYear = document.selectModelWheels.autoYear.value;
		var targetMake = document.selectModelWheels.autoMake.value;
		var targetModel = document.selectModelWheels.autoModel.value;
		var url = "/ValidationServlet?autoYear=" + targetYear + "&autoMake=" + targetMake + "&autoModel=" + targetModel;
		var ajax = new AJAXInteraction(url, clarCallbackWheels, 'wheels');
		ajax.doGet();
	}
		var el = document.selectModel.autoModelSelect;
		el.style.display = "none";
		el = document.selectModel.autoModClarSelect;
		el.style.display = "none";
}

function populateTBCModClar(){
	if(document.selectModel.autoYear.value != "#" &&
	   document.selectModel.autoMake.value != "#" &&
	   document.selectModel.autoModel.value != "#"){
		var targetYear = document.selectModel.autoYear.value;
		var targetMake = document.selectModel.autoMake.value;
		var targetModel = document.selectModel.autoModel.value;
		
		var url = "/ValidationServlet?autoYear=" + targetYear + "&autoMake=" + targetMake + "&autoModel=" + targetModel + "&TBC=true";
		var ajax = new AJAXInteraction(url, clarCallback, 'tires');
		ajax.doGet();
	}
}

function deleteAutoYears(prodType){
	if(prodType == 'wheels') { 	
  		if(document.selectModelWheels.autoYear.options != null){
			while(document.selectModelWheels.autoYear.options.length > 0){
	  			deleteIndex = document.selectModelWheels.autoYear.options.length - 1;
		  	document.selectModelWheels.autoYear.options[deleteIndex] = null;
			}
		document.selectModelWheels.autoYear.style.display="none";
  		}
	} else { 
  		if(document.selectModel.autoYear.options != null){
			while(document.selectModel.autoYear.options.length > 0){
	  			deleteIndex = document.selectModel.autoYear.options.length - 1;
		  	document.selectModel.autoYear.options[deleteIndex] = null;
			}
		document.selectModel.autoYear.style.display="none";
  		}
	}
}

function deleteAutoModels(prodType){
	if(prodType == 'wheels') { 	
		if(document.selectModelWheels.autoModel.options != null){
			while(document.selectModelWheels.autoModel.options.length > 0){
				deleteIndex = document.selectModelWheels.autoModel.options.length - 1;
				document.selectModelWheels.autoModel.options[deleteIndex] = null;
			}
		}	
		var el = document.selectModelWheels.autoModelSelect;
		el.style.display = "none";
		el = document.selectModelWheels.autoModClarSelect;
		el.style.display = "none";
		el = document.selectModel.autoModelSelect;
		el.style.display = "none";
		el = document.selectModel.autoModClarSelect;
		el.style.display = "none";
	} else { 
		if(document.selectModel.autoModel.options != null){
			while(document.selectModel.autoModel.options.length > 0){
				deleteIndex = document.selectModel.autoModel.options.length - 1;
				document.selectModel.autoModel.options[deleteIndex] = null;
			}
		}	
		closeMenu('autoModelSelect');
		deleteAutoModClar();
	}
}

function deleteAutoModClar(prodType){
	if(prodType == 'wheels') { 	
		if(document.selectModelWheels.autoModClar.options != null){
			while(document.selectModelWheels.autoModClar.options.length > 0){
				deleteIndex = document.selectModelWheels.autoModClar.options.length - 1;
				document.selectModelWheels.autoModClar.options[deleteIndex] = null;
			}
		}
	} else { 
		if(document.selectModel.autoModClar.options != null){
			while(document.selectModel.autoModClar.options.length > 0){
				deleteIndex = document.selectModel.autoModClar.options.length - 1;
				document.selectModel.autoModClar.options[deleteIndex] = null;
			}
		}
	closeMenu('autoModClarSelect');
	}
}

function validateCallback(responseXML){
	if(responseXML){
		var models = responseXML.getElementsByTagName("models")[0];
		if(models.childNodes.length > 0){
			var num = 0;
			myOption = new Option();
				myOption.text = "Escoja el modelo";
			myOption.value = "#";
			document.selectModel.autoModel.options[0] = myOption;
			for(loop = 0; loop < models.childNodes.length; loop++){
				var autoModel = models.getElementsByTagName("model")[loop];
				myOption = new Option();
				myOption.text = autoModel.childNodes[0].nodeValue;
				myOption.value = autoModel.childNodes[0].nodeValue;
				document.selectModel.autoModel.options[loop+1] = myOption;
			}
			openMenu('autoModelSelect');
		}
	}
}
function validateCallbackWheels(responseXML){
	if(responseXML){
		var models = responseXML.getElementsByTagName("models")[0];
		if(models.childNodes.length > 0){
			var num = 0;
			myOption = new Option();
				myOption.text = "Escoja el modelo";
			myOption.value = "#";
			document.selectModelWheels.autoModel.options[0] = myOption;
			for(loop = 0; loop < models.childNodes.length; loop++){
				var autoModel = models.getElementsByTagName("model")[loop];
				myOption = new Option();
				myOption.text = autoModel.childNodes[0].nodeValue;
				myOption.value = autoModel.childNodes[0].nodeValue;
				document.selectModelWheels.autoModel.options[loop+1] = myOption;
			}
		 document.selectModelWheels.autoModelSelect.style.display="inline";
		//	openMenu('document.selectModelWheels.autoModelSelect');
		}
	}
}

function yearCallback(responseXML){
  if(responseXML){
  	var years = responseXML.getElementsByTagName("years")[0];
		if(years.childNodes.length > 0){
			var num = 0;
			myOption = new Option();
		  	myOption.text = "Escoja el a" + String.fromCharCode(241) + "o";
		  myOption.value = "#";
		  document.selectModel.autoYear.options[0] = myOption;
		  for(loop = 0; loop < years.childNodes.length; loop++){
		 		var autoYear = years.getElementsByTagName("year")[loop];
				myOption = new Option();
		    myOption.text = autoYear.childNodes[0].nodeValue;
		    myOption.value = autoYear.childNodes[0].nodeValue;
        document.selectModel.autoYear.options[loop+1] = myOption;
     		  }
		 document.selectModel.autoYear.style.display="inline";
		}
	}
}
function yearCallbackWheels(responseXML){
  if(responseXML){
  	var years = responseXML.getElementsByTagName("years")[0];
		if(years.childNodes.length > 0){
			var num = 0;
			myOption = new Option();
		  	myOption.text = "Escoja el a" + String.fromCharCode(241) + "o";
		  myOption.value = "#";
		  document.selectModelWheels.autoYear.options[0] = myOption;
		  for(loop = 0; loop < years.childNodes.length; loop++){
		 		var autoYear = years.getElementsByTagName("year")[loop];
				myOption = new Option();
		    myOption.text = autoYear.childNodes[0].nodeValue;
		    myOption.value = autoYear.childNodes[0].nodeValue;
        	    document.selectModelWheels.autoYear.options[loop+1] = myOption;
     		  }
		 document.selectModelWheels.autoYear.style.display="inline";
		}
	}
}

function clarCallback(responseXML){
	if(responseXML){
		var clarifiers = responseXML.getElementsByTagName("clarifiers")[0];
		if(clarifiers.childNodes.length > 0){
			var num = 0;
			myOption = new Option();
				myOption.text = "M" + String.fromCharCode(225) + "s info. del modelo";
			myOption.value = "#";
			document.selectModel.autoModClar.options[0] = myOption;
			for(loop = 0; loop < clarifiers.childNodes.length; loop++){
				var modelClar = clarifiers.getElementsByTagName("clar")[loop];
				myOption = new Option();
				myOption.text = modelClar.childNodes[0].nodeValue;
				myOption.value = modelClar.childNodes[0].nodeValue;
				document.selectModel.autoModClar.options[loop+1] = myOption;
			}
			openMenu('autoModClarSelect');
		}
	}
}
function clarCallbackWheels(responseXML){
	if(responseXML){
		var clarifiers = responseXML.getElementsByTagName("clarifiers")[0];
		if(clarifiers.childNodes.length > 0){
			var num = 0;
			myOption = new Option();
				myOption.text = "M" + String.fromCharCode(225) + "s info. del modelo";
			myOption.value = "#";
			document.selectModelWheels.autoModClar.options[0] = myOption;
			for(loop = 0; loop < clarifiers.childNodes.length; loop++){
				var modelClar = clarifiers.getElementsByTagName("clar")[loop];
				myOption = new Option();
				myOption.text = modelClar.childNodes[0].nodeValue;
				myOption.value = modelClar.childNodes[0].nodeValue;
				document.selectModelWheels.autoModClar.options[loop+1] = myOption;
			}
		//	openMenu('autoModClarSelect');
		 document.selectModelWheels.autoModClarSelect.style.display="inline";
		} else { 
		 document.selectModelWheels.submit();
		 openMenu('loadingMsg');

		}
	}
}

function getAvailableProducts(prodType){
   if(prodType == 'wheels') { 
	if(document.selectModelWheels.autoYear.value != "#" &&
	   document.selectModelWheels.autoMake.value != "#" &&
	   document.selectModelWheels.autoModel.value != "#"){
		var targetYear = document.selectModelWheels.autoYear.value;
		var targetMake = document.selectModelWheels.autoMake.value;
		var targetModel = document.selectModelWheels.autoModel.value;
		var targetModClar = "";
		var url = "/ValidationServlet?autoYear=" + targetYear + "&autoMake=" + targetMake + "&autoModel=" + targetModel + "&needsProducts=yes";
	     if(document.selectModelWheels.autoModClar.length > 0){
		 if(document.selectModelWheels.autoModClar.value != "#"){
		 	targetModClar = document.selectModelWheels.autoModClar.value;
			url += "&autoModClar=" + targetModClar;
			var ajax = new AJAXInteraction(url, productsCallback, 'wheels');
			ajax.doGet();
		 }
	     } else{
			var ajax = new AJAXInteraction(url, productsCallback, 'tires');
			ajax.doGet();
	     } 
	}
   } else { 
	if(document.selectModel.autoYear.value != "#" &&
	   document.selectModel.autoMake.value != "#" &&
	   document.selectModel.autoModel.value != "#"){
		var targetYear = document.selectModel.autoYear.value;
		var targetMake = document.selectModel.autoMake.value;
		var targetModel = document.selectModel.autoModel.value;
		var targetModClar = "";
		var url = "/ValidationServlet?autoYear=" + targetYear + "&autoMake=" + targetMake + "&autoModel=" + targetModel + "&needsProducts=yes";
	     if(document.selectModel.autoModClar.length > 0){
		 if(document.selectModel.autoModClar.value != "#"){
		 	targetModClar = document.selectModel.autoModClar.value;
			url += "&autoModClar=" + targetModClar;
			var ajax = new AJAXInteraction(url, productsCallback, 'tires');
			ajax.doGet();
		 }
	     } 
	}
   }
}

function productsCallback(responseXML){
	if(responseXML){
			var tires = responseXML.getElementsByTagName("tires")[0].firstChild.data;
			var wheels = responseXML.getElementsByTagName("wheels")[0].firstChild.data;
			var suspension = responseXML.getElementsByTagName("suspension")[0].firstChild.data;
			var brakes = responseXML.getElementsByTagName("brakes")[0].firstChild.data;
			var winterTires = responseXML.getElementsByTagName("winterTires")[0].firstChild.data;
			var accessories = responseXML.getElementsByTagName("accessories")[0].firstChild.data;
			var wipers = responseXML.getElementsByTagName("wipers")[0].firstChild.data;
			var lights = responseXML.getElementsByTagName("lights")[0].firstChild.data;
			var intake = responseXML.getElementsByTagName("intake")[0].firstChild.data;
			var winterWheels = responseXML.getElementsByTagName("winterWheels")[0].firstChild.data;

			if(document.getElementById("gotires") != null){
				if(tires == "false"){
					document.getElementById("gotires").className = "unavailable";
				}
				else{
					document.getElementById("gotires").className = "";
				}
			}
			if(document.getElementById("gowheels") != null){
				if(wheels == "false"){
					document.getElementById("gowheels").className = "unavailable";
				}
				else{
					document.getElementById("gowheels").className = "";
				}
			}
			if(document.getElementById("gosuspension") != null){
				if(suspension == "false"){
					document.getElementById("gosuspension").className = "unavailable";
				}
				else{
					document.getElementById("gosuspension").className = "";
				}
			}
			if(document.getElementById("gobrakes") != null){
				if(brakes == "false"){
					document.getElementById("gobrakes").className = "unavailable";
				}
				else{
					document.getElementById("gobrakes").className = "";
				}
			}
			if(document.getElementById("gowinter") != null){
				if(winterTires == "false"){
					document.getElementById("gowinter").className = "unavailable";
				}
				else{
					document.getElementById("gowinter").className = "";
				}
			}
			/*if(document.getElementById("gowipers") != null){
				if(wipers == "false"){
					document.getElementById("gowipers").className = "unavailable";
				}
				else{
					document.getElementById("gowipers").className = "";
				}
			}
			if(document.getElementById("golighting") != null){
				if(lights == "false"){
					document.getElementById("golighting").className = "unavailable";
				}
				else{
					document.getElementById("golighting").className = "";
				}
			}
			if(document.getElementById("gointake") != null){
				if(intake == "false"){
					document.getElementById("gointake").className = "unavailable";
				}
				else{
					document.getElementById("gointake").className = "";
				}
			}*/
			if(wheels == "false"){
				document.getElementById("tireWheelPack").style.display="none";
				if(document.getElementById("orA") != null){
					document.getElementById("orA").style.display="none";
				}
			}
			if(winterWheels == "false" || winterTires == "false"){
				if(document.getElementById("winterPack")){
					document.getElementById("winterPack").style.display="none";
				}
				if(document.getElementById("orA")){
					document.getElementById("orA").style.display="none";
				}
			}
			if((wheels == "false" && document.getElementById("winterPack") != null && (winterWheels == "false" || winterTires == "false")) || (wheels == "false" && document.getElementById("winterPack") == null)){
				document.getElementById("shopFor").style.display="none";
			}
	}
}
						
function openMenu(obj){
	var el = document.getElementById(obj);
	if(el != null){ //MH June 09
		el.style.display="block";
	}

}

function closeMenu(obj){
	var x = obj.toString();
	if(x != "noneavailmsg") { 
		var el = document.getElementById(obj);
		el.style.display = "none";
	}
}

function clearField(obj){
	if(document.getElementById(obj).value != "Enter Model"){
		document.getElementById(obj).value = "";
	}
}

function checkFields(){
	if(document.selectModel.autoYear.value == "#"){
		alert("Escoja el A&ntilde;o.");
		return false;
	}
	if(document.selectModel.autoModel.length > 0 &&
	   document.selectModel.autoModel.value == ""){
	   	alert("Escoja el modelo.");
		return false;
	}
	if(document.selectModel.autoModClar.length > 0 &&
	   document.selectModel.autoModClar.value == ""){
		alert("Escoja M" + String.fromCharCode(225) + "s info. del modelo");
		return false;
	}
	return true;
}

function checkBeforeSubmit(prodType){
	if(prodType == 'wheels') {
		if(document.selectModelWheels.autoModClar.value != ""){
			document.selectModelWheels.submit();
			openMenu('loadingMsg');
		}
	} else { 
		if(document.selectModel.autoModClar.value != ""){
			document.selectModel.submit();
			openMenu('loadingMsg');
		}
	}
}
