var execFlag = 0; // used to execute specific actions only once in clock time (at initialiaztion)

// Gabriola Island Time header clock variables
var Month=['January','February','March','April','May','June','July','August','September','October','November','December'];
var Weekday=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var divClock = "local_clock";

// Weather Summary variables
var getWxFreq = 1800; // [30 min] frequency of weather Ajax request/update (in seconds) 
var getWxCnt = 0; // counter for determining next weather update
var divWxAjax = "weather_container";
var WxAjaxPath = "ajax/weather_summary.html";
var divSky1Bkg = "weather_news_bkg";
var divSky1Ovl = "weather_news_ovl";
var divSky2Bkg = "weather_summary_bkg";
var divSky2Ovl = "weather_summary_ovl";
var txtSummary = "weather_summary_text";
var txtUpdate = "weather_update";
var sunOv = "weather_overlay_sun";
var moonOv = "weather_overlay_moon";

var bkgNite1 = "url(images/weather/news_column_nite.gif)";
var bkgSunrise1 = "url(images/weather/news_column_sunrise.gif)";
var bkgDay1 = "url(images/weather/news_column_day.gif)";
var bkgSunset1 = "url(images/weather/news_column_sunset.gif)";

var bkgNite2 = "url(images/weather/weather_bkgd_nite.jpg)";
var bkgSunrise2 = "url(images/weather/weather_bkgd_sunrise.jpg)";
var bkgDay2 = "url(images/weather/weather_bkgd_day.jpg)";
var bkgSunset2 = "url(images/weather/weather_bkgd_sunset.jpg)";

var twilAM = 0; // used as check flag to verify weather Ajax loader has completed !! DO NOT REMOVE !!

// Ferry Schedule variables
var divFerry = "ferry_container";
var loadWarn = 900; // 10 minutes before ferry loading cutoff time (15 minutes before sailing in seconds)
var cutOff = 300; // ferry loading cutoff time prior to departure (5 minutes before sailing in seconds)
		
var nID = ""; // set Nanaimo ID tag
var gID = ""; // set Gabriola ID tag
var nIDReset = ""; // set Nanaimo Reset ID tag
var gIDReset = ""; // set Gabriola Reset ID tag
		
var GRN = '#e2ffd1'; // green highlighted background
var YEL = '#fffdb9'; // yellow highlighted background
var RED = '#f09393'; // red highlighted background
var GRY = '#8a8a8a'; // greyed out background
var OUT = '#dddddd'; // greyed out text color
var DFT = '#333333'; // default text color
var ltReset = '#dfe3ed'; // reset background color for light row
var dkReset = '#cfd3dd'; // reset background color for dark row
	
var nRESET = ""; 
var gRESET = ""; 
var nCLR = GRN; // set Nanaimo default cell color
var gCLR = GRN; // set Gabriola default cell color
var nTXT = DFT; // set Nanaimo default font color
var gTXT = DFT; // set Gabriola default font color

// Ferry departure times (entered in 24-hour format and converted to seconds of day)
var Nanaimo = ["0:00","5:55","7:00","8:15","9:30","10:40","12:00","13:15","14:30","15:45","17:00","18:10","19:20","20:20","21:25","22:25","23:30"];
var Gabriola = ["0:00","5:25","6:30","7:40","8:50","10:05","11:20","12:35","13:50","15:10","16:25","17:35","18:45","19:50","20:50","21:55","23:00"];

// Garbage & Recycling Schedule variables
var date = new Date();
var day = date.getDate();
var month = date.getMonth(); month++;
var year = date.getFullYear();
var now = date.getTime();

// Garbage & Recycling Schedule (day/month/year [D/M/Y] format)
var southRte50 = ["4/6/10","4/20/10","5/4/10","5/18/10","6/2/10","6/16/10","6/30/10","7/15/10","7/29/10","8/13/10","8/27/10","9/13/10","9/27/10","10/12/10","10/26/10","11/9/10","11/24/10","12/8/10","12/22/10"];
var northRte51 = ["4/13/10","4/27/10","5/11/10","5/26/10","6/9/10","6/23/10","7/8/10","7/22/10","8/6/10","8/20/10","9/3/10","9/20/10","10/4/10","10/19/10","11/2/10","11/17/10","12/1/10","12/15/10","12/30/10"];

var puTxt50 = ""; // TEXT String for next Garbage/Recycling Day for Route 50 (south side)
var puTxt51 = ""; // TEXT String for next Garbage/Recycling Day for Route 51 (north side)
var puAlert50 = ""; // ALERT text String for next Garbage/Recycling Day for Route 50 (south side)
var puAlert51 = ""; // ALERT text String for next Garbage/Recycling Day for Route 51 (north side)
var puSec50 = 0; // Timestamp (in seconds) for next Garbage/Recycling Day for Route 50 (south side)
var puSec51 = 0; // Timestamp (in seconds) for next Garbage/Recycling Day for Route 51 (north side)
var puCOL50 = "#eff3fd"; // default colour for alert background
var puCOL51 = "#eff3fd"; // default colour for alert background

//for(i=0; i<southRte50.length; i++) {
southRte50.each(function(val, i) {
	var el = southRte50[i].split("/"); // el[0] = month; el[1] = day; el[2] = year
	var dateSTR = Month[el[0]-1]+" "+el[1]+", "+(parseInt(el[2])+2000);
	var sec = Date.parse(dateSTR)+(86399*1000); // add 1 day less a second
	if(now <= sec && !puSec50) {
		var day = new Date(sec);
		puTxt50 = "<strong>"+Weekday[day.getDay()]+"</strong><br />"+dateSTR;  
		puSec50 = sec;
	}
});
//for(i=0; i<northRte51.length; i++) {
northRte51.each(function(val, i) {
	var el = northRte51[i].split("/"); // el[0] = month; el[1] = day; el[2] = year
	var dateSTR = Month[el[0]-1]+" "+el[1]+", "+(parseInt(el[2])+2000);
	var sec = Date.parse(dateSTR)+(86399*1000); // add 1 day less a second
	if(now <= sec && !puSec51) {
		var day = new Date(sec);
		puTxt51 = "<strong>"+Weekday[day.getDay()]+"</strong><br />"+dateSTR; 
		puSec51 = sec;
	}
});

function garbage() {
	var gb_show = Cookie.read("garbage_sched");
	if(!gb_show) { gb_show = "both"; }
	if(gb_show == "both" || gb_show == "rte50") {
		var gb_dur = (puSec50 - now)/1000/86400;
		if(gb_dur <= 1 && gb_dur > 0.33) { 
			puAlert50 = "Collection Day is<br /><strong>TODAY!</strong>";
			puCOL50 = RED;
		}
		else if(parseInt(gb_dur) == 0) { 
			puAlert50 = "Collection Day was<br /><strong>Today</strong>";
			puCOL50 = RED;
		}
		else if(parseInt(gb_dur) == 1) { 
			puAlert50 = "Collection Day is<br /><strong>Tomorrow</strong>";
			puCOL50 = YEL;
		}
		else if(gb_dur <= 3.5) {
			puAlert50 = "Collection is in<br /><strong>"+parseInt(gb_dur)+" days</strong>";
			puCOL50 = GRN;
		}
		else {
			puAlert50 = "Collection is in<br /><strong>"+parseInt(gb_dur)+" days</strong>";
		}
	$('rte50').set('html', puTxt50); // set HTML string in Garbage/Recycling panel
	$('rte50alert').set('html', puAlert50); // set HTML string in Garbage/Recycling panel
	$('rte50alert').setStyle('background-color', puCOL50);
	}

	if(gb_show == "both" || gb_show == "rte51") {
		var gb_dur = (puSec51 - now)/1000/86400;
		if(gb_dur <= 1 && gb_dur > 0.33) {  
			puAlert51 = "Collection Day is<br /><strong>TODAY!</strong>";
			puCOL51 = RED;
		}
		else if(parseInt(gb_dur) == 0) { 
			puAlert51 = "Collection Day was<br /><strong>Today</strong>";
			puCOL51 = RED;
		}
		else if(parseInt(gb_dur) == 1) { 
			puAlert51 = "Collection Day is<br /><strong>Tomorrow</strong>";
			puCOL51 = YEL;
		}
		else if(gb_dur <= 3.5) {
			puAlert51 = "Collection is in<br /><strong>"+parseInt(gb_dur)+" days</strong>";
			puCOL51 = GRN;
		}
		else {
			puAlert51 = "Collection is in<br /><strong>"+parseInt(gb_dur)+" days</strong>";
		}
	$('rte51').set('html', puTxt51); // to indicate next collection day
	$('rte51alert').set('html', puAlert51); // to indicate ALERT for next collection day
	$('rte51alert').setStyle('background-color', puCOL51);
	}
}
// Garbage / Recycling Schedule Choice option
function gb_schedule(val) {
	var dWidth = "50%"; // width if DOUBLE columns used
	if(Browser.Engine.trident4) { dWidth = "49%"; }
	var sWidth = "200px"; // width if SINGLE column used
	Cookie.write("garbage_sched", val, {duration: 30});
	if(val == "both") {
		$('rte50_ctr').setStyles({
			display: 'block',
			width: dWidth,
			float: 'left'
		 });
		$('rte51_ctr').setStyles({
			display: 'block',
			width: dWidth,
			float: 'left'
		 });
	}
	else if(val == "rte50") {
		$('rte50_ctr').setStyles({
			display: 'block',
			width: sWidth,
			float: 'none'
		});
		$('rte51_ctr').setStyle('display', 'none');
	}
	else {
		$('rte51_ctr').setStyles({
			'display': 'block',
			'width': sWidth,
			float: 'none'
		});
		$('rte50_ctr').setStyle('display', 'none');
	}
	garbage(); // refresh information
}

// Controls time-related events
function gabClock(delta) { 
    var sDate = new Date(new Date().getTime()-delta);
	var Mo = sDate.getMonth();
    var Dy = sDate.getDate(); // day of month
    var Wd = sDate.getDay(); // day of week
	var Yr = sDate.getFullYear(); 
	var HrMil = sDate.getHours(); // military 24-hour format
	var Hr = HrMil; // 12-hour format
	var AmPm = "am";
	if(Hr >= 12) { AmPm = "pm"; }
	if(Hr > 12) { Hr = Hr-12; }
	if(Hr == 0) { Hr = 12; }
    var Mn = sDate.getMinutes(); // NO leading zeros
	var Min = Mn; if(Mn < 10) Min='0'+Min; // leading zeros
    var Sc = sDate.getSeconds(); // NO leading zeros
	var Sec = Sc; if(Sc < 10) Sec='0'+Sec; //leading zeros
	var TS = (HrMil*60*60)+(Mn*60)+(Sc*1); // total accumulative seconds in day 

	// Gabriola Island Time clock in header
    if( $chk($(divClock)) ) {
		$(divClock).set('html', '<strong>Gabriola Island Time: </strong>'+Weekday[Wd]+', '+Month[Mo]+' '+Dy+', '+Yr+'&nbsp;&nbsp;'+Hr+':'+Min+' '+AmPm);
// TEST VALUES ONLY
//$(divClock).set('html', '<strong>Gabriola Island Time: </strong>'+Weekday[Wd]+', '+Month[Mo]+' '+Dy+', '+Yr+'&nbsp;&nbsp;'+Hr+':'+Min+':'+Sec+' '+AmPm+' TS = '+TS);
// END TEST VALUES
	}
	
	// LOAD FILES VIA AJAX - MSIE requires the loaders to run after the DOM Ready check
	if(!getWxCnt) {
//		$(divWxAjax).set('load', {method:'get', evalScript:true});
		$(divWxAjax).load(WxAjaxPath+'?t='+sDate); // load content
	}
	getWxCnt++;
	if(getWxCnt >= getWxFreq) { getWxCnt = 0; }

	// Weather Summary background changer
//    if( $chk($(divSky1Bkg)) && $chk($(divSky2Bkg)) ) { weatherClock(TS); }
    if(twilAM > 0 && !Browser.Engine.trident4) { weatherClock(TS); }
	
	// Ferry Schedule features in accordion
    if( $chk($(divFerry)) ) {
		if(!execFlag) {	divSwap(Cookie.read("ferry_order"));	} // set schedule column order
		ferryClock(TS,Wd); 
	}
	setTimeout('gabClock(' + delta + ');', 1000); // 1 sec interval
	execFlag = 1;
}

function tSec(T) {
	var Time = T;
	var hm = Time.split(":");
	return (hm[0]*3600)+(hm[1]*60);
}

// Weather Summary background changer
// opBk = opacitity of background div
// opOv = opacitity of overlay div
// ov1, ov2 = overlay div's (left and right)
// bk1, bk2 = background div's (left and right)
// opSun = opacitity of Sun (day) image
// opMoon = opacitity of Moon (night) image
// txCol = colour of "Update..." text

function weatherClock(TS) {
	// Night time
	if(TS > twilPM || TS < twilAM) {
		var opBk = 1;
		var bk1 = bkgNite1; var bk2 = bkgNite2;
 		var opOv = 0;
		var ov1 = bkgNite1; var ov2 = bkgNite2;
		var opSun = 0; var opSunIE = 0;
		var opMoon = 1; var opMoonIE = 1;
		var txSumCol = "#ccc";
		var txUpdCol = "#aaa";
		divChange(opBk,bk1,bk2,opOv,ov1,ov2,opSun,opSunIE,opMoon,opMoonIE,txSumCol,txUpdCol);
		return;
	}
	// Start of morning Twilight
	if(TS >= twilAM && TS < sunRise) {
		var lapsed = TS - twilAM;
		var duration = sunRise - twilAM;
		var opBk = 1.5 - (lapsed/duration);
		var bk1 = bkgNite1; var bk2 = bkgNite2;
		var opOv = lapsed/duration;
		var ov1 = bkgSunrise1; var ov2 = bkgSunrise2;
		var opSun = 0; var opSunIE = 0;
		var opMoon = 1 - ((lapsed/duration)*2); var opMoonIE = 1;
		var txSumCol = "#ccc";
		var txUpdCol = "#aaa";
		if(opOv > .25) { txSumCol = "#d1d1d1"; txUpdCol = "#a8a8a8"; }
		if(opOv > .3) { txSumCol = "#d6d6d6"; txUpdCol = "#bbbbbb"; }
		if(opOv > .35) { txSumCol = "#dbdbdb"; txUpdCol = "#b8b8b8"; }
		if(opOv > .4) { txSumCol = "#e0e0e0"; txUpdCol = "#cccccc"; }
		if(opOv > .45) { txSumCol = "#e5e5e5"; txUpdCol = "#c8c8c8"; }
		if(opOv > .5) { txSumCol = "#eaeaea"; txUpdCol = "#dddddd"; }
		if(opOv > .55) { txSumCol = "#efefef"; txUpdCol = "#d8d8d8"; }
		if(opOv > .6) { txSumCol = "#f4f4f4"; txUpdCol = "#eeeeee"; }
		if(opOv > .65) { txSumCol = "#f9f9f9"; txUpdCol = "#e8e8e8"; }
		if(opOv > .7) { txSumCol = "#fefefe"; txUpdCol = "#ffffff"; }
		divChange(opBk,bk1,bk2,opOv,ov1,ov2,opSun,opSunIE,opMoon,opMoonIE,txSumCol,txUpdCol);
		return;
	}
	// Start of Sunrise to full day
	if(TS >= sunRise && TS < sunRise + sunDur) {
		var lapsed = TS - sunRise;
		var duration = sunDur;
		var opBk = 1.3 - (lapsed/duration);
		var bk1 = bkgSunrise1; var bk2 = bkgSunrise2;
		var opOv = lapsed/duration;
		var ov1 = bkgDay1; var ov2 = bkgDay2;
		var opSun = (lapsed/duration)*1.5; var opSunIE = 1;
		var opMoon =0; var opMoonIE = 0;
		var txSumCol = "#fff";
		var txUpdCol = "#777";
		divChange(opBk,bk1,bk2,opOv,ov1,ov2,opSun,opSunIE,opMoon,opMoonIE,txSumCol,txUpdCol);
		return;
	}
	// Day time
	if(TS > sunRise + sunDur && TS < sunSet - sunDur) {
		var opBk = 1;
		var bk1 = bkgDay1; var bk2 = bkgDay2;
		var opOv = 0;
		var ov1 = bkgDay1; var ov2 = bkgDay2;
		var opSun = 1;  var opSunIE = 1;
		var opMoon =0; var opMoonIE = 0;
		var txSumCol = "#fff";
		var txUpdCol = "#777";
		divChange(opBk,bk1,bk2,opOv,ov1,ov2,opSun,opSunIE,opMoon,opMoonIE,txSumCol,txUpdCol);
		return;
	}
	// Start of Sunset
	if(TS >= sunSet - sunDur && TS < sunSet) {
		var lapsed = sunSet - TS;
		var duration = sunDur;
		var opBk = 1 + (lapsed/duration);
		var bk1 = bkgSunset1; var bk2 = bkgSunset2;
		var opOv = lapsed/duration;
		var ov1 = bkgDay1; var ov2 = bkgDay2;
		var opSun = (lapsed/duration) + .3; var opSunIE = 1;
		var opMoon = 0; var opMoonIE = 0;
		var txSumCol = "#fff";
		var txUpdCol = "#777";
		divChange(opBk,bk1,bk2,opOv,ov1,ov2,opSun,opSunIE,opMoon,opMoonIE,txSumCol,txUpdCol);
		return;
	}
	// Start of night Twilight
	if(TS >= sunSet && TS < twilPM) {
		var lapsed = twilPM - TS;
		var duration = twilPM - sunSet;
		var opBk = 1 - (lapsed/duration);
		var bk1 = bkgNite1; var bk2 = bkgNite2;
		var opOv = lapsed/duration;
		var ov1 = bkgSunset1; var ov2 = bkgSunset2;
		if(opOv >= .7) { var opSun = ((lapsed/duration) - .7); var opSunIE = 1; var opMoon = 0; var opMoonIE = 0; }
		if(opOv > .69 && opOv < .7) { var opSun = 0; var opSunIE = 0; var opMoon = 0; var opMoonIE = 0; }
		if(opOv <= .69) { var opMoon = (.69 - (lapsed/duration)) * 1.5; var opMoonIE = 1; var opSun = 0; var opSunIE = 0; }
		var txCol = "#777";
		if(opOv < .7) { txSumCol = "#fff"; txUpdCol = "#ffffff"; }
		if(opOv < .56) { txSumCol = "#fff"; txUpdCol = "#eeeeee"; }
		if(opOv < .35) { txSumCol = "#fff"; txUpdCol = "#dddddd"; }
		if(opOv < .21) { txSumCol = "#fff"; txUpdCol = "#cccccc"; }
		if(opOv < .14) { txSumCol = "#fff"; txUpdCol = "#bbbbbb"; }
		divChange(opBk,bk1,bk2,opOv,ov1,ov2,opSun,opSunIE,opMoon,opMoonIE,txSumCol,txUpdCol);
		return;
	}
}
// Support function for Weather Summary background changer
function divChange(opBk,bk1,bk2,opOv,ov1,ov2,opSun,opSunIE,opMoon,opMoonIE,txSumCol,txUpdCol) {
	$(divSky1Bkg).setStyle('background-image', bk1);
	$(divSky2Bkg).setStyle('background-image', bk2);
	$(divSky1Bkg).setStyle('opacity', opBk);
	$(divSky2Bkg).setStyle('opacity', opBk);
	$(divSky1Ovl).setStyle('background-image', ov1);
	$(divSky2Ovl).setStyle('background-image', ov2);
	$(divSky1Ovl).setStyle('opacity', opOv);
	$(divSky2Ovl).setStyle('opacity', opOv);
	if(Browser.Engine.trident) { // MSIE doesn't support opacity on PNG images! 
		$(sunOv).setStyle('opacity', opSunIE);
		$(moonOv).setStyle('opacity', opMoonIE);
	} else {
		$(sunOv).setStyle('opacity', opSun);
		$(moonOv).setStyle('opacity', opMoon);
	}
	$(txtSummary).setStyle('color', txSumCol);
	$(txtUpdate).setStyle('color', txUpdCol);
}

// Ferry Schedule features in accordion 
function ferryClock(TS,Wd) {
	for(i=1; i<Nanaimo.length; i++) {
		var nPrv = tSec(Nanaimo[i-1]);
		var nNow = tSec(Nanaimo[i]);
		var gPrv = tSec(Gabriola[i-1]);
		var gNow = tSec(Gabriola[i]);
		if(TS > nPrv && TS <= nNow) {
			nID = 'n' + i;
			if(i>1) { nIDReset = 'n' + (i-1); }
			else { nIDReset = ""; }
			nRESET = dkReset; // odd numbers are light rows
			if(parseInt(i/2) == i/2) { nRESET = ltReset; } // even numbers are dark rows
			if(Wd == 3 && (i == 5 || i == 14)) { nCLR = GRY; nTXT = OUT; } // Wednesday
			// else if(Wd == 0 && i == 1) { nCLR = GRY; nTXT = OUT; } // Sunday
			else if(TS > nNow - loadWarn && TS <= nNow - cutOff) {nCLR = YEL; }
			else if(TS > nNow - cutOff && TS <= nNow) { nCLR = RED; }
			else { nCLR = GRN; }
		}
		if(TS > Nanaimo[Nanaimo.length+1]) {
			var i = Nanaimo.length+1;
			nID = 'n' + i;
			nTXT = DFT;
			nCLR = dkReset;
			if(parseInt(i/2) == i/2) { nCLR = ltReset; } // even numbers are dark rows
		}
		if(TS > gPrv && TS <= gNow) { // clear rows after last ferry
			gID = 'g' + i;
			if(i>1) { gIDReset = 'g' + (i-1); }
			else { gIDReset = ""; }
			gRESET = dkReset; // odd numbers are dark rows
			if(parseInt(i/2) == i/2) { gRESET = ltReset; } // even numbers are light rows
			if(TS > gNow - loadWarn && TS <= gNow - cutOff) { gCLR = YEL; }
			else if(TS > gNow - cutOff && TS <= gNow) { gCLR = RED; }
			else if(Wd == 3 && (i == 10 || i == 15)) { gCLR = GRY; gTXT = OUT; } // Wednesday
			// else if(Wd == 0 && i == 2) { gCLR = GRY; gTXT = OUT } // Sunday
			else { gCLR = GRN; }
		}
		if(TS > Gabriola[Gabriola.length+1]) { // clear rows after last ferry
			var i = Gabriola.length+1;
			gID = 'n' + i;
			gTXT = DFT;
			gCLR = dkReset;
			if(parseInt(i/2) == i/2) { gCLR = ltReset; } // even numbers are dark rows
		}
	}
	if(nIDReset) {
		$(nIDReset).setStyles({
			'background-color': nRESET,
			'color': DFT,
			'font-weight': 'normal'
		 });
	}
	if(gIDReset) {
		$(gIDReset).setStyles({
			'background-color': gRESET,
			'color': DFT,
			'font-weight': 'normal'
		 });
	}
	if(nID) {
		$(nID).setStyles({
			'background-color': nCLR,
			'color': nTXT,
			'font-weight': 'bold'
		 });
	}
	if(gID) {
		$(gID).setStyles({
			'background-color': gCLR,
			'color': gTXT,
			'font-weight': 'bold'
		 });
	}
}