/* Author: 

*/



/****  GOOGLE MAPS PLUGIN ****/
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
var oldDirections = [];
var currentDirections = null;
var myOptions;
var addressFrom;


function drivingMap() {
	
var styles = [
		{
			featureType: "administrative",
			elementType: "all",
			stylers: [
				{ visibility: "off" }
			]
		},{
			featureType: "poi",
			elementType: "all",
			stylers: [
				{ visibility: "off" }
			]
		},{
			featureType: "road",
			elementType: "all",
			stylers: [
				{ visibility: "on" },
				{ hue: "#E8B40C" },
				{ gamma: 1 },
				{ saturation: 50 }
			]
		},{
			featureType: "transit",
			elementType: "all",
			stylers: [
				{ visibility: "off" }
			]
		},{
			featureType: "administrative.country",
			elementType: "all",
			stylers: [
				{ hue: "#ffaa00" },
				{ visibility: "simplified" },
				{ saturation: 47 },
				{ lightness: 37 }
			]
		},{
			featureType: "water",
			elementType: "all",
			stylers: [
				{ visibility: "simplified" },
				{ saturation: -96 },
				{ gamma: 0.88 }
			]
		},{
			featureType: "landscape",
			elementType: "all",
			stylers: [
				{ visibility: "off" },
				{ hue: "#ffdd00" },
				{ gamma: 1 },
				{ saturation: 50 }
			]
		},{
			featureType: "administrative.country",
			elementType: "all",
			stylers: [
				{ visibility: "simplified" },
				{ lightness: 20 }
			]
		}
	];
	
	myOptions = {
		zoom: 11,
		mapTypeControl: false,
		mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
		navigationControl: false,
		navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
		center: new google.maps.LatLng(latlng[0],latlng[1]),
		mapTypeId: 'Styled'
	}
	
	map = new google.maps.Map(document.getElementById("map_canvas_large"), myOptions);
	
	var styledMapType = new google.maps.StyledMapType(styles, { name: 'Styled' });
	map.mapTypes.set('Styled', styledMapType);
	
	var image = new google.maps.MarkerImage('/_/img/img_googleIcon.png',
	  // This marker is 20 pixels wide by 32 pixels tall.
	  new google.maps.Size(86, 45),
	  // The origin for this image is 0,0.
	  new google.maps.Point(0,0),
	  // The anchor for this image is the base of the flagpole at 0,32.
	  new google.maps.Point(43, 22));
	
	var myLatLng = new google.maps.LatLng(latlng[0],latlng[1]);
	
	var promMarker = new google.maps.Marker({
		position: myLatLng,
		map: map,
		icon: image
	});
	
	directionsDisplay = new google.maps.DirectionsRenderer({
		'map': map,
		//'preserveViewport': true,
		'draggable': true
	});
	
	google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {
		if (currentDirections) {
			oldDirections.push(currentDirections);
			//$("#undo").fadeIn(500);
		}
		var newdir = directionsDisplay.getDirections();
		currentDirections = newdir;
		set_map_directions(newdir);
	});
}

function set_map_headers(obj) {
	return "<ul><li class=\"steps\">Steps</li><li class=\"description\">Description<span>" + obj.distance.text + " - " + obj.duration.text + "</span></li><li class=\"dist\">Dist.</li></ul>";
}

function set_map_list_values(step,obj) {
	return '<ol><li class=\"o_steps\">' + step + '</li><li class=\"o_description\">' + obj.instructions + '</li><li class=\"o_dist\">' + obj.distance.text +' - ' + obj.duration.text + '</li></ol>';
}	

function set_map_directions(response) {
	var route = response.routes[0];
	var headers = "";
	var steps = "";
	var counter = 1;
	for (var i = 0; i < route.legs.length; i++) {
		headers = set_map_headers(route.legs[i]);
		for(var j = 0; j < route.legs[i].steps.length; j++) {
			steps += "<li class=\"bottom_bar\">" + set_map_list_values((counter++),route.legs[i].steps[j]) + "</li>";
		}
	}
	$("#directionsHeaders").html(headers);
	$("#directions_panel").html("<ol>" + steps + "</ol>");
}

function calcRoute() {
	currentDirections = null;
	var start = addressFrom;
	var end = endAddress;
	var request = {
		origin: start,
		destination: end,
		travelMode: google.maps.DirectionsTravelMode.DRIVING
	};
	directionsService.route(request, function(response, status) {
		if (status == google.maps.DirectionsStatus.OK) {
			directionsDisplay.setDirections(response);
			set_map_directions(response);
		}
		else {
			// TODO: Make a popup alert with the error message.
		}
	});
	
}

/**** END GOOGLE PLUGIN ***/

var keynum, lines = 1;
var fake_indent = '                 ';		
function limitLines(obj, e) {
	// IE
	if(window.event) {
	  keynum = e.keyCode;
	// Netscape/Firefox/Opera
	} else if(e.which) {
	  keynum = e.which;
	}
	
	var aNewlines = obj.value.split("\n");
	lines = aNewlines.length;
	
	
	if(keynum == 13) {
	  if(lines >= obj.rows) {
		lines = obj.rows;
		return false;
	  }
	}
	
	if (obj.value.length > 200) {
		obj.value = obj.value.substring(0, 200);
	}
	
	//console.log(aNewlines.length);
	//console.log(obj.rows);
}			



var menuObj = [];
var overPicker = false;
var current = {name : false ,isOpen : false};

function closeMenus() {
	current.content.stop().delay(190).animate({"top" : current.topHidden}, current.speed, current.easing, function() {
		current.holder.css({"height" : "0px", "display" : "none"}).unbind('mouseleave').unbind('mouseenter');
		current.isOpen = false;
		clearTimeout(current.time);
		current.time = null;
		$('div#ui-datepicker-div').unbind('mouseenter').unbind('mouseleave');
	});
}

function slideMenus(obj) {
	
	//console.log(obj.name);
	if(obj.name == current.name && current.isOpen) {
		closeMenus();
	}
	else if(obj.name != current.name && current.isOpen) {
		
		closeMenus();
    	var timeout_open = (current.name == 'contact' ? 2000 : 800);
		setTimeout(function(){
	  
	    	obj.holder.css({"display" : "block"});
	    	obj.holder.stop().animate({"height": obj.height},obj.speed, function() {
	    		obj.content.stop().animate({"top" : obj.top},obj.speed, obj.easing);
	    		obj.isOpen = true;
	    		current = obj;
	    	}).mouseenter(function(){
				obj.timeout = false;
				clearTimeout(obj.time);
				obj.time = null;
	    	}).mouseleave(function(){
	    		obj.time = setTimeout(function(){
					obj.timeout = true;
					if(obj.name != 'reservation' && obj.name != 'contact') {
						if(!overPicker && obj.timeout) {
							closeMenus();
						}
					}
					else {
						return false;
					}
				},500);
			});
			
	    },timeout_open);
	}
	else if(obj.name == current.name && current.isOpen) {
		return false;
	}
	else {
		obj.holder.css({"display" : "block"});
    	obj.holder.stop().animate({"height": obj.height},obj.speed, function() {
    		obj.content.stop().animate({"top" : obj.top},obj.speed, obj.easing);
    		obj.isOpen = true;
			current = obj;
    	}).mouseenter(function(){
			obj.timeout = false;
			clearTimeout(obj.time);
			obj.time = null;
		}).mouseleave(function(){
			obj.time = setTimeout(function(){
				obj.timeout = true;
				if(obj.name != 'reservation' && obj.name != 'contact') {
					if(!overPicker && obj.timeout) {
						closeMenus();
					}
				}
				else {
					return false;
				}
			},500);
		});	
	}
	
	$('div#ui-datepicker-div').mouseenter(function(){
	    overPicker = true;
	}).mouseleave(function(){
	    overPicker = false;
	});

}

var ribbon,plus_btn,minus_btn,menu_buttons,menu_pic_preview,contactform;

$(document).ready(function() {
    
	ribbon = $("#ribbon_info");
	plus_btn = $("li.plus a");
	minus_btn = $("li.minus a");
	menu_buttons = $("#container ul li ul li a");
	menu_pic_preview = $("#food_preview_pic img");
	contactform = $("#contactform");
	
	//$("article#menu_drinks > ul:nth-child(even), article#menu_dinner > ul:nth-child(even)").css({"float" : "right"}); <- Chnange to a multicolumns using php instead
	
	
	function validateEmail(elementValue) {
		var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
		return emailPattern.test(elementValue);
	}
	
	if($('.cycle').length) {
		$('.cycle').cycle({
			fx: 'fade',
			speed: 4000,
			fit: 1 ,
			before: function(currSlideElement,nextSlideElement) {
				ribbon.stop().animate({"opacity":"0"},400,null,function(){
					ribbon.hide(500,null,function() {				
						ribbon.text($(nextSlideElement).attr("alt")).show(500,null,function() {
							ribbon.css({"opacity":"1"});
						});
					});
				});
			}
		});
	}
	
	$("#contact_form_nojs").hide(0);
	$("#contact_form_fields").show(0);
	
	menu_buttons.hover(function(event) {
		menu_pic_preview.attr("src",$(this).attr("rel"));
	});
	
	$("a.anchorLink").anchorAnimate();
				
	/*** THIS MIRRORS THE NAME ON THE CONTACT FORM ***/
	$('.my_name').keyup(function() {
	    $('#repeat_name').val($(this).val());
	});	
	
	/* Contatc Form */
	contactform.submit(function(event){
		event.preventDefault();
		var send_url = $(this).attr("action");
		var name =  $("#name_contact");
		var email = $("#email_contact");
		var message =  $("#message_contact");
		var phone = $("#phone_contact");
		var subject =  $("#subject_contact");
		
		if (name.val() == "" || name.val() == "*required" && email.val() == "" || email.val() == "*required") {
			name.addClass('error');
			email.addClass('error');
			return false;
		}
		else if (name.val() == "" || name.val() == "*required") {
			name.addClass('error');
			return false;
		}
		else if(email.val() == "" || email.val() == "*required"){
			name.removeClass('error');
			email.addClass('error');
			return false;
		}
		else {
			if (!validateEmail(email.val()) ) {
				name.removeClass('error');
				email.addClass('error');
				return false;
			}
			else {
				$("#contact_form_fields").fadeOut(500,null,function() {
					var vars = {
								key : ")9^YqW6b1h", 
								email : name.val(),
								name : email.val(),
								message : message.val(),
								phone : phone.val(),
								subject : subject.val()
								};
					$.post(send_url, vars, function(data) {
					  
					  name.removeClass('error');
					  email.removeClass('error');
					  var obj = $.parseJSON(data);
					  if(obj.type == "success") {
						$("#contact_form_success").fadeIn(500,null,function(){
							setTimeout(function(){
								$("#contact_form_success").fadeOut(500,null,function(){
									$("#contact_form_fields").fadeIn(500,null,function() {
										name.val("");
										email.val("");
										message.val("");
										phone.val("");
										subject.val("");
										$("#repeat_name").val("");
										setTimeout(function(){
											closeMenus();
										},1000);
									});
								});
							},3000);
						});	
					  }
					  else {
						$("#contact_form_error").fadeIn(500,null,function(){
							setTimeout(function(){
								$("#contact_form_error").fadeOut(500,null,function(){
									$("#contact_form_fields").fadeIn(500,null,function() {
										
									});
								});
							},3000);
						});	
					  }
					});						
				});
			}
		}
	});
	
	// Shopping Cart Plus Minus buttons
	
	plus_btn.click(function(event) {
		event.preventDefault();
		var ajaxURL = $(this).attr("href").replace("noajax", "ajax");
		$.getJSON(ajaxURL, function(json) {
			$("#words_" + json.code).text(json.words);
			$("#plural_" + json.code).text(json.plural);
			$("span#total").text(json.total_money);
			if(json.total_money >= 1) {
				$("#cart_submit_btn").removeAttr("disabled");
			}
			else {
				$("#cart_submit_btn").attr({"disabled" : "disabled"});
			}
		});
	});
	
	minus_btn.click(function(event) {
		event.preventDefault();
		var ajaxURL = $(this).attr("href").replace("noajax", "ajax");
		$.getJSON(ajaxURL, function(json) {
			$("#words_" + json.code).text(json.words);
			$("#plural_" + json.code).text(json.plural);
			$("span#total").text(json.total_money);
			if(json.total_money >= 1) {
				$("#cart_submit_btn").removeAttr("disabled");
			}
			else {
				$("#cart_submit_btn").attr({"disabled" : "disabled"});
			}
		});
	});
	
	/***  DROPDOWNS **/
	menuObj = [
				{
				 name : 'reservation',
				 linkurl : $('a#reservation'),
			 	 holder : $('#open_table'),
			 	 content : $("#table_content"),
			 	 easing : "linear",
			   	 isOpen : false,
			   	 top : "0px",
			   	 topHidden : "-450px",
			   	 height : "450px",
				 timeout : false,
				 time : null,
				 speed : 400
			   },
			   {
			     name : 'menu',
				 linkurl : $('a#menu'),
				 holder : $('#menu_drop'),
				 content : $('#container'),
				 easing : 'easeInOutExpo',
				 isOpen :false,
				 top : "0px",
				 topHidden : "-587px",
				 height : "367px",
				 timeout : false,
				 time : null,
				 speed : 400
			   },
			   {
			     name : 'contact',
				 linkurl : $('a#contact_drop'),
				 holder : $('#inside'),
				 content : $('#contact_form'),
				 easing : 'easeInOutBack',
				 isOpen :false,
				 top : "150px",
				 topHidden : "-559px",
				 height : "480px",
				 timeout : false,
				 time : null,
				 speed : 800
			   }						   
			];				   
					   
	 
	menuObj[0].linkurl.click(function(event) {
		event.preventDefault();
		slideMenus(menuObj[0]);
	});
	menuObj[1].linkurl.click(function(event) {
		event.preventDefault();
		slideMenus(menuObj[1]);
	});	
	menuObj[2].linkurl.click(function(event) {
		event.preventDefault();
		slideMenus(menuObj[2]);
	});	
	
				
	$('[placeholder]').focus(function() {
		 var input = $(this);
		 if (input.val() == input.attr('placeholder')) {
		   if (this.originalType) {
		     this.type = this.originalType;
		     delete this.originalType;
		   }
		   input.val('');
		   input.removeClass('placeholder');
		 }
		}).blur(function() {
		 var input = $(this);
		 if (input.val() == '') {
		   if (this.type == 'password') {
		     this.originalType = this.type;
		     this.type = 'text';
		   }
		   input.addClass('placeholder');
		   input.val(input.attr('placeholder'));
		 }
	}).blur();
	
	function validate_email() {
		
		var name = $("#newsletter_signup_name").val();
		var email = $("#newsletter_signup_email").val();
		var state = $("#newsletter_signup_state").val();
		var city = $("#newsletter_signup_city").val();
		
		if (name == null || name == "Your Name")
		{
			$("#signup_message").html("First name must be filled out.").css({"display":"block","color":"red"});
			return false;
		}else if(email == null || email == "Your Email"){
			$("#signup_message").html("Please check your email for errors.").css({"display":"block","color":"red"});
			return false;
		}else {
			if (!validateEmail(email) ) {
				$("#signup_message").html("Not a valid e-mail address").css({"display":"block","color":"red"});
				return false;
			}else {
				
				$.post("/_/lib/mailingList-add.php", { name : name, email : email, city : city, state : state }, function(data) {
				  //alert(data);
				  var obj = $.parseJSON(data);
				  if(obj.type == "success") {
				  	$("#signup_message").html(obj.msg).css({"display":"block","color":"green"});
				  }
				  else {
				  	$("#signup_message").html(obj.msg).css({"display":"block","color":"red"});
				  }
				});
			}	
		}				
	}
	
	$("#signup_form").submit( function(event) {
		event.preventDefault();
		validate_email();
	});
	
	if ($('#map_canvas_large').length) {
		drivingMap();
		
		$("#drivingDirections").submit(function(event) {
			event.preventDefault();
			addressFrom = $("#fromWhere").val();
			calcRoute();
		});
		
		$("#undo").click(function(event) {
			$("#undo").fadeOut(500);
			calcRoute();
		});
	}	
	
	
});























