function localizeDates() {
	//alert("hello");
	var elements = document.getElementsByClassName("LocalDateTime");
	$A(elements).each(function(element) {
	    var d = element.title;
		//alert(d + ", " + parseInt(d.substr(0,4),10) + ", " + (parseInt(d.substr(5,7),10)-1) + ", " + parseInt(d.substr(8,10),10) + ", " + parseInt(d.substr(11,13),10) + ", " + parseInt(d.substr(14,16),10));
		var date = new Date(Date.UTC(parseInt(d.substr(0,4),10),parseInt(d.substr(5,7),10)-1,parseInt(d.substr(8,10),10),parseInt(d.substr(11,13),10),parseInt(d.substr(14,16),10),0,0));
		element.innerHTML = date.toLocaleString();
		//element.title = date.toUTCString();
	});
	
	var elements = document.getElementsByClassName("LocalDateTimeSelect");
	$A(elements).each(function(element) {
		var d = new Date();
		var offset = d.getTimezoneOffset() * 60000;
		var utc = element.getElementsByTagName("INPUT")[0];
		var form = utc.form;
		var name = utc.name.replace(/_UTC/,"");
		var date = form.elements[name+"_DATE"];
		var hour = form.elements[name+"_HOUR"];
		var minute = form.elements[name+"_MINUTE"];
		if (utc.value != null) {
			//alert("offset="+offset+", utc="+utc.value+"("+parseInt(utc.value, 10)+")");
			var s = Math.floor((parseInt(utc.value, 10) - offset) / 1000);
			//alert("s="+s);
			var dd = Math.floor(s / 86400);
        	var hh = Math.floor((s % 86400) / 3600);
        	var mm = Math.floor((s % 3600) / 60);
			//alert("dd=" + dd + ", hh=" + hh + ", mm=" + mm);
		}
		//replace the list of dates
		//form.parentNode.appendChild(document.createTextNode(d.toUTCString()));
		var day = Math.floor((d.getTime() - offset) / 86400000);
		date.options.length = 1;
		for ( var i = 0; i < 60; i += 1 ) {
			d.setTime((day + i) * 86400000);
			var local = new Date(d.getTime() + offset);
			date.options[date.options.length] = new Option(local.toLocaleDateString(), day + i, false, day + i == dd);
		}
		hour.selectedIndex = hh;
		minute.selectedIndex = mm / 15;
		setUTC2(name, form);
		date.onchange = setUTC;
		hour.onchange = setUTC;
		minute.onchange = setUTC;
	});
}

function setUTC() {
	setUTC2(this.name.substr(0,this.name.lastIndexOf("_")), this.form);
}

function setUTC2(name, form){
	var utc = form[name + "_UTC"];
	var date = form[name + "_DATE"];
	var hour = form[name + "_HOUR"]; 
	var minute = form[name + "_MINUTE"];
	//alert(date.value+"T"+hour.options[hour.selectedIndex].text+":"+minute.options[minute.selectedIndex].text);
	var d = new Date((date.value == "") ? 0 : parseInt(date.value, 10) * 86400000);
	d.setUTCHours(parseInt(hour.options[hour.selectedIndex].text, 10), parseInt(minute.options[minute.selectedIndex].text, 10));
	utc.value = "UTC" + (d.getTime() + d.getTimezoneOffset() * 60000);
	//alert(date.value+", "+utc.value + ", " + new Date(parseInt(utc.value.substr(3))).toUTCString());
}

function clickHelp() {
	if (this.helpDiv.className == "Hidden") {
		var divNodes = this.parentNode.getElementsByTagName("div");
		for (var i = 0; i < divNodes.length; i += 1) {
			divNodes[i].className = "Hidden";
		}
		this.helpDiv.className = "Visible";
	} else {
		this.helpDiv.className = "Hidden";
	}
}

function setupHelp() {
	var help = document.getElementById("Help");
	if (help === null) {
		return;
	}
	var h6Nodes = help.getElementsByTagName("h6");
	var divNodes = help.getElementsByTagName("div");
	if (h6Nodes.length == divNodes.length) {
		for (var i = 0; i < h6Nodes.length; i += 1) {
			var h6 = h6Nodes[i];
			var div = divNodes[i];
			h6.className = "Click";
			h6.onclick = clickHelp;
			h6.helpDiv = div;
			div.className = "Hidden";
		}
	}
}

function setupTabSet() {
	var tabset = document.getElementById("TabSet");
	if (tabset === null) {
		return;
	}
	//each tab is a <li> containing an <a>
	var aNodes = tabset.getElementsByTagName("a");
	for (var i = 0; i < aNodes.length; i += 1) {
		aNodes[i].onclick = new Function("activateTab(" + i + "); return false;");
	}
}

function activateTab(tabPos) { //first tab is 0
	var tabs = document.getElementById("TabSet").getElementsByTagName("li");
	for (var i = 0; i < tabs.length; i += 1) {
		var tabPanel = document.getElementById("TabPanel" + i);
		if (i == tabPos) {
			addClass(tabPanel, "ActiveTabPanel");
			addClass(tabs[i], "Active");
			//check if tab panel contains object or embed tags
			var embeds = tabPanel.getElementsByTagName("embed");
			for (var j = 0; j < embeds.length; j += 1) {
				embeds[j].Play();
			}
			var objects = tabPanel.getElementsByTagName("object");
			for (var j = 0; j < objects.length; j += 1) {
				objects[j].Play();
			}
		} else {
			removeClass(tabPanel, "ActiveTabPanel");
			removeClass(tabs[i], "Active");
			var embeds = tabPanel.getElementsByTagName("embed");
			for (var j = 0; j < embeds.length; j += 1) {
				embeds[i].StopPlay();
			}
			var objects = tabPanel.getElementsByTagName("object");
			for (var j = 0; j < objects.length; j += 1) {
				objects[i].StopPlay();
			}
		}
	}
}

function addClass(element, newClass){
	var currentClass = element.className;
	element.className = currentClass + " " + newClass;
}

function removeClass(element, oldClass) {
	var currentClass = element.className;
	var newClass = currentClass.replace(new RegExp(oldClass, "g"), "").replace(/\s\s+/g," ").replace(/^\s|\s$/g, "");
	element.className = newClass == "" ? null : newClass;
}

function enhance() {
	localizeDates();
	//remove the class JSOnly from any tags so marked - JSOnly should be hidden by CSS
	var elements = document.getElementsByClassName("JSOnly");
	$A(elements).each(function(element) {
	    removeClass(element, "JSOnly");
	});
	//Remove any tags with class NoJS
	var elements = document.getElementsByClassName("NoJS");
	$A(elements).each(function(element) {
	    element.parentNode.removeChild(element);
	});
	//Set any tags with class HideWithJS to Hidden
	var elements = document.getElementsByClassName("HideWithJS");
	$A(elements).each(function(element) {
	    addClass(element, "Hidden");
	});
	//adjust the width of cw if it has overflowed
	var cw = document.getElementById("ContentWide");
	if (cw.scrollWidth > cw.getWidth()) {
		cw.setStyle({width: cw.scrollWidth + 'px'});
	}
	setupHelp();
	setupTabSet();
}