var wxMap;
var jtk = new JoookToolkit();


// Find element position
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}



function addEvent(obj, evType, fn){ 
	if (obj.addEventListener){ 
		obj.addEventListener(evType, fn, false); 
		return true; 
	}
	else if(obj.attachEvent){ 
		var r = obj.attachEvent("on" + evType, fn); 
		return r; 
	}
	else{ 
		return false; 
	} 
}






function Position(x, y){
	this.x = x;
	this.y = y;
}

function WeatherMap(emtId){
	this.iconWidth = 25;
	this.iconHeight = 21;
	this.mapContainer = document.getElementById(emtId);
	this.weatherObjects = new Array();
	this.positions = new Array();
	
	this.loaderIcon = document.createElement("img");
	this.loaderIcon.src = "/stc/images/ajax-loader.gif";
	this.mapContainer.appendChild(this.loaderIcon);
	
	
	this.newObjFromJSON = function(jsonStr, posObj){
		var obj = eval('(' + jsonStr + ')');
		this.weatherObjects.push(obj);
		this.positions.push(posObj);
	}
	
	this.writeObjects = function(){
		this.loaderIcon.style.display = "inline";
		
		// Activate IE PNG fix
		if (document.all && document.styleSheets && document.styleSheets[0] && document.styleSheets[0].addRule){
			document.styleSheets[0].addRule('#wxMap div.wo_icon', 'behavior: url(/stc/js/iepngfix.htc)');
		}
		
		var posArray = findPos(this.mapContainer);
		
		for(var i = 0; i < this.weatherObjects.length; i++){			
			
			// .wo_container
			var objContainer = document.createElement("div");
			objContainer.className = "wo_container";
			objContainer.style.left = posArray[0] + this.positions[i].x + "px";
			objContainer.style.top = posArray[1] + this.positions[i].y + "px";
			
			// .wo_icon
			var iconEmt = document.createElement("div");
			iconEmt.className = "wo_icon";
			iconEmt.style.width = this.iconWidth + "px";
			iconEmt.style.height = this.iconHeight + "px";
			iconEmt.style.float = "left";
			iconEmt.style.background = "transparent url(/stc/images/wxb_icons/" + this.weatherObjects[i]["icon"] + ".png) no-repeat left top";
		
			// .wo_temp
			var tempEmt = document.createElement("span");
			tempEmt.className = "wo_temp";
			var tempTxt = document.createTextNode(this.weatherObjects[i]["temperature"]);
			tempEmt.appendChild(tempTxt);
			
			
			// Append elements
			objContainer.appendChild(iconEmt);
			objContainer.appendChild(tempEmt);
			this.mapContainer.appendChild(objContainer);
		}
		
		this.loaderIcon.style.display = "none";
	}
	
	
	this.updateObjects = function(){
		this.loaderIcon.style.display = "inline";
		while(this.mapContainer.firstChild){
			this.mapContainer.removeChild(this.mapContainer.firstChild);
		}
		this.writeObjects();
	}
	
	this.hideObjects = function(){
		this.loaderIcon.style.display = "none";
		while(this.mapContainer.firstChild){
			this.mapContainer.removeChild(this.mapContainer.firstChild);
		}
	}
}


function loadWeather(){
	wxMap = new WeatherMap("wxMap");
	addEvent(window, 'resize', updateWeather);
	var jsonUrl = "/stc/jsp/getForecasts.jsp";
	var jsonXHR = new Ajax.Request(jsonUrl, {method: 'get', onComplete: parseJSONRows});
}




function parseJSONRows(originalRequest){
	var jsonContent = originalRequest.responseText;

	jsonRows = jsonContent.split(/\n/);
	
	var posArray = new Array();
	posArray[0] = new Position(73, 193);//Helsinki, Finland
	posArray[1] = new Position(44, 171);//Pori, Finland
	posArray[2] = new Position(76, 147);//Jyvaskyla, Finland
	posArray[3] = new Position(102, 170);//Savonlinna, Finland
	posArray[4] = new Position(53, 126);//Kokkola, Finland
	posArray[5] = new Position(73, 103);//Kuhmo, Finland
	posArray[6] = new Position(107, 116);//Oulu, Finland
	posArray[7] = new Position(99, 81);//Kuusamo, Finland
	posArray[8] = new Position(90, 52);//Sodankyla, Finland
	posArray[9] = new Position(60, 29);//Muonio, Finland
	posArray[10] = new Position(93, 12);//Kevo, Finland
	
	for(var j = 0; j < posArray.length; j++){
		wxMap.newObjFromJSON(jsonRows[j], posArray[j]);
	}
	
	wxMap.writeObjects();
}


function updateWeather(){
	wxMap.updateObjects();
}




var bool_hideWeather = false;


function showWeather(){
	if(jtk.select("#news").length > 0)
		jtk.select("#news")[0].style.display = "none";
	jtk.select("#weather")[0].style.display = "block";
	loadWeather();
}

function hideWeather(){
	if(jtk.select("#news").length > 0)
		jtk.select("#news")[0].style.display = "block";
	jtk.select("#weather")[0].style.display = "none";
	if(typeof(wxMap) == 'object')
		wxMap.hideObjects();
}


jtk.addEvent(window, "load", function(){
	if(bool_hideWeather == true)
		hideWeather();
	else
		showWeather();
});