/************************************************************************/
/*							Local Widget JS
/*				for /default/templates/localWidget.jhtml
/*			   requires jquery.timers, and jquery.truncate
/************************************************************************/
$(document).ready(function () {
	doLocalWidget();
});

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();
	}
	// Now done at page generation time
	//$("#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=?");
	        var input = $("#cityStateZipInput").val().replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, "$1");
		$.ajax({type:"GET", dataType:"jsonp",
			    url: "/data/location-finder.json?query=" + input + "&jsoncallback=?",
			    jsonpCallback: "jsoncallbackLocation"+input,
			    success: function(response){
				      getRegionEventsData(response.zipcode,response.name, response.url);
				     }
			}
		       );
		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: "jsonp",
				url: "/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=?",
				jsonpCallback: "jsoncallback"+zipcode,
				success: function(response){
					if(response.length > 0){
						if (response[0].name == "ZIP_NULL")
						{
							$("#widgetEventsHolder").css({"display":"none"});
							$("#widgetNothingContainer").css({"display":"none"});
							$("#widgetErrorContainer").css({"display":"block"});
							return;
						}
						else if (response[0].name == "NO_ZIP")
						{
							$("#widgetEventsHolder").css({"display":"none"});
							$("#widgetNothingContainer").css({"display":"none"});
							$("#widgetErrorContainer").css({"display":"block"});
							return;
						} 
						else if (response[0].name == "NO_ITEMS")
						{
							$("#widgetEventsHolder").css({"display":"none"});
							$("#widgetNothingContainer").css({"display":"block"});
							$("#widgetErrorContainer").css({"display":"none"});
							return;
						}
						$("#widgetEventsHolder").css({"display":"block"});
						$("#widgetNothingContainer").css({"display":"none"});
						$("#widgetErrorContainer").css({"display":"none"});
						$("#locationHolder").text(regionName);
						$("#seeAllLink").attr("href",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/events/" + response[item].areaAlias + "/"  + response[item].eventAlias + "-" + 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/events/" + response[item].areaAlias + "/" + response[item].eventAlias + "-" + 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/events/" + response[item].areaAlias + "/" + response[item].eventAlias + "-" + 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);
						// Check if function exist invokes it. This function replace all href to the add free page, and it invokes only at the special pages and in case of special requests params (af=1)
						if(typeof updateAdsAfterWidgetLoads == 'function' && zipcode == "All") { 
						updateAdsAfterWidgetLoads(); 
						}
					}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,url);
					}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("All","NATIONWIDE", "/choose-a-city");
	doCityStateBlur();	
}
//});

var closeErrorWidget = function(id){
	$("#" + id).css({"display":"none"});
	$("#widgetEventsHolder").css({"display":"block"});
}
