/* Author: Trilibi Web Development

*/



 //jQuery.noConflict();
 jQuery(document).ready(function($){
 
	var $navigation = $("#navigation");
	
	function resizeNavLinks(){
		if($navigation.length){
			var $navlinks = $navigation.find("a");
			var fs = parseInt($navlinks.css("fontSize"));
			while($navigation.height()>75 && fs>12){
				$navlinks.css("fontSize",fs--);
			}
		}
	}
	resizeNavLinks();
	
	$footer_messages = $(".message_item");
	if($footer_messages.length){
		var current = 0;
		var max = $footer_messages.length-1;
		var fadeems = setInterval(function(){
			current = current==max?0:current+1;
			$footer_messages.hide().eq(current).fadeIn("slow");
		},4000);
	}
	
	
	$("#footer_info .left").bind("click", function(){
		resizeNavLinks();
	});
	
	$("input[name=how_soon]").datepicker({ minDate: 0, maxDate: "+2M" });
	
	
	var destination_data = [];
	if(window.destination_data && count(window.destination_data) < 1){
	    destination_data['203 W 3rd Ave, Spokane, WA 99201, USA'] = {
	    	id:1,
	    	shortLabel:'Downtown',
	    	label:'Downtown - 203 W. 3rd Ave.',
	    	la:'47.6534808',
	    	Ja:'-117.41541840000002',
	    	services:'Auto Repair, Towing, Gasoline, Propane Exchange, Hauling'};
		destination_data['925 E Wellesley Ave, Spokane, WA 99207, USA'] = {id:2,shortLabel:'Northside',label:'Northside - 925 E. Wellesley Ave.',la:'47.7009929',Ja:'-117.39543500000002'};
		destination_data['3725 S Grand Blvd, Spokane, WA 99203, USA'] = {id:3,shortLabel:'South Hill',label:'South Hill - 3725 S. Grand Blvd.',la:'47.620197',Ja:'-117.40158200000002'};
		destination_data['1520 N Pines Rd, Spokane, WA 99216, USA'] = {id:4,shortLabel:'Valley',label:'Valley - 1520 N. Pines Rd.',la:'47.671232',Ja:'-117.23904199999998'};
	} else {
		destination_data = window.destination_data;
	}			
	var destinations=new Array();
	
	var c = 0;
	for(d in destination_data){
		destinations[""+c+""] = d;
		c++;
	}
	
	    /*destinations[0] = '203 W 3rd Ave, Spokane, WA 99201, USA';
	    destinations[1] = '925 E Wellesley Ave, Spokane, WA 99207, USA';
	    destinations[2] = '3725 S Grand Blvd, Spokane, WA 99203, USA';
	    destinations[3] = '1520 N Pines Rd, Spokane, WA 99216, USA';*/
	    

	$location_finder = $("#location_finder");
	$location_finder.bind("click", function(e){
		
		e.preventDefault();
		
		var origin1 = $("input[name=contact_address]").val() + " " + $("input[name=contact_city]").val() + " " + $("input[name=contact_state]").val() + " " + $("input[name=contact_zipcode]").val();
		origin1 = $.trim(origin1);
		if(origin1==""){
			
			$("#location_finder_status").empty().append("Please enter your address first.");
			return false;
		}
		
		var service = new google.maps.DistanceMatrixService();
		service.getDistanceMatrix(
		  {
		    origins: [origin1],
		    destinations: destinations,
		    travelMode: google.maps.TravelMode.DRIVING,
		    avoidHighways: false,
		    avoidTolls: false,
			unitSystem : google.maps.UnitSystem.IMPERIAL
		  }, callback);
					
		
	});
	
	
	
	function codeAddress(address) {
	    geocoder.geocode( { 'address': address}, function(results, status) {
	      if (status == google.maps.GeocoderStatus.OK) {
	        /*map.setCenter(results[0].geometry.location);
	        var marker = new google.maps.Marker({
	            map: map,
	            position: results[0].geometry.location
	        });*/
	    	console.info(address);
	        log(results[0].geometry.location);
	      } else {
	        log("Geocode was not successful for the following reason: " + status);
	      }
	    });
  	}
	
  	function levenshtein (s1, s2) {
	    // http://kevin.vanzonneveld.net
	    // +            original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
	    // +            bugfixed by: Onno Marsman
	    // +             revised by: Andrea Giammarchi (http://webreflection.blogspot.com)
	    // + reimplemented by: Brett Zamir (http://brett-zamir.me)
	    // + reimplemented by: Alexander M Beedie
	    // *                example 1: levenshtein('Kevin van Zonneveld', 'Kevin van Sommeveld');
	    // *                returns 1: 3
	    if (s1 == s2) {
	        return 0;
	    }
	
	    var s1_len = s1.length;
	    var s2_len = s2.length;
	    if (s1_len === 0) {
	        return s2_len;
	    }
	    if (s2_len === 0) {
	        return s1_len;
	    }
	
	    // BEGIN STATIC
	    var split = false;
	    try {
	        split = !('0')[0];
	    } catch (e) {
	        split = true; // Earlier IE may not support access by string index
	    }
	    // END STATIC
	    if (split) {
	        s1 = s1.split('');
	        s2 = s2.split('');
	    }
	
	    var v0 = new Array(s1_len + 1);
	    var v1 = new Array(s1_len + 1);
	
	    var s1_idx = 0,
	        s2_idx = 0,
	        cost = 0;
	    for (s1_idx = 0; s1_idx < s1_len + 1; s1_idx++) {
	        v0[s1_idx] = s1_idx;
	    }
	    var char_s1 = '',
	        char_s2 = '';
	    for (s2_idx = 1; s2_idx <= s2_len; s2_idx++) {
	        v1[0] = s2_idx;
	        char_s2 = s2[s2_idx - 1];
	
	        for (s1_idx = 0; s1_idx < s1_len; s1_idx++) {
	            char_s1 = s1[s1_idx];
	            cost = (char_s1 == char_s2) ? 0 : 1;
	            var m_min = v0[s1_idx + 1] + 1;
	            var b = v1[s1_idx] + 1;
	            var c = v0[s1_idx] + cost;
	            if (b < m_min) {
	                m_min = b;
	            }
	            if (c < m_min) {
	                m_min = c;
	            }
	            v1[s1_idx + 1] = m_min;
	        }
	        var v_tmp = v0;
	        v0 = v1;
	        v1 = v_tmp;
	    }
	    return v0[s1_len];
	}
	
	
	function callback(response, status) {
	  
	  	var addresses = new Array();
	  
		if (status == google.maps.DistanceMatrixStatus.OK) {
			var origins = response.originAddresses;
			var destinations = response.destinationAddresses;
			for (var i = 0; i < origins.length; i++) {
				var results = response.rows[i].elements;
				for (var j = 0; j < results.length; j++) {
					var element = results[j];
					addresses.push({
						element : element,
						distance : element.distance.text,
						distance_val : element.distance.value,
						duration : element.duration.text,
						from : origins[i],
						to : destinations[j],
					});
				}
			}
		}
				
		function postCmp(a, b) {
		  return a.distance_val > b.distance_val;
		}
		addresses.sort(postCmp);
		
		var address = addresses[0].to;
		address = (address=='North St, Addy, WA 99101, USA') ? '1374 North St., Addy, WA 99101, USA' : address;
		$("#location_finder_status").empty().append("Our closest location to your address is:<br/>"+address+" ("+addresses[0].distance+"/"+addresses[0].duration+")");
		$location = $("select[name=location]");
		$location.empty();
		$location.append("<option value=\"\">-- None</option>");
		for(var l=0;l<addresses.length;l++){
			var destdata = destdatafind(addresses[l].to);
			var option = $("<option value=\""+destdata.id+"\">"+destdata.label+" ("+addresses[l].distance+"/"+addresses[l].duration+")"+"</option>");
			$location.append(option);
		}
	}
	
	function destdatafind(address){
		var l = 10000;
		var dest = null;
		for(a in destination_data){
			tl = levenshtein(address,a);
			if(tl<l){
				l=tl;
				dest = destination_data[a]
			}
		}
		return dest;
	};
	
	
	var map_canvas = $("#map_canvas");
	if(map_canvas.length){
		var geocoder;
		var directionDisplay;
		var directionsService = new google.maps.DirectionsService();
		var infowindow = new google.maps.InfoWindow();
		var map;
		
		function initialize() {
			geocoder = new google.maps.Geocoder();
			directionsDisplay = new google.maps.DirectionsRenderer();
			//var spokane = new google.maps.LatLng(47.66226, -117.432589);
			var spokane = new google.maps.LatLng(47.66434590000001, -117.32556210000001);
			var myOptions = {
				zoom:11,
				mapTypeId: google.maps.MapTypeId.ROADMAP,
				center: spokane
			}
			map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
			directionsDisplay.setMap(map);
			directionsDisplay.setPanel(document.getElementById("directionsPanel"));
			google.maps.event.addListener(map, 'bounds_changed', function() {
				map_canvas.css('background','none');
			});
			
			
			
			for(i in destination_data){
				myLatlng = new google.maps.LatLng(destination_data[i].la, destination_data[i].Ja);
				destination_data[i].marker = new google.maps.Marker({
					position: myLatlng, 
					map: map,
					title:destination_data[i].shortLabel,
					icon: '/img/flag_48.png'
				});
				//codeAddress(i);
			};
		}
		
		function calcRoute(start,end) {
		  var request = {
		    origin:start,
		    destination:end,
		    travelMode: google.maps.TravelMode.DRIVING
		  };
		  directionsService.route(request, function(result, status) {
		    if (status == google.maps.DirectionsStatus.OK) {
		      directionsDisplay.setDirections(result);
		    }
		  });
		}
		
		initialize();

	}
	
	
	var my_loc_form = $("#my_loc_form");
	if(my_loc_form.length){
		my_loc_form.bind("submit", function(e){
			e.preventDefault();
			var origin1 = $("#my_loc").val()
			var service = new google.maps.DistanceMatrixService();
			service.getDistanceMatrix(
				{
					origins: [origin1],
					destinations: destinations,
					travelMode: google.maps.TravelMode.DRIVING,
					avoidHighways: false,
					avoidTolls: false,
					unitSystem : google.maps.UnitSystem.IMPERIAL
				}, 
				callback_loc
			);
				
		});
		
		$(".loc_results_item button").live("click", function(){
			var ele = $(this);
			$("#map_info").find("button").fadeIn();
			$(this).fadeOut();
			calcRoute($("#my_loc").val(),ele.attr("address"));
		});
		
	}
	
	function callback_loc(response, status) {
	  
	  	var addresses = new Array();
		var origins = response.originAddresses;
		var destinations = response.destinationAddresses;
	  
		if (status == google.maps.DistanceMatrixStatus.OK && origins[0]!="") {
			$("#my_loc_form").find(".error").remove();
			for (var i = 0; i < origins.length; i++) {
				var results = response.rows[i].elements;
				
				for (var j = 0; j < results.length; j++) {
					var element = results[j];
					addresses.push({
						element : element,
						distance : element.distance.text,
						distance_val : element.distance.value,
						duration : element.duration.text,
						from : origins[i],
						to : destinations[j],
					});
				}
			}
		} else {
			$("#my_loc_form").find(".error").remove().end().append("<p class='error'>The location above was unable to be found, please enter a different or more specific address.</p>");
			return false;
		}
		
		  

				
		function postCmp(a, b) {
		  return a.distance_val > b.distance_val;
		}
		addresses.sort(postCmp);
		calcRoute(origins[0],addresses[0].to);
		$("#location_finder_status").empty().append("<strong>Our closest location to your address is:</strong><br/><div class=\"loc_results_item\">"+addresses[0].to+"</div>");
		$location = $("#location_results");
		$location.empty();
		for(var l=0;l<addresses.length;l++){
			if(l>0){
				var address = addresses[l].to.replace(", USA","");
				address = address.substr(0,address.length-10);
				var option = $("<div class=\"loc_results_item\">"+address+" ("+addresses[l].distance+"/"+addresses[l].duration+")"+"</div>");
				option.append("<button address=\""+addresses[l].to+"\">Get Directions</button>");
				$location.append(option);
			}
		}
		
		$("#initial_locations").fadeOut();
		$("#map_info").fadeIn();
	}
	
	
        
	$("#standardPhotosgallery").sliderkit({
		mousewheel:true,
		shownavitems:6,
		//navfx:"none",
		panelbtnshover:true,
		auto:true,
		circular:true,
		navscrollatend:true
	});
 
	$models = $("select[name=model]");
	$makes = $("select[name=make]");
	if($models.length && $makes.length){
		$models.bind("change",function(){
			console.log($(this).val());
		})
	}
	
 });




















