var maketimeout;
var LastRowClass;
var xmlDoc;
var xmlYears;
//var xmlListDoc;
//var xmlMakeDoc;
var modelToSet;

function getMakeOptions()
{
  startSpinner();
  if (typeof window.ActiveXObject != 'undefined')
  {
    xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
    xmlDoc.onreadystatechange = processMake;
  }
  else
  {
    xmlDoc = new XMLHttpRequest();
    xmlDoc.onload = processMake;
  }
  
  var Year = document.getElementById('Year').value;
  if(Year == ""){
      Year = "All";
  }
  
  var urlstr = "data/makes/" + Year + "/";
  //getYearOptions();

  xmlDoc.open("GET", urlstr, true);
  xmlDoc.send(null);
}

function processMake()
{
  if (xmlDoc.readyState == 4)
  {
    if (xmlDoc.status == 200)
    {
      del1 = "\n";
      valArray = xmlDoc.responseText.split(del1);
      var valArraylen = valArray.length - 1;
      clearOptions('Make');
      clearOptions('Model');
      clearOptions('Year');
            valArray.sort(sortSelectArrays);
      for (var i=0; i <= valArraylen; i++)
      {
        document.getElementById('Make').options[i] = new Option(valArray[i], valArray[i]);
      }
      getModelOptionsYear();
    }
  }
  stopSpinner();
}

function getMakeOptionsDelay()
{
  clearTimeout(maketimeout);
  maketimeout = setTimeout("getMakeOptions();",500);
}

function getModelOptionsNoYear(){
  getModelOptions(false);
}

function getModelOptionsYear(){
      clearOptions('Model');
      clearOptions('Year');	
      
  getModelOptions(true);
}

function getModelOptions(get_year)
{
  startSpinner();
  if (typeof window.ActiveXObject != 'undefined')
  {
    xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
    if (get_year){
      xmlDoc.onreadystatechange = processModelYear;
    }
    else {
      xmlDoc.onreadystatechange = processModelNoYear;
    }
  }
  else
  {
    xmlDoc = new XMLHttpRequest();
    if (get_year) {
      xmlDoc.onload = processModelYear;
    }
    else {
      xmlDoc.onload = processModelNoYear;
    }
  }
  
  var Year = document.getElementById('Year').value;
  var Make = document.getElementById('Make').value;
  if(Year == ""){
      Year = "All";
  }
  
  
  else {
	setYear(Year);
  }
  
  var urlstr = "data/models/" + Make + "/" + Year + "/";

  xmlDoc.open("GET", urlstr, true);
  xmlDoc.send(null);
}

function setYear(Year)
{
  	//alert ("SETTING YEAR!");
  	for(var i=0;i<=document.getElementById('Year').length-1;i=i+1)
		{
		var yrText=document.getElementById("Year").options[i].outerText;
		if(Year==yrText || (yrText=="" && Year=="All"))
		{
			document.getElementById("Year").selectedIndex=i;
			//alert("YEAR SET!");
			break;
		}
  }
  }

function processModelYear(){
  processModel(true);
}

function processModelNoYear(){
  processModel(false);
}

function processModel(get_year)
{
  if (xmlDoc.readyState == 4)
  {
    if (xmlDoc.status == 200)
    {
        var Year = document.getElementById('Year').value;

      del1 = "\n";
      valArray = xmlDoc.responseText.split(del1);
      valArray.sort(sortSelectArrays);
      //valArray.reverse();
      var valArraylen = valArray.length - 1;
      modelToSet=document.getElementById('Model').value;
      clearOptions('Model');
      var display;
      for (var i=0; i <= valArraylen; i++)
      {
      	      display=valArray[i].replace(/-sl-/g,"/");
        document.getElementById("Model").options[i] = new Option(display, valArray[i]);
        if (modelToSet!="All" && valArray[i]==modelToSet){
        document.getElementById("Model").selectedIndex=i;
        }
      }

      if (get_year) 
      {
        getYearOptions();
      }
      setYear(Year);
      getList();
    }
  }
  stopSpinner();
}

function getYearOptions()
{

  startSpinner();
  if (typeof window.ActiveXObject != 'undefined')
  {
    xmlYears = new ActiveXObject("Microsoft.XMLHTTP");
    xmlYears.onreadystatechange = processYear;
  }
  else
  {
    xmlYears = new XMLHttpRequest();
    xmlYears.onload = processYear;
  }

  var Make = document.getElementById('Make').value;
  var Model = document.getElementById('Model').value;
  
  
  var urlstr = "data/years/" + Make + "/" + Model + "/";

  xmlYears.open("GET", urlstr, true);
  xmlYears.send(null);

}

function processYear()
{
  if (xmlYears.readyState == 4)
  {
    if (xmlYears.status == 200)
    {
      del1 = "\n";
      valArray = xmlYears.responseText.split(del1);
      //***HERE'S THE SORTER!!!
      valArray.sort(sortSelectArrays);
      //valArray.reverse();
      var valArraylen = valArray.length - 1;
      var yearToSet=document.getElementById('Year').value;
      clearOptions('Year');
      for (var i=0; i <= valArraylen; i++)
      {
        document.getElementById('Year').options[i] = new Option(valArray[i], valArray[i]);
        if (valArray[i]==yearToSet){
        			document.getElementById("Year").selectedIndex=i;
        }
      }
      getList();
      //setYear(yearToSet);
    }
  }
  stopSpinner();
}

function getList()
{
  startSpinner();
  if (lastcolumn)
  {
    document.getElementById('Sort' + lastcolumn).src = 'images/none.gif';
  }
  if (typeof window.ActiveXObject != 'undefined')
  {
    xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
    xmlDoc.onreadystatechange = processList;
  }
  else
  {
    xmlDoc = new XMLHttpRequest();
    xmlDoc.onload = processList;
  }
  
  var Year = document.getElementById('Year').value;
  var Make = document.getElementById('Make').value;
  var Model = document.getElementById('Model').value;
  if(Year == ""){
      Year = "All";
  }

  var urlstr = "data/prices/" + Year + "/" + Make + "/" + Model + "/";
  
  xmlDoc.open("GET", urlstr, true);
  xmlDoc.send(null);
}

function processList()
{
  if (xmlDoc.readyState == 4)
  {
    if (xmlDoc.status == 200)
    {
      var del1 = "\n";
      var del2 = "|";
      var valArray = xmlDoc.responseText.split(del1);
      var valArraylen = valArray.length - 1;
      var listtable = document.getElementById('ListTable');
      clearList();
      LastRowClass = '';

      if(valArray.length == 0 || valArray[0] == ""){
          var noresults = document.createElement('tr');
          var norestd = document.createElement('td');
          norestd.setAttribute('colspan', 10);
          norestd.appendChild(document.createTextNode('No Results Listed'));
          noresults.appendChild(norestd);
          listtable.appendChild(noresults);
      }
      else{

      for (var i=0; i <= valArraylen; i++)
      {  
        var data = valArray[i].split(del2);
        var yr = data[0];
        var mk = data[1];
        var md = data[2];
        var bt = data[3];
        var p4 = data[4];
        var p3 = data[5];
        var p2 = data[6];
        var p1 = data[7];
        var nt = data[8];
        //var bz = data[9];
        
        var newrow = document.createElement('tr');
        
        if (LastRowClass == 'Reg')
        {
          var thisRowClass = 'Alt';
          LastRowClass = 'Alt';
        }
        else
        {
          var thisRowClass = 'Reg';
          LastRowClass = 'Reg';
        }
        
        newrow.setAttribute('class',thisRowClass);
        newrow.setAttribute('className',thisRowClass); // For IE
        
        var yrfield = document.createElement('td');
        yrfield.innerHTML = yr;
        
        var mkfield = document.createElement('td');
        mkfield.innerHTML = mk;
        
        var mdfield = document.createElement('td');
        mdfield.innerHTML = md;
        
        var btfield = document.createElement('td');
        btfield.innerHTML = bt;
        
        var p4field = document.createElement('td');
        if (p4 == '----')
        {
          p4field.innerHTML = p4;
        }
        else
        {
          p4field.innerHTML = '$' + p4;
        }
        
        var p3field = document.createElement('td');
        if (p3 == '----')
        {
          p3field.innerHTML = p3;
        }
        else
        {
          p3field.innerHTML = '$' + p3;
        }
        
        var p2field = document.createElement('td');
        if (p2 == '----')
        {
          p2field.innerHTML = p2;
        }
        else
        {
          p2field.innerHTML = '$' + p2;
        }
        
        var p1field = document.createElement('td');
        if (p1 == '----')
        {
          p1field.innerHTML = p1;
        }
        else
        {
          p1field.innerHTML = '$' + p1;
        }
        
        var ntfield = document.createElement('td');
        ntfield.innerHTML = nt;
        
        listtable.appendChild(newrow);

        newrow.appendChild(yrfield);
        newrow.appendChild(mkfield);
        newrow.appendChild(mdfield);
        newrow.appendChild(btfield);
        newrow.appendChild(p4field);
        newrow.appendChild(p3field);
        newrow.appendChild(p2field);
        newrow.appendChild(p1field);
        newrow.appendChild(ntfield);
      }

      }
    }
  }
  stopSpinner();
}

function clearOptions(element)
{
  document.getElementById(element).options.length = 0;
  document.getElementById(element).value = "";
}

function init()
{
  var year = document.getElementById('Year');
  var make = document.getElementById('Make');
  var agent=navigator.userAgent;
  //Hack to sort Make
  //Array.prototype.sort.call(make.options,function(a,b){return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;});
    if (typeof window.ActiveXObject != 'undefined')
  {
    }
  else{
  	  if (agent.search("afari")==0){
  	  //alert("Not Safari!!!");
  	  Array.prototype.sort.call(make.options,function(a,b){return a.text=="Select Make"? -1:b.text=="Select Make"? 1:a.text < b.text ? -1 : a.text > b.text ? 1 : 0;});
  	}
  	//else {alert("Safari");}
  
  }
  
  	  //Array.prototype.sort.call(make.options,sortSelectArrays);
  var model = document.getElementById('Model');
  var go = document.getElementById('DisplayButton');
  var srt0 = document.getElementById('SortColumn0');
  var srt2 = document.getElementById('SortColumn2');
  var srt4 = document.getElementById('SortColumn4');
  var srt5 = document.getElementById('SortColumn5');
  var srt6 = document.getElementById('SortColumn6');
  var srt7 = document.getElementById('SortColumn7');
  
  if (year.addEventListener)
  {
    year.addEventListener('keyup', getMakeOptionsDelay, false);
    make.addEventListener('change', getModelOptionsYear, false);
    model.addEventListener('change', getYearOptions, false);
    year.addEventListener('change', getModelOptionsNoYear, false);
    go.addEventListener('click', getList, false);
    srt0.addEventListener('click',sortColumn, false);
    srt2.addEventListener('click',sortColumn, false);
    srt4.addEventListener('click',sortColumn, false);
    srt5.addEventListener('click',sortColumn, false);
    srt6.addEventListener('click',sortColumn, false);
    srt7.addEventListener('click',sortColumn, false);
  }
  else if (year.attachEvent)
  {
    year.attachEvent('onkeyup', getMakeOptionsDelay);
    make.attachEvent('onchange', getModelOptionsYear);
    model.attachEvent('onchange', getYearOptions);
    year.attachEvent('onchange', getModelOptionsNoYear);
    go.attachEvent('onclick', getList);
    srt0.attachEvent('onclick', sortColumn);
    srt2.attachEvent('onclick', sortColumn);
    srt4.attachEvent('onclick', sortColumn);
    srt5.attachEvent('onclick', sortColumn);
    srt6.attachEvent('onclick', sortColumn);
    srt7.attachEvent('onclick', sortColumn);
  }
}

function clearList()
{
  var listtable = document.getElementById('ListTable');
  var rows = listtable.rows;
  while(rows.length)
  {
    listtable.deleteRow(rows.length-1);
  }
  return true;
}

function removeChildNodes(node)
{
  if (node !== undefined && node !== null)
  {
    return;
  }
  while (node.hasChildNodes())
  {
    node.removeChild(node.firstChild);
  }
}

function stopSpinner()
{
  document.getElementById('Spinner').src = '/media/images/spinner-stop.gif';
}

function startSpinner()
{
  document.getElementById('Spinner').src = '/media/images/spinner.gif';
}

function sortSelectArrays(a,b){
//Any element "All" should be first in the array
	if (a=="All" ||a=="Select Make"){
	return -1
	}
	if (b=="All"|| b=="Select Make"){
		return 1;
	}
	/*if (isNaN(a) || isNaN(b)){
		if (isNaN(a)&& !isNaN(b)){
			return 1;
		}
		if (isNaN(b)&& !isNaN(a)){
			return -1;	
		}
	}*/
	if (a<b) return -1;
	if (b<a) return 1;
	return 0;
}

