/************************************************************************
* automaticSales is dependent on jQuery for simple tasks like setting the 
* background image and setting the new end date text. Include it after
* including jquery-x.x.x.js.
************************************************************************/

var monthName = new Array("January", "February",	"March", "April", "May", "June", "July", "August",
						"September", "October", "November", "December");

var weekday = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var testDaysToAdd = 0;
var mainSaleImage1 = new Image();
var mainSaleImage2 = new Image();
var mainSaleImage3 = new Image();
var topBannerImage1 = new Image();
var topBannerImage2 = new Image();
var topBannerImage3 = new Image();
var topBannerImage4 = new Image();

// Change the images here to change them throughout the script.
mainSaleImage1.src = "../../images/banner0-weekend.jpg";
mainSaleImage2.src = "../../images/banner0-Tuesday.jpg";
mainSaleImage3.src = "../../images/banner0-MidweekMadness.jpg";

/************************************************************************************************************************************
/ This doesn't actually get the exact # of weeks since the Epoch. It starts the Sunday AFTER the Epoch, which was on a Thursday.
*************************************************************************************************************************************/
Date.prototype.getWeeksSinceEpoch = function()
{
	// Epoch was on Thursday, we want Sunday to be the start of the week count.
	var millisecondsSinceEpoch = (this.getTime() - (3 * 86400000));
	
	// Divide by number of milliseconds in a week (7 * 24 * 60 * 60 * 1000)
	return Math.floor(millisecondsSinceEpoch / 604800000);
}

/************************************************************************************************************************************
/ We subtract January 1st from the current date to get how many days it's been since Jan 1 in milliseconds.
/ Divide by # of milliseconds/day, voila: day of year.
*************************************************************************************************************************************/
Date.prototype.getDayOfYear = function()
{
	var januaryFirst = new Date(this.getFullYear(), 0, 1);
	return Math.ceil((this - januaryFirst) / 86400000);
}

// If switchDailySale comes after switchMainSale, DailySale doesn't work.. figure out why
// ENTRY POINT
function updateSales()
{
	var currentDate = new Date();
	//$("span#bigSaleText").html("Ends <span id=\"bigSaleDate\" class=\"dynamicDateFullTextual\"></span> at 11:59PM EST");
	//switchMainSale(currentDate);
	updateClock();
}

function determineMainSaleEndDate(date)
{
	var endDate = new Date();
	endDate.setMonth(date.getMonth());
	
	// Monday sale is only Monday, Tuesday sale carries until Thursday, and 
	// Thursday sale carries til the next Monday. endDates are one date
	// before expected because sales end at 11:59 PM.
	// ^???
	switch(date.getDay())
	{
		case 1:
			endDate.setDate(date.getDate());
			break;
			
		case 2:
			endDate.setDate(date.getDate());
			break;
			
		case 3:
			endDate.setDate(date.getDate() + 1);
			break;
		
		case 4:
			endDate.setDate(date.getDate());
			break;
			
		case 5:
			endDate.setDate(date.getDate() + 3);
			break;
			
		case 6:
			endDate.setDate(date.getDate() + 2);
			break;
			
		case 0:
			endDate.setDate(date.getDate() + 1);
			break;
	}
	
	endDate.setHours(23);
	endDate.setMinutes(59);
	endDate.setSeconds(59);
	return endDate;
}

/************************************************************************************************************************************
/ Defines and sets the sale banner sequence, and updates the banner for the current day.
*************************************************************************************************************************************/
function switchMainSale(date)
{
	var bigSaleImage = document.getElementById("bigSale");
	var endDate = new Date();
	endDate.setMonth(date.getMonth());
				
	var offerExpires = document.getElementById("offerExpiresDate");
	
	// Sunday through Monday
	var saleSequenceOne = new Array(	mainSaleImage1.src,
										mainSaleImage1.src,
										mainSaleImage2.src,
										mainSaleImage1.src,
										mainSaleImage1.src,
										mainSaleImage2.src,
										mainSaleImage2.src);
									
	var saleSequenceTwo = new Array(	mainSaleImage2.src,
										mainSaleImage2.src,
										mainSaleImage1.src,
										mainSaleImage2.src,
										mainSaleImage2.src,
										mainSaleImage1.src,
										mainSaleImage1.src);
	
	var saleSequenceThree = new Array(	mainSaleImage1.src,
										mainSaleImage1.src,
										mainSaleImage2.src,
										mainSaleImage3.src,
										mainSaleImage3.src,
										mainSaleImage1.src,
										mainSaleImage1.src);
	
	currentSaleSequence = saleSequenceThree;
	
	// If we're on a two-week sequence as before, we need to use this.
	// The new sequence is one week, so we can set it easily.
	/*
	if (date.getWeeksSinceEpoch() % 2 == 0)
		currentSaleSequence = saleSequenceOne;
	else
		currentSaleSequence = saleSequenceTwo;
	*/
	
	// Sales END Monday, Tuesday, and Thursday at midnight.
	switch(date.getDay())
	{
		case 1:		
			updateBannerAndDate(endDate, currentSaleSequence[date.getDay()], date.getDate());
			break;
			
		case 2:
			updateBannerAndDate(endDate, currentSaleSequence[date.getDay()], date.getDate());
			break;
			
		case 3:
			updateBannerAndDate(endDate, currentSaleSequence[date.getDay()], date.getDate() + 1);
			break;
			
		case 4:
			updateBannerAndDate(endDate, currentSaleSequence[date.getDay()], date.getDate());
			break;
			
		case 5:
			updateBannerAndDate(endDate, currentSaleSequence[date.getDay()], date.getDate() + 3);
			break;
			
		case 6:
			updateBannerAndDate(endDate, currentSaleSequence[date.getDay()], date.getDate() + 2);
			break;
		
		case 0:
			updateBannerAndDate(endDate, currentSaleSequence[date.getDay()], date.getDate() + 1);
			break;
	}
	
	changeTextDates(endDate);
}

// Updates the main sale banner image and the end date.
// Sale banner is temporarily disabled.
function updateBannerAndDate(endDate, saleBanner, newEndDate)
{
	//bigSaleImage.src = saleBanner;
	$("div#banner0").css("backgroundImage", "url('" + saleBanner + "')");
	endDate.setDate(newEndDate);
}

function test()
{
	testDaysToAdd++;
	currentDate = new Date();
	newDate = new Date();
	
	newDate.setDate(currentDate.getDate() + testDaysToAdd);
	document.getElementById("testSpan").innerHTML = "testDaysToAdd: " + testDaysToAdd + " | test Month: "
		+ monthName[newDate.getMonth()] + " | test Date: " + newDate.getDate() + " | Week #: " + newDate.getWeeksSinceEpoch();
	switchDailySale(determineDailySaleItem(newDate));
	showSetSaleImages(determineDailySaleItem(newDate));
	switchMainSale(newDate);
}

// Takes the end date for a sale
function changeTextDates(date)
{	
	var spans = document.getElementsByTagName("span");
	var c = 0;
	var length = 0;
	
	for (c = 0, length = spans.length; c < length; c++)
	{
		if (spans[c].className == "dynamicDateNumeric")
		{
			// getMonth() returns 0-11, so add 1
			spans[c].innerHTML += (date.getMonth() + 1) + "/" + date.getDate() + " ";
		}
		else if (spans[c].className == "dynamicDateTextual")
		{
			spans[c].innerHTML += monthName[date.getMonth()] + " " + date.getDate() + " ";
		}
		else if (spans[c].className == "dynamicDateFullTextual")
		{
			spans[c].innerHTML += weekday[date.getDay()] + ", " + monthName[date.getMonth()] + " " + date.getDate() + " ";
		}
	}
}

// Ajax returns the number of seconds left between now and endDate.
// THIS IS DEPENDENT ON SERVER TIME BEING EST!
function updateClock()
{
	var endDate = determineMainSaleEndDate(new Date());
	
	var html = $.ajax({
		  url: "../../countdownTimer.asp",
		  cache: false,
		  type: "POST",
			data:	"year=" + endDate.getFullYear() + "&month=" + (endDate.getMonth() + 1) + "&day=" + endDate.getDate(),
		  dataType: "html",
		  success: function(seconds){
				startTimer(seconds)
		  }
		}
	);
}

// Splits up remaining seconds into intervals of days, hours, minutes, seconds.
// Uses jQuery to spit out the timer HTML, decrements the time left,
// then calls setTimeout on itself at an interval of 1 second.
function startTimer(seconds)
{
	var days;
	var hours;
	var minutes;
	
	// Time is up, so update the sale end date and restart everything.
	if (seconds <= 0)
	{
		clearTimeout(t);
		updateSales()
	}

	remainingSeconds = seconds;
	days = Math.floor(seconds / 86400);
	seconds -= (days * 86400);
	hours = Math.floor(seconds / 3600);
	seconds -= (hours * 3600);
	minutes = Math.floor(seconds / 60);
	seconds -= (minutes * 60);
	
	html = "<h2>Sale Ends In</h2>" +
	"<p id=\"days\">" +
		"<span>" + days + "</span>Days" +
	"</p>" +
	"<p id=\"hours\">" +
		"<span>" + hours + "</span>Hours" +
	"</p>" +
	"<p id=\"minutes\">" +
		"<span>" + minutes + "</span>Minutes" +
	"</p>" +
	"<p id=\"seconds\">" +
		"<span>" + seconds + "</span>Seconds" +
	"</p>";
	
	$("div.timer").html(html);
	
	if (days < 10)
		days = "0" + days;
	
	if (hours < 10)
		hours = "0" + hours;
	
	if (minutes < 10)
		minutes = "0" + minutes;
	
	if (seconds < 10)
		seconds = "0" + seconds;
	
	html = days + ":" + hours + ":" + minutes + ":" + seconds;
	$("div.smallTimer").html(html);
	
	remainingSeconds -= 1;
	t = setTimeout("startTimer(remainingSeconds)", 1000);
}

// Gets a query string parameter
function getParameterByName(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
