// 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 as = document.getElementsByTagName("a");
	for(i=0;i<as.length;i++){		
	}
	
	var inputs = document.getElementsByTagName("input");
	for(i=0;i<inputs.length;i++){
		addEventFunc(inputs[i], "focus", defaultInputs, false);
		addEventFunc(inputs[i], "blur", defaultInputs, false);
	}
	
	var labels = document.getElementsByTagName("label");
	for(i=0;i<labels.length;i++){
		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++){
				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(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";
	var tabChildren = tgt.parentNode.parentNode.getElementsByTagName("div");
	for(i=0;i<tabChildren.length;i++){
		if(tabChildren[i].className == "tab-shown" || tabChildren[i].className == "tab-hidden"){
			tabStart = i;
			i = tabChildren.length;
		}
	}
	
	for(i=tabStart;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";
}




/****************************************************
* Hide Label Outline on Focus						*
*													*
*****************************************************/

function hideLabelFocus(e){
	if (!e) var e = window.event;	
	var tgt = e.target || e.srcElement;
	tgt.hideFocus = true;
}




/****************************************************
* 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 (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(){
	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"));
		}
	}

	document.write('<link href="/css/v3/js-dependant.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();
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();
