// returns the event target
function getEventTarget(e) {
	if (window.event) {
		return window.event.srcElement;
	} else {
		return e.target;
	}
	return;
}

// returns the related target
// the element you came from in the case of a mouseover event
// the element you moved to in the case of a mouseout event
function getEventRelatedTarget(e) {
	if (window.event) {
		if (window.event.type == 'mouseover') {
			return window.event.fromElement;
		}
		if (window.event.type == 'mouseout') {
			return window.event.toElement;
		}
		return;
	} else {
		return e.relatedTarget;
	}
	return;
}

// returns the keycode of the key pressed to trigger a key event
function getEventKeyCode(e) {
	var key;
	if (window.event) {
		key = window.event.keyCode;
	} else {
		key = e.keyCode;
	}
	return key;
}

// adds an event listener to an object
function addEvent(obj, eType, func, capt) {
	/*W3 DOM */
	if (obj.addEventListener) {
		obj.addEventListener(eType, func, capt);
	} else if (obj.attachEvent) { /*Win IE*/
		obj.attachEvent("on" + eType, func);
	} else { /* Mac IE and older browsers */
		//eval("obj.on" + eType + "=func;");
		// remooved for now because mac IE has too many problems
	}
}

// removes an event listener from an object
function removeEvent(obj, eType, func, capt) {
	/*W3 DOM*/
	if (obj.removeEventListener) {
		obj.removeEventListener(eType, func, capt);
	} else {  /* MS IE */
		obj.detachEvent("on" + eType, func);
	}
}

// checks to see if parent is child's parent
function isChild(parent, child) {
	var node = child; 
	if (node) {
		while (node != parent) {
			if (node.nodeName == 'BODY' || node.nodeName == 'HTML') {
				return false;
			}
			node = node.parentNode; 
		}
		return true;
	} 
	return false;
}

// initializes a new xmlHttpRequest object if the browser supports it
// if not browser support, then returns false
function getXmlHttp() {
	var xmlhttp = false;
 	try {
  		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 	} catch (e) {
  		try {
   			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  		} catch (E) {
   			xmlhttp = false;
  		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

// tracking
function becomeTracking(page) {
	if(document.getElementById("urchin")) {
		urchinTracker(page);
	}
	return true;
}

// rate this page 
function addRating(myLink,myUrl){becomeTracking(myUrl);if(rating > 0){var loc=myLink.href+'&rating='+rating;location.href=loc;return false;}else {return true;}}
var myArgs = new QueryString();var rating; 
if(myArgs.get("rating", 0)>0){rating = myArgs.get("rating", 0);}else{rating = 0;}

// object that supports getting request arguments
function QueryString(){var querystring=location.search.substring(1,location.search.length);var args=querystring.split('&');for(var i=0;i<args.length;i++){var pair=args[i].split('=');temp=unescape(pair[0]).split('+');name=temp.join(' ');temp=unescape(pair[1]).split('+');value=temp.join(' ');this[name]=value;}this.get=QueryString_get;}
function QueryString_get(strKey,strDefault){var value=this[strKey];if(value==null){value=strDefault;}return value;}

// cookie helper functions
function getCookie(name){
	var dc=document.cookie;
	var prefix=name+"=";
	var begin=dc.indexOf("; "+prefix);
	if(begin==-1){
		begin=dc.indexOf(prefix);
		if(begin!=0){
			return null;
		}
	}
	else{
		begin+=2;
	}
	var end=document.cookie.indexOf(";", begin);
	if(end==-1){
		end=dc.length;
	}
	return unescape(dc.substring(begin+prefix.length,end));
}

function setCookie(name,value,duration){
	cookiestring=name+"="+escape(value)+"; path=/; EXPIRES="+getExpiryDate(duration);
	document.cookie=cookiestring;
/*
	if(!getCookie(name)){
		return false;
	}
*/
	return getCookie(name);
}

function getExpiryDate(nodays){
	var UTCstring;
	Today=new Date();
	nomilli=Date.parse(Today);
	Today.setTime(nomilli+(nodays*24*60*60*1000));
	UTCstring=Today.toUTCString();
	return UTCstring;
}


// tracking helper function
function pingURL(url) {
        var img = new Image();
        img.src = url.replace("&amp;","&");
}


function modeSwitch(f,mode) {
        f.action = "/" + mode;
        var qtypes = document.getElementsByName("qtype");
	for(var i=0; i < qtypes.length; i++) {
		if (mode == qtypes[i].value) {
			qtypes[i].checked = true;
		}
	}
}


function modeShop() {
	var f=document.getElementById("searchform");
	modeSwitch(f,"shop");
	f.fltr_category.disabled=false;
}


function modeResearch() {
	var f=document.getElementById("searchform");
	modeSwitch(f,"research");
	f.fltr_category.disabled=true;
}

//var tabnames = ["imagesearch","robots.txt"];
var tabnames = ["imagesearch"];

function openTab(url, tabname, pid) {
	var tabid = tabname + "_" + pid;
	var tabcontent = document.getElementById(tabid);
	var browser = getBrowserType();	
	
	if(tabcontent) {					
		//SAFARI sees it as some unknown thing...for now check against null to fix it
		if((browser == "safari" || browser == 'opera') && tabcontent.innerHTML != null) {			
			jah(url, tabid);			
		}
		else if(tabcontent.innerHTML == "&nbsp;") {
			jah(url, tabid);			
		}
	}
	for(var i=0; i < tabnames.length; i++) {
		if( tabnames[i] != tabname ) {
			closeTab(tabnames[i], pid);
		}
	}	
	if(tabcontent) {
		tabcontent.style.display = "";		
	}
}

function closeTab(tabname, pid) {
	var tabid = tabname + "_" + pid;
	var tabcontent = document.getElementById(tabid);
	if(tabcontent) {
		tabcontent.style.display = "none";
	}
}

function toggleTab(url, tabname, pid) {
	var tabid = tabname + "_" + pid;
	var tabcontent = document.getElementById(tabid);
	if(tabcontent) {
		if(tabcontent.style.display == "none") {
			openTab(url, tabname, pid);
		} else {
			closeTab(tabname, pid);
		}
	}
}

function getBrowserType()
{
	var ua = navigator.userAgent;
	
	if (ua.match(/Opera[\/\s](\d\.\d+)/)) {
	 //document.write("Opera " + RegExp.$1);
	 return "opera";
	}
	else if (ua.match(/MSIE (\d\.\d+)/)) {
	 //document.write("Internet Explorer " + RegExp.$1);
	 return "ie";
	}
	else if (ua.match(/Mozilla\/(4\.[5678]\d?)/)) {
	 //document.write("Netscape Communicator " + RegExp.$1);
	 return "netscape";
	}
	else if (ua.match(/Netscape6?\/([\.\d]+)/)) {
	 //document.write("Netscape " + RegExp.$1);
	 return "netscape";
	}
	else if (ua.match(/Safari\/([\.\d]+)/)) {
	 //document.write("Safari " + RegExp.$1);
	 return "safari";
	}
	else if (ua.match(/Gecko/)) {
	 	if (ua.match(/(Firebird|Firefox)\/([\.\d]+)/)) {
		  //document.write("Mozilla " + RegExp.$1 + " " + RegExp.$2);
		  return "firefox";
		}
		else if (ua.match(/Thunderbird\/([\.\d]+)/)) {
		 //document.write("Mozilla Thunderbird " + RegExp.$1);
		 return "thunderbird";
		}
		else if (ua.match(/rv:([\.\d]+)/)) {
		 //document.write("Mozilla " + RegExp.$1);
		 return "mozilla";
		}
		else {
	 	//document.write("Mozilla");
	 	return "mozilla";
		}
	}
	else {
	 //document.write("N/A");
	 return "unknown";
	}
}




