/*
 * $Id: allPages.js 1396 2010-05-24 09:09:15Z isalciuc $
 */

// JavaScript Document for all Pages on Irish Times Training

/****************************************************
* Global Vars										*
*													*
*****************************************************/

var directory = "";

var IEPNGFix = window.IEPNGFix || {};
IEPNGFix.data = IEPNGFix.data || {};


/****************************************************
* Call Handlers										*
*													*
*****************************************************/


function addEventFunc(el, evtType, func, capture) {
	var ret = 0;
	
	if (el.addEventFuncListener){
		ret = el.addEventFuncListener(evtType, func, capture);
	} else if (el.attachEvent){
		ret = el.attachEvent('on' + evtType, func);
	} else { 
		el['on' + evtType] = func;
	}
	
	return ret;
}





/****************************************************
* Browser Detection									*
*													*
*****************************************************/


function Detect() {
	
	agent 	= navigator.userAgent.toLowerCase();
						
	// detect OS
	this.isMac		= (agent.indexOf('mac') != -1);
	this.isWin		= (agent.indexOf('win') != -1);
	this.isWin2k	= (this.isWin && (agent.indexOf('nt 5') != -1));
	this.isWinSP2	= (this.isWin && (agent.indexOf('xp') != -1 || agent.indexOf('sv1') != -1));
	this.isOther	= (agent.indexOf('unix') != -1 || agent.indexOf('sunos') != -1 || agent.indexOf('bsd') != -1 || agent.indexOf('x11') != -1 || agent.indexOf('linux') != -1);
	
	// detect browser
	this.isSafari	= (agent.indexOf('safari') != -1);
	this.isSafari2 = (this.isSafari && (parseFloat(agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).substring(0,agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).indexOf(' '))) >=  300));
	this.isOpera	= (agent.indexOf('opera') != -1);
	this.isNN		= (agent.indexOf('netscape') != -1);
	this.isFF3		= (agent.indexOf('firefox/3') != -1);
	this.isIE		= (agent.indexOf('msie') != -1);
	this.isIE6		= (agent.indexOf('msie 6.') != -1);
	this.isIE5		= (agent.indexOf('msie 5.') != -1);
}

var browser = new Detect();




/****************************************************
* Return Objects By ClassName						*
*													*
*****************************************************/

function getElementsByClassName(strClassName, obj) {
	var ar = arguments[2] || [];
	var re = new RegExp("\\b" + strClassName + "\\b", "g");

	if (re.test(obj.className)) {
		ar.push(obj);
	}
	for (var i=0; i<obj.childNodes.length; i++){
		getElementsByClassName(strClassName, obj.childNodes[i], ar);
	}
    
	return ar;
}






/****************************************************
* Grab all stylesheets								*
*													*
*****************************************************/

function getAllSheets() {
	var Lt, St, rel;
	
	if(!window.ScriptEngine && navigator.__ice_version){
		return document.styleSheets; 
	}
	if(document.getElementsByTagName){
		Lt = document.getElementsByTagName('link');
		St = document.getElementsByTagName('style');
	} else if(document.styleSheets && document.all){
		Lt = document.all.tags('LINK');
		St = document.all.tags('STYLE');
	} else { 
		return [];
	}
	
	for(var x=0, os=[]; Lt[x]; x++){
		if(Lt[x].rel){
			rel = Lt[x].rel;
		} else if(Lt[x].getAttribute) {
			rel = Lt[x].getAttribute('rel');
		} else { 
			rel = '';
		}
	
		if(typeof(rel) == 'string' && rel.toLowerCase().indexOf('style') + 1){
			os[os.length] = Lt[x];
		}
	}
	
	for(x=0; St[x]; x++){ 
		os[os.length] = St[x];
	} return os;
}


function changeStyle() {
	for(var x=0, ss=getAllSheets(); ss[x]; x++){
		if(ss[x].title){
			ss[x].disabled = true;
		}
		
		for(var y=0; y<arguments.length; y++){
			if(ss[x].title == arguments[y]){
				ss[x].disabled = false;
			}
		}
	}
	
	if(!ss.length) { 
		alert('Your browser cannot change stylesheets');
	}
}






/****************************************************
* Primary Navigation Rollover						*
*													*
*****************************************************/

function priNavRoll(e) {
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	var src = tgt.currentStyle.filter.substring(tgt.currentStyle.filter.indexOf("src=\"")+5, tgt.currentStyle.filter.indexOf("\",sizing"));

	
	if(e.type.toLowerCase().indexOf("over") > -1 && tgt.parentNode.parentNode.className.indexOf("nav-on") < 0){		
		src = src.replace(/\/images\/homepage\//, "/images/homepage/mouseover/");
		src = src.replace(/_light.png/, "_mo.png");
	} else if(e.type.toLowerCase().indexOf("out") > -1 && tgt.parentNode.parentNode.className.indexOf("nav-on") < 0){
		src = src.replace(/\/images\/homepage\/mouseover\//, "/images/homepage/");
		src = src.replace(/_mo.png/, "_light.png");
	}
	
	if(src.length > 0){
		tgt.style.backgroundImage = 'url(' + src + ')';
		tgt.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '",sizingMethod="crop")';		
		tgt.style.backgroundImage = 'url(' + IEPNGFix.blankImg + ')';
	}
}







/****************************************************
* Handle Rollovers on Inputs with Backgrounds		*
*													*
*****************************************************/

function inputRoll(e){
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	
	if(tgt.src){
		if(tgt.src.length > 0 ){
			if(e.type.toLowerCase().indexOf("over") > -1 && tgt.src.substring(tgt.src.length-5,tgt.src.length) == "1.gif"){
				tgt.src = tgt.src.substring(0,tgt.src.length-5) + "2.gif";
			} else if(e.type.toLowerCase().indexOf("out") > -1 && tgt.src.substring(tgt.src.length-5,tgt.src.length) == "2.gif"){
				tgt.src = tgt.src.substring(0,tgt.src.length-5) + "1.gif";
			}
		}
	}
}





/****************************************************
* Handle mousedown on free space, i.e. losing focus	*
* on HTML elements									*
*													*
*****************************************************/

function loseFocus(e){	
	var inputs = document.getElementsByTagName("input");
	for(var i=0;i<inputs.length;i++){
		if(inputs[i].value === "" && inputs[i].getAttribute("busy") === 0){			
			switch(inputs[i].name){
				case "keyword":
//					inputs[i].value = "Keyword";
					break;    
				case "username":
//					inputs[i].value = "Username";
					break;
				case "pers_data[telephone]":
//					inputs[i].value = "[country code]-[number]";
					break;
				case "password":					
					try {
//						inputs[i].setAttribute("type", "text");
					} catch(err){
						var new_input = document.createElement('input');
						new_input.setAttribute('type','text');
						new_input.setAttribute('name',inputs[i].getAttribute('name'));
						new_input.setAttribute('id',inputs[i].getAttribute('id'));
						new_input.setAttribute('busy',inputs[i].getAttribute('busy'));
						inputs[i].parentNode.replaceChild(new_input,inputs[i]);
						addEventFunc(new_input, "mousedown", updateInputs, false);
						addEventFunc(new_input, "focus", updateInputs, false);
						addEventFunc(new_input, "blur", inputBlur, false);
					}
//					inputs[i].value = "Password";
					break;
				default:
			}
		}
	}
}





/****************************************************
* Handle input Blur									*
*													*
*****************************************************/

function inputBlur(e){	
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	
	tgt.setAttribute("busy", 0);
	loseFocus();
}





/****************************************************
* Remove Username text from login forms and change	*
* Password field to be of type password				*
*													*
*****************************************************/

function updateInputs(e){	
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	
	if(tgt.nodeName.toLowerCase() == "input"){
		
		tgt.setAttribute("fixed", 1);
		tgt.setAttribute("busy",1);

		if(tgt.value == "Username"){
			tgt.value = "";
		} else if(tgt.value == "Keyword"){
			tgt.value = "";
		} else if(tgt.value == "Password"){
			tgt.value = "";
			try {
				tgt.setAttribute("type", "password");
			} catch(err){
				var new_input = document.createElement('input');
				new_input.setAttribute('type','password');
				new_input.setAttribute('name',tgt.getAttribute('name'));
				new_input.setAttribute('id',tgt.getAttribute('id'));
				new_input.setAttribute('busy',tgt.getAttribute('busy'));
				tgt.parentNode.replaceChild(new_input,tgt);
				addEventFunc(new_input, "mousedown", updateInputs, false);
				addEventFunc(new_input, "focus", updateInputs, false);
				addEventFunc(new_input, "blur", inputBlur, false);
				new_input.select();
				new_input.focus();
			}
		}
	}
}



/****************************************************
* Handle tabs - showing/hiding of content			*
*													*
*****************************************************/

function handleTabs(e){
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	var el=tgt, limit = 5, lis, index=0;
	
	while(el.nodeName.toLowerCase() != "li" && limit >= 0){
		el = el.parentNode;
		limit--;
	}
	
	lis = el.parentNode.getElementsByTagName("li");
	for(var i=0; i<lis.length; i++){
		lis[i].className = lis[i].className.replace(/nav-on/, "");
		if(lis[i] == el){ 
			index = i;
		}
	}
	
	if(el.className.length > 0){
		el.className += " nav-on";
	} else {
		el.className = "nav-on";
	}
	
	if(el.parentNode.parentNode){
		var all_divs = el.parentNode.parentNode.getElementsByTagName("div");
		var layers = [];
		for(i=0; i<all_divs.length; i++){
			if(all_divs[i].className.indexOf("tab-shown") > -1 || all_divs[i].className.indexOf("tab-hidden") > -1){
				layers.push(all_divs[i]);
				if(all_divs[i].className.indexOf("tab-shown") > -1){
					all_divs[i].className = all_divs[i].className.replace(/tab-shown/, "tab-hidden");
				}
			}
		}
		
		try {
			layers[index].className = layers[index].className.replace(/tab-hidden/, "tab-shown");
		} catch(err){}
	}
}





/****************************************************
* Handle rollover on Tabs							*
*													*
*****************************************************/

function handleTabsRollover(e){
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	var bg, css, el=tgt, limit = 5, index=0; 
	
	while(el.nodeName.toLowerCase() != "li" && limit >= 0){
		el = el.parentNode;
		limit--;
	}
	
	if(tgt.currentStyle){
		bg = tgt.currentStyle.backgroundImage;
	} else {
		css = getComputedStyle(tgt,'');
		bg = css.getPropertyValue("background-image");
	}
/*
	if(e.type.toLowerCase().indexOf("over") > -1 && el.className.indexOf("nav-on") > -1){		
		tgt.style.color = "#005DA8";
		tgt.style.backgroundImage = bg.replace(/_light.gif/, "_dark.gif");
	} else if(e.type.toLowerCase().indexOf("out") > -1 && el.className.indexOf("nav-on") < 0){
		tgt.style.color = "#333333";
		tgt.style.backgroundImage = bg.replace(/_dark.gif/, "_light.gif");
	}*/
}







/****************************************************
* Handle rollover on notices, e.g. on Homepage		*
*													*
*****************************************************/

function handleNoticeRollover(e){
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	
	if(e.type.toLowerCase().indexOf("over") > -1 && tgt.parentNode.nodeName.toLowerCase() == "a"){		
		tgt.style.color = "#88AEC8";
	} else if(e.type.toLowerCase().indexOf("out") > -1 && tgt.parentNode.nodeName.toLowerCase() == "a"){
		tgt.style.color = "#005DA8";
	}
}






/****************************************************
* Handle rollover on Secondary Navigation			*
*													*
*****************************************************/

function secNavRollover(e){
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	var bg, css;
	
	if(tgt.parentNode && tgt.parentNode.nodeName.toLowerCase() == "li"){
		tgt = tgt.parentNode;
	} else { 
		return;
	}
	
	if(tgt.currentStyle){
		bg = tgt.currentStyle.backgroundImage;
	} else {
		css = getComputedStyle(tgt,'');
		bg = css.getPropertyValue("background-image");
	}
	
	if(e.type.toLowerCase().indexOf("over") > -1 && tgt.className.indexOf("nav-on") < 0){	
		tgt.style.backgroundImage = bg.replace(/w1.gif/, "w2.gif");
	} else if(e.type.toLowerCase().indexOf("out") > -1 && tgt.className.indexOf("nav-on") < 0){
		tgt.style.backgroundImage = bg.replace(/w2.gif/, "w1.gif");
	}
}




/****************************************************
* Handle rollover ULs with specific classnames		*
*													*
*****************************************************/

function specificUlRollover(e){
	if (!e){ 
		e = window.event;
	}
	var tgt = e.target || e.srcElement;
	var el=tgt, limit = 5, bg, css, index=0;
	
	while(el.nodeName.toLowerCase() != "li" && limit >= 0){
		el = el.parentNode;
		limit--;
	}
	
	if(el.currentStyle){
		bg = el.currentStyle.backgroundImage;
	} else {
		css = getComputedStyle(el,'');
		bg = css.getPropertyValue("background-image");
	}
	
	if(e.type.toLowerCase().indexOf("over") > -1){
		if(el.parentNode.className.indexOf("links") > -1){
			el.style.backgroundImage = bg.replace(/w1.gif/, "w2.gif");
		} else if(el.parentNode.className.indexOf("downloads") > -1){
			el.style.backgroundImage = bg.replace(/_dark.gif/, "_light.gif");
		}
	} else if(e.type.toLowerCase().indexOf("out") > -1){
		if(el.parentNode.className.indexOf("links") > -1){
			el.style.backgroundImage = bg.replace(/w2.gif/, "w1.gif");
		} else if(el.parentNode.className.indexOf("downloads") > -1){
			el.style.backgroundImage = bg.replace(/_light.gif/, "_dark.gif");
		}
	}
}








/****************************************************
* Event Handlers									*
*													*
*****************************************************/

function addListeners(){	
	var as = document.getElementsByTagName("a");
	for(var i=0;i<as.length;i++){
		as[i].hideFocus = true;
	}
	
	var imgs = document.getElementsByTagName("img");
	for(i=0;i<imgs.length;i++){
		if(imgs[i].parentNode.parentNode){
			if(imgs[i].parentNode.parentNode.className.indexOf("book-now") > -1 && imgs[i].parentNode.parentNode.nodeName.toLowerCase() == "td"){
				addEventFunc(imgs[i], "mouseover", inputRoll, false);
				addEventFunc(imgs[i], "mouseout", inputRoll, false);
			}
		}
	}
	
	var labels = document.getElementsByTagName("label");
	for(i=0;i<labels.length;i++){
		labels[i].hideFocus = true;
	}

	if(document.getElementById("primary-navigation")){
		as = document.getElementById("primary-navigation").getElementsByTagName("a");
		for(i=0;i<as.length;i++){
			if(browser.isIE6 || browser.isIE5){
				addEventFunc(as[i], "mouseover", priNavRoll, false);
				addEventFunc(as[i], "mouseout", priNavRoll, false);
			}
		}
	}
	
	var inputs = document.getElementsByTagName("input");
	for(i=0;i<inputs.length;i++){
		inputs[i].setAttribute("busy",0);
		addEventFunc(inputs[i], "mouseover", inputRoll, false);
		addEventFunc(inputs[i], "mouseout", inputRoll, false);
		
		if((inputs[i].value == "Username" || inputs[i].value == "Password" || inputs[i].value == "Keyword") && inputs[i].getAttribute("fixed") != 1){			
			addEventFunc(inputs[i], "mousedown", updateInputs, false);
			addEventFunc(inputs[i], "focus", updateInputs, false);
			addEventFunc(inputs[i], "blur", inputBlur, false);
		}
	}
	
	var uls = document.getElementsByTagName("ul");
	for(i=0;i<uls.length;i++){
		if(uls[i].className.indexOf("tabs") > -1){
			var spans = uls[i].getElementsByTagName("span");
			for(var j=0; j<spans.length; j++){
				addEventFunc(spans[j], "click", handleTabs, false);
				addEventFunc(spans[j], "mouseover", handleTabsRollover, false);
				addEventFunc(spans[j], "mouseout", handleTabsRollover, false);
			}
		}
		
		if(uls[i].className.indexOf("notices") > -1){
			spans = uls[i].getElementsByTagName("span");
			for(j=0; j<spans.length; j++){
				addEventFunc(spans[j], "mouseover", handleNoticeRollover, false);
				addEventFunc(spans[j], "mouseout", handleNoticeRollover, false);
			}
		}
		
		if(uls[i].className.indexOf("links") > -1 || uls[i].className.indexOf("downloads") > -1){
			as = uls[i].getElementsByTagName("a");
			for(j=0; j<as.length; j++){
				addEventFunc(as[j], "mouseover", specificUlRollover, false);
				addEventFunc(as[j], "mouseout", specificUlRollover, false);
			}
		}
		
		if(uls[i].parentNode.id == "secondary-navigation"){
			as = uls[i].getElementsByTagName("a");
			for(j=0; j<as.length; j++){
				addEventFunc(as[j], "mouseover", secNavRollover, false);
				addEventFunc(as[j], "mouseout", secNavRollover, false);
			}
		}
	}
	
	addEventFunc(document.body, "mousedown", loseFocus, false);
}





/****************************************************
* Get Flash Object									*
*													*
*****************************************************/

function getFlashMovieObject(movieName){
	if (window.document[movieName]){
		return window.document[movieName];
	}
	if (navigator.appName.indexOf("Microsoft Internet")==-1){
		if (document.embeds && document.embeds[movieName]){
			return document.embeds[movieName];
		}
	}
	else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
	{
		return document.getElementById(movieName);
	}
}


/****************************************************
* Write Out JS Browser Stylesheet					*
*													*
*****************************************************/

function writeJsStyles(w){
	var sSheets = document.getElementsByTagName("link");
	var dir = "";

	if(sSheets[0]){
		if(sSheets[0].href.indexOf("css") != -1){
			dir = sSheets[0].href.substring(0,sSheets[0].href.indexOf("css"));
		}
	}

	if(w==1){ 
		document.write('<link href="' + dir + 'css/js-dependant.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	/*
	if(browser.isIE6 || browser.isIE5){
		document.write('<link href="' + dir + 'css/poor-ie.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	 */
	if(browser.isSafari){ 
		document.write('<link href="' + dir + 'css/safari.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	
	directory = dir;
}



/****************************************************
* Preload Rollover Imagery							*
*													*
*****************************************************/

function preloadRollovers(){
	var rImages = ['about-us/arrow2.gif', 'contact/arrow_light.gif', 'contact/btn_clear2.gif', 'contact/btn_submit2.gif', 'coursepages/btn_booknow2.gif', 'homepage/mouseover/btn_banking_mo.png', 'homepage/mouseover/btn_business_mo.png', 'homepage/mouseover/btn_executive_mo.png', 'homepage/mouseover/btn_it_mo.png', 'homepage/mouseover/btn_management_mo.png', 'homepage/mouseover/btn_personal_mo.png', 'homepage/mouseover/btn_sales_mo.png', 'homepage/btn_login2.gif', 'homepage/btn_search2.gif', 'homepage/register2.gif', 'subpages/arrow2.gif', 'subpages/btn_go2.gif', 'subpages/register_sm2.gif'];
	var pImages = [];
	if(document.images){
		for(var i=0; i<rImages.length; i++){
			pImages[i] = new Image();
			pImages[i].src = directory + "images/" + rImages[i];			
		}
	}
}






/****************************************************
* On Page Load Functions							*
*													*
*****************************************************/

function init(){
	addListeners();
}

/**
 * Javascript Trim Member Functions
 **/

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

// example of using trim, ltrim, and rtrim
//var myString = " hello my name is ";
//alert("*"+myString.trim()+"*");
//alert("*"+myString.ltrim()+"*");
//alert("*"+myString.rtrim()+"*");





function doBrowserEvents(msecs)
{
	var i=0;
	var j5timerXH = initXmlHttpTimer(); // just creates an XMLHttp obj
	var j5UTC = new Date();
	while ((new Date()) - j5UTC < msecs)
	{
		i++;
		j5timerXH.open("GET","/doesnotexist",false);
		j5timerXH.send(null);
	}
	return i;
}

/***/
function getSelectedRadio(buttonGroup) {
   // returns the array number of the selected radio button or -1 if no button is selected
   if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
      for (var i=0; i<buttonGroup.length; i++) {
         if (buttonGroup[i].checked) {
            return i
         }
      }
   } else {
      if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
   }
   // if we get to this point, no radio button is selected
   return -1;
} // Ends the "getSelectedRadio" function

function getSelectedRadioValue(buttonGroup) {
   // returns the value of the selected radio button or "" if no button is selected
   var i = getSelectedRadio(buttonGroup);
   if (i == -1) {
      return false;
   } else {
      if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)
         return buttonGroup[i].value;
      } else { // The button group is just the one button, and it is checked
         return buttonGroup.value;
      }
   }
} // Ends the "getSelectedRadioValue" function

function getSelectedCheckbox(buttonGroup) {
   // Go through all the check boxes. return an array of all the ones
   // that are selected (their position numbers). if no boxes were checked,
   // returned array will be empty (length will be zero)
   var retArr = new Array();
   var lastElement = 0;
   if (buttonGroup[0]) { // if the button group is an array (one check box is not an array)
      for (var i=0; i<buttonGroup.length; i++) {
         if (buttonGroup[i].checked) {
            retArr.length = lastElement;
            retArr[lastElement] = i;
            lastElement++;
         }
      }
   } else { // There is only one check box (it's not an array)
      if (buttonGroup.checked) { // if the one check box is checked
         retArr.length = lastElement;
         retArr[lastElement] = 0; // return zero as the only array value
      }
   }
   return retArr;
} // Ends the "getSelectedCheckbox" function

function getSelectedCheckboxValue(buttonGroup) {
   // return an array of values selected in the check box group. if no boxes
   // were checked, returned array will be empty (length will be zero)
   var retArr = new Array(); // set up empty array for the return values
   var selectedItems = getSelectedCheckbox(buttonGroup);
   if (selectedItems.length != 0) { // if there was something selected
      retArr.length = selectedItems.length;
      for (var i=0; i<selectedItems.length; i++) {
         if (buttonGroup[selectedItems[i]]) { // Make sure it's an array
            retArr[i] = buttonGroup[selectedItems[i]].value;
         } else { // It's not an array (there's just one check box and it's selected)
            retArr[i] = buttonGroup.value;// return that value
         }
      }
   }
   return retArr;
} // Ends the "getSelectedCheckBoxValue" function

////////////////////////////////////////////////////////////////

writeJsStyles(1);
preloadRollovers();
addEventFunc(window, "load", init, false);