// JavaScript Document
// Add a function to file when the window loads
function addLoadEvent(func)
{
	var oldonload = window.onload;
	if(typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
				oldonload();
				func();
		}
	}
} // end addLoadEvent

function Hijax() 
{
    var container,url,canvas,data,loading,callback,request;

    this.setContainer = function(value) 
	{
        container = value;
    };
    this.setUrl = function(value) 
	{
        url = value;
    };
    this.setCanvas = function(value) 
	{
        canvas = value;
    };
    this.setLoading = function(value) 
	{
        loading = value;
    };
    this.setCallback = function(value) 
	{
        callback = value;
    };

    this.captureData = function() 
	{
        if (container.nodeName.toLowerCase() == "form") 
		{
            container.onsubmit = function() 
			{
            	var query = "";
            	for (var i=0; i<this.elements.length; i++) 
				{
                		query+= this.elements[i].name;
                		query+= "=";
                		query+= escape(this.elements[i].value);
                		query+= "&";
        		}
        		data = query;
        		return !start();
   		 	};
  		}
  		else if (container.nodeName.toLowerCase() == "select")
		{
  			container.onchange = function() 
			{
				//disableButton(getButtonByClass("updatesearch"));
    			var query = "";
	 			var myindex  = this.selectedIndex
				// Check to see if any of the first 3 options have been selected
				if (myindex==0 || myindex==1 || myindex==2)
				{
					// reset the model list
					resetModels();
					//fadeUp(document.getElementById("ctrlContent_SearchCriteria_dropModel_dropList"),255,255,0);
					fadeUp(getListBoxByClass("carmodel"),255,255,0);
					return;	
				}
				else
				{
					// else the user has selected a Make and we can setup the request to the server
     				query+= "makeid=";
     				query+= escape( this.options[myindex].value);
    				data = query;
    				return !start();
				}
   			};
		}
		else 
		{
   			var links = container.getElementsByTagName("a");
   			for (var i=0; i<links.length; i++) 
			{
    			links[i].onclick = function() 
				{
     				var query = this.getAttribute("href").split("?")[1];
     				url+= "?"+query;
     				return !start();
    			};
   			}
   			links = null;
  		}
 	}; // end of captureData

 	var start = function() 
	{
    	request = getHTTPObject();
    	if (!request || !url) 
		{
        	return false;
    	}
    	else 
		{
        	initiateRequest();
        	return true;
    	}
 	};

 	var getHTTPObject = function() 
	{
    	var xmlhttp = false;
    	if (window.XMLHttpRequest) 
		{
        	xmlhttp = new XMLHttpRequest();
    	}
    	else if(window.ActiveXObject) 
		{
        	try 
			{
            	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        	} 
			catch (e) 
			{
            	try 
				{
                	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            	} 
				catch (e) 
				{
                	xmlhttp = false;
            	}
        	}
    	}
    	return xmlhttp;
 	};

	var initiateRequest = function() 
	{
    	if (loading) 
		{
        	loading();
    	}
    	request.onreadystatechange = completeRequest;
    	if (data) 
		{
        	request.open("POST", url, true);
        	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        	request.send(data);
    	} 
		else 
		{
        	request.open("GET", url, true);
        	request.send(null);
    	}
	};

	var completeRequest = function() 
	{
    	if (request.readyState == 4) 
		{
        	if (request.status == 200 || request.status == 304) 
			{
            	if (canvas) 
				{
				
					// Clear any items currently in the list
					var listlength = canvas.length;
					for(i=0;i<=listlength;i++)
					{
						canvas.remove(0);	
					}
					
					// Evaluate the JSON object returned from the server
					var objModelList = eval('(' + request.responseText + ')');		
					
					// Go through each object returned and add it to the drop down list
					for(i=0;i<objModelList.modellist.length;i++)
					{
						var oOption = document.createElement("OPTION");
		   				oOption.text=objModelList.modellist[i].model;
		   				oOption.value=objModelList.modellist[i].modelvalue;
						addOptionToListBox(canvas,oOption);	
					}		
					//enableButton(getButtonByClass("updatesearch"));	
            	}
        		if (callback) 
				{
            		callback();
        		}
    		}
		}
 	};
} // end Hijax

function carsearch() 

{
   	var prepareCars = function(element) 
	{
   		var xhr = new Hijax();
   		xhr.setContainer(element);
   		xhr.setUrl("/cars/modelsearch.aspx");
   		xhr.setCanvas(getListBoxByClass("carmodel"));
   		xhr.setLoading(function() 
		{
			// Disable button here
			if(getButtonByClass('updatesearch'))
			{
				disableButton(getButtonByClass('updatesearch'));
			}
			if(getButtonByClass('narrowsearch'))
			{
				disableButton(getButtonByClass('narrowsearch'));			
			}
       		displayLoading(getListBoxByClass("carmodel"));
   		});
   		xhr.setCallback(function() 
		{
       		fadeUp(getListBoxByClass("carmodel"),255,255,0);
			// Enable button here
			if(getButtonByClass('updatesearch'))
			{
				enableButton(getButtonByClass('updatesearch'));	
			}
			if(getButtonByClass('narrowsearch'))
			{
				enableButton(getButtonByClass('narrowsearch'));	
			}
   		});
   		xhr.captureData();
	};
	
	var displayLoading = function(element) 
	{
		
   		//var image = document.createElement("img");
   		//image.setAttribute("alt","loading...");
   		//image.setAttribute("src","progressbar.gif");
   		//image.className = "loading";
   		//element.appendChild(image);
	};
	
	
    var all_forms = document.getElementsByTagName("select");
    for (var i=0; i<all_forms.length; i++) 
	{
       	if (all_forms[i].className.match("carmake")) 
		{
           	prepareCars(all_forms[i]);
       	}
    }
    all_forms = null;
} // end carsearch

function prepForm()
{
 	var all_labels = document.getElementsByTagName("label");
	for (var i=0; i<all_labels.length; i++) 
	{
  		if (all_labels[i].className.match("nonjs")) 
		{
   			all_labels[i].className="hidden";
  		}
	}

	var all_buttons = document.getElementsByTagName("input");
	for (var i=0; i<all_buttons.length; i++) 
	{
  		if (all_buttons[i].className.match("nonjs")) 
		{
   			all_buttons[i].className="hidden";
  		}
	}
} // end prepform

function resetModels()
{
	var all_listboxes = document.getElementsByTagName("select");
	for (var i=0; i<all_listboxes.length; i++) 
	{
  		if (all_listboxes[i].className.match("carmodel")) 
		{
   			var modellist = all_listboxes[i];
			clearListBox(modellist);
			var oOption1 = document.createElement("OPTION");
		   	oOption1.text="Model?";
		   	oOption1.value="none";
			var oOption2 = document.createElement("OPTION");
		   	oOption2.text="Please select a make";
		   	oOption2.value="-2";	
			addOptionToListBox(modellist,oOption1);	
			addOptionToListBox(modellist,oOption2);	
  		}
	}
} // end resetModels

function clearListBox(listbox)
{
	var listlength = listbox.length;
	for(i=listlength-1;i>=0;i--)
	{
		listbox.options[i] = null;	
	}	
}

function addOptionToListBox(listbox,option)
{
	// If using IE, then add it using the non-standard add
	if(document.all)
	{
		listbox.add(option);
	}
	// otherwise add it the proper way
	else
	{
		listbox.add(option,null);	
	}
} // end addOptionToListBox

function fadeUp(element,red,green,blue) 
	{
   		if (element.fade) 
		{
       		clearTimeout(element.fade);
   		}
   		element.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
   		if (red == 255 && green == 255 && blue == 255) 
		{
       		return;
   		}
   		var newred = red + Math.ceil((255 - red)/10);
   		var newgreen = green + Math.ceil((255 - green)/10);
   		var newblue = blue + Math.ceil((255 - blue)/10);
   		var repeat = function() 
		{
       		fadeUp(element,newred,newgreen,newblue)
   		};
   		element.fade = setTimeout(repeat,20);
   	};
	
function getListBoxByClass(className)
{
	var all_listboxes = document.getElementsByTagName("select");
	for (var i=0; i<all_listboxes.length; i++) 
	{
  		if (all_listboxes[i].className.match(className)) 
		{
   			return all_listboxes[i];
		} 
	}
	return false;
}

function getButtonByClass(className)
{
	var all_buttons = document.getElementsByTagName("input");
	for (var i=0; i<all_buttons.length; i++) 
	{
  		if (all_buttons[i].className.match(className)) 
		{
   			return all_buttons[i];
		} 
	}
	return false;
}

function disableButton(button)
{
	button.disabled=true;
	return;
}

function enableButton(button)
{
	button.disabled=false;
	return;
}

function enableList(listbox)
{
	listbox.disabled=true;
	return;
}

function disableList(listbox)
{
	listbox.disabled=false;
	return;
}

function displaySelectedModel()
{
	var make = getListBoxByClass("carmake");
	var model = getListBoxByClass("carmodel");
//alert(make.options[make.SelectedIndex].value);
//alert('make: ' + make.selectedIndex + ' model: ' + model.selectedIndex);
if ((make.selectedIndex>0) && ((model.selectedIndex==-1) || (model.selectedIndex==0)))
	{
		//alert('reset');
		make.selectedIndex=0;
		model.selectedIndex=0;
	}
}

function catchReturnOnSearch()
{
		if (!document.getElementById("frmMain")) return false;
		if (!getButtonByClass("monthlybudget")) return false;
		if (!getButtonByClass("updatesearch") && !getButtonByClass("narrowsearch")) return false;
		if (!document.getElementById("__EVENTTARGET")) return false;
		var frmMain = document.getElementById("frmMain");
		var btnMonthly = getButtonByClass("monthlybudget");
		
		if(getButtonByClass("updatesearch"))
		{
			var btnGo = getButtonByClass("updatesearch");
		}
		
		if(getButtonByClass("narrowsearch"))
		{
			var btnGo = getButtonByClass("narrowsearch");
		}		
		
		var hidField = document.getElementById("__EVENTTARGET");
		btnMonthly.onkeypress = function(e){
			if(window.event) // IE
			{
				if(window.event.keyCode==13)
				{
					//alert(hidField.value);	
					hidField.value='search';
					//alert(hidField.value);	
					btnGo.click();
				}
			}
			else
			{
				if(e.which==13)
				{
					//alert(hidField.value);	
					hidField.value='search';
					//alert(hidField.value);		
					btnGo.click();
				}
			}
				
		}
}

function setSearchFocus()
{
	if (!document.getElementById("ctrlContent_ctrlCriteria_btnShortGo")) return false;
	//alert('setting focus');
	var btnGo = document.getElementById("ctrlContent_ctrlCriteria_btnShortGo");
	btnGo.focus();
}

function clearBudget()
{
			
		if(document.getElementById("ctrlCriteria_txtMonthlyBudget_txtBox"))
			var inputBudget = document.getElementById("ctrlCriteria_txtMonthlyBudget_txtBox");	
		else if(document.getElementById("ctrlCrit_txtMonthlyBudget_txtBox"))	
			var inputBudget = document.getElementById("ctrlCrit_txtMonthlyBudget_txtBox");
		else
			return false;

		inputBudget.onfocus = function(){
				if (this.value=='Monthly Budget?')
					this.value='';
		}
}

addLoadEvent(catchReturnOnSearch);
addLoadEvent(carsearch);
addLoadEvent(clearBudget);
//addLoadEvent(catchReturnOnSearch);
//addLoadEvent(displaySelectedModel);
