/*
//	Originally build by Mario Vasquez	-	10/14/2009
//	update	- 10/15/2009	made minor updates to day/week/month functionality.  Added jquery transitions
*/
Date.prototype.getDateFromWeek = function() {
	var onejan = new Date(this.getFullYear(),0,1);
	var tempdate = new Date(Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7));
	return tempdate.getDate();
}
Date.prototype.getWeek = function() {
	var onejan = new Date(this.getFullYear(),0,1);
	return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
}
$('#evntJumper a.jumpLeft').click(function () {
	var posVal = $('#evntJumper .jumpTrack').css("left");
	var posNum = parseInt(posVal);
	jumpScroller(eViewBy, 'left', posNum);
});

$('#evntJumper a.jumpRight').click(function () { 
	var posVal = $('#evntJumper .jumpTrack').css('left');
	var posNum = parseInt(posVal);
	jumpScroller(eViewBy, 'right', posNum);
});

$('a.tab').click(function () {
	var title = $(this).attr('title');
	
	$("a.tab").parent().removeClass('sel');
	$(this).parent().addClass('sel');
	
	if (title == 'search' || title == eViewBy) {
		if (title == 'search' && $('.searchOptions').css('display') != 'block') {
			if (eViewBy != 'search') {
				$("#evntJumper").fadeOut('normal');
			}
			$(".searchOptions").show("blind", {direction:"vertical"}, 500);
		}
		if (title == eViewBy && eViewBy != 'search') {
			$(".searchOptions").hide("blind", {direction:"vertical"}, 500);
			$("#evntJumper").fadeIn('normal');
		}
		return false;
	}
});
$('.closeSearch').click(function () {
	$(".searchOptions").hide("blind", {direction:"vertical"}, 500);
	if (eViewBy != 'search') {
		$("#evntJumper").fadeIn('normal');
		$(".evnt-nav li.sel").removeClass('sel');
		$("li.dot").addClass('sel');
	}
});

function jumpScroller(type, dir, posNum) {
	var newPosNum = 0;
	var newPos = new String();
	var wannabeStartDate = '';
	var wannabeDates = new Array();
	var nextLeftDate = new Date(dateCursor);
	var i = 0;
	if(dir == 'left' && $('.evnt-jumpHolder .jumpLeft').hasClass("disabled"))
		return;

	//Prepare the next set of eligible dates
	var dateOffset = (dir == 'left' ? -datesToJump : datesToJump);
	var wannabeOffset = (dir == 'left' ? -datesToJump: totalJumpersInView);
	if (type == 'day' || type == 'search') {
		nextLeftDate.setDate(dateCursor.getDate() + dateOffset);
		var wannabeStartDate = new Date(dateCursor);
		wannabeStartDate.setDate(wannabeStartDate.getDate() + wannabeOffset);
		wannabeDates = getNextDays(wannabeStartDate, datesToJump, dir);
	} else if (type == 'week') {
		nextLeftDate.setDate(dateCursor.getDate() + (7*dateOffset));
		var wannabeStartDate = new Date(dateCursor);
		wannabeStartDate.setDate(wannabeStartDate.getDate() + (7*wannabeOffset));
		wannabeDates = getNextWeeks(wannabeStartDate, datesToJump, dir);
	} else if (type == 'month') {
		nextLeftDate.setMonth(dateCursor.getMonth() + dateOffset);
		var wannabeStartDate = new Date(dateCursor);
		wannabeStartDate.setMonth(wannabeStartDate.getMonth() + wannabeOffset);
		wannabeDates = getNextMonths(wannabeStartDate, datesToJump, dir);
	}
	dateCursor = new Date(nextLeftDate);

	//If scrolling left
	if (dir == 'left') {
		// we haven't made these dates yet, so lets make more
		if (wannabeDates[0] < leftDate) {
				makeMoreJumpDates(type, wannabeDates, dir);
		}	
		if (!showPastEvents && (nextLeftDate <= todayDate)) {
			// disable arrow to scroll to older events and bounce back
			newPos = '-'+(wannabeDates.length*jumpDateWidth)+'px';
			$('#evntJumper .jumpTrack').css({left:newPos});
			jumpTo('0px');
			dateCursor = new Date(todayDate);
		} 
		else{
			newPosNum = (jumpDateWidth*(datesToJump));
			newPos = newPosNum+"px";			
			jumpTo('+='+newPosNum+'px');
		}
		
		if (showPastEvents || (nextLeftDate <= todayDate)) {
			$('.evnt-jumpHolder .jumpLeft').addClass("disabled");
		} else {
			$('.evnt-jumpHolder .jumpLeft').removeClass("disabled");
		}
	} 
	else if (dir == 'right') {
		// we haven't made these dates yet so lets make more
		if (wannabeDates[wannabeDates.length-1] > rightDate) {
			makeMoreJumpDates(type, wannabeDates, dir);
		}

		newPosNum = (jumpDateWidth*(datesToJump));
		newPos = (newPosNum)+"px";
		
		jumpTo('-='+newPosNum+'px');
		
		$('.evnt-jumpHolder .jumpLeft').removeClass("disabled");
	}
	updateCrntDates();
}

function resetScroller(crntPos) {
	var posNum = parseInt(crntPos);
	if (posNum >= 0) {
		$('.evnt-jumpHolder .jumpTrack').animate({ 
			left: '0px'
		}, 150 );
	}
}

function jumpTo(newPos) {
	if ($('#evntJumper .jumpTrack').css("left") != newPos) {
		$('.evnt-jumpHolder .jumpTrack').animate({ 
			left: newPos
		}, 400 );
	}
}

function updateCrntDates() {
	jumpViewDate = new Date(crntJumpYear, crntJumpMonth, crntJumpDay);
	crntJumpYear = jumpViewDate.getFullYear();
	crntJumpMonth = jumpViewDate.getMonth();
	crntJumpWeek = jumpViewDate.getWeek();
	crntJumpDay = jumpViewDate.getDay();
}

function resetCrntDates() {
	jumpViewDate = new Date();
	rightDate = jumpViewDate;
	leftDate = jumpViewDate;
	crntJumpYear = jumpViewDate.getFullYear();
	crntJumpMonth = jumpViewDate.getMonth();
	crntJumpWeek = jumpViewDate.getWeek();
	crntJumpDay = jumpViewDate.getDay();
}

function makeMoreJumpDates(type, dateArray, dir) {
	var jumpers = new String();
	var displayMonth = new String();
	var displayWeek = new String();
	var displayDay = new String();
	var displayDate = new String();
	var lastDateIndx;
	
	switch (type) {
		case 'day':
		case 'search':
			for (var i=0;i < dateArray.length;i++) {
				displayMonth = formatDate(dateArray[i], 'm', 'short');
				displayDay = formatDate(dateArray[i], 'd', 'short');
				displayDate = dateArray[i].getDate();
				var d = new Date(dateArray[i]);

				if (showPastEvents || (todayDate <= d) && (d < leftDate || d > rightDate)) {
					lastDateIndx = i;
					jumpers += '<a href="./?eViewBy=day&e_sdate=' + formatDate(d, 'm', 'num') + '-' + d.getDate() + '-' + d.getFullYear() + '&e_sortBy=' + eSortBy + '" title="' + formatDate(d, 'm', 'num') + '-' + d.getDate() + '-' + d.getFullYear() + '" class="jumpItem"><h5>' + displayMonth + '</h5><div class="details">'+displayDay+'</div><div class="dayFrmt">'+displayDate+'</div></a>';
				}
			}
		break;
		case ('week'):
			for (var i=0;i < dateArray.length;i++) {
				displayMonth = formatDate(dateArray[i], 'm', 'short');
				displayWeek = formatDate(dateArray[i], 'w', 'short');
				var d = new Date(dateArray[i]);									
				var endOfWeek =  new Date(d);
				endOfWeek.setDate(d.getDate()+6);
				if (showPastEvents || (todayDate <= endOfWeek) && (endOfWeek < leftDate || endOfWeek > rightDate)) {
					lastDateIndx = i;
					jumpers += '<a href="./?eViewBy=week&e_sdate=' + formatDate(d, 'm', 'num') + '-' + d.getDate() + '-' + d.getFullYear() + '&e_sortBy=' + eSortBy + '" title="week of ' + formatDate(dateArray[i], 'w', 'long') + '" class="jumpItem"><h5>' + displayMonth + '</h5><div class="details">week of</div><div class="weekFrmt">'+displayWeek+'</div></a>';
				}
			}
			
		break;
		case ('month'):
			for (var i=0;i < dateArray.length;i++) {
				displayYear = formatDate(dateArray[i], 'y', 'short');
				displayMonth = formatDate(dateArray[i], 'm', 'short');
				var endOfMonth = new Date(dateArray[i]);
				endOfMonth.setMonth(endOfMonth.getMonth()+1);
				endOfMonth.setDate(1);
				endOfMonth.setDate(endOfMonth.getDate()-1);
				var d = new Date(dateArray[i]);
				if ((showPastEvents || (todayDate <= endOfMonth)) && (endOfMonth < leftDate || endOfMonth > rightDate)) {
					lastDateIndx = i;
					jumpers += '<a href="./?eViewBy=month&e_sdate='+formatDate(endOfMonth, 'm', 'num') + '-' + endOfMonth.getDate() + '-' + endOfMonth.getFullYear() + '&e_sortBy=' + eSortBy + '" class="jumpItem"><h5>'+displayYear+'</h5><div class="details"></div><div class="mnthFrmt">'+displayMonth+'</div></a>';
				}
			}
		break;
	}
	if (dir == 'right') {
		$('#evntJumper .jumpTrack').append(jumpers);
		rightDate = dateArray[dateArray.length-1];
	}
	else if (dir == 'left') {
		$('#evntJumper .jumpTrack').prepend(jumpers);
		if (lastDateIndx != undefined) {
			var newLeftDate = dateArray[((dateArray.length-1)-lastDateIndx)];
			leftDate = newLeftDate;
			var lastleft = $('#evntJumper .jumpTrack').css('left');
			lastleft = parseInt(lastleft);
			var numberofthingscreated = lastDateIndx+1;
			var nextleftcss = lastleft + (numberofthingscreated * jumpDateWidth);
			$('#evntJumper .jumpTrack').css({left:-nextleftcss});
		}
	}
}


function getNextYears(lastDate, cnt, action) {
	var yearArray = new Array();
	if (dir == 'left') {
		for (var i=0;i<cnt;i++) {
			yearArray[i] = (lastDate.getFullYear() - (i+1));	// prepend to array
		}
		yearArray = yearArray.reverse();
	} else if (dir == 'right') {
		for (var i=0;i<cnt;i++) {
			yearArray[i] = (lastDate.getFullYear() + (i+1));
		}
	}
	return yearArray;
}

function getNextMonths(lastDate, cnt, dir) {
	var mnthArray = new Array();
	var tempDateObj = new Date(lastDate);
	if (dir == 'left') {
		for (var i=0;i<cnt;i++) {
			tempDateObj = new Date(lastDate);
			tempDateObj.setMonth(lastDate.getMonth() + i);
			mnthArray[i] = tempDateObj;	// prepend to array
		}
	} else if (dir == 'right') {
		for (var i=0;i<cnt;i++) {
			tempDateObj = new Date(lastDate);
			tempDateObj.setMonth(lastDate.getMonth() + i);		
			mnthArray[i] = tempDateObj;	// append to array
		}
	}
	return mnthArray;
}


function getNextWeeks(lastDate, cnt, dir) {
	var weekArray = new Array();
	var tempDateObj = new Date(lastDate);
	if (dir == 'left') {
		for (var i=0;i<cnt;i++) {
			tempDateObj = new Date(lastDate);
			tempDateObj.setDate(lastDate.getDate() + (i*7));
			weekArray[i] = tempDateObj;	// prepend to array
		}
	} else if (dir == 'right') {
		for (var i=0;i<cnt;i++) {
			tempDateObj = new Date(lastDate);
			tempDateObj.setDate(lastDate.getDate() + (i*7));
			weekArray[i] = tempDateObj;	// append to array
		}
	}
	return weekArray;
}
function getNextDays(lastDate, cnt, dir) {
	var dayArray = new Array();
	var tempDateObj = new Date(lastDate);
	if (dir == 'left') {
		for (var i=0;i<cnt;i++) {
			tempDateObj = new Date(lastDate);
			tempDateObj.setDate(lastDate.getDate() + i);		
			dayArray[i] = tempDateObj;	// prepend to array
		}
	} else if (dir == 'right') {
		for (var i=0;i<cnt;i++) {
			tempDateObj = new Date(lastDate);
			tempDateObj.setDate(lastDate.getDate() + i);		
			dayArray[i] = tempDateObj;	// append to array
		}
	}
	return dayArray;
}

/* formatting */
function formatDate(dateObj, datePart, frmtStyle) {
	var newDate = '';
	
	switch (datePart) {
		case 'y':
			newDate = formatYear(dateObj, frmtStyle);
		break;
		case 'm':
			newDate = formatMonth(dateObj, frmtStyle);
		break;
		case 'w':
			newDate = formatWeek(dateObj, frmtStyle);
		break;
		case 'd':
			newDate = formatDay(dateObj, frmtStyle);
		break;
	}
	return newDate;
}
function formatYear(date, frmt) {
	return date.getFullYear();
}
function formatMonth(date, frmt) {
	var month = new Array(12);
	switch (frmt) {
		case 'num':
			month[0]="1";
			month[1]="2";
			month[2]="3";
			month[3]="4";
			month[4]="5";
			month[5]="6";
			month[6]="7";
			month[7]="8";
			month[8]="9";
			month[9]="10";
			month[10]="11";
			month[11]="12";
		break;
		case 'twoDigit':
			month[0]="01";
			month[1]="02";
			month[2]="03";
			month[3]="04";
			month[4]="05";
			month[5]="06";
			month[6]="07";
			month[7]="08";
			month[8]="09";
			month[9]="10";
			month[10]="11";
			month[11]="12";
		break;
		case 'short':
			month[0]="Jan";
			month[1]="Feb";
			month[2]="Mar";
			month[3]="Apr";
			month[4]="May";
			month[5]="Jun";
			month[6]="Jul";
			month[7]="Aug";
			month[8]="Sep";
			month[9]="Oct";
			month[10]="Nov";
			month[11]="Dec";
		break;
		case 'long':
			month[1]="February";
			month[2]="March";
			month[3]="April";
			month[4]="May";
			month[5]="June";
			month[6]="July";
			month[7]="August";
			month[8]="September";
			month[9]="October";
			month[10]="November";
			month[11]="December";
		break;
	}
	return month[date.getMonth()];
}
function formatWeek(date, frmt) {
	var dateRange = '';
	var daysFromSunday = date.getDay();
	var startOfWeek = new Date(date);
	var endOfWeek = new Date(date);
	startOfWeek.setDate(startOfWeek.getDate()-daysFromSunday);	// calculate end of week (Saturday)
	endOfWeek.setDate(endOfWeek.getDate()+(6-daysFromSunday));	// calculate end of week (Saturday)
	
	switch (frmt) {
		case 'short':
			dateRange = startOfWeek.getDate()+"-"+endOfWeek.getDate();	// date range without year
		break;
		case 'long':
			dateRange = ((startOfWeek.getMonth()+1) + '/' + startOfWeek.getDate()+"/"+startOfWeek.getFullYear()) + " - " + ((endOfWeek.getMonth()+1) + '/' + endOfWeek.getDate() + "/" + endOfWeek.getFullYear());	// date range with year
		break;
	}
	return dateRange;
}
function formatDay(date, frmt) {
	var weekday=new Array(7);
	switch (frmt) {
		case 'short':
			weekday[0]="Sun";
			weekday[1]="Mon";
			weekday[2]="Tue";
			weekday[3]="Wed";
			weekday[4]="Thu";
			weekday[5]="Fri";
			weekday[6]="Sat";
		break;
		case 'long':
			weekday[0]="Sunday";
			weekday[1]="Monday";
			weekday[2]="Tuesday";
			weekday[3]="Wednesday";
			weekday[4]="Thursday";
			weekday[5]="Friday";
			weekday[6]="Saturday";
		break;
	}
	return weekday[date.getDay()];
}


