/************************************************************************/
/*							Local Widget JS
/*				for /default/templates/localWidget.jhtml
/*			   requires jquery.timers, and jquery.truncate
/************************************************************************/
$(document).ready(function () {
	jQuery.ajax({
		url: "/modules/gck/localWidgetContent.jhtml",
		type: "GET",
		dataType: "html",
		data: {},
		cache: false,
		complete: function(res, status){
			// If successful, inject the HTML into all the matched elements
			if ( status == "success" || status == "notmodified" ){
				$("#localWidgetContainer").html(res.responseText);
					doLocalWidget();
			}else{
				//alert('error');
			}
		}
	});
});
var doLocalWidget = function(testDate){
	var environmentDomain = "";
	var lengthOfSingleLine = 25;
	//var lengthOfSingleLine = 27;
	var Months = ["Jan","Feb","Mar","Apr","May","June","July","Aug","Sept","Oct","Nov","Dec"];
	var daysOfWeek = ["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];
	//use this to test(changes the date): javascript:void(function(){var d = new Date();d.setFullYear(2009,8,15);doLocalWidget(d);}());
	if(testDate){
		var today=testDate;
	}else{
		var today=new Date();
	}
	var PCLocalDomain = "http://gocitykids.parentsconnect.com";
	/**************** Ajax requests can be sent to various pc local servers ******************/
	/******************** uncomment and tune for development/debugging. **********************/
	/*if(window && window.location && window.location.href){
		var theDomain = window.location.href.split('/')[2];
		if(theDomain === 'www.parentsconnect-d.mtvi.com'){
			PCLocalDomain = "http://gocitykids.parentsconnect-jq.mtvi.com";
		}else if(theDomain === 'www.parentsconnect-q.mtvi.com'){
			PCLocalDomain = "http://gocitykids.parentsconnect-jq.mtvi.com";
		}else if(theDomain.split(":")[0] === 'linux-clone-3.1515.mtvi.com'){
			PCLocalDomain = "http://gocitykids.parentsconnect-jq.mtvi.com";
		}else if(theDomain.split(":")[0] === 'localhost'){
			PCLocalDomain = "";
		}
	}*/
	$("#bigWhiteDate").text(Months[today.getMonth()] + " " + today.getDate());
	$("#yellowDay").text(daysOfWeek[today.getDay()]);
	var doCityStateBlur = function(event){
		if($("#cityStateZipInput").val() === ""){
			$("#cityStateZipInput").css({"background-image":"url('/assets/homepage/localwidget/cityStateZipBackground.gif')"});
		}
	}
	var doCityStateFocus = function(event){
		$(this).css({"background-image":"none"});
	}
	var doCityStateSubmit = function(event){
		//console.log(PCLocalDomain + "/data/location-finder.json?query=" + $("#cityStateZipInput").val() + "&jsoncallback=?");
		$.getJSON(PCLocalDomain + "/data/location-finder.json?query=" + $("#cityStateZipInput").val() + "&jsoncallback=?", function(response){
			if(response.alias){
				getRegionEventsData(response.zipcode,response.name, response.url);
			}else{
				//TODO: error handling
				console.log("no alias in response");
			}
		});
		event.preventDefault();
	}
	var tryHideBubble = function(){
		$(this).oneTime(1000,function(){
			if(!isBubbleMousedOver && !isEventMousedOver){
				$("#widgetBubble").css({"visibility":"hidden"});
			}
		});
	}
	var isBubbleMousedOver = false;
	var isEventMousedOver = false;
	var doEventMouseover = function(event){
		isEventMousedOver = true;
		var theEventHolder = $(event.target); 
		//traverse up the DOM until we find the eventHolder(which is what the event is actually bound to)
		while(theEventHolder && !theEventHolder.is(".eventHolder")){
			theEventHolder = theEventHolder.parent();
		}
		var theDisplayedEventIndex = theEventHolder.attr("id").replace("eventHolder","");
		theEventHolder = theEventHolder.children(".eventContentHolder");
		$("#widgetBubbleContent").html(theEventHolder.children(".eventDescription").html());
		$("#widgetBubble").css({"visibility":"visible","top":(110 + 75*theDisplayedEventIndex)+"px"});
	}
	var doEventMouseout = function(event){
		isEventMousedOver = false;
		var theEventHolder = $(event.target); 
		//traverse up the DOM until we find the eventHolder(which is what the event is actually bound to)
		while(theEventHolder && !theEventHolder.is(".eventHolder")){
			theEventHolder = theEventHolder.parent();
		}
		theEventHolder = theEventHolder.children(".eventContentHolder");
		tryHideBubble();
	}
	var doBubbleMouseout = function(event){
		isBubbleMousedOver = false;
		tryHideBubble();
	}
	var doBubbleMouseover = function(event){
		isBubbleMousedOver = true;
	}
	var eventsAttemptCount = 3;
	var getRegionEventsData = function(zipcode,regionName,url){
		//console.log(PCLocalDomain + "/data/service-calendar.json?widget_query=true&zipcode=" + zipcode + "&year=" + today.getFullYear() + "&month=" + (today.getMonth()+1) + "&day=" + today.getDate() + "&max=4&widget_category_id=0&widget_category=All&jsoncallback=?");
		try{
			$.ajax({
				type: "GET",
				dataType: "json",
				url: PCLocalDomain + "/data/service-calendar.json?widget_query=true&zipcode=" + zipcode + "&year=" + today.getFullYear() + "&month=" + (today.getMonth()+1) + "&day=" + today.getDate() + "&max=4&widget_category_id=0&widget_category=All&jsoncallback=?",
				success: function(response){
					if(response.length > 0){
						$("#locationHolder").text(regionName);
						$("#seeAllLink").attr("href",PCLocalDomain+url);
						
						
						
						
						
						eventsAttemptCount = 3
						for(var item in response){
							/*if(response[item].name && response[item].name.length > lengthOfSingleLine){
								$("#eventHolder" + item + " .eventTitle").css({"padding-top":"6px"})
							}else{
								$("#eventHolder" + item + " .eventTitle").css({"padding-top":"15px"})
							}*/
							$("#eventHolder" + item + " .eventTitle").html(response[item].name);
							$("#eventHolder" + item + " .eventTitle").attr("href","http://gocitykids.parentsconnect.com/calendar/" + response[item].attractionAlias + "#" + response[item].id);
							$("#eventHolder" + item + " .eventTitle").truncate(38,{
								chars: /\s/,
								trail: [ "", "" ]
							});
							$("#eventHolder" + item + " .eventDescription").html("<a class='eventDescriptionLink' href='http://gocitykids.parentsconnect.com/calendar/" + response[item].attractionAlias + "#" + response[item].id + "'>" + response[item].description + "</a>");
							$("#eventHolder" + item + " .eventDescription").truncate(120,{
								chars: /\s/,
								trail: [ "... <a style='color: ;' href='http://gocitykids.parentsconnect.com/calendar/" + response[item].attractionAlias + "#" + response[item].id + "'>more</a>", "" ]
								
							});
							$("#eventHolder" + item + " .eventLocation").html(response[item].location + ", " + response[item].state);
						}
						$(".eventHolder").bind("mouseover", doEventMouseover);
						$(".eventHolder").bind("mouseout", doEventMouseout);
					}else{
						//TODO: handle error
						//if(console && console.log){
						//	console.log("Error retrieving events data. 0 length response.");
						//}
					}
				},
				error: function(response){
					/* Sometimes jquery can't parse the json due to a newline character. I've fixed this server-side too but left this in place. It just tries 3 more times.*/
					if(eventsAttemptCount > 0){
						eventsAttemptCount--;
						getRegionEventsData(zipcode,regionName);
					}else{
						//TODO: error handling
						//console.log("Error retrieving events data");
						//if(console && console.log){
						//	console.log("Error retrieving events data");
						//}
					}
				}
			});
		}catch(e){
			alert("caught it: " + e);
		}
	}
	$("#cityStateZipInput").bind("blur",doCityStateBlur);
	$("#cityStateZipInput").bind("focus", doCityStateFocus);
	$("#cityStateZipForm").bind("submit", doCityStateSubmit);
	$("#widgetBubble").bind("mouseover", doBubbleMouseover);
	$("#widgetBubble").bind("mouseout", doBubbleMouseout);
	//init stuff
	getRegionEventsData("10024","NATIONWIDE");
	doCityStateBlur();
}
//});
