
var map;
var directionsService;
var directionsDisplay;

var openInfowindow;
var mapMarkers = [];
var mapHTMLS = [];

var zoomLevel = 13;

var infoWindowOffset;
	
var iconImageUrl;
var iconSize;
var iconPosition;
var iconHotSpotOffset;


var dispensary_menukey;
var dispensary_menuid;


var overallRating = 0;

	
var dispensaryTag,
	userFullname,
	userEmail,
	validUser;
	

jQuery(document).ready(function () { 

	dispensaryTag	= $('#recordBlock').attr('dispensary_tag');
	userFullname	= $('#recordBlock').attr('userFullname');
	userEmail		= $('#recordBlock').attr('userEmail');

	validUser = (dispensaryTag && userFullname && userEmail);


	$("#overallRating, #qualityRating, #atmosphereRating, #priceRating").children().not("select, .ratingTitle").hide();
	
	$overallRatingCaption = $("<span/>");
	$("#overallRating").stars({ cancelShow: false, inputType: "select", captionEl: $overallRatingCaption });
	$overallRatingCaption.appendTo("#overallRating");
	
	
	$qualityRatingCaption = $("<span/>");
	$("#qualityRating").stars({ cancelShow: false, inputType: "select", captionEl: $qualityRatingCaption });
	$qualityRatingCaption.appendTo("#qualityRating");
	
	
	$atmosphereRatingCaption = $("<span/>");
	$("#atmosphereRating").stars({ cancelShow: false, inputType: "select", captionEl: $atmosphereRatingCaption });
	$atmosphereRatingCaption.appendTo("#atmosphereRating");
	
	
	$priceRatingCaption = $("<span/>");
	$("#priceRating").stars({ cancelShow: false, inputType: "select", captionEl: $priceRatingCaption });
	$priceRatingCaption.appendTo("#priceRating");

	processRatings();


	directionsService = new google.maps.DirectionsService();
	directionsDisplay = new google.maps.DirectionsRenderer();

	var losAngelesCenter = new google.maps.LatLng(34.053797, -118.238983);

	var mapOptions = {
		zoom: zoomLevel,
		center: losAngelesCenter,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
	    mapTypeControl: true,
	    mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
	    navigationControl: false,
	    scaleControl: false,
	    scrollwheel: false
	};
	
	map = new google.maps.Map(document.getElementById("mapInteractive"), mapOptions);
	
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("directionsPanel"));

    
	$('#mapZoomIn').click( function() { zoomLevel = map.getZoom(); map.setZoom(++zoomLevel); });
	$('#mapZoomOut').click( function() { zoomLevel = map.getZoom(); map.setZoom(--zoomLevel); });


	$(".sexyButton").hover( function() { $(this).addClass("ui-state-hover"); }, function() { $(this).removeClass("ui-state-hover"); });

	$('.advertSpace').addClass('ui-corner-all');
	$('.advertSpace').click( function() { location.href = '/advertising.php'; });
	

	if ($('#leftColumn').has('#photosBlock').length) {
		$('#photosBlock a img').addClass('ui-corner-all');
		$("#photosBlock a").lightBox({ fixedNavigation: true, imageLoading: '../images/green-circle-load.gif' });
	}


	$("#addUserReviewButton").click( function() {
		if (validUser) {
			$("#noReviews").slideUp(80);
			$(this).slideUp(300, function() { $("#newUserReview").slideDown(300); });
		} else {
			$("#loginWindow").dialog("open");			
		}
	});
	
	
	$('#saveReviewButton').click( function() {

		if (validUser) {

			var reviewContent = $("#newReviewContent").val(),
				reviewSig = $("#newReviewSig").val(),
				reviewMsg = $("#newReviewMsg");
			
			var validReviewLength = (reviewContent.length >= 5);
			
			if (!validReviewLength) {
				reviewMsg.addClass('ui-state-error').html("Please write a little more than that...").slideDown(300);
				return false;
			}
			
			var validSigLength = (reviewSig.length >= 2);
			
			if (!validSigLength) {
				reviewMsg.addClass('ui-state-error').html("Please add a Signature...").slideDown(300);
				return false;
			}
			
			
			$(this).unbind('click');

			$.post("/save-review.php", { tag: dispensaryTag, user: userEmail, review: reviewContent, sig: reviewSig }, function(data) {
				reviewMsg.removeClass('ui-state-error').addClass('ui-state-default').html("Review Saved, Thanks!").slideDown(300);
				$("#cancelReviewButton").click();
			});
		}
  		
		return false;
	});
	
	
	$("#cancelReviewButton").click( function() {
		$("#newUserReview").slideUp(300, function() {
			$("#addUserReviewButton").slideDown(300);
			$("#noReviews").slideDown(80);
		});
	});
	
	
	
	$("#addUserRatingsButton").click( function() {
		if (validUser) {
			$(this).slideUp(300, function() { $("#userRatings").slideDown(300); });
		} else {
			$("#loginWindow").dialog("open");			
		}
	});
	
	
	$("#cancelUserRatingsButton").click( function() {
		$("#userRatings").slideUp(300, function() { $("#addUserRatingsButton").slideDown(300); });
	});


	$('#saveUserRatingsButton').click( function() {

		if (validUser) {

			var qualityInstance = $("#qualityRating").data("stars");
			var qualityRating = qualityInstance.options.value;
		
			var atmosphereInstance = $("#atmosphereRating").data("stars");
			var atmosphereRating = atmosphereInstance.options.value;
		
			var priceInstance = $("#priceRating").data("stars");
			var priceRating = priceInstance.options.value;
			
			var validVotes = ((qualityRating > 0 && atmosphereRating > 0 && priceRating > 0) && (qualityRating <= 5 && atmosphereRating <= 5 && priceRating <= 5));
			
			if (!validVotes) {
				alert('Please Vote in All Categories!');
				return false;
			}
			
			$(this).unbind('click');

			$.post("/save-rating.php", { tag: dispensaryTag, user: userEmail, quality: qualityRating, atmosphere: atmosphereRating, price: priceRating }, function(data) {
			
				$("#overallRating").stars("select", data.overallRating);
				$("#overallRatingTitle").html("Rating Saved, Thanks!");
				
				$("#cancelUserRatingsButton").click();
			}, "json");
		}
  		
		return false;
	});


	
	loadDispensaryListing();
	
});


function processRatings() {

	var ratingsData = $("#ratingsData");

	var num_ratings			= parseInt(ratingsData.attr('num_ratings'));
	var rating_quality		= parseFloat(ratingsData.attr('quality'));
	var rating_atmosphere	= parseFloat(ratingsData.attr('atmosphere'));
	var rating_price		= parseFloat(ratingsData.attr('price'));
	var rating_overall		= parseInt(ratingsData.attr('overall'));

	$("#overallRating").stars("select", rating_overall);
	
	switch (""+num_ratings) {
		case '0' : $("#overallRatingTitle").html('No Ratings!'); break;
		case '1' : $("#overallRatingTitle").html('Only 1 Rating'); break;
		default  : $("#overallRatingTitle").html('Averaging ' + num_ratings + ' Ratings');
	}	
}


function loadDispensaryListing() {
	
	var recordBlock = $('#recordBlock');
	
	var dispensary_lat	= parseFloat(recordBlock.attr('lat'));
	var dispensary_lng	= parseFloat(recordBlock.attr('lng'));

	var dispensary_name		= recordBlock.attr('dispensary_name');
	var dispensary_address	= recordBlock.attr('address');
	var dispensary_hours	= recordBlock.attr('hours');
	var dispensary_phone	= recordBlock.attr('phone');

	var dispensary_delivers		= recordBlock.attr('delivers');
	var dispensary_deliveryonly	= recordBlock.attr('deliveryonly');
	
	dispensary_menukey	= recordBlock.attr('menukey');
	dispensary_menuid	= recordBlock.attr('menuid');

	
	if (dispensary_lat && dispensary_lng) {

		var point = new google.maps.LatLng(dispensary_lat, dispensary_lng);

		var html = '';

		if (dispensary_name)
			html = '<h3 style="margin-top: 0;">' + dispensary_name + '</h3>';

		if (dispensary_address)
			html += '<p>' + dispensary_address + '</p>';

		if (dispensary_deliveryonly != 'Y')
			html += '<p><img src="/images/map_magnify.png" style="float: left; margin: 2px 4px 0 2px; width: 16px; height: 16px;" alt="Get Direction">Get Directions from <input type="text" id="directionsFrom" onKeyUp="checkForSearch();" value="" /><input type="hidden" id="directionsTo" value="' + dispensary_address + '" /><span class="directionsSearchButton" onClick="calcRoute();">Go!</span></p>';
		else
			html += '<p><img src="/images/telephone.png" style="float: left; margin: 2px 4px 0 2px; width: 16px; height: 16px;" alt="Dispensary Phone Number">' + dispensary_phone + '</p>';


		if (dispensary_delivers == 'Y') {
			infoWindowOffset	= new google.maps.Size(24, 8);
			iconImageUrl		= './images/delivery-van-large.png';
			iconSize			= new google.maps.Size(54, 38);
			iconPosition		= new google.maps.Point(0, 0);
			iconHotSpotOffset	= new google.maps.Point(27, 19);
		} else {
			infoWindowOffset	= new google.maps.Size(0, 21);
			iconImageUrl		= './images/green-cross-large.png';
			iconSize			= new google.maps.Size(43, 42);
			iconPosition		= new google.maps.Point(0, 0);
			iconHotSpotOffset	= new google.maps.Point(21, 21);
		}
		
		var marker = createMarker(map, point, dispensary_name, dispensary_address, html);

		mapMarkers.push(marker);
		mapHTMLS.push(html);
		
		map.setCenter(point);

		if (dispensary_menukey.length == 23 && dispensary_menuid.length == 3) {
			$.getScript('/js/process-menu.js');
		}
	}
	
	markerClicked(0);
}


function checkForSearch() {

	$('#directionsFrom').keyup( function(event) {
	
		if(event.keyCode == 13) {
		
			$('#directionsFrom').unbind('keyup');
			
			calcRoute();
			
			$('#directionsFrom').bind('keyup', function() { checkForSearch(); });
		};
	});
	
	return false;
}

function calcRoute() {

	var start	= $("#directionsFrom").val();
	var end		= $("#directionsTo").val();
	
	if ((start.length >= 2) && (end.length >= 2)) {
	
		var request = {
			origin: start, 
			destination: end,
			travelMode: google.maps.DirectionsTravelMode.DRIVING
		};
		
		directionsService.route(request, function(response, status) {
		
			if (status == google.maps.DirectionsStatus.OK) {

				if (openInfowindow != undefined) {
					openInfowindow.close();
				}
				
				$("#directionsPanel").html("");
				
				directionsDisplay.setDirections(response);
				
				$("#directionsPanel").prepend('<h3>How to Get to ' + end + '</h3><p style="font-style: italic;">...and don\'t forget to mention MMJshopping.com!</p>');

				$("#directionsPanel").delay(600).slideDown(800);
			}
		});
	} else {
		$("#directionsFrom").effect("highlight", {}, 3000).focus();
	}
	
	return false;
}

function setInfowindow(newInfowindow) {

	if (openInfowindow != undefined) {
		openInfowindow.close();
	}
	
	openInfowindow = newInfowindow;
}

function markerClicked(markerNum) {

	var infowindowOptions = {
		content: mapHTMLS[markerNum],
		pixelOffset: infoWindowOffset
	}
	
	var infowindow = new google.maps.InfoWindow(infowindowOptions);
		infowindow.open(map, mapMarkers[markerNum]);
	
	setInfowindow(infowindow);
}

function createMarker(map, latlng, title, address, html) {

	var markerImage = new google.maps.MarkerImage(iconImageUrl, iconSize, iconPosition, iconHotSpotOffset);

	var markerOptions = {
		title: title,
		icon: markerImage,
		position: latlng,
		flat: true,
		map: map
	}

	var marker = new google.maps.Marker(markerOptions);

	google.maps.event.addListener(marker, "click", function() {
		var infowindowOptions = { content: html, pixelOffset: infoWindowOffset }
		var infowindow = new google.maps.InfoWindow(infowindowOptions);
		setInfowindow(infowindow);
		infowindow.open(map, marker);
	});

	return marker;
}
