/* General utility functions */
Array.prototype.remove = function(from, to) {
	var rest = this.slice((to || from) + 1 || this.length);
	this.length = from < 0 ? this.length + from : from;
	return this.push.apply(this, rest);
};

if(!Array.indexOf){
	Array.prototype.indexOf = function(obj){
		for(var i=0; i<this.length; i++){
			if(this[i]==obj){
				return i;
			}
		}
		return -1;
	}
}

function $id(id) {
	return document.getElementById(id);
}

function $n(name) {
	return document.getElementsByName(name);
}

function placeElement(name, x, y) {
	var elem = document.getElementById(name);
	if (elem) {
		elem.style.left = x + 'px';
		elem.style.top = y + 'px';
	}
}

function URLencode(sStr) {
    return escape(sStr).replace(/\+/g, '%2C').replace(/\"/g,'%22').replace(/\'/g, '%27');
}

function GetXmlHttpObject() {
	var xmlHttp=null;
	try	{
		xmlHttp=new XMLHttpRequest();
	} catch (e)	{
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function removeObject(obj) {
	parentObj = document.getElementById(obj).parentNode;
	childObj = document.getElementById(obj); 
	parentObj.removeChild(childObj);
}

function hideElement(name) {
	var elem = $id(name);
	if (elem) {
		elem.style.visibility = 'hidden';
		elem.style.display = 'none';
	}
}

function showElement(name) {
	var elem = $id(name);
	if (elem) {
		elem.style.visibility = 'visible';
		elem.style.display = 'block';
	}
}

function create_fundiv() {
	if (!document.getElementById('fundiv')) {
		var newDiv = document.createElement("div");
		newDiv.id = "fundiv";
		newDiv.style.filter = "alpha(opacity=70)";
		document.body.appendChild(newDiv);
	}
}

function create_overdiv() {
	if (!document.getElementById('overdiv')) {
		var newDiv = document.createElement("div");
		newDiv.id = "overdiv";
		document.body.appendChild(newDiv);
	}
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function setActiveStyleSheet(title) {
	var i, a, main;
	createCookie("style", title, 365);
	for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
		if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
			a.disabled = true;
			if(a.getAttribute("title") == title) a.disabled = false;
		}
	}
}

window.onload = function(e) {
	var cookie = readCookie("style");
	var title = cookie ? cookie : "Medium Text";
	setActiveStyleSheet(title);
}

var RedirectUrl;
function redirectTo(str) {
	RedirectUrl	= str;
	setTimeout( "window.location.href = RedirectUrl", 0 );
}

function colorRet(x) {
	switch (x) {
    case "LW" :
        return "#FFCC00";
        break;
    case "RW" :
        return "#FF6600";
        break;
    case "C" :
        return "#C21515";
        break;
    case "LD" :
        return "#00CCFF";
        break;
    case "RD" :
        return "#FF00BB";
        break;
    case "G" :
        return "#00CC00";
        break;
    default :
        return "#FFFFFF";
        break;
    }
}
function colorPos(x) {
	if (x) {
		if (typeof(x) == "string") {
			if (x.charAt(1) == "/" || x.charAt(2) == "/") {
				x = x.split("/");
				return "<img style='width:22px; height:12px; margin-bottom:-2px;' src='pics/pill_"+x[0].toLowerCase()+"_l.png' /><img style='width:22px; height:12px; margin-bottom:-2px;' src='pics/pill_"+x[1].toLowerCase()+"_r.png' />";
				//return "<span style='color:"+colorRet(x[0])+"'>"+x[0]+"</span>/<span style='color:"+colorRet(x[1])+"'>"+x[1]+"</span>";
			} else {
				return "<img style='width:27px; height:12px; margin-bottom:-2px;' src='pics/pill_"+x.toLowerCase()+".png' />";
				//return "<span style='color:"+colorRet(x)+"'>"+x+"</span>";
			}
		} else if (typeof(x) == "object" && x.length > 0) {
			if (x[1]) {
				return "<img style='width:22px; height:12px; margin-bottom:-2px;' src='pics/pill_"+x[0].toLowerCase()+"_l.png' /><img style='width:22px; height:12px; margin-bottom:-2px;' src='pics/pill_"+x[1].toLowerCase()+"_r.png' />";;
			} else {
				return "<img style='width:27px; height:12px; margin-bottom:-2px;' src='pics/pill_"+x[0].toLowerCase()+".png' />";
			}
		}
	}
	return "n/a";
}

function getScrollXY() {
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
}
/* Countdown Clock, used to show TM time in the bottom */
function countdown() {
  var elm_sekund = document.getElementById('clock_seconds').innerHTML
  document.getElementById('clock_seconds').innerHTML = (elm_sekund==59)? countdown_minut() : twoDigits(++elm_sekund);
  setTimeout('countdown()',1000);
}
function countdown_minut() {
  var elm_minut = document.getElementById('clock_minutes').innerHTML
  document.getElementById('clock_minutes').innerHTML = (elm_minut==59)? countdown_time() : twoDigits(++elm_minut);
  return "0" + 0;
}
function countdown_time() {
      var elm_time = document.getElementById('clock_hours').innerHTML;
      document.getElementById('clock_hours').innerHTML = (elm_time==23)? "00" : twoDigits(++elm_time);
      return "0" + 0;
}
function twoDigits(num){
  return num>9 ? num : "0" + num;
}
/* Tabs gdoc for more */
function tab(target, id) {
	if (target != undefined && id != undefined) {
		var elem = $id(target);
		var divs_ar = [];
		for (var i=0; i<elem.parentNode.childNodes.length; i++) {
			if (elem.parentNode.childNodes[i].nodeType == 1) {
				divs_ar.push(elem.parentNode.childNodes[i]);
			}
		}
		for (var i=1; i<divs_ar.length; i++) {
			divs_ar[i].className = "hide";
		}
		divs_ar[id+1].className = "";
		
		var spans_ar = [];
		for (var i=0; i<elem.childNodes.length; i++) {
			if (elem.childNodes[i].nodeType == 1) {
				spans_ar.push(elem.childNodes[i]);
				elem.childNodes[i].className = "";
			}
		}
		spans_ar[id].className = "active";
	}
}
/* Skill colors */
function fadeHex (hex, hex2, ratio){
	//hex = 0xFFFFFF
	//ratio = 0-1
	var r = hex >> 16;
	var g = hex >> 8 & 0xFF;
	var b = hex & 0xFF;
	r += ((hex2 >> 16)-r)*ratio;
	g += ((hex2 >> 8 & 0xFF)-g)*ratio;
	b += ((hex2 & 0xFF)-b)*ratio;
	return(r<<16 | g<<8 | b);
}
function retAvgColor(nr) {
	nr = parseInt(nr);
	var ratio = nr;
	if (nr > 85) {
		return "ccff00";
	} else if (nr > 40) {
		var startHex = 0xFFFFFF;
		var endHex = 0xCCFF00;
		ratio += -40;
		ratio *= 1/45;
	} else {
		var startHex = 0x999999;
		var endHex = 0xFFFFFF;
		ratio *= 1/40;
	}
	return fadeHex(startHex, endHex, ratio).toString(16);
}

function make_image(src, href) {
	var i = document.createElement("img");
	i.src = src;
	if (href) {
		var a = document.createElement("a");
		a.href = href;
		a.appendChild(i);
		return a;
	}
	return i;
}

/*home made number format*/
function addCommas(n) {
	n += '';
	x = n.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function timeLeft(secs, expired_text) {
	if (secs <= 0) {
		return expired_text || "expired";
	}
	if (secs > 86400) {
		var tmp_d = Math.floor(secs/86400);
		var tmp_h = Math.floor((secs-(tmp_d*86400))/3600);
		return tmp_d+"d "+tmp_h+"h";
	} else if (secs > 3600) {
		var tmp_h = Math.floor(secs/3600);
		var tmp_m = Math.floor((secs-tmp_h*3600)/60);
		return tmp_h+"h "+tmp_m+"m";
	} else {
		var tmp_m = Math.floor(secs/60);
		var tmp_s = secs-(tmp_m*60);
		return tmp_m+"m "+tmp_s+"s";
	}
}

function timeLeftDate(s) {
	var ex_date = new Date();
	ex_date.setSeconds(ex_date.getSeconds() + s);
	return ex_date.format("yyyy/mm/dd - HH:MM");
}
function popSS(picURL) {
	create_fundiv();
	create_overdiv();
	showElement('fundiv');
	showElement('overdiv');
	$id('fundiv').style.top = 0;
	$id('fundiv').style.left = 0;
	$id('overdiv').style.position = "fixed";
	$id('overdiv').style.top = "10%";
	$id('overdiv').style.width = "100%";
	$id('overdiv').style.textAlign = "center";
	$id('overdiv').style.cursor = "pointer";
	$id('overdiv').style.zIndex = 3;
	$id('overdiv').innerHTML = "<img src='"+picURL+"' />";
	$id('overdiv').onclick = function() {
		hideElement('fundiv');
		hideElement('overdiv');	
	}
	$id('fundiv').onclick = function() {
		hideElement('fundiv');
		hideElement('overdiv');	
	}
}
var anims = new Array();
var animating;
function doAnimation(arr) {
	window.clearInterval(animating);
	arr["curStep"] = 0;
	anims.push(arr);
	animating = window.setInterval(animate, 20);
}
function animate() {
	for(var i in anims) {
		if (anims[i]["curStep"] <= anims[i]["steps"]) {
			var ease = easeInOut(anims[i]["start"],anims[i]["end"],anims[i]["steps"],anims[i]["curStep"]);
			$id(anims[i]["name"]).style[anims[i]["type"]] = ease+anims[i]["suffix"];
			anims[i]["curStep"]++;
		} else if (anims[i]["curStep"] >= anims[i]["steps"]) {
			anims.remove(i);
		}
	}	
}

function easeInOut(minValue,maxValue,totalSteps,actualStep) {
	return Math.round(minValue+(maxValue-minValue)*Math.sin(actualStep/totalSteps*(Math.PI/2)))
}
function retStars(n, prefix) {
	if(!prefix) prefix = "star";
	var ret = "";
	var i = 1;
	while (i < n) {
		ret += "<img src='pics/"+prefix+"_full.png' style='height:16px;width:16px' />"; i++; i++;
	}
	if (n%2 == 1) {
		ret += "<img src='pics/"+prefix+"_half.png' style='height:16px;width:16px' />"; i++; i++;
	}
	while (i <= 10) {
		ret += "<img src='pics/"+prefix+"_empty.png' style='height:16px;width:16px' />"; i++; i++;
	}
	return ret;
}

/* World Map Roll Out*/
function addArea(arr) {
	var a = document.createElement("area");
	a.shape="rect";
	a.coords=arr.coords;
	if (arr.text) {
		a.href="league.php?country="+arr.cc+"&league=1&group=1";
	}
	if (arr.text) {
		var html = 	"<div style='text-align:right;'><strong>"+arr.text+" ("+arr.cc.toUpperCase()+")</strong><br />";
		html += 	"Attraction: "+retStars(arr.attraction*2, "star_pink")+"<br />";
		html += 	"Talent: "+retStars(Math.round(arr.talent/10), "puck")+"<br />";
		html += 	"Economy: "+retStars(Math.round(arr.economy/10), "coin")+"</div>";
		a.addHover(html);
	}
	return a
}
function toggleWorldMap() {
	// Check for world map div (WMD)
	if (!$id('world_map_div')) {
		// No WMD, make it! :D
		var div = document.createElement("div");
		div.id = "world_map_div";
		div.className = "center";
		div.style.padding = 0;
		div.style.overflow = "hidden";
		
		// Animation fix - margin on image buggy
		var div2 = document.createElement("div");
		div2.id = "world_map_div_c";
		div2.style.marginTop = "-483px";
		
		i = make_image('pics/world_map_flags.png');
		i.id = "world_map_img";
		i.useMap="#world_map_map";
		
		var map = document.createElement("map");
		map.name = "world_map_map";
		
		for (var c in maps) {
			// TEMP: remove WL
			if (maps[c].cc != "wl") {
				map.appendChild(addArea(maps[c]))
			}
		}
		
		var close_btn = addArea({"coords":"961,1,988,25"});
		close_btn.onclick = function() {
			toggleWorldMap();
		}
		map.appendChild(close_btn);

		// Add it all
		div2.appendChild(i);
		div2.appendChild(map);
		div.appendChild(div2);
		document.body.insertBefore(div,$id("top_content").nextSibling);
	}
	// Animation
	if ($id('world_map_div_c').style.marginTop == "0px") {
		var anim = {name:"world_map_div_c", type:"marginTop",start:0,end:-483,suffix:"px",steps:20};
		doAnimation(anim);
	} else if ($id('world_map_div_c').style.marginTop == "-483px") {
		var anim = {name:"world_map_div_c", type:"marginTop",start:-483,end:0,suffix:"px",steps:20};
		doAnimation(anim);
	}
}
