﻿
    function getXMLDOM(xml){
        var xmlDoc;
             
	    
	    if (document.implementation && document.implementation.createDocument)
	    {
		    //xmlDoc = document.implementation.createDocument("", "", null);
	        xmlDoc = (new DOMParser).parseFromString(xml, "text/xml");
	        
	    }
	    else if (window.ActiveXObject)
	    {
		    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		    xmlDoc.async = "false"
	        xmlDoc.loadXML(xml);
 	    }
	    else
	    {
    	    alert('Browser compatibility error: XMLDOM not supported');
	        //todo: gracefully handle this
		    //alert('Your browser can\'t handle this script');
		    return;
	    }

	    return xmlDoc
    }

    function getResults(xml){
      
        var xmlDoc = getXMLDOM(xml);

// // Debug Code        
//        x=xmlDoc.childNodes;
//        
//        for (i=0;i<x.length;i++)
//        {
//            alert("Nodename: " + x[i].nodeName + " " + " nodetype: " + x[i].nodeType + " nodevalue: " + x[i].textContent);
//            //document.write(" (nodetype: " + x[i].nodeType + ")<br />");
//        } 
//        
        var resultsRoot = xmlDoc.getElementsByTagName('locatorResults')[0];
        
        var results = new SearchResults(resultsRoot.getAttribute("postalCode"), resultsRoot.getAttribute("lat"), resultsRoot.getAttribute("lon"));
        
        var dealers = xmlDoc.getElementsByTagName('dealer');
            
        for(i = 0; i < dealers.length; i++){
            var dealer = new Dealer();

            dealer.lat = dealers[i].getAttribute("lat");
            dealer.lon = dealers[i].getAttribute("lon");
            dealer.name = dealers[i].getAttribute("name") + "";
            dealer.storename = dealers[i].getAttribute("storename") + "";
            dealer.storelink = dealers[i].getAttribute("storelink") + "";
            dealer.address1 = dealers[i].getAttribute("address1") + "";
            dealer.address2 = dealers[i].getAttribute("address2") + "";
            dealer.city = dealers[i].getAttribute("city") + "";
            dealer.state = dealers[i].getAttribute("state") + "";
            dealer.zip = dealers[i].getAttribute("zip") + "";
            dealer.PCwebsite = dealers[i].getAttribute("PCwebsite") + "";
            dealer.phone = dealers[i].getAttribute("phone") + "";
            dealer.distance = dealers[i].getAttribute("distance");
            dealer.active = dealers[i].getAttribute("active");
            dealer.cert = dealers[i].getAttribute("cert");
            dealer.elite = dealers[i].getAttribute("elite");
            dealer.powerchord = dealers[i].getAttribute("powerchord");
            dealer.showpricedisclaimer = dealers[i].getAttribute("showpricedisclaimer");
            dealer.oLatitude = dealers[i].getAttribute("oLatitude");
            dealer.oLongitude = dealers[i].getAttribute("oLongitude");
            dealer.express = dealers[i].getAttribute("express");
            dealer.pushpinoverride = parseInt(dealers[i].getAttribute("pushpinoverride"));
            results.dealers.push(dealer);
        }

        return results;
    }
    
    function buildTable(target, results){
        target.innerHTML = '';
        
        var newEl = document.createElement('TABLE');
        newEl.setAttribute('cellPadding',5);
        var tmp = document.createElement('TBODY');
        newEl.appendChild(tmp);


        for(i = 0; i < results.dealers.length; i++)
        {
	        var row = document.createElement('TR');

            for(key in results.dealers[i])
            {
                var container = document.createElement('TD');
                var theData = document.createTextNode(results.dealers[i][key]);
                container.appendChild(theData);
                row.appendChild(container);
            }

	        tmp.appendChild(row);
        }
        
        target.appendChild(newEl);    
        return newEl;
    }
    

        //PJP - 5/7/08
        //Needed to create a new buildDealerResultDiv function for correct formatting of results
        function buildDealerResultDiv(target, results){
        var containerDiv = document.createElement('div');
          
        for(i = 0; i < results.dealers.length; i++)
        {
            if (i >= (pjpResultsToDisplay + pjpStartIndex)) { break; }
            
            if (i >= pjpStartIndex) 
            {
            
            
            //The store name, address, website, and distance
            var dealer = results.dealers[i];
            var SName = document.createTextNode(dealer.storename);
            var SContact = document.createTextNode(dealer.name);
            var SAddress1 = document.createTextNode(dealer.address1);
            var SAddress2 = document.createTextNode(dealer.address2);
            var SCity = document.createTextNode(dealer.city + ', ');
            var SState = document.createTextNode(dealer.state + ' ');
            var SZip = document.createTextNode(dealer.zip);
            var SPhone = document.createTextNode(dealer.phone);
            var SWebsite = document.createTextNode(dealer.PCwebsite);
            var SDist = document.createTextNode('Approximately ' + Math.round(dealer.distance*10) / 10 + ' Miles Away');
            var SSendToMobile = document.createTextNode('Send to Mobile');
            var SGetDirections = document.createTextNode('Get Directions');
            
            var ieHack = document.createElement('a'); //PJP - 5/8/08 - onclick not working in div on IE
            //ieHack.onclick = function() {getCenter(' + i + '); unselectAll(); showSelected(this); showSelected(this);};
            //ieHack.setAttribute('onclick', 'javascript:getCenter(' + i + '); unselectAll(); this.setAttribute(\'class\', \'dealerResultModuleOver\');');
            ieHack.setAttribute('href', 'javascript:getCenter(' + i + '); unselectAll(); selectById(\'dealerResultModule_' + i + '\');');
            ieHack.setAttribute('class', 'ieHackLink');
            ieHack.setAttribute('className', 'ieHackLink');
            
            //The elements used to create the results     
	        var dlrModule = document.createElement('div');
	        var dlrText = document.createElement('div');
	        //PJP - 5/7/08
	        //Instead of one div to contain elite & gold icons we
	        //need to create separate divs for proper formatting
	        var dlrIcons = document.createElement('div');
	        var dlrElite = document.createElement('div');
	        var dlrGold = document.createElement('div');
	        var cr = document.createElement('br');
            var formattedSName = document.createElement('span');
            var formattedSWebsite = document.createElement('a');
            var formattedSDist = document.createElement('div');
            var formattedSSendToMobile = document.createElement('a');
            var formattedSGetDirections = document.createElement('a');
            
            var imgelite = document.createElement('IMG');
            var imgcert = document.createElement('IMG');
            var imgviewsite = document.createElement('IMG');
            var formattedSImgViewSite = document.createElement('a');
            
            
            //Set the css classes for the elements
            //'class' works in Firefox but not in IE. 'className' works in IE but not in Firefox
            //So we need to use both..lame
            containerDiv.setAttribute('class', 'dealerResultsContainer');
            containerDiv.setAttribute('className', 'dealerResultsContainer');
            dlrModule.setAttribute('class', 'dealerResultModule');
	        dlrModule.setAttribute('className', 'dealerResultModule');
	        dlrModule.setAttribute('id', 'dealerResultModule_' + i);
	        dlrModule.onclick = function() {getCenter(' + i + '); unselectAll(); showSelected(this);};
	        //dlrModule.onclick = function() {getCenter(' + i + ');}
	        dlrModule.setAttribute('onclick', 'javascript:getCenter(' + i + '); unselectAll(); showSelected(this);');
	        //dlrModule.setAttribute('onclick', 'javascript:getCenter(' + i + ');')
	        //dlrModule.setAttribute('onmouseover', 'javascript:showSelected(this);');	        
	        //dlrModule.onmouseover = function() { showSelected(this); };
	        //dlrModule.setAttribute('onmouseout', 'javascript:showSelected(this);');
	        //dlrModule.onmouseout = function() { showSelected(this); }; 
	        dlrText.setAttribute('class', 'dealerResultText');
	        dlrText.setAttribute('className', 'dealerResultText');
	        dlrIcons.setAttribute('class', 'dealerResultIcons');
	        dlrIcons.setAttribute('className', 'dealerResultIcons');
	        
	        //PJP - 5/7/08
	        dlrElite.setAttribute('class', 'dealerResultIcons_Elite');
	        dlrElite.setAttribute('className', 'dealerResultIcons_Elite');
	        dlrGold.setAttribute('class', 'dealerResultIcons_Gold');
	        dlrGold.setAttribute('className', 'dealerResultIcons_Gold');
	        
            formattedSName.setAttribute('class', 'dealerResultName');
            formattedSName.setAttribute('className', 'dealerResultName');
            formattedSWebsite.setAttribute('href', dealer.storelink);
            //formattedSWebsite.setAttribute('target', '_blank');
            formattedSWebsite.setAttribute('class', 'dealerResultBlueLink');
            formattedSWebsite.setAttribute('className', 'dealerResultBlueLink');
            formattedSDist.setAttribute('class', 'dealerResultDistance');
            formattedSDist.setAttribute('className', 'dealerResultDistance');
            
            //PJP - 5/7/08 
            formattedSSendToMobile.setAttribute('href', '#');
            formattedSSendToMobile.setAttribute('class', 'dealerResultOrangeLink');
            formattedSSendToMobile.setAttribute('className', 'dealerResultOrangeLink');
           // formattedSGetDirections.setAttribute('href', 'javascript:myopen(\'http:\/\/www.mapquest.com\/maps\/map.adp?address='+ dealer.address1 + '&city=' + dealer.city + '&state=' + dealer.state + '&zipcode=' + dealer.zip + '&country=US&cid=lfmaplink\',\'text\',\'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=700,height=700\')');
            formattedSGetDirections.setAttribute('href', 'javascript:myopen(\'' + dealer.googledirections + '\')');
          
            formattedSGetDirections.setAttribute('class', 'dealerResultOrangeLink');
            formattedSGetDirections.setAttribute('className', 'dealerResultOrangeLink');
            
            
            imgelite.setAttribute('src','Images/Black.gif');
            imgcert.setAttribute('src','Images/Black.gif');
            imgviewsite.setAttribute('src','Images/ViewSiteButtonArrow.gif');
  
                        
            formattedSImgViewSite.setAttribute('href', dealer.storelink);
            //formattedSImgViewSite.setAttribute('target', '_blank');
            imgviewsite.setAttribute('class', 'dealerResultImgViewSite');
            imgviewsite.setAttribute('className', 'dealerResultImgViewSite');
            
           
            
            
            //now we have all the elements...lets start building
            //The link for the store name
            if (SAddress2.length == 0)
            {
                formattedSName.appendChild(document.createElement('br'));
            }
            
            formattedSName.appendChild(SName);
            dlrText.appendChild(formattedSName);
            dlrText.appendChild(document.createElement('br'));
            dlrText.appendChild(SAddress1);
            dlrText.appendChild(document.createElement('br'));
            
            if (SAddress2.length > 0) 
            {
                dlrText.appendChild(SAddress2);
                dlrText.appendChild(document.createElement('br'));             
            }
            dlrText.appendChild(SCity);
            dlrText.appendChild(SState);
            dlrText.appendChild(SZip);
            dlrText.appendChild(document.createElement('br'));             
            dlrText.appendChild(SPhone);
            dlrText.appendChild(document.createElement('br'));
            
            /*
            if (SWebsite.length > 0)
            {   
                formattedSWebsite.appendChild(SWebsite);
                dlrText.appendChild(formattedSWebsite);
                dlrText.appendChild(document.createElement('br'));
            }
            */
            
            formattedSDist.appendChild(SDist);
            dlrText.appendChild(formattedSDist);
            
            
            formattedSSendToMobile.appendChild(SSendToMobile);
            formattedSGetDirections.appendChild(SGetDirections);
            
            //dlrText.appendChild(formattedSSendToMobile);            
            //dlrText.appendChild(document.createTextNode('\u00a0')); //Equivalent to &nbsp;
            //dlrText.appendChild(document.createTextNode('\u00a0'));
            //dlrText.appendChild(document.createTextNode('|'));
            //dlrText.appendChild(document.createTextNode('\u00a0'));
            //dlrText.appendChild(document.createTextNode('\u00a0'));
            dlrText.appendChild(formattedSGetDirections);
            
            if (dealer.powerchord == 1) 
            {   
                formattedSImgViewSite.appendChild(imgviewsite);
                dlrText.appendChild(document.createElement('br'));
                dlrText.appendChild(formattedSImgViewSite);
            }
            
            if (dealer.showpricedisclaimer == 1 )
            {
                var formattedSContactUsForPrice = document.createElement('span'); 
                formattedSContactUsForPrice.setAttribute('class', 'dealerResultPriceDisclaimer');
                formattedSContactUsForPrice.setAttribute('className', 'dealerResultPriceDisclaimer');
                
                formattedSContactUsForPrice.appendChild(document.createTextNode('*Please contact us for details about this product.'));
                dlrText.appendChild(document.createElement('br'));
                dlrText.appendChild(formattedSContactUsForPrice);   
            
            }
            
            
            //add icons
            
            //PJP 5/7/08
            if (dealer.cert == 1) 
            {          
                dlrGold.appendChild(imgcert);
            }
            
            if (dealer.elite == 1)
            {
                dlrElite.appendChild(imgelite);
            }
                            
            
            dlrElite.appendChild(document.createTextNode(' '));
            dlrGold.appendChild(document.createTextNode(' '));
           
            dlrModule.appendChild(dlrText);
            dlrModule.appendChild(dlrElite);
            dlrModule.appendChild(dlrGold);
            
            var browser=navigator.appName;
            if (browser=="Microsoft Internet Explorer") {
                ieHack.appendChild(dlrModule);
                containerDiv.appendChild(ieHack);
            }
            else {
                containerDiv.appendChild(dlrModule);
            }            
           
	       }             
        }
        
        if (pjpStartIndex > 0) {
            var prevDiv = document.createElement('div');
            var imgPrev = document.createElement('IMG');
            imgPrev.setAttribute('src','Images/RightArrow3.gif');
            imgPrev.setAttribute('align', 'absmiddle');
            imgPrev.setAttribute('width','18');
            imgPrev.setAttribute('height','18');
            prevDiv.appendChild(imgPrev);
            prevDiv.appendChild(document.createTextNode('\u00a0')); //Equivalent to &nbsp;
            prevDiv.appendChild(document.createTextNode('\u00a0')); //Equivalent to &nbsp;
            prevDiv.appendChild(document.createTextNode('back'));
            prevDiv.setAttribute('class', 'dealerResultPrevDiv');
            prevDiv.setAttribute('className', 'dealerResultPrevDiv');
            prevDiv.onclick = function() {pjpStartIndex = 0; doSearch();} 
            containerDiv.appendChild(prevDiv)           
        }
        
        if ((pjpStartIndex + pjpResultsToDisplay) < results.dealers.length) {
            var nextDiv = document.createElement('div');
            nextDiv.appendChild(document.createTextNode('show next ' + pjpResultsToDisplay));
            nextDiv.appendChild(document.createTextNode('\u00a0')); //Equivalent to &nbsp;
            nextDiv.appendChild(document.createTextNode('\u00a0')); //Equivalent to &nbsp;
            var imgNext = document.createElement('IMG');
            imgNext.setAttribute('src','Images/LeftArrow3.gif');
            imgNext.setAttribute('align', 'absmiddle');
            imgNext.setAttribute('width','18');
            imgNext.setAttribute('height','18');
            nextDiv.appendChild(imgNext);
            nextDiv.setAttribute('class', 'dealerResultNextDiv');
            nextDiv.setAttribute('className', 'dealerResultNextDiv');
            nextDiv.onclick = function() {pjpStartIndex += pjpResultsToDisplay; doSearch();}
            
            containerDiv.appendChild(nextDiv);
        }
        
        
        
        target.appendChild(containerDiv);
        return containerDiv;
        
        
    }
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      function buildDealerResultDiv_OLD(target, results){
          
        var containerDiv = document.createElement('div');
          
        for(i = 0; i < results.dealers.length; i++)
        {
            //The store name, address, website, and distance
            var dealer = results.dealers[i];
            var SName = document.createTextNode(dealer.storename);
            var SContact = document.createTextNode(dealer.name);
            var SAddress1 = document.createTextNode(dealer.address1);
            var SAddress2 = document.createTextNode(dealer.address2);
            var SCity = document.createTextNode(dealer.city + ', ');
            var SState = document.createTextNode(dealer.state + ' ');
            var SZip = document.createTextNode(dealer.zip);
            var SPhone = document.createTextNode(dealer.phone);
            var SWebsite = document.createTextNode(dealer.PCwebsite);
            var SDist = document.createTextNode(Math.round(dealer.distance*10) /10 + ' miles');
                	   
            //The elements used to create the results     
	        var dlrModule = document.createElement('div');
	        var dlrText = document.createElement('div');
	        var dlrIcons = document.createElement('div');
	        var cr = document.createElement('br');
            var formattedSName = document.createElement('span');
            var formattedSWebsite = document.createElement('a');
            var formattedSDist = document.createElement('div');
            var imgelite = document.createElement('IMG');
            var imgcert = document.createElement('IMG');
            var imgviewsite = document.createElement('IMG');
            var formattedSImgViewSite = document.createElement('a');
            
            //Set the css classes for the elements
            //'class' works in Firefox but not in IE. 'className' works in IE but not in Firefox
            //So we need to use both..lame
            containerDiv.setAttribute('class', 'dealerResultsContainer');
            containerDiv.setAttribute('className', 'dealerResultsContainer');
            dlrModule.setAttribute('class', 'dealerResultModule');
	        dlrModule.setAttribute('className', 'dealerResultModule');
	        dlrModule.setAttribute('onmouseover', 'javascript:showSelected(this);');
	        dlrModule.onmouseover = function() { showSelected(this); }
	        dlrModule.setAttribute('onmouseout', 'javascript:showSelected(this);');
	        dlrModule.onmouseout = function() { showSelected(this); }
	        dlrModule.setAttribute('onclick', 'javascript:getCenter(' + i + ');');
	       // dlrModule.onclick = function() { 'javascript:getCenter(' + i + ');' };
	        dlrText.setAttribute('class', 'dealerResultText');
	        dlrText.setAttribute('className', 'dealerResultText');
	        dlrIcons.setAttribute('class', 'dealerResultIcons');
	        dlrIcons.setAttribute('className', 'dealerResultIcons');
            formattedSName.setAttribute('class', 'dealerResultName');
            formattedSName.setAttribute('className', 'dealerResultName');
            formattedSWebsite.setAttribute('href', dealer.storelink);
            //formattedSWebsite.setAttribute('target', '_blank');
            formattedSWebsite.setAttribute('class', 'dealerResultBlueLink');
            formattedSWebsite.setAttribute('className', 'dealerResultBlueLink');
            formattedSDist.setAttribute('class', 'dealerResultDistance');
            formattedSDist.setAttribute('className', 'dealerResultDistance');
            imgelite.setAttribute('src','Images/elite2.gif');
            imgcert.setAttribute('src','Images/goldwrench2.gif');
            imgviewsite.setAttribute('src','Images/viewsite2.gif');
                        
            formattedSImgViewSite.setAttribute('href', dealer.storelink);
            //formattedSImgViewSite.setAttribute('target', '_blank');
            imgviewsite.setAttribute('class', 'dealerResultImgViewSite');
            imgviewsite.setAttribute('className', 'dealerResultImgViewSite');
            
            
            //now we have all the elements...lets start building
            //The link for the store name
            formattedSName.appendChild(SName);
            dlrText.appendChild(formattedSName);
            dlrText.appendChild(document.createElement('br'));
            dlrText.appendChild(SAddress1);
            dlrText.appendChild(document.createElement('br'));
            if (SAddress2.length > 0) 
            {
                dlrText.appendChild(SAddress2);
                dlrText.appendChild(document.createElement('br'));             
            }
            dlrText.appendChild(SCity);
            dlrText.appendChild(SState);
            dlrText.appendChild(SZip);
            dlrText.appendChild(document.createElement('br'));             
            dlrText.appendChild(SPhone);
            dlrText.appendChild(document.createElement('br'));
            if (SWebsite.length > 0)
            {   
                formattedSWebsite.appendChild(SWebsite);
                dlrText.appendChild(formattedSWebsite);
                dlrText.appendChild(document.createElement('br'));
            }
            
            formattedSDist.appendChild(SDist);
            dlrText.appendChild(formattedSDist);
            
            
            
            
            
            //add icons
            if (dealer.powerchord == 1) 
            {   
                formattedSImgViewSite.appendChild(imgviewsite);
                dlrIcons.appendChild(formattedSImgViewSite);
            }
            
            if (dealer.cert == 1) 
            {          
                dlrIcons.appendChild(imgcert);
            }
            
            if (dealer.elite == 1)
            {
                dlrIcons.appendChild(imgelite);
            }
            
                 
            
            dlrModule.appendChild(dlrText);
            dlrModule.appendChild(dlrIcons);
            containerDiv.appendChild(dlrModule);
            
           
	                    
        }
        
        
        
        target.appendChild(containerDiv);
        return containerDiv;
        
        
    }
