// JavaScript Document for all Pages on The Irish Times

/****************************************************
* On Page Load Functions							*
*													*
*****************************************************/

function init(){
	addListeners();
}




/****************************************************
* Rollover Functions								*
*													*
*****************************************************/


function MM_swapImgRestore() { //v3.0
	var i,x,a=document.MM_sr;
	for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++)
		x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
	var d=document;
	var imageObj = new Image();
	if(d.images){
		if(!d.MM_p) d.MM_p=new Array();
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments[0];
		for(i=0; i<a.length; i++){
			if (a[i].indexOf("#")!=0){
				d.MM_p[j]=new Image;
				d.MM_p[j++].src=a[i];
			}
		}
	}
}

function MM_findObj(n, d) { //v4.01
	var p,i,x; 
	if(!d) d=document;
	if((p=n.indexOf("?"))>0&&parent.frames.length){
		d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
	}
	if(!(x=d[n])&&d.all) x=d.all[n];
	for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	if(!x && d.getElementById) x=d.getElementById(n);
	return x;
}

function MM_swapImage() { //v3.0
	var i,j=0,x,a=MM_swapImage.arguments;
	document.MM_sr=new Array;
	for(i=0;i<(a.length-2);i+=3)
	if ((x=MM_findObj(a[i]))!=null){
		document.MM_sr[j++]=x;
		if(!x.oSrc) x.oSrc=x.src; 
		x.src=a[i+2];
	}
}






/****************************************************
* Event Handlers									*
*													*
*****************************************************/

function addListeners(){
	var divs = document.getElementsByTagName("div");
	for(i=0;i<divs.length;i++){
		if(divs[i].className == "content"){
			try{
				if(divs[i].parentNode.id == "html-version" && divs[i].parentNode.parentNode.id == "newspaper-holder" && (browser.isIE6 || browser.isIE5)){
					if(parseInt(divs[i].offsetHeight) < 348){
						divs[i].parentNode.style.height = parseInt(divs[i].offsetHeight) + "px";
					}
				}
			} catch(err){
			}
		}
	}
	
	var as = document.getElementsByTagName("a");
	for(i=0;i<as.length;i++){
		if(as[i].parentNode.parentNode.className == "tabs"){
			as[i].hideFocus = true;
		}
	}

	var labels = document.getElementsByTagName("label");
	var bg, css;
	for(i=0;i<labels.length;i++){
		if(labels[i].currentStyle){
			bg = labels[i].currentStyle.backgroundImage;
		} else {
			var css = getComputedStyle(labels[i],'');
			bg = css.getPropertyValue("background-image");
		}
		
		if(bg.indexOf("radiobutton.gif") != -1){
			addEventFunc(labels[i], "click", hideLabelFocus, false);
			addEventFunc(labels[i], "keypress", hideLabelFocus, false);
		}
	}	
	
	var uls = document.getElementsByTagName("ul");
	var lis;
	for(i=0;i<uls.length;i++){
		if(uls[i].className == "tabs"){
			lis = uls[i].getElementsByTagName("li");
			for(j=0;j<lis.length;j++){
				lis[j].hideFocus = true;
				addEventFunc(lis[j], "click", function(e){ e = new Event(e); e.stop(); changeTab(e); }, false);
			}	
		
		} else if(uls[i].parentNode.className == "prev-next"){
			lis = uls[i].getElementsByTagName("li");
			for(j=0;j<lis.length;j++){
				addEventFunc(lis[j], "mouseover", highlight_prev_next, false);
				addEventFunc(lis[j], "mouseout", highlight_prev_next, false);
			}	
		}
	}
}




/****************************************************
* Change Tabs										*
*													*
*****************************************************/

function changeTab(e){
	if (!e) var e = window.event;	
	var tgt = e.target || e.srcElement;	
	tgt = tgt.parentNode;
	var tabStart = 0, tabFound = false;
	var liIndex;
	
	if(tgt.parentNode.parentNode.className == "crossword-subscription") return;	 
	
	var ulChildren = tgt.parentNode.getElementsByTagName("li");
	for(i=0;i<ulChildren.length;i++){
		if(ulChildren[i].innerHTML == tgt.innerHTML) liIndex = i;
		if(tgt.parentNode.parentNode.id == "top-companies" && liIndex == 0){
			return;			
		}
		if(ulChildren[i].className.indexOf("nav-on") != -1){
			if(ulChildren[i].className.indexOf(" nav-on ") != -1)
				ulChildren[i].className = ulChildren[i].className.replace(/\snav\-on\s/,"");
			else if(ulChildren[i].className.indexOf(" nav-on") != -1)
				ulChildren[i].className = ulChildren[i].className.replace(/\snav\-on/,"");
			else if(ulChildren[i].className.indexOf("nav-on ") != -1)
				ulChildren[i].className = ulChildren[i].className.replace(/nav\-on\s/,"");
			else ulChildren[i].className = "";
		}
	}
	
	
	ulChildren[liIndex].className = ulChildren[liIndex].className + " nav-on";
	if(tgt.parentNode.parentNode.id == "top-companies"){ liIndex--; };
	var tempTabChildren = tgt.parentNode.parentNode.getElementsByTagName("div");
	var tabChildren = new Array();
	for(i=0;i<tempTabChildren.length;i++){
		if(tempTabChildren[i].className == "tab-shown" || tempTabChildren[i].className == "tab-hidden"){
			tabChildren.push(tempTabChildren[i]);
		}
	}
	
	for(i=0;i<tabChildren.length;i++){
		if(tabChildren[i].className == "tab-shown") tabChildren[i].className = "tab-hidden";
	}

	if(tabChildren[tabStart + liIndex]) tabChildren[tabStart + liIndex].className = "tab-shown";
}





/****************************************************
* Highlight Previous/Next Buttons					*
*													*
*****************************************************/

function highlight_prev_next(e){
	if (!e) var e = window.event;	
	var tgt = e.target || e.srcElement;
	
	if(e.type.indexOf("mouseover") != -1){
		tgt.style.color = "#C00000";	
	} else {
		tgt.style.color = "#333";
	}
}






/****************************************************
* Return Default Info an Input Fields				*
*													*
*****************************************************/

function defaultInputs(e){
	if (!e) var e = window.event;	
	var tgt = e.target || e.srcElement;
	
	if(tgt.id == "site-search-query" && tgt.value == "Search" && e.type.indexOf("focus") != -1)
		tgt.value = "";
	else if(tgt.id == "site-search-query" && tgt.value == "" && e.type.indexOf("blur") != -1)
		tgt.value = "Search";
}






/****************************************************
* Return Auto Suggestion on Input Fields			*
*													*
*****************************************************/

function autoSuggest(e){
	if (!e) var e = window.event;	
	var tgt = e.target || e.srcElement;
	
	if(tgt.parentNode.parentNode.id == "top-companies-sector"){
		var x = $(tgt.id).getCoordinates().left; 
		var y = $(tgt.id).getCoordinates().top + $(tgt.id).offsetHeight;
		var aryClassElements = getElementsByClassName("auto-suggest", tgt.parentNode)
		if(aryClassElements.length > 0){
			aryClassElements[0].style.display = "block";
			aryClassElements[0].style.top = y + "px";
			aryClassElements[0].style.left = x + "px";
		}		   
	}
}









/****************************************************
* Hide Label Outline on Focus and Replace			*
* Backgrounds										*
*													*
*****************************************************/

function hideLabelFocus(e){
	if (!e) var e = window.event;	
	var tgt = e.target || e.srcElement;
	tgt.hideFocus = true;
	var bg, radio, name, form, statement, levels_up, all_radios, all_labels;
	statement = "radio";
	levels_up = 0;

	if(tgt.currentStyle){
		bg = tgt.currentStyle.backgroundImage;
	} else {
		var css = getComputedStyle(tgt,'');
		bg = css.getPropertyValue("background-image");
	}
	
	if(bg.indexOf("radiobutton.gif") != -1){
		if(browser.isIE){
			if(document.getElementById(tgt.getAttribute("htmlfor"))){
				radio = document.getElementById(tgt.getAttribute("htmlfor"));
			}
		} else {
			if(document.getElementById(tgt.getAttribute("for"))){
				radio = document.getElementById(tgt.getAttribute("for"));
			}
		}

		
		if(radio){
			if(radio.getAttribute("type").toLowerCase() == "radio"){
				name = radio.getAttribute("name");
				while(levels_up < 20){		// Allow 20 DOM Levels
					eval('if(' + statement + '.nodeName.toLowerCase() == "form"){ form = ' + statement + '; levels_up = 20; }');
					statement += ".parentNode";
					levels_up++;
				}
				
				if(form){
					all_radios = form.getElementsByTagName("input");
					all_labels = form.getElementsByTagName("label");
					for(var i=0; i<all_radios.length; i++){
						if(all_radios[i].getAttribute("name") == name){
							for(var j=0; j<all_labels.length; j++){
								if(browser.isIE){
									if(all_radios[i].id == all_labels[j].getAttribute("htmlfor")){
										if(all_labels[j].getElementsByTagName("b").length > 0){
											all_labels[j].getElementsByTagName("b")[0].remove();
										}
									}
								} else {
									if(all_radios[i].id == all_labels[j].getAttribute("for")){
											if(all_labels[j].getElementsByTagName("b").length > 0){
											all_labels[j].getElementsByTagName("b")[0].remove();
										}
									}
								}
							}
						}
					}
				}
			}
		}
		
		
		// Show / Hide Tick
		if(tgt.getElementsByTagName("b").length > 0){
			tgt.getElementsByTagName("b")[0].remove();
		} else {
			var b = new Element('b', {'events': {'click': function(e){ hideLabelTick(e); } }});
			b.injectInside(tgt);
		}
	}
}



function hideLabelTick(e){
	if (!e) var e = window.event;	
	var tgt = e.target || e.srcElement;
	var cb;
	var label;
	
	if(tgt.parentNode){
		label = tgt.parentNode;
		if(label.nodeName.toLowerCase() == "label"){
			if(label.getElementsByTagName("b").length > 0){
				if(browser.isIE){
					if(document.getElementById(label.getAttribute("htmlfor"))){
						cb = document.getElementById(label.getAttribute("htmlfor"));
					}
				} else {
					if(document.getElementById(label.getAttribute("for"))){
						cb = document.getElementById(label.getAttribute("for"));
					}
				}
				
				if(cb){
					if(cb.getAttribute("type") == "checkbox"){
						cb.checked = "";
						label.getElementsByTagName("b")[0].remove();
					}
				}
			}
		}
	}
}




/****************************************************
* 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.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] || new Array();
    var re = new RegExp("\\b" + strClassName + "\\b", "g");

		if ( obj == undefined ) {
			return;
		}

    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;
}





/****************************************************
* 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="/css/v3/js-dependant.css" rel="stylesheet" type="text/css" media="screen" />');
	if(browser.isSafari) document.write('<link href="/css/v3/safari.css" rel="stylesheet" type="text/css" media="screen" />');
}






/****************************************************
* 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;
}

writeJsStyles(1);
addEventFunc(window, "load", init, false);

// Initialise doubleclick random number
var ord = Math.random()*10000000000000000;

// Initialise date line for top of LHS column (e.g. "Thu, Oct 5, 2006")
var _glb_mydate = new Date();
var _glb_daylist = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var _glb_monthlist = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

var glb_dateline_short = _glb_daylist[ _glb_mydate.getDay() ].substring(0,3) + ", " + _glb_monthlist[ _glb_mydate.getMonth() ].substring(0,3) + " " + _glb_mydate.getDate() + ", " + _glb_mydate.getFullYear();
var glb_dateline_long = _glb_daylist[ _glb_mydate.getDay() ] + ", " + _glb_monthlist[ _glb_mydate.getMonth() ] + " " + _glb_mydate.getDate() + ", " + _glb_mydate.getFullYear();

/****************************************************
* Site Search                                       *
*****************************************************/

function sitesearchsubmit(frm) {
ctl = frm.keywords;
if (ctl.defaultValue == ctl.value || ctl.value == '') {
location.href = frm.action;
return false;
}
return true;
}

function resetDefault(ctl) {
if (ctl.value == '') { ctl.value = ctl.defaultValue; }
}

function clearDefault(ctl) {
if (ctl.defaultValue == ctl.value) { ctl.value = '' }
}
