// ############################################################################
// upfitterlocator.js -- data object and map functions for upfitter locater
// ============================================================================
// CREATED BY:	Zander Waldman -- zwaldman@organic.com
//			Organic Det
//
// CREATED ON: 08/13/06
// ############################################################################
var dataArray = new Array();
var currentState;
var currentVehicle;
var currentUpfit;
var currentUpfitter;
var mySlider;
var resultsArray = new Array();
var markerArray = new Array();
var intervalID;
var xmlLoadID = setInterval(checkXMLLoad, 1000);
var xmlLoaded = false;
var map = null;
var geocoder = null;
var marker = null;
var directions = null;
var mapType = "upfitters";
	
var icon = new GIcon();
icon.image = "/shared/images/commercial/maps/icon.gif";
icon.shadow = "/shared/images/commercial/maps/shadow.png";
icon.iconSize = new GSize(15, 15);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(6, 20);
icon.infoWindowAnchor = new GPoint(5, 1);

	// ======================================================
	// initial load action
	// ======================================================
	function loadUpfitters() {
	$('vehicle-selector-box').setOpacity(0.5);
	$('upfit-selector-box').setOpacity(0.5);
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GLargeMapControl());
        		map.addControl(new GMapTypeControl());
			directions = new GDirections(map, document.getElementById("directions"));
			geocoder = new GClientGeocoder();
			map.setCenter(new GLatLng(37.0625, -95.677068), 4);
			GEvent.addListener(directions, "load", onGDirectionsLoad); 
			GEvent.addListener(directions, "error", handleErrors);
			var myArray = $$('img');
			myArray.each(function(item, index){
							  
   				if( (item.getProperty('src')== "http://www.google.com/intl/en_us/mapfiles/lmc.png") || (item.getProperty('src')== "http://www.google.com/intl/en_ALL/mapfiles/lmc.png") ) {
					item.setProperty('src', '/shared/images/commercial/maps/controls_top.png');
				}
				if( (item.getProperty('src')== "http://www.google.com/intl/en_us/mapfiles/lmc-bottom.png") || (item.getProperty('src')== "http://www.google.com/intl/en_ALL/mapfiles/lmc-bottom.png") ) {
					item.setProperty('src', '/shared/images/commercial/maps/controls_bottom.png');
				}
				if( (item.getProperty('src')== "http://www.google.com/intl/en_us/mapfiles/slider.png") || (item.getProperty('src')== "http://www.google.com/intl/en_ALL/mapfiles/slider.png") ) {
					item.setProperty('src', '/shared/images/commercial/maps/slider.png');
				}
			});
		}
		parseXML();
	}

	function parseXML() {
	// ======================================================
	// GDownloadUrl - AJAX xml call initial page parse
	// ======================================================
	GDownloadUrl("/en/business/upfitter_locator/data/upfitters.xml", function(data, responseCode) {
									
		
		var xml = GXml.parse(data);
		var upfitters = xml.getElementsByTagName("upfitter");
		
		// loop on each upfitter
		for (var i = 0; i < upfitters.length; i++) {
		
			// one upfitter node
			var upfitterNodes = upfitters[i].childNodes;
			var upfitterObject = new Object();
			for(var j = 0; j < upfitterNodes.length; j++) {
			
				// if not a #textNode
				if(upfitterNodes[j].nodeType !=3) {
					
					// switch on nodes to get values out
					switch(upfitterNodes[j].nodeName) {
						
						// name
						case "name":
							var upfitterName = upfitterNodes[j].firstChild.nodeValue;
							break;
							
						// lattitude
						case "lat":
							var upfitterLat = upfitterNodes[j].firstChild.nodeValue;
							break;
							
						// longitude
						case "long":
							var upfitterLong = upfitterNodes[j].firstChild.nodeValue;
							break;
							
						// street
						case "street":
							var upfitterStreet = upfitterNodes[j].firstChild.nodeValue;
							break;
							
						// city
						case "city":
							var upfitterCity = upfitterNodes[j].firstChild.nodeValue;
							break;
							
						// state
						case "state":
							var upfitterState = upfitterNodes[j].firstChild.nodeValue;
							var upfitterStateID = upfitterNodes[j].getAttribute("id");
							break;
							
						// zip
						case "zip":
							var upfitterZip = upfitterNodes[j].firstChild.nodeValue;
							break;
							
						// phone
						case "phone":
							if(upfitterNodes[j].firstChild) {
								var upfitterPhone = upfitterNodes[j].firstChild.nodeValue;
							} else {
								var upfitterPhone = "";
							}
							break;
							
						// tollfree
						case "tollfree":
							if(upfitterNodes[j].firstChild) {
								var upfitterTollfree = upfitterNodes[j].firstChild.nodeValue;
							} else {
								var upfitterTollfree = "";
							}
							break;
							
						// website
						case "website":
							if(upfitterNodes[j].firstChild) {
								var upfitterWebsite = upfitterNodes[j].firstChild.nodeValue;
							} else {
								var upfitterWebsite = "";
							}
							break;
						// website
						case "exit_id":
							if(upfitterNodes[j].firstChild) {
								var upfitterExitID = upfitterNodes[j].firstChild.nodeValue;
							} else {
								var upfitterExitID = "";
							}
							break;
								
						// vehicles
						case "vehicles":
							// get the list of upfits
							var vehiclesNodes = upfitterNodes[j].childNodes;
							var vehiclesArray = new Array();
							for(var k = 0; k < vehiclesNodes.length; k++) {
								
								var vehicleObject = new Object();
								
								// if not a #textNode
								if(vehiclesNodes[k].nodeType !=3) {
									
									// get list of avilable upfits
									var upfitsPerVehicle = vehiclesNodes[k].firstChild.nextSibling.childNodes;
									
									var upfitsArray = new Array("vehiclesNodes[k].firstChild  :  "+vehiclesNodes[k].firstChild);
									
									// loop through to pull data out
									for(l=0; l<upfitsPerVehicle.length; l++) {
										
										var upfitObject = new Object();
										
										// if not a #textNode
										if(upfitsPerVehicle[l].nodeType !=3) {
											
											// if upfit is filled out and not empty
											if(upfitsPerVehicle[l].firstChild) {
												
												// fill upfit object
												upfitObject = {	upfitID:upfitsPerVehicle[l].getAttribute("id"),
																upfit:upfitsPerVehicle[l].firstChild.nodeValue
												};
												
												upfitsArray.push(upfitObject);
											}
										}
									}
									
									// fill vehicle object
									vehicleObject = {	vehicleID:vehiclesNodes[k].getAttribute("id"),
													vehicle:vehiclesNodes[k].firstChild.nodeValue,
													upfits:upfitsArray
										
									};
									
									// push object into array
									vehiclesArray.push(vehicleObject);
								}
								
							}
							break;
							
						default:
							break
						
					}
				}
			}
						
			// fill upfitter object
			upfitterObject = { 	name:upfitterName,
							lat:upfitterLat,
							longitude:upfitterLong,
							street:upfitterStreet,
							address:upfitterStreet + " " + upfitterCity + " " + upfitterStateID + " " + upfitterZip,
							city:upfitterCity,
							state:upfitterState,
							stateID:upfitterStateID,
							zip:upfitterZip,
							phone:upfitterPhone,
							tollfree:upfitterTollfree,
							website:upfitterWebsite,
							exit_id:upfitterExitID,
							vehicles:vehiclesArray
							
			};
			
			// push into the array
			dataArray.push(upfitterObject);
			
		}
			
		xmlLoaded = true;
	
	});
	
	}
	
	// ======================================================
	// setXMLLoad() - 
	// ======================================================
	function checkXMLLoad() {
		
		if(xmlLoaded) { setForm(); clearInterval(xmlLoadID);}
		
	}
	
	
	// ======================================================
	// setForm() - set initial form
	// ======================================================
	function setForm() {
		
		// grey back and diable other forms
		$('vehicle-selector-box').setOpacity(0.5);
		$('upfit-selector-box').setOpacity(0.5);
		//$('vehicle-selector-box').setProperties({onmouseover: '',onmouseout: ''});
		//$('upfit-selector-box').setProperties({onmouseover: '',onmouseout: ''});
		var stateListArray = new Array();
		
		// loop and grab states
		for(var i = 0; i < dataArray.length; i++) {
			
			// boolean to detect for duplicate values
			var found = false;
			
			// loop and check and see if state is already in there
			for(var j = 0; j < stateListArray.length; j++) {
				
				// if we find it set found to true and decrease the count to avoid a blank option on next run through
				if(stateListArray[j].stateID == dataArray[i].stateID) {
					found = true;
				} 
			}
			
			// if not found a duplicate add it to the form
			if(!found) {
				
				stateListArray.push(dataArray[i]);

			}
		
		}
		
		// set default all
		var state = new Element('li', {'id':"all"}).injectInside($('state-list'));
		var a = new Element('a').injectInside(state);
		a.setProperty('href',  'javascript:selectState("all")');
		a.setText("All states");
		
		stateListArray.sort(sortByState);
		stateListArray.each(function(item, index){
   			// create result li and anchor
			var state = new Element('li', {'id':item.stateID}).injectInside($('state-list'));
			var a = new Element('a').injectInside(state);
			a.setProperty('href',  'javascript:selectState("' + item.stateID + '")');
			a.setText(item.state);
		});
		
		selectState('all');
		//fAddInfoBtn();
		
	}
	
	// ======================================================
	// selectState() - set vehicles based on  states
	// ======================================================
	function selectState(state) {
		
		// get element
		state = $(state);
		
		// set select text
		$('state-selector-box').getFirst().setText(state.getText());
		
		// set it based on id
		state = state.getAttribute('id');
		
		linkTrack("left_nav", state);
		
		// collpase menus
		collapseMenus();
		
		// reset upfitter and array
		currentUpfitter = null;
		resultsArray = new Array();
		
		// set current state
		currentState = state;
		
		// empty forms
		emptySelectList('vehicle-list');
		emptySelectList('upfit-list');
		clearPoints();
		swapView();
		
		var vehicleListArray = new Array();
		
		// turn next one on
		$('vehicle-selector-box').setOpacity(1);
		
		// populate vehicle form
		for(var i = 0; i < dataArray.length; i++) {
			
			// if state matches
			if(dataArray[i].stateID == state) {
				
				// loop on vehciles
				for(var j=0; j < dataArray[i].vehicles.length; j++) {
					
					// set found for false
					var found = false;
					
					// loop and look for dups
					for(var k = 0; k < vehicleListArray.length; k++) {
						
						// if we find one set found to true
						if(vehicleListArray[k].vehicleID == dataArray[i].vehicles[j].vehicleID) found = true;
						
					}
					
					// if not found
					if(!found) {
						
						vehicleListArray.push(dataArray[i].vehicles[j]);
					}
					
				}
				
				// push values of the state into results Array
				resultsArray.push(dataArray[i]);
			}
			
		}
		
		vehicleListArray.sort(sortByVehicle);
		vehicleListArray.each(function(item, index){
   			// create the item
			var vehicle = new Element('li', {'id':item.vehicleID}).injectInside($('vehicle-list'));
			var a = new Element('a').injectInside(vehicle);
			a.setProperty('href',  'javascript:selectVehicle("' + item.vehicleID + '")');
			a.setHTML(item.vehicle);
		});
		
		if(state == "all") {
			resultsArray = dataArray;	
		}
		
		// show results
		showResults();
		
	}
	
	// ======================================================
	// selectVehicle() - set upfits based on vehicles
	// ======================================================
	function selectVehicle(vehicle) {
		
		// get element
		vehicle = $(vehicle);
		
		// set select text
		$('vehicle-selector-box').getFirst().setText(vehicle.getText());
		
		// set it based on id
		vehicle = vehicle.getAttribute('id');
		
		linkTrack("left_nav", vehicle);
		
		// collpase menus
		collapseMenus();
		
		// reset upfitter
		currentUpfitter = null;
		resultsArray = new Array();
		
		// set vehicle
		currentVehicle = vehicle;
		
		// empty forms
		emptySelectList('upfit-list');
		clearPoints();
		swapView();
		
		var upfitListArray = new Array();
		
		// turn next one on
		$('upfit-selector-box').setOpacity(1);
		
		// populate vehicle form
		for(var i = 0; i < dataArray.length; i++) {
			
			// if state matches
			if(dataArray[i].stateID == currentState) {
				
				// loop and look for the vehicle
				for(var j=0; j < dataArray[i].vehicles.length; j++) {
					
					// if we find a matching id
					if(dataArray[i].vehicles[j].vehicleID == vehicle) {
						
						// plot the point
						resultsArray.push(dataArray[i]);
						
						// loop on upfits
						for(var k=0; k < dataArray[i].vehicles[j].upfits.length; k++) {
							
							// set found for false
							var found = false;
						
							// loop list and look for dups
							for(var l = 0; l < upfitListArray.length; l++) {
								
								if(upfitListArray[l].upfitID == dataArray[i].vehicles[j].upfits[k].upfitID) found = true;
								
							}
							
							// if not found in the list
							if(!found) {
								
								upfitListArray.push(dataArray[i].vehicles[j].upfits[k]);
		
							}
							
						}
						
					}
					
				}
				
			}
			
		}
		
		upfitListArray.sort(sortByUpfit);
		upfitListArray.each(function(item, index){
   			// create the item
			var upfit = new Element('li', {'id':item.upfitID}).injectInside($('upfit-list'));
			var a = new Element('a').injectInside(upfit);
			a.setProperty('href',  'javascript:selectUpfit("' + item.upfitID + '")');
			a.setText(item.upfit);
		});
		
		showResults();
		
	}
	
	// ======================================================
	// selectUpfit() - set upfit
	// ======================================================
	function selectUpfit(upfit) {
		
		// get element
		upfit = $(upfit);
		
		// set select text
		$('upfit-selector-box').getFirst().setText(upfit.getText());
		
		// set it based on id
		upfit = upfit.getAttribute('id');
		
		linkTrack("left_nav", upfit);
		
		// collpase menus
		collapseMenus();
		
		// set upfit
		currentUpfit = upfit;
		resultsArray = new Array();
		clearPoints();
		swapView();
		
		// loop
		for(var i = 0; i < dataArray.length; i++) {
			
			// if state matches
			if(dataArray[i].stateID == currentState) {
				
				// loop and look for the vehicle
				for(var j=0; j < dataArray[i].vehicles.length; j++) {
					
					// if we find a matching id
					if(dataArray[i].vehicles[j].vehicleID == currentVehicle) {
						
						// populate upfit list
						for(var k=0; k < dataArray[i].vehicles[j].upfits.length; k++) {
							
							// if we find match
							if(dataArray[i].vehicles[j].upfits[k].upfitID == upfit) {
								
								resultsArray.push(dataArray[i]);
							
								// plot the points
								//currentUpfitter = dataArray[i];
							
							}
							
						}
						
					}
					
				}
				
			}
			
		}
		showResults();
	}
	
	
	
	// ======================================================
	// showResults() - populate results list
	// ======================================================
	function showResults() {
		
		// create results total text
		var html = "Displaying <span class=\"orange\">" + resultsArray.length + "</span> upfitters within <span class=\"orange\">" + $('state-selector-box').getText() + "</span>";
		$('results-total-box').setHTML(html);
		$('results-total-box').setStyle('display', 'block'); 
		
		// empty list
		$('results-list-box').empty();
		
		// create ul element
		var resultsList = new Element('ul', {'id': 'results-list'}).injectInside($('results-list-box'));
		
		// loop through and populate results
		for(var i = 0; i < resultsArray.length; i++) {
			
			plotPoint(resultsArray[i]);
			
			// create result li
			var result = new Element('li', {'class': 'result clearfix'}).injectInside(resultsList);
			
			
			
			var anchorElement = new Element('a', {'href': 'javascript:showInfo(' + i + '); javascript:linkTrack("left_nav" , "'+ resultsArray[i].name +' ");'}).injectInside(result);
			var iconImage = new Element('img', {'src': '/shared/images/commercial/maps/icon.gif', 'class': 'icon'}).injectInside(anchorElement);
			iconImage.setStyle('height', '20px');
			iconImage.setStyle('width', '20px');
			
			// create title
			var resultTitle = new Element('span', {'class': 'result-title'}).injectInside(anchorElement);
			resultTitle.setText(resultsArray[i].name);
			
			
			// address
			var resultAddress = new Element('span', {'class': 'result-address'}).injectInside(result);
			
			if(resultsArray[i].tollfree != "") {
				var toll = "<br\/>Toll-Free " + resultsArray[i].tollfree;
			} else {
				var toll="";
			}
			var resultVehicleSet = "";
						
			for(var j = 0; j < resultsArray[i].vehicles.length; j++) {
				
				var cv = resultsArray[i].vehicles[j].vehicle;
				if(cv.indexOf('3500') >= 0 || cv.indexOf('4500') >= 0 || cv.indexOf('5500') >= 0){
					if (resultVehicleSet.indexOf('All Ram Chassis Cabs') == -1){
						resultVehicleSet = resultVehicleSet + "All Ram Chassis Cabs<br/>";	
					}
				}else{
					resultVehicleSet = resultVehicleSet + resultsArray[i].vehicles[j].vehicle + "<br/>";	
				}
							
			}
			
			resultAddress.setHTML(resultsArray[i].street + "<br\/>" 
							+ resultsArray[i].city + ", " 
							+ resultsArray[i].stateID + " " 
							+ resultsArray[i].zip + "<br\/>"
							+ resultsArray[i].phone 
							+ toll
							+"<br\/>Vehicles:<br\/>"+resultVehicleSet);
			
			/*// create upfits list
			var resultUpfitsDL = new Element('dl').injectInside(result);
			var resultUpfitsDT = new Element('dt').injectInside(resultUpfitsDL);
			resultUpfitsDT.setText("Upfits:");
			
			// loop through and create upfits list
			for(var j = 0; j < resultsArray[i].upfits.length; j++) {
				
				var resultUpfitsDD = new Element('dd').injectInside(resultUpfitsDL);
				resultUpfitsDD.setText(resultsArray[i].upfits[j].upfit);
				
			}
			
			// create vehicles list
			//var resultVehiclesDL = new Element('dl').injectInside(result);
			//var resultVehiclesDT = new Element('dt').injectInside(resultVehiclesDL);
			//resultVehiclesDT.setText("Vehicles:");
			
			// loop through and create upfits list
			for(var j = 0; j < resultsArray[i].vehicles.length; j++) {
				
				//var resultVehiclesDD = new Element('dd').injectInside(resultVehiclesDL);
				//resultVehiclesDD.setText(resultsArray[i].vehicles[j].vehicle);
				
			}
			*/
			//new Element('br', {'class': 'clear'}).injectInside(result);
			
		}
		
	}
	
	// ======================================================
	// createInfoWindowContents() - creates the html window
	// ======================================================
	function createInfoWindowContents(upfitter, marker) {
		
		var html 	 =  "<span class=\"info-window-title\">" + upfitter.name + "<\/span>";
		html 	+= upfitter.street + "<br\/>";
		html 	+= upfitter.city + ", " + upfitter.state + " " + upfitter.zip + "<br\/>";
		html 	+= upfitter.phone + "<br\/>";
		
		if(upfitter.tollfree != "") {
			html 	+= "Toll-Free " + upfitter.tollfree+ "<br\/>";
		}
		
		html += "<a href='javascript:findBusinessDealer();' name='&amp;lpos=InfoWindowContents&amp;lid=findBusinessDealer'>Find a Business<em>Link</em>&#174; dealer</a><br\/>";
		
		var upfitsArray = new Array();
		
		html		+= "<dl><dt>Vehicles:<\/dt>";
		
		// loop on vehicles
		for(var i = 0; i < upfitter.vehicles.length; i++) {
			
			if(i < upfitter.vehicles.length-1) {
				// set text of vehicle list
				html 	+= "<dd>" + upfitter.vehicles[i].vehicle + "<\/dd><br\/>";
			} else {
				html 	+= "<dd>" + upfitter.vehicles[i].vehicle + "<\/dd>";
			}
			
			// loop on vehciles and get upfits out for the next list and avoid duplicates
			for(var j = 0; j<upfitter.vehicles[i].upfits.length; j++) {
				
				// current upfit
				var upfit = upfitter.vehicles[i].upfits[j].upfit;
				
				// if the list is empty automaticaly add it
				if(upfitsArray.length == 0) {
				
					upfitsArray.push(upfit);	
				
				} else {
					
					var found = false;
					
					for(var k = 0; k<upfitsArray.length; k++) {
						
						if(upfitsArray[k] == upfit) found = true;	
						
					}
					
					// if the upfit is not already in our list add it
					if(!found) upfitsArray.push(upfit);	
				}
			}
		}
		
		html		+= "<\/dl>";
		
		html		+= "<dl><dt>Upfits:<\/dt>";
		// loop on upfits
		for(var i = 1; i < upfitsArray.length; i++) {
			
			if(i < upfitsArray.length-1) {
				html 	+= "<dd>" + upfitsArray[i] + ", <\/dd>";
			} else {
				html 	+= "<dd>" + upfitsArray[i] + "<\/dd>";
			}
		}
		
		
		html		+= "<\/dl>";
		
		if(upfitter.website != "") { 
		
			html 	+= "<br/><a href=\"javascript:flexWin(getDomain()+'/exitPage/index.jsp?tname="+upfitter.exit_id+"','yes','','','','all');\">"+upfitter.website+"</a><br/>";
		}
		html		+= "<div id=\"directions-wrapper\"><form action=\"javascript:getDirections(document.directions.address.value,'" + upfitter.address + "' );\" name=\"directions\" method=\"get\">";
		html 	+= "<span class=\"info-window-subtitle\">Get Directions:</span> <a id=\"to-here\" class=\"off\" href=\"javascript:toggleToFrom('to-here');\">To Here<\/a> - <a id=\"from-here\" class=\"on\" href=\"javascript:toggleToFrom('from-here');\">From Here<\/a><br\/>";
		html 	+= "<span id=\"address-title\">Start Address<\/span>";
		html		+= "<input id=\"fromAddress\" name=\"address\" ondblclick=\"focusAllForm(this);\" onclick=\"focusForm(this);\" type=\"text\" value=\"Enter Address\" name=\"from\" size=\"28\"\/><input id=\"arrow\" type=\"image\" value=\"go\" src=\"\/shared\/images\/commercial\/maps\/arrow.gif\"/>";
		html 	+= "<\/form><br class=\"clear\"\/><\/div>";
		
		marker.setDetailWinHTML(html);
		marker.setID(upfitter.name);

		
	}
	
	// ======================================================
	// sortByState() - 
	// ======================================================
	function sortByState(a, b) {
	    var x = a.stateID;
	    var y = b.stateID;
	    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	}
	
	// ======================================================
	// sortByState() - 
	// ======================================================
	function sortByVehicle(a, b) {
	    var x = a.vehicleID;
	    var y = b.vehicleID;
	    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	}
	
	// ======================================================
	// sortByState() - 
	// ======================================================
	function sortByUpfit(a, b) {
	    var x = a.upfitID;
	    var y = b.upfitID;
	    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	}
	// ======================================================
	// fInfo() -  Place info icon 
	// ======================================================
	/*
	function fAddInfoBtn(){
		var choice = 0;	
		var toggleMask = new Fx.Style('info_mask','width', {duration: 500});
		var a = new Element('a').injectInside('colimn_headline');
		a.setProperty('id','info_link');
		a.addEvent('click',function(){
				
				if(choice <= 1){
					toggleMask.start(320);
				}else{
					toggleMask.start(0);
					choice = 0;
				}
			});
		//var column_head_img = $('colimn_headline').getFirst();
		var img = new Element('img').injectInside('info_link');
		img.setProperties({src:'/shared/images/commercial/btn_INFO_offstate.gif',id:'info_image'});
		$('info_link').addEvent('mouseenter',function(){
														
			$('info_image').setProperty('src','/shared/images/commercial/btn_INFO_onstate.gif');
			}
			).addEvent('mouseleave',function(){
				
				$('info_image').setProperty('src','/shared/images/commercial/btn_INFO_offstate.gif');
				}
				);
	}
	*/
	
	
	
	
	

	
	
	