/**
 * The dealer locator document ready scripts. Sets up the Google map, Dealer
 * Locator class, navigation elements, tracking tags, form submission and certain UI pieces.
 * 
 * THE DEALER LOCATOR REQUIRES THE UNIVERSAL NAV TO OPERATE. Without the
 * universal nav this will work, but DAA sessions will not be detected, which
 * will limit functionality.
 * 
 * @author erik.daniel
 */
var isDaa = false;
var vwtracker = new VWTracker();
var locator = new DealerLocator();


var map;

/* IE 7 and below throws and error when you use
 * $(document).ready to load the google map 
 */
$(window)
		.load(function() {
		
			var googleError = false;


    vwtracker.track();
			// create the map
				try {
					this.latlng = new google.maps.LatLng(40, -95);
					this.mapOptions = {
						zoom:4,
						center:this.latlng,
						mapTypeId:google.maps.MapTypeId.ROADMAP,
						mapTypeControl:false,
						navigationControl:false,
						scaleControl:false
					}

					var map = new google.maps.Map(document
							.getElementById("map-canvas"), this.mapOptions);
				} catch (error) {
					googleError = true;
				}
				// show loading graphic
				if (googleError == false) {
					$.showLoader();

					// hide the loader when the map is loaded
					// (prevents lag on the search as the browser competes with
					// the tile loading)
					google.maps.event.addListenerOnce(map, 'tilesloaded',
							function() {
								$.hideLoader();
								// check for daasession here as well
								if(typeof(daasession) != 'undefined' && daasession.isDaaSession && daasession.daaID != null){
									handleDaaSession();
								}
								else{
									onNavigationReady();
								}														
							});
				}
				

				if (googleError == true) {
					locator
							.showError("Google mapping seems to be down. We can still show you a list of dealers in your area.");
				}
				else{
					// instantiate the dealer locator
					locator.setMap(map);
				}

				/**
				 * Handle Search Form Entry
				 */
				$('#searchForm')
						.submit(function(event) {
							// prevent page refresh
								event.preventDefault();
								
								vwtracker.track('search');

								var url = locator.getUrl();
								if (url != false) {
									// clear the map
									locator.clearMarkers();
									$.showLoader();
									// make the request
									$
											.ajax( {
												type : "GET",
												url : url,
												dataType : "xml",
												success : function(xml) {

													$("#dragHandle")
															.css(
																	{
																		"visibility" : "visible"
																	});
													$("#maxMin")
															.css(
																	{
																		"visibility" : "visible"
																	});
													locator.processResult(xml);
												},
												error : function() {
													$.hideLoader();
													locator
															.showError('There was an error processing your search. Please try again later.');
												}
											}); // eo $.ajax(
								}
							}); // eo submit handler
							
							var $_GET = {};

							document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
								function decode(decodeThis) {
									return decodeURIComponent(decodeThis.split("+").join(" "));
								}

								$_GET[decode(arguments[1])] = decode(arguments[2]);
							});
							
							var dealersearch = $_GET["dealersearch"];
							if(dealersearch != undefined) {
								$('#searchEntry').val(dealersearch);
								$('#searchForm').trigger("submit");
								}

				/**
				 * Set UI element controls
				 */
				$(function() {
					/* restrict input to certain form fields */
					$("#searchEntry").alphanumeric( {
						allow : "-,' "
					});

					// set focus on search form
					$('#searchEntry').focus();
					// make search form draggable in the container
					$('.draggable').draggable( {
						containment : "#content",
						handle : "#dragHandle"
					});

					$("#dragHandle").hover(function() {
						$(this).addClass("drag-on");
					}, function() {
						$(this).removeClass("drag-on");
					});
					var maximized = true;
					$("#maxMin").hover(function() {
						if (maximized == false) {
							$(this).addClass("max-on");
						} else {
							$(this).addClass("min-on");
						}
					}, function() {
						$(this).removeClass("max-on").removeClass("min-on");
					}).click(function() {
						maximized = !maximized;
						$(this).toggleClass("max-off");
						$(this).toggleClass("min-off");
						$("#results").animate( {
							"height" : "toggle",
							"opacity" : "toggle"
						}, "slow");
						$("#pagination").animate( {
							"height" : "toggle",
							"opacity" : "toggle"
						}, "slow");
					});

				});
			});

// preload images we need right away
var imgPreload = new Array;
imgPreload[1] = new Image;
imgPreload[1].src = "/global/images/forms/loader.gif";
imgPreload[2] = new Image;
imgPreload[2].src = "images/pushPin.png"
imgPreload[3] = new Image;
imgPreload[3].src = "images/msmarker.shadow.png";
imgPreload[4] = new Image;
imgPreload[4].src = "images/loader-bg.gif";

jQuery.showLoader = function() {
	$.hideLoader();
	$('#map-holder')
			.prepend(
					"<div id='loader'><img src='/global/images/forms/loader.gif'></div>");
};

jQuery.hideLoader = function() {
	$("#loader").fadeOut('fast');
	$('#map-overlay').fadeOut(3000);
}

/**
 * Fired by universal_nav.swf if there are no dealer or daa sessions active
 */
function onNavigationReady() {

	locator.setDaa(false);
}

/**
 * Fired by universal nav when daa session is detected.
 * 
 * @param x
 *            {Object} daa vars
 */
function handleDaaSession() {
	locator.setDaa(true);
	$("#searchEntry").numeric();
}


jQuery.getLocation = function() {
	var loc = location.pathname;
	var locarr = new Array();
	locarr = loc.split("/");
  return locarr[1].toLowerCase();
}

/**
 * Handle UI and tracking tag changes
 * for model pages.
 */
jQuery.handleModel = function() {
	var model = $.getLocation();
	var trackingModel = 'generic';
	var dataFile = '/global/leftnav/data/' + model + '_leftnav_en_us.xml';

	var title = getLocationModelTitle(model);
	if(title == "") {
		title = "Find a Dealer";
	}
	else {
		title = "Find a " + title;
	}
	document.title = title;

	if (model != 'dealerlocator') {
		trackingModel = model;
		
		$('body').addClass("model");

		var leftNavDiv = document.createElement('div');
		leftNavDiv.id = 'leftNav';
		$(leftNavDiv).addClass('hybridLeftNav1 jettaBlueOffset');
		$('div#content').prepend(leftNavDiv);
		var so = new SWFObject("/global/leftnav/swf/hybridLeftNav.swf",
				"leftnav", "229", "500", getFlashVersion(), "#ffffff");
		so.addVariable("allowResize", "false");
		so.addVariable("configXML", dataFile);
		so.addVariable("styleSheet", "/global/css/jetta_blue.css");
		so.addVariable("openTo", "find");
		so.addVariable("openMenus", "overview,gallery,features,build,buy");
		so.addVariable("disableSubHead", "true");
		so.addVariable("modelPage", "true");
		so.addVariable("legalKey", "default");
		so.addVariable("flashTime", flashTime);
		so.addParam("wmode", "opaque");
		so.setAttribute("redirectUrl", "/update/en/us/");
		so.write("leftNav");
		
		// set tracking
		
	}
	vwtracker.setModel(trackingModel);
	locator.model = model;
}

function getLocationModelTitle(loc) {
	var modelObj = {};
	switch (loc) {
	case "cc":
		return "CC";
		break;
	case "eos":
		return "Eos";
		break;
	case "gli":
		return "GLI";
		break;
	case "gti":
		return "GTI";
		break;
	case "jetta":
		return "Jetta";
		break;
	case "newbeetle":
		return "New Beetle";
		break;
	case "newbeetlecon":
		return "New Beetle Convertible";
		break;
	case "passat":
		return "Passat";
		break;
	case "golf":
		return "Golf";
		break;
	case "passatwagon":
		return "Passat Wagon";
		break;
	case "rabbit":
		return "Rabbit";
		break;
	case "routan":
		return "Routan";
		break;
	case "touareg":
		return "Touareg";
		break;
	case "specialeditions":
		return "Fahrenheit GLI";
		break;
	case "tiguan":
		return "Tiguan";
		break;
	case "jettasportwagen":
		return "Jetta SportWagen";
		break;
	default:
		return "";
	}
};

$.handleModel();
// eof
