var DateFormatString = "yyyy-mm-dd";

if (location.href.indexOf('lang=f') >-1) { currentLang = 'f' }
else { currentLang = 'e' }

function setTab(thisTab) {
	var tabList = thisTab.parentNode.getElementsByTagName("A");
	for (var i=0; tabList[i]; i++) {
		if (tabList[i] == thisTab) {
			tabList[i].className = "activeTab";
			document.getElementById("tab_"+tabList[i].href.replace(/.*#/,"")).style.display = "block";
		} else {
			tabList[i].className = "";
			document.getElementById("tab_"+tabList[i].href.replace(/.*#/,"")).style.display = "none";
		}
	}
	scroll(0,0);
//	return false;
}

window.addEvent('domready', function(){
	if (location.hash) {
		var tabElements = $(document).getElements('a[href$='+location.hash+']');
		if (tabElements.length && tabElements[0].parentNode.className=="tabHeader")
			setTab(tabElements[0]);
	}
});

function addToFavs(evt, class_hash) {
	evt = evt ? evt : window.event;
	var tObj = (evt.target || evt.srcElement);
	tObj.src="/images/template/fav-listed.gif";
	tObj.alt="listed on your favourites";
	tObj.parentNode.onclick = function(e) { return remFromFavs(e, class_hash); };
	AjaxRequest(null, favChange ,'setFav', 'addClass', 1, 'class_hash', class_hash);
	if (!infoBox) return false;
	infoBox.showInlineInfo(evt, '<strong>The class has been added to your favourites</strong>');
	return false;
}

function remFromFavs(evt, class_hash) {
	evt = evt ? evt : window.event;
	var tObj = (evt.target || evt.srcElement);
	tObj.src="/images/template/fav-unlisted.gif";
	tObj.alt="not listed on your favourites";
	tObj.parentNode.onclick = function(e) { return addToFavs(e, class_hash); };
	AjaxRequest(null, favChange ,'setFav', 'addClass', 0, 'class_hash', class_hash);
	if (!infoBox) return false;
	infoBox.showInlineInfo(evt, '<strong>The class has been removed from your favourites</strong>');
	return false;
}

function favChange(resObj) {
	//alert(AjaxResParam(resObj, "boolean"));
}



function showRestrictedMsg(evt) {
	if (!infoBox) return false;
	infoBox.showInlineInfo(evt, '<strong>This class has admission restrictions.</strong> Consult either the notes, the studio or the instructor for more information.');
	return false;
}

if (window.attachEvent)
	window.attachEvent("onload", fixMinHeight);

if (window.addEventListener)
	window.addEventListener("load", fixMinHeight, false);

function fixMinHeight() {
	if (document.getElementById) {
		var isIE = window.event ?  true : false;
		var isIE7 = (isIE && navigator.appVersion.indexOf("MSIE 7") > -1) ? true : false;
		var h = (typeof window.innerHeight != 'undefined' ? window.innerHeight : document.documentElement.clientHeight);
		var ca = document.getElementById("contentArea");
		var sm = document.getElementById("sideMenu");
		if (ca && ca.offsetHeight < (h-260) && (!isIE || isIE7))
			ca.style.minHeight = (h-260)+"px";
		else if (ca && ca.offsetHeight < (h-260))
			ca.style.height = (h-260)+"px";
	}
}

var dateField = null;
var CalFrameObj = null;
var CalFrameInit = false;
function ShowCalendar(thisObj) {
	dateField = null;
	dateField = $(thisObj).getPrevious();
	if (!dateField || dateField.tagName != "INPUT") {
		var parentElem = $(thisObj).getParent();
		dateField=parentElem.getElementsByTagName('INPUT')[0];
	}
	if (!CalFrameObj) {
		CalFrameObj = new Element('iframe', {
			'styles': {'position': 'absolute', 'display':'none',
				'z-index': '100', 'margin':'0px',
				'bottom':'0px', 'border': 'solid 1px black',
				'width':'175px', 'height': '205px'
				},
			'id': 'CalFrame', 'name': 'CalFrame', 'src': '/php_core/calendar.php?'+Math.random(), 
			'frameBorder': '0',	'scrolling': 'no', 'marginHeight': '0',
			'allowTransparency': false, 'marginWidth': '0'
			}).injectInside($(document.body));
	}
	var CalFrameIndex = null;
	if (document.frames) {
		for (i=0;i<document.frames.length;i++) {
			if (document.frames[i].location.href.toLowerCase().indexOf("calendar.php") > -1)
				CalFrameIndex = i;
		}
	}
	CalFrameObj.setStyles({display: "", left: $(thisObj).getLeft()+"px",top: $(thisObj).getTop()+"px"});
	CalFrameObj.src = "/php_core/calendar.php?"+Math.random();

	document.addEvent("mouseup", hideCalendar);
	return false;
}

function hideCalendar() {
	CalFrameObj.style.display = "none";
	document.removeEvent("mouseup", hideCalendar);
	dateField = null;
}

function setLinkRedirects() {
	if (document.getElementsByTagName) {
		var allAnchors = document.getElementsByTagName("A");
		for (var i=0; i<allAnchors.length; i++) {
			if (allAnchors[i].href.toLowerCase().indexOf("http://") == 0 && allAnchors[i].href.toLowerCase().indexOf(location.hostname.toLowerCase()) == -1) {
				allAnchors[i].target = "_blank";
			}
		}
	}
}
if (window.attachEvent)
	window.attachEvent("onload", setLinkRedirects);
if (window.addEventListener)
	window.addEventListener("load", setLinkRedirects, false);

function findFormElementByName(thisObj, tag, sName) {
	var tagList = thisObj.getElementsByTagName(tag);
	for (var i=0; tagList[i]; i++) {
		if (tagList[i].name && tagList[i].name.toLowerCase() == sName.toLowerCase())
			return tagList[i];
	}
	return null;
}

function toggleVisibility(thisObj) {
	if (thisObj.style.display == 'none'){
		thisObj.style.display = '';
	} else {
		thisObj.style.display = 'none';
	}
}
/* Return an object by name, checking to see if the value passed is already an object */
function getThisObj (objName) {
	if (typeof(objName) == 'object') {
		return objName;
	} else {
		if (document.getElementById && document.getElementById(objName)) {
			return document.getElementById(objName);
		} else if (document.layers && document.layers[objName]) {
			return document.layers[objName];
		} else if (document.all && document.all[objName]) {
			return document.all[objName];
		} else if (document[objName]) {
			return document[objName];
		} else {
			alert(objName + " not found!");
			return false;
		}
	}
}

/* get the left pixel position for a given element */
function getXPos(thisObj) {
	var x=0;
	do {
		x += thisObj.offsetLeft;
		thisObj = thisObj.offsetParent;
	} while (thisObj != null)
	return x;
}

/* get the top pixel position for a given element */
function getYPos(thisObj) {
	var y=0;
	do {
		y += thisObj.offsetTop;
		thisObj = thisObj.offsetParent;
	} while (thisObj != null)
	return y;
}

/* Returns a string that is trimmed on left and right of whitespace characters */
function trim(txt) {
	txt = txt == null ? "" : txt;
	txt = txt.replace(/^\s+/g,"");
	return txt.replace(/\s+$/g,"");
}

function isEmailFormat(emailString) {
	// if email is in correct RFC 822 format, the following substitution should validate
	if (emailString != "okay"  && emailString.replace(/^[0-9a-z_]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$/i,"okay") == "okay") {
		return true;
	} else {
		return false;
	}
}

function telephoneFrmt(formElement) {
	formElement.value = formElement.value.replace(/\D+/g,"");
	if (formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})(\d+)/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})(\d+)/g,"1 ($1) $2-$3 x$4");
	} else if (formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})/g,"1 ($1) $2-$3");
	} else if (formElement.value.replace(/^(\d{3})(\d{3})(\d{4})(\d+)/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^(\d{3})(\d{3})(\d{4})(\d+)/g,"($1) $2-$3 x$4");
	} else {
		formElement.value = formElement.value.replace(/^(\d{3})(\d{3})(\d{4})/g,"($1) $2-$3");
	}
}

function PSCodeFrmt(formElement) {
	formElement.value = formElement.value.toUpperCase().replace(/[^A-Z0-9]+/g,"");
	if (formElement.value.replace(/^([A-Z]\d[A-Z])(\d[A-Z]\d)$/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^([A-Z]\d[A-Z])(\d[A-Z]\d)$/g,"$1 $2");
	} else {
		formElement.value = "";
	}	
}

// always returns year, month, day
function getDateArray(dtString,dtFrmt) {
	var separator = "-";
	if (dtFrmt.indexOf('/') != -1) {
		separator = "/";
	} else if (dtFrmt.indexOf('.') != -1) {
		separator = ".";
	}
	var dtFrmtArray = dtFrmt.toLowerCase().split(separator);
	var dtStringArray = dtString.split(separator);
	var ymd = new Array;
	var parseError = false;
	if (dtFrmtArray.length == 3 && dtStringArray.length == 3) {
		for (i=0;i<3;i++) {
			if (dtFrmtArray[i].charAt(0) == "m") {
				ymd[1] = parseInt(dtStringArray[i],10);
			} else if (dtFrmtArray[i].charAt(0) == "d") {
				ymd[2] = parseInt(dtStringArray[i],10);
			} else if (dtFrmtArray[i].charAt(0) == "y") {
				ymd[0] = parseInt(dtStringArray[i],10);
			} else {
				parseError = true;
			}
		}
	} else {
		parseError = true;
	}
	if (parseError) {
		return null;
	} else {
		return ymd;
	}
}
function getDateString(year,month,day,dtFrmt) {
	var separator = "-";
	if (dtFrmt.indexOf('/') != -1) {
		separator = "/";
	} else if (dtFrmt.indexOf('.') != -1) {
		separator = ".";
	}
	var dtFrmtArray = dtFrmt.toLowerCase().split(separator);
	var DateOutput = "";
	var parseError = false;
	if (dtFrmtArray.length == 3) {
		for (var i=0;i<3;i++) {
			if (DateOutput != "") {
				DateOutput = DateOutput + separator;
			}
			if (dtFrmtArray[i] == "mm") {
				DateOutput = DateOutput + padNumber(2,month+"");
			} else if (dtFrmtArray[i] == "m") {
				DateOutput = DateOutput + (parseInt(month,10)+0);
			} else if (dtFrmtArray[i] == "dd") {
				DateOutput = DateOutput + padNumber(2,day+"");
			} else if (dtFrmtArray[i] == "d") {
				DateOutput = DateOutput + (parseInt(day,10)+0);
			} else if (dtFrmtArray[i] == "yy") {
				DateOutput = DateOutput + year.substring(2,3);
			} else if (dtFrmtArray[i] == "yyyy") {
				DateOutput = DateOutput + ((parseInt(year,10) < 100) ? (parseInt(year,10) + 2000) : year);
			} else {
				parseError = true;
			}
		}
	}
	if (parseError) {
		return "";
	} else {
		return DateOutput;
	}
}
function isValidDate(dateString) {
	if (dateString.replace(/\s/,"") == "") {
		return true;
	} else if (getDateArray(dateString, DateFormatString)) {
		var ymd = getDateArray(dateString, DateFormatString);
		var dateObj = new Date(ymd[0],ymd[1]-1,ymd[2]);
		var compYear = dateObj.getYear().toInt() < 1000 ? dateObj.getYear().toInt() + 1900 : dateObj.getYear().toInt();
		var compMonth = dateObj.getMonth().toInt()+1;
		var compDay = dateObj.getDate().toInt();
		if (ymd[0] > 1800 && ymd[0] < 2300 && ymd[0] == compYear && ymd[1] == compMonth && ymd[2] == compDay) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}


function padNumber(padLength,StringNumber) {
	StringNumber = StringNumber.replace(/[^0-9]/g,"");
	var padElem = padLength - StringNumber.length;
	for (var i=0;i<padElem;i++) {
		StringNumber = "0"+StringNumber;
	}
	return StringNumber;
}


/******************************************************/
/* Functions for getting and setting cookie values    */
/******************************************************/
function Set_Cookie( name, value, expires, path, domain, secure ) {
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );
	
	/*
	if the expires variable is set, make the correct 
	expires time, the current script below will set 
	it for x number of days, to make it for hours, 
	delete * 24, for minutes, delete * 60 * 24
	*/
	if (expires)
		expires = expires * 1000 * 60 * 60 * 24;
	var expires_date = new Date( today.getTime() + (expires) );
	
	document.cookie = name + "=" +escape( value ) +
		( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
		( ( path ) ? ";path=" + path : "" ) + 
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure ) ? ";secure" : "" );
}
// this function gets the cookie, if it exists
function Get_Cookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) )
		return null;
	if ( start == -1 )
		return null;
	var end = document.cookie.indexOf( ";", len );
	if ( end == -1 )
		end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

function myCustomCleanup(type, value) {
	switch (type) {
		case "get_from_editor":
			// alert("get_from_editor: Value HTML string: " + value);

			// Do custom cleanup code here

			break;

		case "insert_to_editor":
			// alert("insert_to_editor: Value HTML string: " + value);
			//alert("Got Here!");
			value = JS_CleanMSWordString(value);
			/*
			*/

			// Do custom cleanup code here

			break;

		case "get_from_editor_dom":
			// alert("get_from_editor_dom: Value DOM Element " + value);

			// Do custom cleanup code here

			break;

		case "insert_to_editor_dom":
			// alert("insert_to_editor_dom: Value DOM Element: " + value);

			// Do custom cleanup code here

			break;
	}

	return value;
}


function JS_CleanMSWord(thisObj) {
	var newData = thisObj.DOM.body.innerHTML;
	thisObj.DOM.body.innerHTML = JS_CleanMSWordString(newData);
}

function JS_CleanMSWordString(newData) {
	newData = newData.replace(/<o:p>(&nbsp;|\s)*<\/o:p>/g, ""); // Remove all instances of <o:p>
	newData = newData.replace(/<\/?o\:[^>]*>/g, "");
	newData = newData.replace(/<st1:[^>]*>/g, ""); // remove all SmartTags (from Word XP!)
	newData = newData.replace(/<\?xml:[^>]*>/g, ""); // remove all XML(from Word XP!)
	newData = newData.replace(/\\r/g, "\n");
	newData = newData.replace(/\\n\\n/g, "\n");
	newData = newData.replace(/<\/?(?:st1|V:|o:p|span|div)[^>]*>/ig, "");
	newData = newData.replace(/<!\[if !supportEmptyParas\]>.*?<!\[endif\]>/ig, "");
	newData = newData.replace(/<!--\[if supportFields\]>.*?<!\[endif\]-->/ig, "");
	newData = newData.replace(/<!\[if !supportLists\]>.*?<!\[endif\]>/ig, "<li>");
	newData = newData.replace(/<!\[if !supportMisalignedRows+\]>.*?<!\[endif\]>/ig, "");
	newData = newData.replace(/<v:shapetype .*?<\/v:shapetype>/ig, "");
	newData = newData.replace(/<v:shape .*?<\/v:shape>/ig, "");
	newData = newData.replace(/ v:shapes="[^"]+"/ig, "");
	newData = newData.replace(/<del [^>]+>.*?<\/del>/ig, "");
	newData = newData.replace(/<ins [^>]+>(.*?)<\/ins>/ig, "$1");
	newData = newData.replace(/<!-*\[if[^>]+>/ig, "");
	newData = newData.replace(/<!\[endif\]-*>/ig, "");
	newData = newData.replace(/\s+class=Mso[^ >]+/ig, "");
	newData = newData.replace(/(<p|<h[1-6])([^>]*)\s+align=left/ig, "$1$2");
	newData = newData.replace(/mso-[^\";]*/g, "");
	newData = newData.replace(/<br>\s*<br>/ig, "</p>\n<p>");
	newData = newData.replace(/(<td[^>]*>)\s*(<\/td>)/ig, "$1&nbsp;$2");
	newData = newData.replace(/<p[^>]*>(?:&nbsp;|<([a-z0-9]+)><\/\1>|\s)*<\/p>/ig, "");
	newData = newData.replace(/&nbsp;(&nbsp;)+/ig, "&nbsp;");
	newData = newData.replace(/(<P[^>]*>)(&nbsp;|\s)+/ig, "$1");
	newData = newData.replace(/(<\/P>)\s*<BR>\s*(<P[^>]*>)/ig, "$1\n$2");
	newData = newData.replace(/(<\/?)dir>/ig, "$1blockquote>");
	newData = filterElements(newData);
	return (newData ? newData : "<br />");
}


var completeValidElements = new Array();

function filterElements(newData) {
	if (completeValidElements.length == 0) {
		SetValidElements();
	}
	newData = newData.replace(/(<\/?)/g,"$1~");
	while (newData != newData.replace(new RegExp("(<[^>]+\\s+)([a-z_0-9-]+\\s*=\\s*\"[^\"]*\")", 'ig'),"$1@$2")) {
		newData = newData.replace(new RegExp("(<[^>]+\\s+)([a-z_0-9-]+\\s*=\\s*\"[^\"]*\")", 'ig'),"$1@$2");
	}
	for (var i=0; i<completeValidElements.length; i++) {
		var ruleArray = completeValidElements[i].replace('[','|').replace(']','').split('|');
		var element = completeValidElements[i];
		if (typeof(ruleArray) == 'object') {
			element = ruleArray[0].toLowerCase();
			if (element == "a") {
				ruleArray[ruleArray.length] = "mce_real_href";
			}
		} else if (element == "a") {
			ruleArray[0] = element;
			ruleArray[1] = "mce_real_href";
		}
		var elementNew = element;
		if (element.indexOf('/') > -1) {
			elementNew = element.split('/')[1];
			element = element.split('/')[0];
			newData = newData.replace(new RegExp("(<\\/?~)"+element+"(\\s|>)", 'ig'),"$1"+elementNew+"$2");
		}
		element = tinyMCE._getCleanupElementName(element);
		elementNew = tinyMCE._getCleanupElementName(elementNew);
		newData = newData.replace(new RegExp("(<\\/?)~"+elementNew+"(\\s|>)", 'ig'),"$1"+elementNew+"$2");
		if (typeof(ruleArray) == 'object') {
			for (var x=1; x<ruleArray.length; x++) {
				newData = newData.replace(new RegExp("(<"+elementNew+"[^>]*)\\s+@("+ruleArray[x]+"\\s*=)", 'ig'),"$1 $2");
			}
		}
	}
	while (newData != newData.replace(new RegExp("(<[^>]+)\\s+@[a-z_0-9-]+\\s*=\\s*\"[^\"]*\"", 'ig'),"$1")) {
		newData = newData.replace(new RegExp("(<[^>]+)\\s+@[a-z_0-9-]+\\s*=\\s*\"[^\"]*\"", 'ig'),"$1");
	}
	newData = newData.replace(/<\/?~[^>]*>/g,"");
	return newData;
}

function SetValidElements() {
	// Parse valid elements and attributes
	var validElements = tinyMCE.settings["valid_elements"].split(',');
	var extendedValidElements = tinyMCE.settings["extended_valid_elements"].split(',');
	var invalidElements = tinyMCE.settings["invalid_elements"].split(',');
	for (var i=0; i<extendedValidElements.length; i++) {
		var elementName = tinyMCE._getCleanupElementName(extendedValidElements[i]);
		var skipAdd = false;

		// Check if it's defined before, if so override that one
		for (var x=0; x<validElements.length; x++) {
			if (tinyMCE._getCleanupElementName(validElements[x]) == elementName) {
				validElements[x] = extendedValidElements[i];
				skipAdd = true;
				break;
			}
		}
		if (!skipAdd)
			validElements[validElements.length] = extendedValidElements[i];
	}
	for (var i=0; i<validElements.length; i++) {
		var elementName = tinyMCE._getCleanupElementName(validElements[i]);
		var skipAdd = false;

		// Check if it's defined as invalid, if so remove it
		for (var x=0; x<invalidElements.length; x++) {
			if (tinyMCE._getCleanupElementName(invalidElements[x]) == elementName) {
				skipAdd = true;
				break;
			}
		}
		if (!skipAdd) {
			completeValidElements[completeValidElements.length] = validElements[i];
		}
	}
}

