var BASEPATH = 'im' + 'g/'; //needed for automatic management of tab navigation images

var tips;
var disclaimer = null;
var req;
var xmldom, xmlroot;
var _vehicle;

function setTabImages(tabs, cPos) {
	for(var i = 0; i < tabs.length; i++) {		
		if(i == cPos) {
			    $('tabImage_' + i).src = BASEPATH + _tBaseNames(i) + '_on.gif';
			    $('tabLink_' + i).href = 'javascript:void(0);';
			    $('tabLink_' + i).onclick = '';
		 } else {
			    if(tabs[i] == 'true') {
				    $('tabImage_' + i).src = BASEPATH + _tBaseNames(i) + '_visit.gif';				
			    } else {
			      $('tabImage_' + i).src = BASEPATH + _tBaseNames(i) + '.gif';
				    $('tabLink_' + i).href = 'javascript:void(0);';
				    $('tabLink_' + i).onclick = '';
			    }
		 }
	}
}

function _tBaseNames(n) {
	    switch(n) {
		    case 0: return 'ratd_tab1';
		    case 1: return 'ratd_tab2';
		    case 2: return 'ratd_tab3';
	  }
}

    function toggle(x) {
    var obj = $('RetailerSearchPopup');

    if (obj) {
    if(!x) {
    obj.style.visibility='hidden';
    } else {
    obj.style.visibility='hidden';
    obj.style.display='inline';

    _currentDhtmlPop=obj;

    //obj.style.top  = (document.body.clientHeight - obj.clientHeight)/2+ 'px';

    obj.style.top = 100 + 'px';

    obj.style.left = (document.body.clientWidth - obj.clientWidth)/2+ 'px';

    obj.style.visibility='visible';

    }

    }

    }

function tabJump(t) {
	switch(t) {
       	case 0:
              	$('pageTo').value = 'testDrive';                    
              	break;
             case 1:
             		$('pageTo').value = 'testDriveInfo';                    
             		break;
             case 2:
             		$('pageTo').value = 'testDriveDirections';                    
                    	break;
                }
                $('testDriveFormRef').submit();
		return false;
}

//begin dealersearch popup code
 var dealerSet;
      var dealerIdx;  //id based hash table to increase lookup speed

      //the following function should stay attached to this particular page
      function preProcessForm() {
      var a, b, c, d, e;

      if($('slZipCode').value != '') a = $('slZipCode').value; else if($('srZipCode').value != '') a = $('srZipCode').value;
      if($('slCity').value != '') b = $('slCity').value; else if($('srCity').value != '') b = $('srCity').value;
      if($('slState').value != '') c = $('slState').value; else if($('srState').value != '') c = $('srState').value;
      if($('slMiles').value != '') d = $('slMiles').value; else if($('srMiles').value != '') d = $('srMiles').value; else d = 100;
      if($('srDealerName').value != '') e = $('srDealerName').value;

      validationHarness(a, b, c, d, e);
      }

      function validationHarness(zip, city, state, miles, dealername) {
      //verify basic presence and correctness of zip code; ignore other fields

      if(((typeof zip) == 'undefined' || zip=='') && ((typeof state) == 'undefined' || state.length < 2) && ((typeof dealername) == 'undefined' || dealername == '')) { //user has an empty form
        $('dwrErrorRegion').innerHTML = 'Please specify at least a ZIP code, a state, or a retailer name.';
        return;
      }

      var validZip = /^[0-9]{5}$/;
      if((zip && zip != '') && (!validZip.test(zip)  || zip=='00000')) {
      	$('dwrErrorRegion').innerHTML = 'Please enter a valid zip code.';
      return;
      }

      try {crmEvent3($('modelCode').value);} catch(e) {}

      try {
		  
        TestDriveFacade.getDealers('', city, state, zip, dealername, miles, 200, acceptDealerObj);
      } catch(e) {
        $('dwrErrorRegion').innerHTML = 'A general error has occured. Please try again.';     
      }
      
      }
      
      function displayStateManager(s) {
	//IE will not display anything over dropdown controls; so they must be explicitly hidden/shown for the dealer search popup to render correctly
        switch(s) {
          case 0: //no search popup or calendar display
            if($('RetailerSearchPopup')) hideDhtmlPop($('RetailerSearchPopup'));
	    if($('calendar')) hideDhtmlPop($('calendar'));
            if($('vehicleNameTxt')) $('vehicleNameTxt').style.visibility = 'visible';
	    if($('infoState')) $('infoState').style.visibility = 'visible';
            break;
          case 1: //search popup form
            if($('vehicleNameTxt')) $('vehicleNameTxt').style.visibility = 'hidden';
            if($('searchState')) $('searchState').style.display = 'block';
            if($('resultsState')) $('resultsState').style.display = 'none';
	   if($('infoState')) $('infoState').style.visibility = 'hidden';
            break;
          case 2: //search popup results
             if($('vehicleNameTxt')) $('vehicleNameTxt').style.visibility = 'hidden';
             if($('searchState')) $('searchState').style.display = 'none';
             if($('resultsState')) $('resultsState').style.display = 'block';
	     if($('infoState')) $('infoState').style.visibility = 'hidden';
             break;
	  case 3: //calendar display
	     if($('vehicleNameTxt')) $('vehicleNameTxt').style.visibility = 'hidden';
        }
      }
      
      function acceptDealerObj(remoteDealerObj) {
        dealerSet = new Array();
        dealerIdx = new Array();        
          
        var temp;
        for(var i = 0; remoteDealerObj[i]!=null && i < remoteDealerObj.length; i++) {
          temp = new dealerObj(remoteDealerObj[i].dealerId, remoteDealerObj[i].dealerAddress, 
                               remoteDealerObj[i].dealerCityStateAndZip, remoteDealerObj[i].dealerAwarded,
                               remoteDealerObj[i].dealerDefaultPhone, remoteDealerObj[i].dealerName, 
                               remoteDealerObj[i].dealerDistance,
			       remoteDealerObj[i].dealerCity, remoteDealerObj[i].dealerState, remoteDealerObj[i].dealerZipCode,remoteDealerObj[i].contactable);
          
          dealerSet[i] = temp;
          dealerIdx[remoteDealerObj[i].dealerId] = i;
          //alert(dealerSet[i].id);
        }

        renderDealerResults();
      }

      function dealerObj(id, address, cityStateZip, showAward, mainPhone, name, distance, dcity, dstate, dzip,contactable) {
        this.id = id;
        this.address = address;
        this.cityStateZip = cityStateZip;
        this.showAward = showAward;
        this.mainPhone = mainPhone;
        this.name = name;
        this.distance = distance;

	this.dealerCity = dcity;
	this.dealerState = dstate;
	this.dealerZip = dzip;
	this.contactable=contactable;
      }

      function numberOfPages() {        
          return (Math.floor(dealerSet.length / 10)) + 1;
      }

      function renderDealerResults(optPageNumber) {
          var numPages = numberOfPages();
         var results = '';
         var temp, i, cTile, cAddr;

      if(!optPageNumber) optPageNumber = 0;

         for(i = 0; i < numPages; i++) {
            if(i == optPageNumber)           
              results += getPagingHtml(i, false);
            else
              results += getPagingHtml(i, true);
         }

	//header info
	// Changes for SR 12367.
	if(dealerSet.length>0){
	$('totalDealerCount').innerHTML = dealerSet.length+"&nbsp; Retailers returned. Please choose one:";
	$('displayStartIndice').innerHTML = (optPageNumber * 10) + 1;
	}else{
	$('totalDealerCount').innerHTML = "No Retailers Found. Please Search again.";

	$('displayStartIndice').innerHTML = dealerSet.length;
	}
	// end of changed for SR 12367.

	$('displayEndIndice').innerHTML = ((optPageNumber * 10) + 10) > dealerSet.length ? dealerSet.length : ((optPageNumber * 10) + 10);
	$('displayTotalResultCount').innerHTML = dealerSet.length;
	//end header info
           
         $('pageLinkContainer').innerHTML = results;                  
         
         temp = $('dealerTile').getElementsByTagName('table')[0];                 
      
         $('dealerPanel').innerHTML = '';
           
         for(i = (optPageNumber * 10); i < ((optPageNumber * 10) + 10); i++) {
           if(!dealerSet[i]) continue;
           cTile = $('dealerTile');
           
           //make tile represent current dealer being rendered
           cTile.getElementsByTagName("TR")[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0].value = dealerSet[i].id;
		   
		   // The below if loop disables the radio button if the dealer is not contactable
           if(!dealerSet[i].contactable){
			   cTile.getElementsByTagName("TR")[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0].disabled = true;
		   }else{
			   cTile.getElementsByTagName("TR")[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0].disabled = false;	
		   }
                       
           if(dealerSet[i].showAward == true)
              cTile.getElementsByTagName("TR")[0].getElementsByTagName("TD")[1].getElementsByTagName("img")[0].style.display = 'block';
           else
              cTile.getElementsByTagName("TR")[0].getElementsByTagName("TD")[1].getElementsByTagName("img")[0].style.display = 'none';           

           cAddr = cTile.getElementsByTagName("TR")[0].getElementsByTagName("TD")[1].getElementsByTagName("span");                      

           cAddr[0].innerHTML = dealerSet[i].name;
           cAddr[1].innerHTML = dealerSet[i].address;
           cAddr[2].innerHTML = dealerSet[i].cityStateZip;
           cAddr[3].innerHTML = dealerSet[i].distance;

           //copy tile into container
           $('dealerPanel').innerHTML = $('dealerPanel').innerHTML + $('dealerTile').innerHTML;
         }
                   
        displayStateManager(2);
      }
      
      function selectHandler() {

            var res = getSelectedDealer();
           
            if(!res) {
		try {
              		res = document.forms['dealerSelectForm'].dealerSelectRadio[0].value; //default to first dealer in list
		} catch(e) {
			res = document.forms['dealerSelectForm'].dealerSelectRadio.value; //default to first dealer in list
		}
            } 
		
	    chooseDealer(res);
      }
           
      function getSelectedDealer() {
           var i;
           
           for(i = 0; i < document.forms['dealerSelectForm'].dealerSelectRadio.length; i++) {
              if(document.forms['dealerSelectForm'].dealerSelectRadio[i].checked)
                  return document.forms['dealerSelectForm'].dealerSelectRadio[i].value;
           }             
             
           return null;
      }
           
      function getPagingHtml(indice, b) {
        var retval = '';
        if(b) retval = '<a onclick="renderDealerResults(' + indice + ');" href="javascript:void(0);" class="gWhiteText">';
        retval = retval + (indice + 1);
        if(b) retval+='</a>';
        retval+='&nbsp;';
        
        return retval;
      }                 
           
      function chooseDealer(dealerId) {
		 
        //set values for postback to server
        $('testDrive.dealerId').value = dealerSet[dealerIdx[dealerId]].id;
        $('testDrive.dealerName').value = dealerSet[dealerIdx[dealerId]].name;
        $('testDrive.dealerStreet').value = dealerSet[dealerIdx[dealerId]].address;
        $('testDrive.dealerCityStateZip').value = dealerSet[dealerIdx[dealerId]].cityStateZip;
        $('testDrive.dealerDistance').value = dealerSet[dealerIdx[dealerId]].distance;
        $('testDrive.dealerDefaultPhone').value = dealerSet[dealerIdx[dealerId]].mainPhone;
		$('testDrive.contactable').value = dealerSet[dealerIdx[dealerId]].contactable;
       
		 
		
    
	//set additional leads values
	$('testDrive.dealerCity').value = dealerSet[dealerIdx[dealerId]].dealerCity;
	$('testDrive.dealerState').value = dealerSet[dealerIdx[dealerId]].dealerState;
	$('testDrive.dealerZipCode').value = dealerSet[dealerIdx[dealerId]].dealerZip;

        //update local display
        $('lDealerName').innerHTML = $('testDrive.dealerName').value;
        $('lDealerStreet').innerHTML = $('testDrive.dealerStreet').value;
        $('lDealerCityStateZip').innerHTML = $('testDrive.dealerCityStateZip').value;
        $('lDealerDistance').innerHTML = $('testDrive.dealerDistance').value;
        $('lDealerPhone').innerHTML = $('testDrive.dealerDefaultPhone').value;
       		if($('testDrive.contactable').value=='true'){
		
			 $('testDrive.person.firstName').disabled=false;
			 $('testDrive.person.lastName').disabled=false;
			 $('testDrive.address.address').disabled=false;
			 $('testDrive.address.address2').disabled=false;
			 $('testDrive.address.aptSuite').disabled=false;
			 $('testDrive.address.city').disabled=false;
			 $('infoState').disabled=false;
			 $('testDrive.address.zipCode').disabled=false;
			 $('testDrive.address.homePhoneArea').disabled=false;
			 $('testDrive.address.homePhonePrefix').disabled=false;
			 $('testDrive.address.homePhoneSuffix').disabled=false;
			 $('testDrive.person.email').disabled=false;
			 document.getElementById('buttonDiv').style.visibility = 'visible';
			 document.getElementById('lDealerContactable').style.visibility = 'hidden';
			 

		}else{
             
         	 $('testDrive.person.firstName').disabled=true;
			 $('testDrive.person.lastName').disabled=true;
			 $('testDrive.address.address').disabled=true;
			 $('testDrive.address.address2').disabled=true;
			 $('testDrive.address.aptSuite').disabled=true;
			 $('testDrive.address.city').disabled=true;
			 $('infoState').disabled=true;
			 $('testDrive.address.zipCode').disabled=true;
			 $('testDrive.address.homePhoneArea').disabled=true;
			 $('testDrive.address.homePhonePrefix').disabled=true;
			 $('testDrive.address.homePhoneSuffix').disabled=true;
			 $('testDrive.person.email').disabled=true;
             document.getElementById('buttonDiv').style.visibility = 'hidden';
			 document.getElementById('lDealerContactable').style.visibility = 'visible';

		}



        try {crmEvent4($('modelCode').value);} catch(e) {}

        displayStateManager(0);
      }

//end dealer search popup code

function fudgePath(p) {
	var tokens = p.split('/');
	var prepath = 'img/';	

	tokens = tokens[tokens.length - 1];
	tokens = tokens.split('_');
	return (prepath + tokens[0] + '_' + tokens[1] + '_s_' + tokens[3] + '_' + tokens[4].split('.')[0] + '.gif');	
}

var largeImages = new Array();
      var smallImages = new Array();
      
	  function addLargeImagePairing(name, path) {
	    largeImages[name] = path;
	  }
	  
	  function addSmallImagePairing(name, path) {
	    smallImages[name] = fudgePath(path);
	  }
	  
	  function vehicleSwap(s) {
	        if(s.value && s.value != '') {
	            $('carName').innerHTML = 'Infiniti ' + s.value;
	            $('mainCarImage').src = largeImages[s.value];
	            $('testDrive.imageNameLargeTxt').value = largeImages[s.value];
	            $('testDrive.imageNameSmallTxt').value = smallImages[s.value];
	            $('modelCode').value = s.options[s.selectedIndex].getAttribute('modelCode');	            
	        } else {
	            $('carName').innerHTML = 'Infiniti';
	            $('mainCarImage').src = 'img/g35_07_l2_base_gray.jpg';
	            $('modelCode').value = '';
	        }
	  }

function loadXMLDoc(url, vehicle) {
    req = false;
    
    _vehicle = vehicle;
            
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
        try {
            req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }                
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {        
            try {
          	    req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          	    req = false;
        	}   
        }
    }
	
	if(req) {
	    req.onreadystatechange = buildTips;
		req.open("GET", url, true);
		req.send("");
    }
}
        
function buildTips() {
    if (req.readyState == 4 && req.status == 200) {
        xmldom = new XMLDoc(req.responseText, function() {})
        xmlroot = xmldom.docNode;
        tips = new Array();
        var i, j, vehicles, temp;
        	        
        vehicles = xmlroot.getElements("vehicle");
        
	for(i = 0; i < vehicles.length; i++) {
            
		if(vehicles[i].getAttribute("dbid") == _vehicle) {
			temp = vehicles[i].getElements("tip");
			for(j = 0; j < temp.length; j++) {
				tips[tips.length] = new tipLet(temp[j].getAttribute("order"), temp[j].getText());
			}
			temp = vehicles[i].getElements("disclaimer");
			if(temp && temp[0]) disclaimer = temp[0].getText();	//only one disclaimer block is allowed per vehicle tip node
		}
        }
        //reorder based on order      
        renderTips();
    }
}

function renderTips() {
	var i;
	var tempLi;
	for(i = 0; i < tips.length; i++) {
		tempLi = document.createElement("LI");
		tempLi.innerHTML = tips[i].copy;
		$('driveTipsContainer').appendChild(tempLi);
	}

	if(disclaimer) $('tipsDisclaimer').innerHTML = disclaimer;
}

function tipLet(o, c) {
	this.order = o;
	this.copy = c;
}

function filterErrorList(sel) {
	//remove extraneous portion of error phrases before returning string that will
	//be passed to BI
	var rval = '';
	
	if(sel) {
	    for(var i = 0; i < sel.length; i++) {
	        rval = rval + sel[i] + ',';
	    }
	}
	
	return rval;
}