/*
 * Javascript file containing utility functions for doing timezone related stuff
 */

$(document).ready(function() {
	var appendInput = function (form, name) {
	
		var input = $(document.createElement("input"));
		input.attr("type", "hidden");
		input.attr("name", name);
		var html = "<input type='hidden' name='" + name + "'/>";
		form.append(html);
	}


	var form = $("#LoginForm");
	appendInput(form, "gmtOffsetMins", "");
	appendInput(form, "recognizesDst", "");
	appendInput(form, "dstStart", "");
	appendInput(form, "dstEnd", "");
	appendInput(form, "capturedTimezone", "");
	form.submit(function (e) {
		var f = e.currentTarget ? e.currentTarget : e.srcElement;
		collectTzInfo(f);
	});
	
});

/*
 * Collects timezone info and plugs it into form fields on the supplied form object
 */
function collectTzInfo(myForm){
	var year = new Date().getFullYear();
	var date = new Date(Date.UTC(year, 0, 1, 11, 0, 0, 0));
	var lowOffset = -1;
	var highOffset = -1;
	var recognizesDST = false;
	var dstStart;
	var dstEnd;
	//First, determine the two offsets so you can find the raw one which will be the lower one
	while(date.getFullYear() - year <= 1){
		var convertedOffset = date.getTimezoneOffset() * -1 / 60;
		if (lowOffset == -1 && highOffset == -1){
			lowOffset = convertedOffset
			highOffset = convertedOffset;
		}
		else if (convertedOffset < lowOffset){
			lowOffset = convertedOffset;
		}
		else if (convertedOffset > highOffset){
			highOffset = convertedOffset;
		}
		date = new Date(date.getTime() + (86400000));
	}				
	if (lowOffset != highOffset){
		//Reset the date and then roll backwards until you find the point when it's at the low point
		date = new Date(Date.UTC(year, 0, 1, 11, 0, 0, 0));
		while(date.getTimezoneOffset() * -1 / 60 != lowOffset){
			date = new Date(date.getTime() - (86400000));
		}			
		while(year - date.getFullYear() <= 1){
			var convertedOffset = date.getTimezoneOffset() * -1 / 60;
			if (dstStart == null && convertedOffset != lowOffset){
				recognizesDST = true;
				dstStart = new Date(date.getTime());
			}
			else if (dstStart != null && convertedOffset != highOffset){
				dstEnd = new Date(date.getTime());
				break;
			}
			
			date = new Date(date.getTime() + (86400000));
		}
	}
	var gmtOffsetMins = lowOffset * 60;
	if (dstStart != null){
		myForm.dstStart.value = dstStart.getMonth() + 1 + "/" + dstStart.getDate();
	}
	if (dstEnd != null){
		myForm.dstEnd.value = dstEnd.getMonth() + 1 + "/" + dstEnd.getDate();
	}
	myForm.gmtOffsetMins.value = gmtOffsetMins;
	myForm.recognizesDst.value = recognizesDST;
	myForm.capturedTimezone.value = true;
	return true;
}
