String.prototype.lpad = function(padding, length){
	var s = this;
	while(s.length < length)
		s = padding + s;
	return s;
}
String.prototype.rpad = function(padding, length){
	var s = this;
	while(s.length < length)
		s = s + padding;
	return s;
}
function formatTime(pdtYear,pdtMonth,pdtDay,pdtHour,pdtMinute){
  var eventTime=new Date();
  var gmtOffset=eventTime.getTimezoneOffset()/60;
  var pdtOffset=7;
  var dst=0;

  var gmt=new Date;
  var lsm=new Date;
  var lso=new Date;
  lsm.setMonth(2); // March
  lsm.setDate(31);
  var day=lsm.getDay();// day of week of 31st
  lsm.setDate(31-day); // last Sunday
  lso.setMonth(10); // November
  lso.setDate(31);
  day=lso.getDay();
  lso.setDate(31-day);
  if(gmt<lsm||gmt>=lso)
	dst = 1;
  if(dst==1)
	pdtOffset+=1;

  var addHour=0;
  var addMinutes=gmtOffset%1;
  var eventMin=pdtMinute+(addMinutes*60);
  if(eventMin>=60){
	eventMin-=60;
	addHour+=1;
  }
  var eventHour=pdtHour-gmtOffset+pdtOffset+addHour;
  var eventMonth=pdtMonth-1;
  var eventDay=pdtDay;
  var eventYear=pdtYear;
  if(eventHour<0){
	eventHour+=24;
	if(eventDay==1){
	  switch(eventMonth){
		case 0:
		  eventDay=31;
		  eventMonth=11;
		  eventYear-=1;
		  break;
		case 2:
		//March
		  if ((eventYear%4==0&&eventYear%100!=0)||eventYear%400==0){
			eventDay=29;
			eventMonth-=1;
		  }
		  else{
			eventDay=28;
			eventMonth-=1;
		  }
		  break;
		case 4:
		case 6:
		case 7:
		case 9:
		case 11:
		  //May, July, August, Octoboer, December
		  eventDay=30;
		  eventMonth-=1;
		  break;
		case 1:
		case 3:
		case 5:
		case 8:
		case 10:
		  //February, April, June, September, November
		  eventDay=31;
		  eventMonth-=1;
		  break;
		default:
		  break;
	  }
	}
	else{
	  eventDay-=1;
	}
  }
  else if(eventHour>24){
	eventHour-=24;
	switch(eventDay){
	  case 28:
	  case 29:
	  //February
		if(eventMonth==1){
		  if((eventYear%4==0&&eventYear%100!=0)||eventYear%400==0){
			if(eventDay==29){
			  eventDay=1;
			  eventMonth+=1;
			}
			else{
			  eventDay+=1;
			}
		  }
		}
		else{
		  if(eventDay==28){
			eventDay=1;
			eventMonth+=1;
		  }
		}
		break;
	  case 30:
	  //April, June, September, November
		switch(eventMonth){
		  case 3:
		  case 5:
		  case 8:
		  case 10:
			eventDay=1;
			eventMonth+=1;
			break;
		  default:
			eventDay+=1;
			break;
		}
		break;
	  case 31:
	  //Januaray, March, May, July, August, Octoboer
		switch (eventMonth){
		  case 0:
		  case 2:
		  case 4:
		  case 6:
		  case 7:
		  case 9:
			eventDay=1;
			eventMonth+=1;
			break;
		  case 11:
		  //December
			eventDay=1;
			eventMonth=0;
			eventYear+=1;
			break;
		  default:
			break;
		}
		break;
	  default:
		break;
	}
  }
  var eventDateInfo=new Array(eventYear,eventMonth,eventDay,eventHour,eventMin);
  return eventDateInfo;
}
function adjustTime(pdtYear,pdtMonth,pdtDay,pdtHour,pdtMinute){
  var monthNames = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  var strDatePST = monthNames[pdtMonth - 1] + ' ' + pdtDay + ', ' + pdtYear + ' ' + pdtHour.toString().lpad("0", 2) + ':' + pdtMinute.toString().lpad("0", 2) + ' PST'; 
  var eventDate = new Date(Date.parse(strDatePST));
  document.write(eventDate.getFullYear() + "-" + (eventDate.getMonth() + 1) + "-" + eventDate.getDate() + " " + eventDate.getHours().toString().lpad("0", 2) + ":" + eventDate.getMinutes().toString().lpad("0", 2));
}
function adjustTimezone(){
  var eventTime=new Date();
  var eventTimezoneOffset=eventTime.getTimezoneOffset()/60*(-1);
  if (eventTimezoneOffset>0)
	eventTimezoneOffset="+"+eventTimezoneOffset;
  var eventTimezone="GMT"+eventTimezoneOffset;
  document.write(eventTimezone);
}

function countdown_clock(startYear,startMonth,startDay,startHour,startMinute,endYear,endMonth,endDay,endHour,endMinute){
  var startDate=formatTime(startYear,startMonth,startDay,startHour,startMinute);
  var start_timestamp=(new Date(startDate[0],startDate[1],startDate[2],startDate[3],startDate[4],0)).getTime();
  var endDate=formatTime(endYear,endMonth,endDay,endHour,endMinute);
  var end_timestamp=(new Date(endDate[0],endDate[1],endDate[2],endDate[3],endDate[4],0)).getTime();
  countdown(start_timestamp,end_timestamp);
}
function countdown(start_timestamp,end_timestamp){
  Today=new Date();
  Todays_Year=Today.getFullYear();
  Todays_Month=Today.getMonth();

  //Convert both today's date and the target date into miliseconds. 
  Todays_Date=(new Date(Todays_Year,Todays_Month,Today.getDate(),Today.getHours(),Today.getMinutes(),Today.getSeconds())).getTime();               
  Start_Date=start_timestamp;
  event_open=Math.round((Todays_Date-Start_Date)/1000);
  Target_Date = event_open < 0 ? start_timestamp : end_timestamp;

	//Find their difference, and convert that into seconds. 
	Time_Left=Math.round((Target_Date-Todays_Date)/1000);

	if(Time_Left<0) Time_Left=0;

	days=Math.floor(Time_Left/(60*60*24));
	Time_Left%=(60*60*24);
	hours=Math.floor(Time_Left/(60*60));
	Time_Left%=(60*60);
	minutes=Math.floor(Time_Left/60);
	Time_Left%=60;
	seconds=Time_Left;

	dps='s';
	//ps is short for plural suffix.
	if(days==1) dps='';

	if(hours<10) hours="0"+hours;
	if(minutes<10) minutes="0"+minutes;
	if(seconds<10) seconds="0"+seconds;

	if(days==0&&hours==0&&minutes==0){
	document.getElementById('countdown').innerHTML='<b>Event Closed.</b>';
	}
	else{
		if(event_open<0) document.getElementById('countdown').innerHTML='<label>Countdown:</label> '+days+' day'+dps+', ';
		else document.getElementById('countdown').innerHTML='<label>Remaining Time:</label> '+days+' day'+dps+', ';
	document.getElementById('countdown').innerHTML+=hours+':';
	document.getElementById('countdown').innerHTML+=minutes+':';
	document.getElementById('countdown').innerHTML+=seconds;
	}

  //Recursive call, keeps the clock ticking.
  setTimeout('countdown('+start_timestamp+','+end_timestamp+');',1000);
}

function countdown_clockShort(startYear,startMonth,startDay,startHour,startMinute,endYear,endMonth,endDay,endHour,endMinute){
  var startDate=formatTime(startYear,startMonth,startDay,startHour,startMinute);
  var start_timestamp=(new Date(startDate[0],startDate[1],startDate[2],startDate[3],startDate[4],0)).getTime();
  var endDate=formatTime(endYear,endMonth,endDay,endHour,endMinute);
  var end_timestamp=(new Date(endDate[0],endDate[1],endDate[2],endDate[3],endDate[4],0)).getTime();
  countdownShort(start_timestamp,end_timestamp);
}
function countdownShort(start_timestamp,end_timestamp){
  Today=new Date();
  Todays_Year=Today.getFullYear();
  Todays_Month=Today.getMonth();

  //Convert both today's date and the target date into miliseconds. 
  Todays_Date=(new Date(Todays_Year,Todays_Month,Today.getDate(),Today.getHours(),Today.getMinutes(),Today.getSeconds())).getTime();               
  Start_Date=start_timestamp;
  event_open=Math.round((Todays_Date-Start_Date)/1000);
  Target_Date = event_open < 0 ? start_timestamp : end_timestamp;

	//Find their difference, and convert that into seconds. 
	Time_Left=Math.round((Target_Date-Todays_Date)/1000);

	if(Time_Left<0) Time_Left=0;

	days=Math.floor(Time_Left/(60*60*24));
	Time_Left%=(60*60*24);
	hours=Math.floor(Time_Left/(60*60));
	Time_Left%=(60*60);
	minutes=Math.floor(Time_Left/60);
	Time_Left%=60;
	seconds=Time_Left;

	dps='s';
	//ps is short for plural suffix.
	if(days==1) dps='';

	if(hours<10) hours="0"+hours;
	if(minutes<10) minutes="0"+minutes;
	if(seconds<10) seconds="0"+seconds;

	if(days==0&&hours==0&&minutes==0){
	document.getElementById('countdownShort').innerHTML='<b>Event Closed.</b>';
	}
	else{
		if(event_open<0) document.getElementById('countdownShort').innerHTML='<label>Countdown:</label> '+days+' day'+dps+', ';
		else document.getElementById('countdownShort').innerHTML='<label>ends in</label> '+days+' day'+dps+', ';
	document.getElementById('countdownShort').innerHTML+=hours+':';
	document.getElementById('countdownShort').innerHTML+=minutes+':';
	document.getElementById('countdownShort').innerHTML+=seconds;
	}

  //Recursive call, keeps the clock ticking.
  setTimeout('countdownShort('+start_timestamp+','+end_timestamp+');',1000);
}

