/*global datepicker instance*/
var GLOBAL_datepicker;

var MODECATEGORY = false;
var FIRSTLOAD = true;

$(document).ready(function() {

    GLOBAL_datepicker = $('.date-picker').datepicker({
        dateFormat: 'yy-mm-dd',
        onSelect: fnDateSelected,
        dayNames: ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
        dayNamesMin: ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
        firstDay: 1
    });
    

    //setup dropdown events
    $('div.cat-dd-inner').mouseover(fnOpenDDVenues);
    $('div.cat-dd-outer').click(fnOpenDDVenues);
    $('div.cat-dd-inner').mouseout(fnCloseDDVenues);
    $('div.category-list').mouseout(fnCloseDDVenues);
    
    fnSetupIntrvls();
});

function fnSetupIntrvls() {
    var chkFltrIntrvl;
    clearInterval(chkFltrIntrvl);

    chkFltrIntrvl = setInterval(fnCheckFilter, 600);
}

//Global to check if overlay was clicked

function fnShowMoreInfo(iEventID, iDateID) {

    var eventNode = $(GLOBAL_EventsXMLdoc).find('event[id="' + iEventID + '"]');

    var sEvntTitle = $(eventNode).find('titleText').text();
    var sEvntDesc = $(eventNode).find('longDescription').text();
    var sEvntsub = $(eventNode).find('shortDescription').text();
    var sEvntsubtext = $(eventNode).find('shortDescription').text();
    var sEvntWhereLn = $(eventNode).find('where').text();
    var sEvntWhenLn = $(eventNode).find('eventDates date[id="' + iDateID + '"]').attr('date_text');
    var sEvntImgURL = $(eventNode).find('image').text() == 'http://www.merivale.com.au/images/events/fullsize/' ? '' : $(eventNode).find('image').text();
    var sEvntTracking = $(eventNode).find('tracking').text();

    var sHashLnk = self.location.hash ? '_' + iEventID : '%230_0_0_' + iEventID;


    $('iframe.share-iframe').attr('src', 'http://' + self.location.host + '/services/share-this-button.aspx?url=' + self.location.href.replace('#', '%23') + sHashLnk + "&image=" + sEvntImgURL + "&shortDesc=" + escapeHTML(sEvntsub) + "&title=" + sEvntTitle);

    $('.overlay-info-title h2').text(sEvntTitle);
    if (sEvntImgURL != '') {
        $('.overlay-info-img').html('<img src="' + sEvntImgURL + '" alt="' + sEvntTitle + '" height="360" width="360"/>');
    } else {
        $('.overlay-info-img').empty();
    }
    $('.overlay-info-desc').html(sEvntDesc);
    $('.overlay-info-sub').html(sEvntsub);
    $('.overlay-info-ww p').html('<strong>When:</strong> ' + sEvntWhenLn + '<br /><strong>Where:</strong> ' + sEvntWhereLn);



    // now do a call to ga
    if (sEvntTracking.length > 0) {
        //alert(sEvntTracking)

        //page tracker is set in the pagefooter.ascx
        pageTracker._trackPageview("/whatson/" + sEvntTracking);
    }




}

function fnDateStep(iDays) {
    $('div.events-display').hide();
    fnSetFilter(null, null, null, iDays);
}

function fnOpenDDVenues() {
    $('div.cat-dd-inner').show();
}
function fnCloseDDVenues() {
    $('div.cat-dd-inner').hide();
}

function fnSetCatDDL(iCatID) {
	
    $('div.cat-dd-inner a.cat-slctd').removeClass('cat-slctd');
    $('div.cat-dd-inner a[rel="' + iCatID + '"]').addClass('cat-slctd');
    var itmTxt = $('div.cat-dd-inner a.cat-slctd').text();
    $('#slctd_cat_lbl').text(itmTxt);
	
	//Override Date & Venue filters. Query for Category data
	
}

/*GLOBAL Cached url hash*/
var sFilterCache = "'-empty-'";

function fnCheckFilter() {
    if (sFilterCache != self.location.hash) {
        fnSetFilter();
        sFilterCache = self.location.hash;
        fnGetEvents();
    }
}

function fnDateSelected(dateText, inst) {
    $('div.events-display').hide();
    var dateInt = parseInt(escape(dateText).replace('-', '').replace('-', ''));

    fnSetFilter(null, dateInt, null);
}

function fnFltrByLoc(locID) {
    $('div.venue-list a.venu-lnk').css('color', '');
    $('div.venue-list a.venu-lnk[rel="' + locID + '"]').css('color', '#E9372A');

    fnSetFilter(locID, null, null);
}

function fnFltrByCat(catID) {
    fnSetCatDDL(catID);
    $('div.cat-dd-inner').hide();
    fnSetFilter(null, null, catID);
}

function fnSetFilter(locID, dateInt, catID, iDayStep) {
    var filterArr = location.hash.substr(1).split('_');

	// Location
    if (locID != null) {
        locID = parseInt(locID);
		catID = null; /** 2010-05-25: JM - Cannot search category & venue at same time **/
    } else {
        if (catID != null || (isNaN(parseInt(filterArr[0])) || filterArr[0] == "0")) {
			$('div.venue-list a.venu-lnk').css('color', '');
			locID = 0;
		} else {
			locID = parseInt(filterArr[0]);
			catID = null;
		} 
    }

	// Date
    if (dateInt != null) {
        if (dateInt.toString().length != 8) {
            dateInt = 0;
        }
    } else {

        dateInt = isNaN(parseInt(filterArr[1])) ? 0 : parseInt(filterArr[1]);
        if (dateInt.toString().length != 8) {
            //dateInt = 0;
	    //dateInt = "YYYYmmdd"
	    var d = new Date();
	    var year = d.getFullYear();
	    var month = d.getMonth() + 1;
	    var day = d.getDate();
	    
	    var dateString = year.toString() + (month < 10 ? "0" + month.toString() : month.toString()) + (day < 10 ? "0" + day.toString() : day.toString());
	    
	    dateInt = isNaN(parseInt(dateString)) ? 0 : parseInt(dateString);
        }
    }

	// Category
    if (catID != null) {
        catID = parseInt(catID);
		locID = 0; /** 2010-05-25: JM - Cannot Search category and location at same time **/
    } else {
		if (locID != 0 || isNaN(parseInt(filterArr[2])) || parseInt(filterArr[2]) == "0") {
			catID = 0
		}
		else {
			catID = parseInt(filterArr[2]);
			locID = 0;
		}
    }

    var sOverlaySeg = '';
    if (filterArr.length == 4) {
        if (!isNaN(parseInt(filterArr[3]))) {
            sOverlaySeg = '_' + parseInt(filterArr[3]);
        }
    }

    if (iDayStep) {
	MODECATEGORY = (catID != 0);
	
	if (iDayStep == -1 && MODECATEGORY)
	{
	    //rather than just loading the previous day, scan backwards to find the earliest date an event exists with the current filters
	    var locID = 0;
	    var dateInt = 0;
	    var catID = 0;
	    var fltrdNodes;
	    var bDisplayPopup = false;
	
	    var maxDateFound = false;
	
	    /*SET SEARCH CRITERIA*/
	    if (self.location.hash.length > 0) {
		var filterArr = self.location.hash.substr(1).split('_');
		locID = parseInt(filterArr[0]);
		dateInt = parseInt(filterArr[1]);
		catID = parseInt(filterArr[2]);
	    }
	
	
	    var srchDate = new Date();
	    srchDate.setHours(0, 1, 1, 1);
	
	    var year = parseInt(dateInt / 10000);
	    var month = parseInt(dateInt % 10000 / 100 - 1);
	    var day = parseInt(dateInt % 10000 % 100);
	
	    if (dateInt != 0) {
		srchDate.setFullYear(parseInt(dateInt / 10000), parseInt(dateInt % 10000 / 100 - 1), parseInt(dateInt % 10000 % 100));
	    }
		

	    
	    // 2010-05-25: JM
	    if (MODECATEGORY) {
		    //console.log("Mode: Category (" + catID + ")");
		    //Reset the location ID to 0
		    locID = 0;

		    var curDate = new Date(year, month, day);
		    //curDate.setHours(0, 1, 1, 1);
			    
		    var actualDate = new Date();
		    actualDate.setHours(0,0,0,0);
		    
		    //if (curDate < actualDate)
			//    curDate = actualDate;
			    
		    var maxDate = new Date(year - 10, month, day);
		    var hasEvents = false;
		    //Determine the first day when an event for the category is on.
		    var matched = $(GLOBAL_EventsXMLdoc).find("Location").find("Events").find("event").find("eventCategories").find("category[id=" + catID + "]").each(function() {
			//find the latest date for the categories that is less than the selected date
			
			var dates = $(this).parent().prev().find("date").each(function() {
				var dateString = $(this).attr("date_day");
				var datetimeParts = dateString.split(" ");
				var dateParts = datetimeParts[0].split("/");

				var eventDay = dateParts[0];
				var eventMonth = parseInt(dateParts[1]) - 1;
				var eventYear = dateParts[2];

				var eventDate = new Date(eventYear, eventMonth, eventDay);
				
				if (eventDate >= maxDate && eventDate < curDate) {
					hasEvents = true;
					maxDate = new Date(eventDate.getFullYear(), eventDate.getMonth(), eventDate.getDate());									    
				}
			});
		    });
		    
		    if (hasEvents)
		    {
			srchDate.setFullYear(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
			
			if (!maxDateFound)
			{
			    //update hash
					    
			    var year = maxDate.getFullYear();
			    var month = maxDate.getMonth() + 1;
			    var day = maxDate.getDate();
			    
			    var dateString = year.toString() + (month < 10 ? "0" + month.toString() : month.toString()) + (day < 10 ? "0" + day.toString() : day.toString());
			    
			    
			    fnDateSelected(dateString,null);
			    //sFilterCache = self.location.hash;
			    
			    maxDateFound = true;
			    
			    dateInt = parseInt(self.location.hash.substr(1).split('_')[1]);
			    
			}
		    }
		    else
		    {
			var dCur = new Date();
	    
			if (dateInt != 0) {
			    dCur.setFullYear(parseInt(dateInt / 10000), parseInt(dateInt % 10000 / 100 - 1), parseInt(dateInt % 10000 % 100))
			}
			//add date step
			dCur.setDate(dCur.getDate() + iDayStep);
		
			var sYear = '' + dCur.getFullYear();
			var iMon = dCur.getMonth() + 1;
			var sMon = '' + iMon < 10 ? '0' + iMon : iMon;
			var sDay = '' + dCur.getDate() < 10 ? '0' + dCur.getDate() : dCur.getDate();
			dateInt = parseInt(sYear + sMon + sDay);
		    }
	    }
	}
	else
	{
	    var dCur = new Date();
	    
	    if (dateInt != 0) {
		dCur.setFullYear(parseInt(dateInt / 10000), parseInt(dateInt % 10000 / 100 - 1), parseInt(dateInt % 10000 % 100))
	    }
	    //add date step
	    dCur.setDate(dCur.getDate() + iDayStep);
    
	    var sYear = '' + dCur.getFullYear();
	    var iMon = dCur.getMonth() + 1;
	    var sMon = '' + iMon < 10 ? '0' + iMon : iMon;
	    var sDay = '' + dCur.getDate() < 10 ? '0' + dCur.getDate() : dCur.getDate();
	    dateInt = parseInt(sYear + sMon + sDay);
	}
    }


    if (sFilterCache != "'-empty-'" || FIRSTLOAD) {
	self.location.hash = locID + '_' + dateInt + '_' + catID + sOverlaySeg;
    }


    
    FIRSTLOAD = false;
	

}

/*Global cached XML and inProcEvents flag*/
var GLOBAL_EventsXMLdoc = null;
var GLOBAL_inProcEvents = false;

function fnGetEvents() {
    if (GLOBAL_EventsXMLdoc == null && !GLOBAL_inProcEvents) {
        /*GLOBAL_inProcEvents bool used to stop multiple gets to the xml file on rapid click or double click*/
        GLOBAL_inProcEvents = true;
        $.get("xml/Events.xml", function(data) {
            GLOBAL_EventsXMLdoc = data;
            fnClearEvents()
            fnDisplayEvents();
            GLOBAL_inProcEvents = false;
        }, "xml");
    } else if (!GLOBAL_inProcEvents) {
        fnClearEvents();
        fnDisplayEvents();
    }
}

function fnClearEvents() {
    $('div.events-display').empty();
}

function fnDisplayEvents() {
    //hide no events div
    $('div.no-items').hide();
    /*Display loading div*/
    $('div.events-display').append('<div class="loading"><span>Loading events...</span></div>');


    var locID = 0;
    var dateInt = 0;
    var catID = 0;
    var fltrdNodes;
    var bDisplayPopup = false;

	

    /*SET SEARCH CRITERIA*/
    if (self.location.hash.length > 0) {
        var filterArr = self.location.hash.substr(1).split('_');
        locID = parseInt(filterArr[0]);
        dateInt = parseInt(filterArr[1]);
        catID = parseInt(filterArr[2]);
        if (filterArr.length == 4) {
            bDisplayPopup = true;
        }
    }


    var srchDate = new Date();
    srchDate.setHours(0, 1, 1, 1);

	var year = parseInt(dateInt / 10000);
	var month = parseInt(dateInt % 10000 / 100 - 1);
	var day = parseInt(dateInt % 10000 % 100);

    if (dateInt != 0) {
        srchDate.setFullYear(parseInt(dateInt / 10000), parseInt(dateInt % 10000 / 100 - 1), parseInt(dateInt % 10000 % 100));
    }
	

	MODECATEGORY = (catID != 0)
	// 2010-05-25: JM
	if (MODECATEGORY) {
		//console.log("Mode: Category (" + catID + ")");
		//Reset the location ID to 0
		locID = 0;

        var curDate = new Date(year, month, day);
        //curDate.setHours(0, 1, 1, 1);
		
		var actualDate = new Date();
		actualDate.setHours(0,0,0,0);
		
		if (curDate < actualDate)
			curDate = actualDate;
			
		var hashUpdated = false;
		var minDate = new Date(year + 10, month, day);
		var hasEvents = false;
		//Determine the first day when an event for the category is on.
		var matched = $(GLOBAL_EventsXMLdoc).find("Location").find("Events").find("event").find("eventCategories").find("category[id=" + catID + "]").each(function() {
			
			//current date
			
			//find the earliest date for the categories
			var dates = $(this).parent().prev().find("date").each(function() {
				var dateString = $(this).attr("date_day");
				var datetimeParts = dateString.split(" ");
				var dateParts = datetimeParts[0].split("/");

				var eventDay = dateParts[0];
				var eventMonth = parseInt(dateParts[1]) - 1;
				var eventYear = dateParts[2];

				var eventDate = new Date(eventYear, eventMonth, eventDay);
				if (eventDate <= minDate && eventDate >= curDate) {
					hasEvents = true;
					minDate = new Date(eventDate.getFullYear(), eventDate.getMonth(), eventDate.getDate());									    
				}
			});
			
			
			
		});
		
		if (hasEvents) {
			srchDate.setFullYear(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
			
			if (!hashUpdated)
			{
			    //update hash
					    
			    var year = minDate.getFullYear();
			    var month = minDate.getMonth() + 1;
			    var day = minDate.getDate();
			    
			    var dateString = year.toString() + (month < 10 ? "0" + month.toString() : month.toString()) + (day < 10 ? "0" + day.toString() : day.toString());
			    
			    
			    fnDateSelected(dateString,null);
			    sFilterCache = self.location.hash;
			    
			    hashUpdated = true;
			}
		}
		
	}

	
    if (locID != 0) {
        fltrdNodes = $(GLOBAL_EventsXMLdoc).find('Location[id=' + locID + ']');
    } else {
        fltrdNodes = $(GLOBAL_EventsXMLdoc).find('Location');
    }

	

    //set the date display heading
    $('div.date-nav-head p.date-text').text(dateFormat(srchDate, "dddd dS mmmm"));
    //set the datepicker date
    GLOBAL_datepicker.datepicker('setDate', srchDate);   
    
    $("div.breadcrumb span").hide();

    var selectedDate = new Date(srchDate);
    $("div.breadcrumb").css("visibility", "visible");
    $("div.breadcrumb span.bc-date").text(dateFormat(selectedDate, "ddd dd mmmm yyyy"));
    $("div.breadcrumb span.bc-date").show();

    if (locID != 0) {
        var venue = $("a.venu-lnk[rel='" + locID + "']").text();
        $("div.breadcrumb span.bc-venue").text(venue);
        $("div.breadcrumb span.bc-venue").show();
        $("div.breadcrumb span.bc-venue").css("color", "#E9463C");

        
        if (MODECATEGORY) {
			/** Show Event in Breadcrumb
			 * Clear out the date and venue filters
			 */
			var event = $("#slctd_cat_lbl").text();

			$("div.breadcrumb span.bc-venue").css("color", "#000");
			$("div.breadcrumb span.bc-venue").hide();
			$("div.breadcrumb span.bc-date").hide();
			
            $("div.breadcrumb span.bc-event").text(event);
            $("div.breadcrumb span.bc-event").show();
            $("div.breadcrumb span.bc-event").css("color", "#E9463C");
        }
		
    }
    else {
        $("div.breadcrumb span.bc-venue").text("All Venues");
        $("div.breadcrumb span.bc-venue").css("color", "#E9463C");
        $("div.breadcrumb span.bc-venue").show();
		
    }
	
	
    if (MODECATEGORY) {
		/** Show Event in Breadcrumb
		 * Clear out the date and venue filters
		 */
		var eventItem = $(".category-list .cat-dd-inner a[rel=" + catID + "]").removeClass("cat-slctd");
		eventItem.attr("class", "cat-slctd");
		var event = eventItem.text();
		$("#slctd_cat_lbl").text(event);
		
		$("div.breadcrumb span.bc-venue").hide();
		
        $("div.breadcrumb span.bc-event").text(event);
        $("div.breadcrumb span.bc-event").show();
        $("div.breadcrumb span.bc-event").css("color", "#E9463C");
    } else {
		$("div.breadcrumb span.bc-event").hide();
		$("div.breadcrumb span.bc-venue").show();
		$("#slctd_cat_lbl").text("All Events");
	}
	


    var bEventsDisplayed = false;
    $(fltrdNodes).find('Events').find('event').find('eventDates').find('date').each(function() {
        var curDateStr = $(this).attr('date_day');
        curDateStr = curDateStr.substr(0, curDateStr.indexOf(' '));
        var curYear = parseInt(curDateStr.substr(curDateStr.lastIndexOf('/') + 1));
		
		var curMonthString = curDateStr.slice(curDateStr.indexOf('/') + 1, curDateStr.lastIndexOf('/'));
		if (curMonthString.slice(0,1) == '0')
			curMonthString = curMonthString.slice(1,2);
			
        var curMon = parseInt(curMonthString) - 1;
        var curDay = parseInt(curDateStr.slice(0, curDateStr.indexOf('/')));

        var curDate = new Date();

        curDate.setFullYear(curYear, curMon, curDay);
        curDate.setHours(0, 1, 1, 1);

        if (curDate.toDateString() == srchDate.toDateString()) {
            var curLocNode = $(this).parent().parent().parent().parent();
            var curEventNode = $(this).parent().parent();
            var curLocID = $(curLocNode).attr('id');
            var curLocName = $(curLocNode).attr('name');
            var bCatMatched = false;

            if (catID != 0) {
                $(curEventNode).find('eventCategories').find('category').each(function() {
                    var thisCatID = parseInt($(this).attr('id'));
                    if (catID == thisCatID) { bCatMatched = true; }
                });
            } else { /*Cat is not defined*/
                bCatMatched = true;
            }

            if (bCatMatched) {
                if ($('div.events-display').find('div.location[rel=' + curLocID + ']').length == 0) {
                    $('div.events-display').append('<div class="location" rel="' + curLocID + '"><h2 class="location-title">' + curLocName + '</h2></div>');
                }



                var curEvntID = $(curEventNode).attr('id');

                var sEvntTitle = $(curEventNode).find('titleText').text();
                var sEvntDesc = $(curEventNode).find('shortDescription').text();
                /*inline scripts were breaking the functioinality, had to remove from event*/
                sEvntDesc = sEvntDesc.replace(/<script>/g, '<span style="display:none">');
                sEvntDesc = sEvntDesc.replace(/<script [.\s\t\n]{0,}>/g, '<span style="display:none">');
                sEvntDesc = sEvntDesc.replace(/<\/script>/g, '</span>');

                //alert($(curEventNode).text());

                var sEvntWhereLn = $(curEventNode).find('where').text();
                var sEvntWhenLn = $(this).attr('date_text');
                var sEvntThmURL = $(curEventNode).find('thumbnail').text();
                var sEvntLnk = $(curEventNode).find('url').text();
                var sEvntWebsite = $(curEventNode).find('website').text();
                var sEvntDateID = $(this).attr('id');
                var sEvntTracking = $(curEventNode).find('tracking').text();


                var eventHtml = '<div class="event" rel="' + curEvntID + '">';
                eventHtml += '<div class="eventImage"><img border="0" src="@@imgsrc" alt="@@imgalt"/></div>';
                eventHtml += '<h4>@@eventtitle</h4>';
                eventHtml += '<p>@@eventsub</p>';
                eventHtml += '<p><strong>When: </strong>@@whencaption';
                eventHtml += '<br />';
                eventHtml += '<strong>Where: </strong>@@wherecaption</p>';
                //eventHtml +='<a onclick="fnShowMoreInfo('+curEvntID+')" class="bulletlink moreInfo" href="@@infohref">More</a>';

                if (sEvntWebsite.length > 0) {
                    eventHtml += '<a target="blank" class="bulletlink" href="' + sEvntWebsite + '">More</a>';
                } else {
                    eventHtml += '<a onclick="fnShowMoreInfo(' + curEvntID + ',' + sEvntDateID + ')" class="bulletlink moreInfo" href="@@infohref" rel="' + sEvntLnk + '">More</a>';
                }



                eventHtml += '</div>';

                eventHtml = eventHtml.replace('@@imgsrc', sEvntThmURL);
                eventHtml = eventHtml.replace('@@imgalt', sEvntTitle);
                eventHtml = eventHtml.replace('@@eventtitle', sEvntTitle);
                eventHtml = eventHtml.replace('@@eventsub', sEvntDesc);
                eventHtml = eventHtml.replace('@@whencaption', sEvntWhenLn);
                eventHtml = eventHtml.replace('@@wherecaption', sEvntWhereLn);
                eventHtml = eventHtml.replace('@@infohref', '#fancy-display-content'); //sEvntLnk);

                $('div.events-display').find('div.location[rel=' + curLocID + ']').append(eventHtml);
                bEventsDisplayed = true;

            }
        }
    });
    //fade in display items if hidden
    $('div.events-display').fadeIn(200);

    if (bEventsDisplayed) {
        //Run only when events are displayed

        /*remove the loading div*/
        $('div.events-display div.loading').remove();
        /*set fancybox on the more links*/
        $("div.event a.moreInfo").fancybox({
            'frameWidth': 410,
            'frameHeight': 800,
            'centerOnScroll': false,
            'padding': 0,
            'overlayOpacity': 0.6,
            'hideOnContentClick': false,
            'callbackOnClose': fnFancyClose
        });

        //display moreinfo if hash contains event id
        if (bDisplayPopup) {
            var iEvntPopup = parseInt(filterArr[3]);
            $('div.event[rel="' + iEvntPopup + '"] a.moreInfo').click();

            // update the meta tags for facebook
            $('meta[name=title]').attr("content", "ssdg");
            $('meta[name=description]').attr("content", "vsd");

        }
    } else {
        //run only when no events are displayed
        $('div.no-items').show();
        $('div.events-display div.loading').remove();
    }
}

function fnFancyClose() {
    //self.location.hash = self.location.hash.slice(1, self.location.hash.lastIndexOf('_'));
}


function escapeHTML(str) {
    var div = document.createElement('div');
    var text = document.createTextNode(str);
    div.appendChild(text);
    return div.innerHTML;
};