﻿
function EventsCalendar(controlID,regionType,regionTypeId,minDate,maxDate,events,data){Number.prototype.pad2=function(){if(this<10&&this>=0)
return"0"+this;else if(this<100)
return""+this;else
return"00";}
DotNetDateParse=function(date){var dd=date.match(/(\d+)/)[0];return dd*1;}
Date.prototype.shortFormat=function(){return this.getFullYear().toString()
+(this.getMonth()+1).pad2().toString()
+this.getDate().pad2().toString();}
Date.prototype.shortFormatMonth=function(){return this.getFullYear().toString()
+(this.getMonth()+1).pad2().toString();}
var slideShowUpdatesCalendar=true;var slideshowIndex=0;var slideshowRunning=true;var interval;var store={};var events=[];var data={};var throbbing=false;function updateSlideshowFromCalendar(date){if(store[date.shortFormat()]&&store[date.shortFormat()].length>0){pause();slideShowUpdatesCalendar=true;gotoSlide(store[date.shortFormat()][0].index);}}
function buildStoreFromEvents(){store={};for(var i=0;i<events.length;i++){var dateIndex=(new Date(events[i].datefrom)).shortFormat();if(!store[dateIndex])
store[dateIndex]=[];store[dateIndex].push(events[i]);events[i]["index"]=i;}}
function buildEventsFromStore(){events=[];for(var key in store){for(var i=0;i<store[key].length;i++){store[key][i].index=events.length;events.push(store[key][i]);}}}
function addData(newData,date){var dataIndex=date.shortFormatMonth();data[dataIndex]=true;if(!newData||!(newData instanceof Array)||newData.length==0){if(date>maxDate)
return;var nextMonth=new Date(date.getFullYear(),date.getMonth()+2,0);requestData(nextMonth);return;}
for(var i=0;i<newData.length;i++){newData[i].datefrom=DotNetDateParse(newData[i].datefrom);newData[i].dateto=DotNetDateParse(newData[i].dateto);var date=new Date(newData[i].datefrom);if(date<minDate)
continue;var dateIndex=date.shortFormat();if(!store[dateIndex])
store[dateIndex]=[];store[dateIndex].push(newData[i]);}
buildEventsFromStore();if(throbbing){throbbing=false;gotoSlide(0);play();$("#"+controlID+" .next").attr("disabled",(slideshowIndex+1>=events.length)?"true":null);}}
function requestData(date){var dataIndex=date.shortFormatMonth();if(data[dataIndex])
return;data[dataIndex]="Pending";$.ajax({type:"POST",url:"/Services/EventsService.asmx/GetEventsForMonth",data:"{'identifier':'"+dataIndex+"', 'regionType':'"+regionType+"', 'regionTypeId':"+regionTypeId+"}",contentType:"application/json; charset=utf-8",dataType:"json",success:function(content){try{addData(content.d,date);}catch(e){alert(e);}}});}
function gotoSlide(index){if(events.length==0)
return;slideshowIndex=index;slideshowIndex=Math.min(slideshowIndex,events.length-1);slideshowIndex=Math.max(slideshowIndex,0);$("#"+controlID+" .previous").attr("disabled",(slideshowIndex<=0)?"true":null);$("#"+controlID+" .next").attr("disabled",(slideshowIndex+1>=events.length)?"true":null);$("#"+controlID+" .slideshow h4").html(events[slideshowIndex].name);$("#"+controlID+" .slideshow small").html(events[slideshowIndex].datetext);$("#"+controlID+" .slideshow p").html(events[slideshowIndex].text.substring(0,180));$("#"+controlID+" .slideshow a").attr("href",events[slideshowIndex].link);$("#"+controlID+" .slideshow a").html("Read More");$("#"+controlID+" .slideshow img").attr("src",events[slideshowIndex].image);if(!events[slideshowIndex].image)
$("#"+controlID+" .slideshow img").hide();else
$("#"+controlID+" .slideshow img").show();if(slideShowUpdatesCalendar)
$("#"+controlID+" .calendar").datepicker("setDate",new Date(events[slideshowIndex].datefrom));$("#"+controlID+" .calendar").datepicker("refresh");}
function nextSlideshow(){if(!slideshowRunning)return;slideshowIndex++;if(slideshowIndex>=events.length)
slideshowIndex=0;if(slideshowIndex>=events.length-5&&events[slideshowIndex]){var selectedDate=new Date(events[events.length-1].datefrom);var nextMonth=new Date(selectedDate.getFullYear(),selectedDate.getMonth()+2,0);requestData(nextMonth);}
gotoSlide(slideshowIndex);}
function pause(){slideshowRunning=false;clearInterval(interval);$("#"+controlID+" .toggleplay").val("Play");}
function play(){slideshowRunning=true;slideShowUpdatesCalendar=true;interval=setInterval(nextSlideshow,5000);$("#"+controlID+" .toggleplay").val("Pause");$(".events-calendar-control").show();}
function toggle(){if(slideshowRunning)
pause();else
play();}
$(function(){buildStoreFromEvents();$("#"+controlID+" .calendar").datepicker({onSelect:function(date){slideShowUpdatesCalendar=false;updateSlideshowFromCalendar(new Date(date));},beforeShowDay:function(date){var classes=[];if((new Date())==date)
classes.push("ui-datepicker-today");var dateIndex=date.shortFormat();if(store[dateIndex]&&store[dateIndex].length>0){classes.push("ui-datepicker-enabled");if(events[slideshowIndex]&&(new Date(events[slideshowIndex].datefrom))==date)
classes.push("ui-datepicker-selected");return[true,classes.join(" ")];}
return[false,classes.join(" ")];},onChangeMonthYear:function(year,month){requestData(new Date(year,month,0));},showOn:"both",dateFormat:"dd MM yy",hideIfNoPrevNext:true,minDate:minDate,maxDate:maxDate,changeMonth:false,changeYear:false,changeFirstDay:false,currentText:""});$("#"+controlID+" .previous").click(function(){slideShowUpdatesCalendar=true;pause();gotoSlide(slideshowIndex-1);return false;});$("#"+controlID+" .toggleplay").click(function(){toggle();slideShowUpdatesCalendar=true;return false;});$("#"+controlID+" .next").click(function(){slideShowUpdatesCalendar=true;pause();gotoSlide(slideshowIndex+1);return false;});$("#"+controlID+" .calendar").click(function(){pause();return true;});slideShowUpdatesCalendar=true;if(data[minDate.shortFormatMonth()]==true){gotoSlide(slideshowIndex);play();}
else{throbbing=true;requestData(minDate);}});};