/*
//	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);
}

$('.evnt-jumpHolder a.jumpLeft').click(function () {
	var posVal = $('.evnt-jumpHolder .jumpTrack').css("left");
	var posNum = parseInt(posVal);
	
	jumpScroller(evntViewBy, 'left', jumpBy, posNum);
	
	if (!showPastEvents) {
		// prevent user from viewing older events
		
		if (posVal.charAt(0) == '-') {
			jumpScroller(evntViewBy, 'left', jumpBy, posNum);
		} else {
			resetScroller(posNum);
		}
		
		if ((jumpBy + posNum) >= 0) {
			$('.evnt-jumpHolder .jumpLeft').addClass("disabled");
		}
	}
});

$('#evntJumper a.jumpRight').click(function () { 
	var posVal = $('.evnt-jumpHolder .jumpTrack').css('left');
	var posNum = parseInt(posVal);
	
	jumpScroller(evntViewBy, 'right', jumpBy, posNum);
	$('.evnt-jumpHolder .jumpLeft').removeClass("disabled");
});

$('a.tab').click(function () {
	var title = $(this).attr('title');
	
	$("a.tab").parent().removeClass('sel');
	$(this).parent().addClass('sel');
	
	if (title == 'search' || title == evntViewBy) {
		if (title == 'search' && $('.searchOptions').css('display') != 'block') {
			if (evntViewBy != 'search') {
				$("#evntJumper").fadeOut('normal');
			}
			$(".searchOptions").show("blind", {direction:"vertical"}, 500);
		}
		if (title == evntViewBy && evntViewBy != 'search') {
			$(".searchOptions").hide("blind", {direction:"vertical"}, 500);
			$("#evntJumper").fadeIn('normal');
		}
		return false;
	}
});
$('.closeSearch').click(function () {
	$(".searchOptions").hide("blind", {direction:"vertical"}, 500);
	if (evntViewBy != 'search') {
		$("#evntJumper").fadeIn('normal');
		$(".evnt-nav li.sel").removeClass('sel');
		$("li.dot").addClass('sel');
	}
});

function jumpScroller(type, dir, moveThisMuch, posNum) {
	var newPos = new String();
	var wannabeDates = new Array();
	var newMiddleDate = new Date();
	// check if we've already made the proposed jumpDates
	var proposedNum = (datesToJump+(datesToJump/2));
	if (type == 'day') {
		wannabeDates = getNextDays(jumpViewDate, proposedNum, dir);
	} else if (type == 'week') {
		wannabeDates = getNextWeeks(jumpViewDate, proposedNum, dir);
	} else if (type == 'month') {
		wannabeDates = getNextMonths(jumpViewDate, proposedNum, dir);
	}
	
	if (dir == 'left') {
		posNum = (posNum+moveThisMuch);
		newPos = posNum+"px";
		
		newMiddleDate = wannabeDates[(datesToJump/2)];
		
		if (wannabeDates[0] < leftDate) {
			// we haven't made these dates yet so lets make more
			if (!showPastEvents && (leftDate > todayDate)) {
				makeMoreJumpDates(type, wannabeDates, dir);
				posNum = (-moveThisMuch);
				newPos = "0px";
				$('.evnt-jumpHolder .jumpTrack').css('left', posNum);
			}
		}
		$('.evnt-jumpHolder .jumpTrack').animate({ 
			left: newPos
		}, 400 );
		
		if (!showPastEvents && (leftDate > todayDate)) {
			// disable arrow to scroll to older events and bounce back
			if (posNum <= 0) {
				$('.evnt-jumpHolder .jumpLeft').addClass("disabled");
				resetScroller(posNum);
			}
		}
	} else if (dir == 'right') {
		posNum = (posNum-moveThisMuch);
		newPos = (posNum)+"px";
		
		newMiddleDate = wannabeDates[wannabeDates.length/2-1];
		
		if (wannabeDates[wannabeDates.length-1] > rightDate) {
			// we haven't made these dates yet so lets make more
			makeMoreJumpDates(type, wannabeDates, dir);
		}
		
		$('.evnt-jumpHolder .jumpTrack').animate({ 
			left: newPos
		}, 400 );
		
		if (!showPastEvents && (leftDate > todayDate)) {
			// enable arrow to scroll to older events
			if (posNum <= 0) {
				$('.evnt-jumpHolder .jumpLeft').removeClass("disabled");
			}
		}
	}
	crntJumpYear = newMiddleDate.getFullYear();
	crntJumpMonth = newMiddleDate.getMonth();
	crntJumpWeek = newMiddleDate.getWeek();
	crntJumpDay = newMiddleDate.getDate();
	updateCrntDates();
}

function resetScroller(crntPos) {
	var posNum = parseInt(crntPos);
	if (posNum >= 0) {
		$('.evnt-jumpHolder .jumpTrack').animate({ 
			left: '0px'
		}, 150 );
	}
}

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();
	
	switch (type) {
		case ('day'):
			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]);
				d.setDate(d.getDate());
				if (!showPastEvents && (dateArray[i] >= todayDate)) {
					jumpers += '<a href="./?evntViewBy=day&e_sdate=' + formatDate(dateArray[i], 'm', 'num') + '-' + d.getDate() + '-' + d.getFullYear() + '" title="' + formatDate(dateArray[i], '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]);
				if (!showPastEvents && (dateArray[i] >= todayDate)) {
					jumpers += '<a href="./?evntViewBy=week&e_sdate=' + formatDate(dateArray[i], 'm', 'num') + '-' + d.getDate() + '-' + d.getFullYear() + '" title="week of ' + formatDate(dateArray[i], 'm', 'num') + '-' + d.getDate() + '-' + d.getFullYear() + '" class="jumpItem"><h5>' + displayMonth + '</h5><div class="details">week of</div><div class="dayFrmt">'+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 d = new Date(dateArray[i]);
				if (!showPastEvents && (dateArray[i] >= todayDate)) {
					jumpers += '<a href="./?evntViewBy=month&e_sdate='+formatDate(dateArray[i], 'm', 'num') + '-' + d.getDate() + '-' + d.getFullYear() + '" class="jumpItem"><h5>'+displayYear+'</h5><div class="details">&nbsp;</div><div class="dayFrmt">'+displayMonth+'</div></a>';
				}
			}
		break;
	}
	if (dir == 'right') {
		$('.evnt-jumpHolder .jumpTrack').append(jumpers);
		rightDate = dateArray[dateArray.length-1];
	} else if (dir == 'left') {
		$('.evnt-jumpHolder .jumpTrack').prepend(jumpers);
		leftDate = dateArray[0];
	}
}


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 monthArray = new Array();
	var tempDateObj = lastDate;
	
	if (dir == 'left') {
		for (var i=0;i<cnt;i++) {
			var crntMth = (lastDate.getMonth() - (i+1));
			var crntYr;
			if (crntMth >= 0) {
				crntYr = lastDate.getFullYear();
			} else {
				crntYr = (lastDate.getFullYear() - 1);
				crntMth = crntMth+12;
			}
			tempDateObj = new Date(crntYr, crntMth, lastDate.getDate());
			monthArray[i] = tempDateObj;	// prepend to array
		}
		monthArray = monthArray.slice((datesToJump/2), monthArray.length);
		monthArray = monthArray.reverse();
	} else if (dir == 'right') {
		for (var i=0;i<cnt;i++) {
			var crntMth = (lastDate.getMonth() + (i+1));
			if (crntMth < 12) {
				var crntYr = lastDate.getFullYear();
			} else {
				var crntYr = (lastDate.getFullYear() + 1);
				crntMth = crntMth-12;
			}
			tempDateObj = new Date(crntYr, crntMth, lastDate.getDate());
			monthArray[i] = tempDateObj;	// append to array
		}
		monthArray = monthArray.slice((datesToJump/2), monthArray.length);
	}
	return monthArray;
}
function getNextWeeks(lastDate, cnt, dir) {
	var weekArray = new Array();
	var offset = datesToJump/2;	// calculates the days around the middle date in view
	
	if (dir == 'left') {
		for (var i=0;i<cnt;i++) {
			var tempDateObj = new Date (lastDate);
			tempDateObj.setDate(tempDateObj.getDate()-((7*(i+1))+(7*offset)));
			weekArray[i] = tempDateObj;	// prepend to array
		}
		weekArray = weekArray.slice(0, (weekArray.length-offset));
		weekArray = weekArray.reverse();
	} else if (dir == 'right') {
		for (var i=0;i<cnt;i++) {
			var tempDateObj = new Date (lastDate);
			tempDateObj.setDate(tempDateObj.getDate()+((7*i)+(7*(offset+1))));
			weekArray[i] = tempDateObj;	// append to array
		}
		weekArray = weekArray.slice(0, (weekArray.length-offset));
	}
	return weekArray;
}
function getNextDays(lastDate, cnt, dir) {
	var dayArray = new Array();
	var tempDateObj = lastDate;
	
	if (dir == 'left') {
		for (var i=0;i<cnt;i++) {
			dayArray[i] = tempDateObj;	// prepend to array
			tempDateObj = new Date( tempDateObj.setDate(tempDateObj.getDate() - 1) );
		}
		dayArray = dayArray.slice((datesToJump/2), dayArray.length);
		dayArray = dayArray.reverse();
	} else if (dir == 'right') {
		for (var i=0;i<cnt;i++) {
			dayArray[i] = tempDateObj;	// append
			tempDateObj = new Date( tempDateObj.setDate(tempDateObj.getDate() + 1) );
		}
		dayArray = dayArray.slice((datesToJump/2), dayArray.length);
	}
	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.getDate()+"/"+startOfWeek.getFullYear()) + " - " + (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()];
}



