var dealerSearchXslt = null;

var logging = true;
var xsltdebug = true;
var hbx_dealer_name = "";
var dlocParams = {
  zip: "",
  city: "",
  state: "",
  dealer: ""
};

// getUserData(); // this also gets called at window.onload

//////////////////////////////////////////////////////////
///////////////////// FIND MY DEALER /////////////////////
//////////////////////////////////////////////////////////
function loadOwnersCookies() {
  var rtn = false;
  var cookieDealerSearchData = Cookie.get('owners.dealersearch');
  if(cookieDealerSearchData) {
    //Decompress JSON values of userData
    dlocParams = eval('(' + cookieDealerSearchData + ')');
    rtn = true;  
  }
  var zipCookie = Cookie.get('zipcode');
  if (zipCookie) {
    if ( dlocParams.zip != "" && userData.zipcode && userData.zipcode != "undefined") {
      dlocParams.zip = userData.zipcode;
      saveDealerSearchCookie();
    }
    rtn = true;
  }
  
  return rtn;
  
}

function saveDealerSearchCookie() {
    Cookie.set("owners.dealersearch", Json.toString(dlocParams), {duration: "365", path: "/"});
}
//////////////////////////////////////////////////////////
///////////////////// FIND MY DEALER /////////////////////
//////////////////////////////////////////////////////////

function showModuleState(newState) {        
  if (newState == 'dealer') {
    $('o-dealer-loc-dealer').setStyle('display','block');
    $('o-dealer-loc-zip').setStyle('display','none');
    $('o-dealer-loc-default').setStyle('display','none');
  }
  else if (newState == 'zip') {
    $('o-my-vehicle-mast-title').setHTML("Dealers In My Area");
    $('o-dealer-loc-zip').setStyle('display','block');
    $('o-dealer-loc-dealer').setStyle('display','none');
    $('o-dealer-loc-default').setStyle('display','none');
    $('myziphere').setHTML(dlocParams.zip);
    $('finddealer_zipCode_Entry').value = (dlocParams.zip);
  }
  else {
    $('o-my-vehicle-mast-title').setHTML("Find A Dealer");
    $('o-dealer-loc-default').setStyle('display','block');  
    $('o-dealer-loc-zip').setStyle('display','none');
    $('o-dealer-loc-dealer').setStyle('display','none');
    $('o-find-dealer-error').setStyle('display', 'none');
    $('o-loading-indicator').setStyle('display', 'none');
  }
    $('o-dealer-loc-zip').value = (dlocParams.zip);
}

function validateFindDealer(formArg) {  
    var zipCode = formArg.zip.value;
    var cityName = formArg.city.value;
    var stateName = formArg.state.value;
    var dealerName = formArg.dealername.value;  
    
    //alert(zipCode+' | zipCode |'+zipCode.length);
	reZip = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);
	//if(zipCode&&(zipCode.length != 5 && zipCode.length != 10)){
	if(zipCode&&(!reZip.test(zipCode))){
		displayFindDealerError("Please specify a correct zipcode");
	}
	else if (!zipCode && !cityName && !stateName && !dealerName) {
        displayFindDealerError("Please specify a dealer name or zipcode or city and state");
    }
    else if (!zipCode && !dealerName && ((cityName && !stateName) || (!cityName && stateName))) {
        displayFindDealerError("Please specify city AND state names");
    }
    else if ( (zipCode && dealerName) || ((zipCode || dealerName) && (cityName || stateName)) ) {
        displayFindDealerError("Please specify dealer name OR zipcode OR city and state");
    }
    else {
        $('o-find-dealer-error').setStyle('display', 'none');
        $('o-loading-indicator').setStyle('display', 'block');

        dlocParams.zip = zipCode;
        dlocParams.city = cityName;
        dlocParams.state = stateName;
        dlocParams.dealer = dealerName;  

        submitFindDealer(formArg);
    }
    
    return false;   
}

function displayFindDealerError(errorMsg) {
    var errorContainer = $('o-find-dealer-error');
    
    showModuleState('default');
    errorContainer.innerHTML = errorMsg;
    errorContainer.setStyle('display', 'block');
}

function submitFindDealer(formArg) {
    // Store the users zipcode
    var zipCode = formArg.zip.value;
    if (zipCode != '') {
        Cookie.set('zipcode', zipCode, {duration: 365, path: "/"});
        userData.zipcode = zipCode;
        Cookie.set('userdata', Json.toString(userData), {duration: 365, path: "/"});
        getUserData();
    }
    
    saveDealerSearchCookie();

    var url="/hostd/getlocatedealersbasic.xml";
   
    var parameters = formData2QueryString(formArg); 
    var myFunction = "displayDealerList(http_request[i])";
  
    //alert("submitting dloc function\n\nurl: " + url + "\n\nparameters: " + parameters + "\n\nmyFunction: " + myFunction);
  
    linkTrack('preferred_dealer', 'find_a_dealer');
    makeRequest(url, parameters, myFunction);  
    return false;  
}

function clearDealerKnownZip(){
	PortletFunctions.FindADealer.portClear();
}
function submitFindDealerKnownZip() {
  var url="/hostd/getlocatedealersbasic.xml";
  var myFunction = "displayDealerList(http_request[i])";
  var parameters = getDlocQueryString();
  
  if ( parameters += "" ) {
    //parameters += "&encoding=xml&searchDealer=validate";
    	makeRequest(url, parameters, myFunction);
 	 } else {
    	showModuleState('default');
  	}
}
function submitFindDealerNextZip() {
  var url="/hostd/getlocatedealersbasic.xml";
  var myFunction = "displayDealerListNext(http_request[i])";
  var parameters = getDlocQueryString();
  
  if ( parameters += "" ) {
    //parameters += "&encoding=xml&searchDealer=validate";
    makeRequest(url, parameters, myFunction);
  } else {
    showModuleState('default');
  }
}

function getDlocQueryString() {
  var parameters = "";
  if ( dlocParams.zip || dlocParams.city || dlocParams.state || dlocParams.dealer ) {
    parameters += "&zip="+dlocParams.zip;
    parameters += "&city="+dlocParams.city;
    parameters += "&state="+dlocParams.state;
    parameters += "&dealername="+dlocParams.dealer;
  } else if ( userData.zipcode && userData.zipcode != "undefined") {
    parameters += "&zip="+userData.zipcode;
  } else {
    parameters = "";
  }
  return parameters;
}
//Added MB 12/17/07
var myDealerPage=1;
var StoreDealerLookup;
var StoreDealerTemplate;
var StoreDealerCount;
function newDealerLookup(zipbox){
	var myZipHolder = $(zipbox).value;
	if (myZipHolder != userData.zipcode){
		myDealerPage = 1;
		userData.zipcode = myZipHolder;
		dlocParams.zip = myZipHolder;
		submitFindDealerKnownZip();
    if (myZipHolder != '') {
        Cookie.set('zipcode', myZipHolder, {duration: 365, path: "/"});
        Cookie.set('userdata', Json.toString(userData), {duration: 365, path: "/"});
    }
    
    saveDealerSearchCookie();
	}else{
		myDealerPage = myDealerPage+5;
		if (StoreDealerCount < myDealerPage){
			myDealerPage=1;
		}
		userData.zipcode = myZipHolder;
		dlocParams.zip = myZipHolder;
		submitFindDealerNextZip();
	}
}
function populateNextInterface(){//Added MB 12/17/07
	document.getElementById("finddealer_zipCode_Entry").value =  userData.zipcode;
}
function displayDealerListNext(httpReq){//Added MB 12/17/07 
    displayDealerList(httpReq)
}
function displayDealerList(httpReq) { 
	
    if (dealerSearchXslt == null) {
        //alert("xsl was not loaded on load");
        loadXSL();
    }    
    var xml = xmlParse(httpReq.responseText);
    StoreDealerLookup = xml;
	StoreDealerTemplate = dealerSearchXslt;
	StoreDealerTemplate = StoreDealerTemplate.replace("$$__FirstDealer__$$","'" + myDealerPage + "'");
	StoreDealerTemplate = StoreDealerTemplate.replace("$$__LastDealer__$$","'"+(myDealerPage+4)+"'");
    var xslt = xmlParse(StoreDealerTemplate);
    var html = xsltProcess(StoreDealerLookup, xslt);
	StoreDealerCount = StoreDealerLookup.getElementsByTagName('dealer').length;
    if (html.indexOf('o-listing-row')!= -1) {
        // if there's an error display it, otherwise display the returned data.
        if (html.test('ERROR:')) {
            var startOfError = html.indexOf('ERROR:') + 6;
            var endOfError = html.indexOf('</div>', startOfError);
            var errorMessage = html.substring(startOfError, endOfError);
            showModuleState('default');
            displayFindDealerError(errorMessage);       
        } else {
			
            $("o-dealer-loc-zip").setHTML(html);
			populateNextInterface();
            showModuleState('zip');
        }   
    }else{
        //alert(html.indexOf('o-listing-row'));
            showModuleState('default');
    }
}

// this check to see if the dealer data has been set in the dealerInfo object before
// we display the dealer data
function checkDealerLoaded(dealerID) {
    if (dealerInfo.id == dealerID) {
        clearInterval(checkDealerLoadedInterval);
        populateMyDealer();
        populate_dealerInfo(); // dealer info in Top Nav
        showModuleState('dealer');
    }
}

function ownersSetPreferredDealer(dealerID) {
    dealerInfo.setPreferredDealer(dealerID);        
    setUserSegment();
    checkDealerLoadedInterval = setInterval("checkDealerLoaded("+dealerID+")", 1000);
    //hide dealer finder
    $('dealer_finder').setStyle('display','none');
}

function populateMyDealer() {   
    // Find A Dealer Module
    hbx_dealer_name = dealerInfo.name.replace(/ /g,"_");
    $('o-my-vehicle-mast-title').setHTML("My Preferred Dealer");
    if (!dealerInfo.isFiveStar()) {
        $('o-mydealer-fivestar').setStyle('display', 'none');   
        $('o-mydealer-fivestar').name = "&lpos=preferred_dealer&lid=five_star_layer_"+hbx_dealer_name;
    }
    $('o-mydealer-name').innerHTML = dealerInfo.name ;
    $('o-mydealer-address').innerHTML = dealerInfo.address;
    $('o-mydealer-region').innerHTML = dealerInfo.city + ", " + dealerInfo.state + "  " + dealerInfo.zipcode;
    $('o-mydealer-phone').innerHTML = dealerInfo.phone;
    if (dealerInfo.domainName != ''){
		$('o-mydealer-name').href = "javascript:wrap('ext_url','"+dealerInfo.domainName+"','','');"; 
	} else {
		$('o-mydealer-name').href = "javascript:wrap('dealer_site','dealerid="+dealerInfo.dealerID+"','','');";
	}
    $('o-mydealer-name').name = "&lpos=preferred_dealer&lid=dealer_name_"+hbx_dealer_name;
	$('o-mydealer-map').setStyle('display', 'none');
    //$('o-mydealer-map').href = dealerInfo.mapURL;
    //$('o-mydealer-map').name = "&lpos=preferred_dealer&lid=map_directions_"+hbx_dealer_name;
	$('o-mydealer-hours').setStyle('display', 'none');
    //$('o-mydealer-hours').href = "javascript:doAPopUp('"+dealerInfo.hoursURL+"','no');";
    //$('o-mydealer-hours').name = "&lpos=preferred_dealer&lid=hours_"+hbx_dealer_name;
	$('o-mydealer-serviceappt').setStyle('display', 'none');
    //$('o-mydealer-serviceappt').href = "javascript:doAPopUp('"+dealerInfo.sapURL+"','no');";
    //$('o-mydealer-serviceappt').name = "&lpos=preferred_dealer&lid=schedule_service_appt_"+hbx_dealer_name;
	
    if (dealerInfo.domainName != ''){
		$('o-mydealer-website').href = "javascript:wrap('ext_url','"+dealerInfo.domainName+"','','');"; 
	} else {
		$('o-mydealer-website').href = "javascript:wrap('dealer_site','dealerid="+dealerInfo.dealerID+"','','');";
	}
    $('o-mydealer-website').name = "&lpos=preferred_dealer&lid=visit_dealer_website_"+hbx_dealer_name;
    $('o-mydealer-email').href = (dealerInfo.isFiveStar()?"javascript:doAPopUp('"+dealerInfo.contactusURL+"','no');":dealerInfo.contactusURL);
    $('o-mydealer-email').name = "&lpos=preferred_dealer&lid=email_dealer_"+hbx_dealer_name;
    $('o-dealer-edit-preferred-dealer').name = "&lpos=preferred_dealer&lid=edit_preferred_dealer_"+hbx_dealer_name;
    
    // Parts and Accessories Module
    if ($('o-parts-acs-dealer-state')) {
        populatePartsAccessoriesDealer();   
    }
    
    // Servicing and Operation My Vehicle Module
    if ($('o-dealer-service-dealer-state')) {
        populateDealerServiceDealer();  
    }
    if ($('o-dealer-service-dealer-state')) {
       // populateMyNextVehicle();
		PortletFunctions.nextVehicle.portRefresh();
    }
}

function reloadMyDealerForm () {
    showModuleState('default');
}


/////////////////////////////////////////////////////////////////
///////////////////// PARTS AND ACCESSORIES /////////////////////
/////////////////////////////////////////////////////////////////

function populatePartsAccessoriesDealer() { 
    $('o-parts-acs-dealer-name').innerHTML = dealerInfo.name;
    $('o-parts-acs-dealer-link').setStyle('display', 'none');
    
    if (dealerInfo.isFiveStar()) {
        $('o-parts-acs-dealer-link').href = dealerInfo.sapURL;
		$('o-parts-acs-dealer-link').setStyle('display', 'none');
    } else {
        $('o-parts-acs-dealer-link').href = dealerInfo.URL;
	$('o-parts-acs-dealer-link').setStyle('display', 'none');
    }
    
    if (dealerInfo.isFiveStar()) {
        $('o-getapartquote-link-knowndealer').href = dealerInfo.partsURL;
	$('o-getapartquote-link-knowndealer').setStyle('display', 'none');
    } else {
        $('o-getapartquote-link-knowndealer').href = dealerInfo.URL;
	$('o-getapartquote-link-knowndealer').setStyle('display', 'none');
    }
    
    $('o-parts-acs-dealer-state').setStyle('display','block');
    $('o-parts-acs-default-state').setStyle('display','none');  
}


////////////////////////////////////////////////////////////////////////////
///////////////////// SERVICING & OPERATION MY VEHICLE /////////////////////
////////////////////////////////////////////////////////////////////////////

function populateDealerServiceDealer(){
    $('o-dealer-service-dealer-name').innerHTML = dealerInfo.name;
    $('o-dealer-service-dealer-name').setStyle('display', 'none');
    
    if (dealerInfo.isFiveStar()) {
        $('o-dealer-service-dealer-link').href = dealerInfo.sapURL;
	$('o-dealer-service-dealer-link').setStyle('display', 'none');
    } else {
        $('o-dealer-service-dealer-link').href = dealerInfo.URL;
	$('o-dealer-service-dealer-link').setStyle('display', 'none');
    }
    
    $('o-dealer-service-dealer-state').setStyle('display','none');
    $('o-dealer-service-default-state').setStyle('display','none');
}


//////////////////////////////////////////////////
///////////////////// GLOBAL /////////////////////
//////////////////////////////////////////////////

function loadXSL() {
  var xslurl = "/en/owners/xsl/dealersearch.xsl";
  var xslargs = "";
  
  if (dealerSearchXslt==null) {
    makeRequest(xslurl, xslargs, "dealerSearchXslt=http_request[i].responseText");
  }
}
function formData2QueryString(docForm) {
  var submitContent = '';
  var formElem;
  var lastElemName = '';
  
  for (i = 0; i < docForm.elements.length; i++) {
    
    formElem = docForm.elements[i];
    switch (formElem.type) {
      // Text fields, hidden form elements
      case 'text':
      case 'hidden':
      case 'password':
      case 'textarea':
      case 'select-one':
        submitContent += formElem.name + '=' + escape(formElem.value) + '&'
        break;
        
      // Radio buttons
      case 'radio':
        if (formElem.checked) {
          submitContent += formElem.name + '=' + escape(formElem.value) + '&'
        }
        break;
        
      // Checkboxes
      case 'checkbox':
        if (formElem.checked) {
          // Continuing multiple, same-name checkboxes
          if (formElem.name == lastElemName) {
            // Strip of end ampersand if there is one
            if (submitContent.lastIndexOf('&') == submitContent.length-1) {
              submitContent = submitContent.substr(0, submitContent.length - 1);
            }
            // Append value as comma-delimited string
            submitContent += ',' + escape(formElem.value);
          }
          else {
            submitContent += formElem.name + '=' + escape(formElem.value);
          }
          submitContent += '&';
          lastElemName = formElem.name;
        }
        break;
        
    }
  }
  // Remove trailing separator
  submitContent = submitContent.substr(0, submitContent.length - 1);
  return submitContent;
}

// these functions are used to build brand specific URL's that the XSL cannot produce
function redirectURL(url, blnNewWin) {
    if (blnNewWin) {
        doAPopUp(url, 'no');
    } else {
        location.href = url;
    }
}
function showMoreDealers() {
  var extras = getDlocQueryString();
  extras = extras.replace(/\&zip/g,"zipcode");
  wrap("cdl", extras, "", "");
}
function getMapAndDirections(dealerID) {
    var mapAndDirectionsURL = 'http://www.'+ brand_id +'.com/vehsuite/Directions.jsp?dealerid='+ dealerID +'&amp;isDealerSite=true&amp;dealerBrand='+ brand_id +'&amp;lang=en&amp;dealersitesPage=map&amp;availableBrands=D&amp;adid=u&amp;pid=u&amp;rid='; 
    redirectURL(mapAndDirectionsURL, false);
}
