// Minimal prototype lib
function $() {
	var elements = new Array();
	
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
	
		if (arguments.length == 1)
			return element;
	
		elements.push(element);
	}
	
	return elements;
}

document.getElementsByClassName = function(className, parentElement)
{
	var children = ($(parentElement) || document.body).getElementsByTagName('*');
	var elements = [];
	
	for(var i=0;i<children.length;i++)
		var child = children.item(i);
		if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) 
			elements.push(child);
	
	return elements;
}

var Position = {
	realOffset: function(element) {
		var valueT = 0, valueL = 0;
		do {
			valueT += element.scrollTop  || 0;
			valueL += element.scrollLeft || 0;
			element = element.parentNode;
		} while (element);
		return [valueL, valueT];
	},
	
	cumulativeOffset: function(element) {
		var valueT = 0, valueL = 0;
		do {
			valueT += element.offsetTop  || 0;
			valueL += element.offsetLeft || 0;
			element = element.offsetParent;
		} while (element);
		return [valueL, valueT];
	},
	
	within: function(element, x, y) {
		var offset = Position.cumulativeOffset(element);
		return (y >= offset[1] &&
		y <  offset[1] + element.offsetHeight &&
		x >= offset[0] &&
		x <  offset[0] + element.offsetWidth);
	}
};


// Global stuff
var base = {
	
	isIE: window.navigator.userAgent.indexOf("MSIE") != -1,
	isFirefox: window.navigator.userAgent.indexOf('Firefox') != -1,
	
	_triggerOnLoad: new Array(),
	_triggerOnResize: new Array(),
	
	triggerOnLoad: function(func) {
		base._triggerOnLoad.push(func);
	},
	
	triggerOnResize: function(func) {
		base._triggerOnResize.push(func);
	},
	
	onLoad: function() {
		// Remove dots from active links
		if (base.isFirefox) {
			document.onmousedown = function() {
				for (a in document.links)
					document.links[a].onfocus = document.links [a].blur;
			}
		}
		
		tracking.init();
		image.init();
		
		// Trigger all registered for onLoad
		for (var i=0;i<base._triggerOnLoad.length;i++)
			base._triggerOnLoad[i]();
	},
	
	onResize: function() {
		for (var i=0;i<base._triggerOnResize.length;i++)
			base._triggerOnResize[i]();
	},
	
	// Delay execution (workaround for IE which does not handle setTimeout with an argument)
	runLater: function(callback, delay, arg) {
		if(base.isIE) {
			base._runLaterQueue.push([delay, callback, arg]);
			setTimeout(base._runLaterPickup, delay);
		}
		else
			setTimeout(callback, delay, arg);
	},
	_runLaterQueue: [],
	_runLaterPickup: function() {
		var lowest = [999999999,function(){}, null];
		var lowestIndex = -1;
		
		for(var i=0;i<base._runLaterQueue.length;i++) {
			var cb = base._runLaterQueue[i];
			if(cb[0] < lowest[0]) {
				lowest = cb;
				lowestIndex = i;
			}
		}
		
		if(lowestIndex != -1) {
			base._runLaterQueue.splice(lowestIndex,1);
			lowest[1](lowest[2]);
		}
	},
	
	// Hide content
	hideContent: function(element, existsCallback, missingCallback, timeout)
	{
		// Exists?
		if(element == null || typeof element == "undefined") {
			//missingCallback.apply(this);
			return;
		}

		// Save properties at first run
		if(typeof element.hideContentTimeout == "undefined") {
			element.hideContentTimeout = timeout;
			element.hideContentMaxIters = timeout / 500;
			element.hideContentIters = 0;
			element.hideContentExistsCallback = existsCallback;
			element.hideContentMissingCallback = missingCallback;
		}
		
		var state = 0; // 0 = unknown, 1 = exists, 2 = missing
		
		// Set to exists after timeout
		if(element.hideContentIters++ > element.hideContentMaxIters)
			state = 2;
		
		// Check if empty
		if(state == 0) {
			if(element.innerHTML == "") {
				base.runLater(base.hideContent, 500, element);
				return;
			}
			else
				state = (element.innerHTML.indexOf('_null_ad') == -1) ? 1 : 2;
		}
		
		// Exists?
		if(state == 1)
			element.hideContentExistsCallback();
		else
			element.hideContentMissingCallback();
	},
	
	captureMousePosition: function() {
		if(!document.all)
			document.captureEvents(Event.MOUSEMOVE);
		document.onmousemove = base._regMousePos;
	},
	
	mousePosition: {x:0, y:0}, // Will be available after calling registerMousePosition() ONCE
	
	// private
	_regMousePos: function(e) {
		var x = 0;
		var y = 0;
		if (!e) var e = window.event;
		if (e.pageX || e.pageY)
		{
			x = e.pageX;
			y = e.pageY;
		}
		else if (e.clientX || e.clientY)
		{
			x = e.clientX + document.body.scrollLeft;
			y = e.clientY + document.body.scrollTop;
		}
		base.mousePosition = {x:x<0 ? 0 : x, y:y<0 ? 0 : y};
		return true;
		/*var x,y;
		if(document.all) {
			x = event.clientX + document.body.scrollLeft;
			y = event.clientY + document.body.scrollTop;
		} else {
			x = e.pageX;
			y = e.pageY;
		}
		base.mousePosition = {x:x<0 ? 0 : x, y:y<0 ? 0 : y};
		return true;*/
	}
};

/**
 * Tracking
 *
 * Link/Bounce tracking is done by specifying the "track" class in a A element, 
 * and adding a cuton attribute; "trackid".
 *
 * Example:
 * <a href="http://inhouse/rules" class="myclass track:TRACK_ID ...">Hej</a>
 *
 */
var tracking = {
	
	init: function() {
		
		var children = document.body.getElementsByTagName('*');
		var re = new RegExp("(^|\\s)track:([^\\s]+)(\\s|$)");
		var trackid = "";
		
		for(var i=0;i<children.length;i++) {
			var child = children.item(i);
			re.exec(child.className);
			if (trackid = re.exec(child.className)) {
				//alert(child.className);
				child.className = child.className.replace(re, " ");
				child.trackid = trackid[2];
				child.onclick = function() {
					tracking.registerBounce(this.trackid, this.href);
					return true;
				}
			}
		}
	},
	
	registerBounce: function(bounceID, destinationURL) {
		var i = new Image();
		i.src = "http://lycos.spray.se/cgi-bin/nph-bounce?" + bounceID + "|" + destinationURL;
		//i.src = "http://inhouse/dev/rasmus/taemot.php?" + bounceID + "|" + destinationURL;
	}
	
};

var utils = {
	newAsyncRequest: function() {
		var r=false;if(window.XMLHttpRequest){r=new XMLHttpRequest();}else if(window.ActiveXObject){try{r=new ActiveXObject("Msxml2.XMLHTTP");}catch(e1){try {r=new ActiveXObject("Microsoft.XMLHTTP");}catch(e2){alert("Din webbläsare stöder inte alla funktioner som finns på Spray. Ladda ner Mozilla Firefox från www.mozilla.com");}}}return r;
	}
};

// Advertising
var ads = {
	/**
	 * Hide rectangle when no ad
	 *
	 * @param  String  Optional element. Defaults to $("adrectangle")
	 * @return void
	 */
	hideRectangle: function(element)
	{
		if(typeof elementId == "undefined")
			element = $('adrectangle');
		
		base.hideContent(element, function(){}, function(){
			this.style.display = 'none';
		}, 2500);
	}
}

// Image-related functionality
var image = {

	_preloadQueue: [],
	
	// Queue an image for preloading. (Variadic arguments)
	preload: function() {
		for(var i=0; i < arguments.length; i++)
			image._preloadQueue.push(arguments[i]);
	},
	
	// Preload images
	init: function(){
		for (i=0;i<image._preloadQueue.length;i++){
			var im = new Image();
			im.src = image._preloadQueue[i];
			image._preloadQueue[i] = im;
		}
	},
	
	autohover: function(element, fileExtension, state){
		element = $(element);
		var state = state ? '_hover' : '';
		element.style.backgroundImage='url(._res/img/content/' + element.id + state + '.' + fileExtension + ')';
	},
	
	ehover: function(element, imgUrl) {
		$(element).style.backgroundImage='url(' + imgUrl + ')';
	}
};

// ----------

// Register window event handlers
window.onload = base.onLoad;
window.onresize = base.onResize;

// TODO: Spraydio:
//function openPlayer() REPLACED BY popup("http://www.nwrweb.com/player/show/spray/radiocitysthlm/20/", 535, 424, false, false, "NWRPlayer");
function popup(sUrl, iWidth, iHeight, bScrollbars, bResizable, sWinName) {
	var win = window.open(sUrl, 
		(typeof sWinName == "undefined" ? "spraypopup" : sWinName), 
		"width=" + iWidth + ",height=" + iHeight + ",scrollbars=" 
			+ (typeof bScrollbars == "undefined" ? "auto" : (bScrollbars ? "yes" : "no"))
			+ (typeof bResizable == "undefined" ? "no" : (bResizable ? "yes" : "no"))
	);
	win.focus();
}

function openWin(sUrl, sName, iWidth, iHeight, sScrollbars) {
	var win = window.open(sUrl, sName, "width=" + iWidth + ",height=" + iHeight + ",scrollbars=" + sScrollbars);
	win.focus();	
}

//// -----------------------------------------------------------------------------------------------------------------------

// for login box
function storeLoginUsername(sUsername) {
	var ExpireDate = new Date();
	ExpireDate.setTime(ExpireDate.getTime() + (31 * 24 * 3600 * 1000)); //one month
	document.cookie = "username=" + escape(sUsername) + "; expires=" + ExpireDate.toGMTString();
	return true;
}

function getLeft(ref) {
	var offsetObj = document.getElementById(ref);
	var objOffsetTop = objOffsetLeft = 0;

	while(offsetObj != document.body){
		objOffsetLeft += offsetObj.offsetLeft;
		offsetObj = offsetObj.offsetParent;
	}
	return objOffsetLeft;
}
function getTop(ref) {
	var offsetObj = document.getElementById(ref);
	var objOffsetTop = objOffsetLeft = 0;

	while(offsetObj != document.body){
		objOffsetTop += offsetObj.offsetTop;
		offsetObj = offsetObj.offsetParent;
	}
	return objOffsetTop;
}

/** Script for opening gallery-pages */
function openGallery ( iSerie, iStart ) {
	var vUrl = "http://galleri.spray.se/galleri.aspx?seriesid=" + iSerie;
	if (iStart)
		vUrl = vUrl + "&picno=" + (iStart-1)
	vUrl = vUrl + "&OrgUrl=" + escape(document.location.href.substr(0,document.location.href.indexOf("/", 7) ) );

	var leftpos = (window.screen.availWidth/2) - (900/2);
	var toppos = (window.screen.availHeight/2) - (603/2);
	newwindow = open(vUrl,'Gallery','scrollbars=no,toolbar=no,directories=no,menubar=no,resizable=no,status=no,width=900,height=603,leftmargin=0,topmargin=0,top='+toppos+',left='+leftpos+',screenY='+toppos+',screenX='+leftpos);
}

function placeObj(actObj,fromDiv,x,y){
	var activeObj = document.getElementById(actObj);
	activeObj.style.left = getLeft(fromDiv) + x + 'px';
	activeObj.style.top = getTop(fromDiv) + y + 'px';
	activeObj.style.display = 'block';
}

/* Tooltip */
var showtip = 'true';
function showtooltip(text){
	var showtip = 'true';
	document.getElementById('tooltip').innerHTML = text;
	document.onmousemove = mouseMove;
	setTimeout("tryshow()", 700);
}
function tryshow(){
	if(document.getElementById('tooltip').innerHTML != ""){
		document.getElementById('tooltip').style.display = "block";
		
	}
}
function hidetip(){
		document.getElementById('tooltip').innerHTML = "";
		document.getElementById('tooltip').style.display = "none";
		var showtip = 'false';
}
function mouseMove(ev){
		ev           = ev || window.event;
		var mousePos = mouseCoords(ev);
		document.getElementById('tooltip').style.top = mousePos.y+10+'px';
		document.getElementById('tooltip').style.left = mousePos.x+15+'px';
}
function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	
	else{
	return {
		x:ev.clientX + document.documentElement.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.documentElement.scrollTop  - document.body.clientTop
	};
	}
}

/* Searchbar optimised for eniro */
var field1;
var field2;

function showTwo(type){
	$('eniro_kopsalj_container').style.display='none';
	if(type=='gula'){
		field1 = 'Rubrik, företag, sökord, telefonnr.';
		field2 = 'Område, gatuadress, ort, postnr.';
	}
	if(type=='maps'){
		field1 = 'Företagsnamn, rubrik eller telefonnr.';
		field2 = 'Adress, plats eller ort.';
	}
	if(type=='personer'){
		field1 = 'Namn, telefonnr, mobilnr.';
		field2 = 'Område, ort, postnr';
	}
	if(type=='kopsalj'){
		$('eniro_kopsalj').innerHTML='Hela landet';
		$('eniro_kopsalj_container').style.display='block';
		field1 = 'Vad';
		field2 = '1';
	}
	
	$('two-fields').style.display='block';
	$('field1').value = field1;
	$('field2').value = field2;
}
function checkText(field){
	if($('field'+field).value == 'Rubrik, företag, sökord, telefonnr.' || $('field1').value == 'Namn, telefonnr, mobilnr.' || $('field1').value == 'Vad' || $('field1').value == 'Företagsnamn, rubrik eller telefonnr.'){
		$('field'+field).value = "";
	}
	else if($('field'+field).value == 'Område, gatuadress, ort, postnr.' || $('field2').value == 'Område, ort, postnr' || $('field2').value == 'Var' || $('field2').value == 'Adress, plats eller ort.'){
		$('field'+field).value = "";
	}
}

/* shows or hides element depending on current state */
function showHide(o){
	if($(o).style.display!='block'){$(o).style.display='block'}
	else{$(o).style.display='none'}
}
/* javascript dropdown sets $formelement, $formelement_value, $dropdownbox, $dropdownbox_text*/
function selectBox(valElem,value,dropId,showText){
	$(valElem).value=value;
	$(dropId).innerHTML=showText;
}