// Holds a number of functions that have been extended to add functionality or to create them for browsers where 
// they didn't exist in the first place.

// indexOf is not supported in IE
if (!Array.prototype.indexOf)
{
	Array.prototype.indexOf = function(elt /*, from*/)
	{
		var len = this.length;
		var from = Number(arguments[1]) || 0;
		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
		if (from < 0) { from += len;}
		for (; from < len; from++){
			if (from in this && this[from] === elt){return from;}
		}
		return -1;		
	}
}

// Log JS errors to a file - file is overwritten each day only use when debugging a particular page/site
window.onerror = function(msg, url, line)
{	
	if (Jobboard.LogJSErrors)
	{
		if(encodeURIComponent) {		
			var qry = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
			xmlhttpPost('/jobboard/scripts/ajax/logError.asp',qry,''); 					
		}
	}
	if(Jobboard.SuppressJSErrors==0){		
		return false;
	}else{
		if(Jobboard.SuppressJSErrors==1 || (Jobboard.SuppressJSErrors==2 && (Browser.dom==0 || Browser.dom==1 || Browser.dom==3)) ){
			return true;
		}else{
			return false;
		}
	}	
}

//overide setTimeout and setInterval functions to allow for passing of parameters
var _st = window.setTimeout;
var _si = window.setInterval;

window.setTimeout = function(fRef, mDelay) 
{ 
	if(typeof fRef == "function")
	{  
		var argu = Array.prototype.slice.call(arguments,2); 
		var f = (function(){ fRef.apply(null, argu); }); 
		return _st(f, mDelay); 
	} 
	return _st(fRef,mDelay);
}

window.setInterval = function(fRef, mDelay) 
{ 
	if(typeof fRef == "function")
	{  
		var argu = Array.prototype.slice.call(arguments,2); 
		var f = (function(){ fRef.apply(null, argu); }); 
		return _si(f, mDelay); 
	} 
	return _si(fRef,mDelay);
}

//override getElementsByTagName to allow older browsers to use this function and to make IE act like moz with *
//needed so our getElementsByClassName will work.

if(!document.getElementsByTagName('*').length){
	if(document.all){
		document.getElementsByTagName = function(tag){
			if(tag=="*"){
				return document.all;
			}else{
				//need to use capitals for older IE browsers for tagnames
				if (IsIEversion(5,2)){ tag=tag.toUpper();}			
				return document.all.tags(tag);
			}
		}
	}
}

// Create a get elements by class name function
document.getElementsByClassName = function(clsName){
	var retVal = new Array();
    var elements = document.getElementsByTagName("*");	
	for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName){retVal.push(elements[i]);	}
            }
        }
        else if(elements[i].className == clsName){	
			retVal.push(elements[i]);
		}
    }	
    return retVal;
}
