

function hasClassName(oElem,sClassName) {
    var re = new RegExp('(^| )'+sClassName+'( |$)');
    if (re.test(oElem.className)) {
        return true;
    }
    return false;
}
function replaceClassName(sClassName,sNeedle,sRepl) {
    return sClassName.replace(new RegExp(sNeedle +"\\b"), sRepl);
}

function addEvent(obj, evType, fn) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, true);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn); 
		return r;
	} else {
		return false;
	}
}

function createElement(element) {
	if (typeof(document.createElementNS) != 'undefined') {
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	}
	if (typeof(document.createElement) != 'undefined') {
		return document.createElement(element);
	}
	return false;
}

function getElementsByClassName(classname,oSrcNode){
    var a = [];
    var re =  new RegExp('\\b' + classname + '\\b')
    //var re = new RegExp('(^| )'+classname+'( |$)');
    if (oSrcNode==null)
       oSrcNode = document;  
    var els = document.all?document.all:oSrcNode.getElementsByTagName("*");
    for(var i=0,el;el=els[i]; i++){
        if(re.test(el.className)) {
            a.push(el);
         }
   }
    
	return a;
}
if (!Array.prototype.push) {
    Array.prototype.push = function(e) {
            this[this.length] = e;
        }
}

if (!Array.prototype.forEach) {
	Array.prototype.forEach = function (f, obj) {
      var l = this.length;	// must be fixed during loop... see docs
		for (var i = 0; i < l; i++) {
			if (!obj)
            f(this[i], i, this);
         else f.call(obj, this[i], i, this);
		}
	};
}

if (!Array.prototype.shift) {
   Array.prototype.shift = function() {   
      for( var i = 0, b = this[0], l = this.length-1; i<l; i++ ) {    
         this[i] = this[i+1];   
       }   
       this.length--;   return b;  
   };
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function submitForm(thisForm) {
 thisForm.search.value = "";
 if (thisForm.c.options[1].value == "yahoonewsonly" &&
 thisForm.c.options[1].selected) thisForm.search.value = "yahoo+uk";
 if (thisForm.p.value != "") thisForm.submit();
 return false;
}

function jump(oSel) {
	var url = oSel.options[oSel.selectedIndex].value;
	window.location=url;
}

/* The Yahoo! Page Progressive Enhancer */
function yPEnhancer() {
this.sSelector = "yPE";
var enhancers=new Array();
var eArgs = new Array();
var self = this;
this.enhancePage = function () {
    if(!document.getElementById || !document.createTextNode){
      return;
    }
    try {   
        
		   self.enhanceElements(getElementsByClassName(self.sSelector,document));
      } catch(e) {
		
    }
}
this.enhanceElements = function (aObjs) {
 try {
   aObjs.forEach(function (element,index,array) { 
         self.enhanceElement(element);
   });
  } catch(e) {
   }
}
this.enhanceElement = function (oObj) {
   
	var oArgs = getArgs(oObj.className);
   if (typeof(oArgs) !='undefined') {
      var oEnhObj = self.getEnhancer(oArgs.sEnhancerName);
		if(typeof(oEnhObj)!='undefined' && oEnhObj.enhance)  {//and check for enhance method
          oEnhObj.enhance(oObj,oArgs.aArgs);
      }
   }
}
this.addArgs=function(sName,aArgs) {
   eArgs[sName]=aArgs;
}
this.getEnhancer =function(jsClassName) {
   if (window[jsClassName])
      return new window[jsClassName];
   return null;
}
  function getArgs (sClassName) {
   var aClasses = sClassName.split(" "); 
   for(var i=0,sClsName;sClsName=aClasses[i];i++) {
      if (sClsName.indexOf(self.sSelector)!=-1) { 
         var aEnhArgs = sClsName.split("-");
         aEnhArgs.shift();
         var sEnhancerName = aEnhArgs.shift();
         if (!eArgs[aEnhArgs[0]])
            return { "sEnhancerName" : sEnhancerName, "aArgs" :  aEnhArgs};            
         else 
	         return { "sEnhancerName" : sEnhancerName, "aArgs" :  eArgs[aEnhArgs[0]]}; 
      }
  }
  return null; 
}
 this.replaceHook = function(oElem,sNewClassName) {
      var aClasses = oElem.className.split(" "); 
      for(var i=0,sClsName;sClsName=aClasses[i];i++) {
	      if (sClsName.indexOf(self.sSelector)!=-1) {
           sClassName  =  sClsName;
           oElem.className = oElem.className.replace(sClassName, sNewClassName);
           break;
         } 
      }
}
  return yPEnhancer.__singleInstance || (yPEnhancer.__singleInstance = this);
}
function ynwTab() {
 var self = this;
 this.enhance=function(oElem,aArgs) {
  if ((window[aArgs[0]]) && (window[aArgs[1]])) {
         new yToggle(oElem,window[aArgs[0]],window[aArgs[1]],aArgs[2]);
			//this.replaceHook(oElem,"");
  }else {
	      new yToggle(oElem,null,null,aArgs[2]);
			//this.replaceHook(oElem,"");
  }  
}
   return ynwTab.__singleInstance || (ynwTab.__singleInstance = this);
};
if (typeof yPEnhancer == "function") 
   ynwTab.prototype = new yPEnhancer;

function im(oElem) {
 var self = this;
 this.msgr_installed = 0;
 this.imMsg = "Check out this story on Yahoo! News:";
 this.detect = function() {
 	
	 if(document.all){
	   var oNotYIM = document.all.not_Ymsgr;
	}else{
		var oNotYIM = document.getElementById("not_Ymsgr");
	}
	if (oNotYIM) {
		var oYIM = document.getElementById("Ymsgr");
			this.msgr_installed = 1;
	}
	if (document.all)
	  this.msgr_installed = 1; 
	if (window.opera) 
		this.msgr_installed =0;
	
 }
this.setIMMsg = function (sNewIMMsg) {
	this.imMsg = sNewIMMsg; 
 }

	
	this.detect();

	
	if (this.msgr_installed){
		var imF = function(evt) { location.href="ymsgr:im?msg="+self.imMsg+"+"+storyheadline+"+"+storylink; return false;}
		oElem.onclick= imF;
		imF();
		
	}else{
		var imOff = function(evt) {
				if(confirm("You do not appear to have Yahoo! Messenger installed. Would you like to install it now?")){
					location.href = "http://uk.messenger.yahoo.com";
			}
		}	
		oElem.onclick = imOff
		imOff();
	
	}
	if (this.msgr_installed)
			return false;
	else return true;
 
};

	
function yToggle(oElem,fOnFunc,fOffFunc,bFluid) {
   this.oContainer = oElem;
	this.aTogglers = getElementsByClassName("toggler",oElem);
   this.aTogglets = getElementsByClassName("togglet",oElem);
	this.iCurrToggletIndex = -1;
   
	
	var numTogglets = this.aTogglets.length;
	

	var self = this;
   if (bFluid) {
		this.oSib = this.oContainer.nextSibling;
   	if (this.oSib) {
		   while(this.oSib.nodeType!=1) {
   		   this.oSib=this.oSib.nextSibling;
   		}
			this.iSibYPos  = findPosY(this.oSib);
			this.iYPos = new Array();
   	
		for (var i=0;i<numTogglets;i++) {
			this.iYPos[i]=findPosY(this.aTogglets[i]);
		}
		}
	}

   this.aTogglers.forEach(function (element,index,array) { 
         element.onclick = function(evt) {
            self.show(index,fOnFunc,fOffFunc);
            return false;
         }
         element.onfocus=function(evt) {
           if (!evt) 
            evt =window.event;
           if (evt.srcElement)
            evt.srcElement.blur();
         }
   });
   this.show(0,fOnFunc,fOffFunc);
}

yToggle.prototype.show = function(iIndex,fOnFunc,fOffFunc) {
   if (this.iCurrToggleIndex==iIndex)
      return;
   //turn off
	if (this.iCurrToggletIndex!=-1) {
      var oElem = this.aTogglets[this.iCurrToggletIndex];
      if (hasClassName(oElem,"toggletShow")) {
			oElem.className = replaceClassName(oElem.className,"toggletShow","toggletHide");   
      }
		else oElem.className += " toggletHide";
		if (fOffFunc)
         fOffFunc(oElem);
   }
   //turn on
   var oElem = this.aTogglets[iIndex];
   if (hasClassName(oElem,"toggletHide"))
		oElem.className = replaceClassName(oElem.className,"toggletHide","toggletShow");
 	else oElem.className += " toggletShow";
    if (this.oSib) {
	 var iTy = this.iYPos[iIndex]; 
    var iDelta = (iTy+oElem.offsetHeight) - this.iSibYPos;
    if(iDelta>0) 
      this.oSib.style.marginTop=iDelta+5+"px";
    }
	 if (fOnFunc)
         fOnFunc(oElem);
    this.iCurrToggletIndex  = iIndex;
}

function ynwStTabOn(oElem) {
	try {
		oEm = oElem.parentNode.getElementsByTagName("em")[0];
		if (oEm) {
			if (hasClassName(oEm,"toggletShow")) 
					oEm.className = replaceClassName(oEm.className,"toggletShow","toggletHide");
		}
		oElem = oElem.parentNode;
   	if (!hasClassName(oElem,"here")) {
   		 oElem.className+=" here";
		}

	}
	catch(e) {
	
	} 
}
function ynwStTabOff(oElem) {
	try {
		oEm = oElem.parentNode.getElementsByTagName("em")[0];
		if (oEm) {
			if (hasClassName(oEm,"toggletHide")) {
				oEm.className = replaceClassName(oEm.className,"toggletHide","toggletShow");
			}
		}
		oElem = oElem.parentNode;
		  if (hasClassName(oElem,"here")) {
		      oElem.className = replaceClassName(oElem.className,"here","");  
		  }
   } 
	catch (e) {
		
	}
}