/*** Core functions ***********/
getDomain 	= function(str) {
	
	var urlpattern = new RegExp("(http|https)://(.*?)/.*$");
	var parsedurl = str.match(urlpattern);
	if (!parsedurl)
		return "";
	
	if (!parsedurl[2])
		return "";
	
	return parsedurl[2];
	

}

getParams 	= function(str) {
	var parts, tmpOut, out, parser, args, i; 
	parser = /^((([a-z]+):\/\/)((.+?)(:(.+?))?@)?(.+?\.[a-z]+)(:(\d+))?)?([^\?]+)?(\?(.+))?/i; 
	parts = str.match(parser); 
	out = {}; 
	tmpOut = {scheme : parts[3], 
				user : parts[5], 
				pass : parts[7], 
				host : parts[8], 
				port : parts[10], 
				path : parts[11], 
				query : parts[13] 
	}; 
	
	if(tmpOut.scheme === undefined) {
		out.scheme = window.location.protocol.toString().match(/^([a-z]+)/i)[1];
	} else {
		out.scheme = tmpOut.scheme;
	} 
	
	if(tmpOut.user === undefined) {
		out.user = false;
	} else {
		out.user = tmpOut.user;
	} 
	
	if(tmpOut.pass === undefined) {
		out.pass = false;
	} else {
		out.user = tmpOut.pass;
	} 
	
	if(tmpOut.host === undefined) {
		out.host = document.domain ? document.domain : 'localhost';
	} else {
		out.host = tmpOut.host;
	} 
	
	if(tmpOut.port === undefined) {
		out.port = window.location.port ? parseInt(window.location.port) : 80;
	} else {
		out.port = tmpOut.port;
	} 
	
	if(tmpOut.path === undefined) {
		out.path = window.location.pathname ? window.location.pathname : '';
	} else {
		out.path = tmpOut.path;
	} 
	
	if(tmpOut.query === undefined) {
		out.query = window.location.search ? window.location.search : '';
	} else {
		out.query = tmpOut.query;
	} 
	
	out.args = {}; 
	args = out.query.split(/&/g); 
	
	for(i = 0; i < args.length; i++) { 
		arg = args[i].split(/\=/); 
		if(arg[0] !== '') { 
			if(arg[1]) {
				out.args[arg[0]] = arg[1]; 
			} else { 
				out.args[arg[0]] = true;
			}
		}
	} 
	
	return out;
}


getReferrer = function (url){
	if (!url) return "";
	var keyword, k_var; 
	
	for (var i=0; i<allowedSearchEngines.length;i++){ 
		var domainURL = getDomain(url).toLowerCase();
		if (domainURL.match(allowedSearchEngines[i].domain.toLowerCase())){ 
			k_var = getParams(url);
			keyword = k_var.args[allowedSearchEngines[i].keyword]; 
			return '<div id="refMessage">You searched for "'+keyword+'" on</div><div id="seLogo" class="' + allowedSearchEngines[i].logo + '">&nbsp;</div>'; 
		} 
	}	
	return ''; 
}					
/***********
   	allowedSearchEngines - an array which allows to control what search engines are reported as valid referrers
   						   You can add all search engines you want as long as you keep in mind the next lines when adding
   						   
 	- each search engine should have 3 properties
 		- domain 	: referrer domain which will be tracked
 		- keyword 	: name for the keyword variable (ex. you search for "bowling" and the query 
 					  string will look like "http://xxxxxxxxxxxxx/?q=bowling)
 		- logo 		: the css stylesheet class for the logo image
 		
******************/
var allowedSearchEngines = new Array(
	{domain: "yahoo", keyword:"p", logo:"yahoo"},
	{domain: "google", keyword:"q", logo:"google"},
	{domain: "msn", keyword:"q", logo:"live"},
	{domain: "ask", keyword:"q", logo:"ask"},
	{domain: "live", keyword:"q", logo:"live"}
);



/***********
	displaySearchEngineReferrer - allows you to display the text in a div or any other element identified by its id
	
************/
	
function displaySearchEngineReferrer(divId){
	if (!document.referrer){
		return "";
	}
	
	if (!document.getElementById(divId))
		return "";
		
	var str = getReferrer(document.referrer);
	
	if (str) {
		str = unescape(str);
		str = str.replace(/\+/g, " ")
		document.getElementById(divId).innerHTML = str;
	}
}