﻿/// <reference path="./jQuery.intellisense.js" />

/* News/Events ajax (on List Events & List Events By Day) */

$(function() {

    init({
		type:"eventsbyday",
		main:"#sectionId_411",
		next:"#sectionId_411 .DayButtonForward",
		prev:"#sectionId_411 .DayButtonBack",
		wrapping:"#sectionId_411 .eventsByDay",
		containing:"#sectionId_411 #dateAndItems",
		insertedEle:"div",
		insertedEleClass:" .dateItemWrapper",
		ULTopOffset: "32px",
		width:function() { return $(this.wrapping).width(); },
		current:0,
		isLoading: false, 
		getPrevURL:function()
			{
				var d = new Date();
				d.addDays(this.current-1);
				return getByDayHref(this.prev,d);
			},
		getNextURL:function()
			{
				var d = new Date();
				d.addDays(this.current+1);
				return getByDayHref(this.next,d);
			},
		configureParents:function()
			{
				//$(this.wrapping).attr("style","overflow: hidden;");    
				$(this.containing).attr("style","position: relative;");
			}
		});
		//,411,section.aspx,2010,03,17
            
    init({
		type:"events",
		main:"#sectionId_402",
		next:"#sectionId_402 .EventButtonForward",
		prev:"#sectionId_402 .EventButtonBack",
		wrapping:"#sectionId_402 .pnlEvents",
		containing:"#sectionId_402 .eventsContainer",
		insertedEle:"ul",
		insertedEleClass:" .EventsPreview",
		width:function() { return $(this.containing).width(); },
		current:1,
		file:"",
		section:"",
		assignSectionAndFile:function(ele) {
			 var tempArray = $(ele).attr("href").split('/');
			(tempArray[0] == "") ? tempArray.shift() : "";

			this.file = tempArray[0];
			this.section = tempArray[1];
		},
		isLoading: false,
		lower:function() { return (this.current <= 1) ? true : false; },
		upper:function() { 
		  if (this.current > 1)
			{
				if ($(this.containing+" .num"+this.current+" > li").size() != $(this.containing+" .num"+(this.current-1)+" > li").size())
					return true;
				else
					return false;
			}
			else
				return false;
		},
		getPrevURL:function()
			{
				if (this.file == "" && this.section == "")
					if ($(this.prev).attr("href") == null)
						this.assignSectionAndFile(this.next);
					else
						this.assignSectionAndFile(this.prev);

				return this.file+'/'+this.section+'/'+(this.current-1);
			},
		getNextURL:function()
			{
				if (this.file == "" && this.section == "")
					this.assignSectionAndFile(this.next);

				return this.file+'/'+this.section+'/'+(this.current+1);
			},
		configureParents:function() 
			{   
				$(this.containing).attr("style","position: relative; overflow: hidden;");
			}
		});
		//,402,section.aspx,2

	
	
	
	function init(ui)
	{
		//replace section.aspx with ajax.aspx
		if ($(ui.prev).attr('href') != null)
			$(ui.prev).attr('href', $(ui.prev).attr('href').toString().replace("section.aspx","ajax.aspx"));
		
		if ($(ui.next).attr('href') != null)
			$(ui.next).attr('href', $(ui.next).attr('href').toString().replace("section.aspx","ajax.aspx"));

		ui.configureParents();
		
		//bind custom event to attech new hrefs and in/active classes to arrows
		$().bind("complete", function(event, ui) {
		
			ui.isLoading = false;
		
			if (ui.type == "events")
			{
				if (!ui.lower())
					$(ui.prev).attr("href",ui.getPrevURL()).removeClass("inactive").addClass("active");
				else
					$(ui.prev).attr('href','').removeClass("active").addClass("inactive");
				
				if (!ui.upper())
					$(ui.next).attr("href",ui.getNextURL()).removeClass("inactive").addClass("active");
				else
					$(ui.next).attr('href','').removeClass("active").addClass("inactive");
			}
		});
		
		$(ui.prev).bind('click',ui,function(event){
			event.preventDefault();
		
			if (!ui.isLoading)
			{
				if ((ui.type == "events" && !ui.lower()) || ui.type == "eventsbyday")
				{
					ui.isLoading = true;
					ui = event.data;
				
					var URL = ui.getPrevURL();
					ui.current--;
					
					if ($(ui.containing+" .num"+ui.current).length == 0)
						addNewElementAndAjax(ui, URL, "prev");
					else
						animateAndPosition(ui,"prev");
					
				}
				else 
				{ 
					ui.isLoading = false;
				}
			}
		});
		
		$(ui.next).bind('click',ui,function(event){
			event.preventDefault();
			
			if (!ui.isLoading)
			{
				ui.isLoading = true;
				ui = event.data;

				if ((ui.type == "events" && !ui.upper()) || ui.type == "eventsbyday")
				{
					var URL = ui.getNextURL();        
					ui.current++;
					
					if ($(ui.containing+" .num"+ui.current).length == 0)
						addNewElementAndAjax(ui, URL, "next");
					else
						animateAndPosition(ui,"next", false);
				
				}
				else 
				{ 
					ui.isLoading = false;
				}
			}
		});
	}

});


function addNewElementAndAjax(ui, URL, direction)
{
    var newEle = document.createElement(ui.insertedEle);
    newEle.setAttribute("class", ui.insertedEleClass.substring(2,ui.insertedEleClass.length) +" num"+ui.current);

    $(newEle).load(URL + ui.insertedEleClass +" > *",function(){
        
        if (direction == "prev")
        {
            $(newEle).prependTo($(ui.containing));
        }

        if (direction == "next")
        {
            $(newEle).appendTo($(ui.containing));
        }
        
        animateAndPosition(ui, direction, true);
    });
}

function animateAndPosition(ui, direction, justAjaxd)
{
	var select;
	(ui.current < 0) ? select = "first" : select = "last";
		
    if (justAjaxd)
	{
        $(ui.containing+" > "+ui.insertedEle+":"+select).addClass(ui.insertedEleClass.substring(2,ui.insertedEleClass.length)+" num"+ui.current);
	}
    
    var left;

    if (direction == "prev")
    {
        $(ui.wrapping+" .num"+ui.current).css({'position':'absolute', 'left': '-'+ui.width()+'px'});
        left = "+="+ui.width()+"px";
    }

    if (direction == "next")
    {    
        $(ui.wrapping+" .num"+ui.current).css({'position':'absolute', 'left': ui.width()+'px'});
        left = "-="+ui.width()+"px";
    }

	$(ui.containing+" > "+ui.insertedEle).css({'position': 'absolute', 'width': ui.width()+'px'});
	
	//animate all elements within containing. 
	//on complete: add position/width to all inserted ele's, and call complete event
    $(ui.containing+" > "+ui.insertedEle).animate({"left": left},{complete: function() {
			$(ui.wrapping+" .num"+ui.current).css({'position':'relative'});	
			$().trigger("complete",ui);
		}
	});
    
}


function getByDayHref(link, date)
{
    var tempArray = $(link).attr("href").split('/');
    (tempArray[0] == "") ? tempArray.shift() : "";
    
    var month = (date.getMonth().toString().length == 1) ? "0"+(date.getMonth()+1).toString() : (date.getMonth()+1).toString();
    var day = (date.getDate().toString().length == 1) ? "0"+date.getDate().toString() : date.getDate().toString();
    
    return tempArray[0]+'/'+tempArray[1]+'/'+date.getFullYear()+'/'+month+'/'+day;
}

Date.prototype.addDays = function(days) {
    this.setDate(this.getDate()+days);
}
