var Libs = new Array();

// ------------------------------------------
// freemap utils function
// ------------------------------------------

// Open wiki page
function load_wiki_content(wPage) {
    Ajax(WikiURL + wPage, { TargetId: "free_area" });
}

// Open wiki page in specific target
function load_wiki_content_target(wPage, wTarget) {
    Ajax(WikiURL + wPage + "?wiki_target=" + wTarget, { TargetId: wTarget });
}

// call potlatch from osm
function MapEditPotlatch() {
    var lonlat = map.getCenter();  
    var lon_deg = (lonlat.lon / 20037508.34) * 180;
    var lat_deg = (lonlat.lat / 20037508.34) * 180;
    var PI = 3.14159265358979323846;
    lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);	
    var zoom = map.getZoom(); // + 3;
    var load = window.open('http://openstreetmap.org/edit?lat='+lat_deg+'&lon='+lon_deg+'&zoom='+zoom,'','');    
}

// call mapzen from osm
function MapEditMapzen() {
    var lonlat = map.getCenter();  
    var lon_deg = (lonlat.lon / 20037508.34) * 180;
    var lat_deg = (lonlat.lat / 20037508.34) * 180;
    var PI = 3.14159265358979323846;
    lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);	
    var zoom = map.getZoom(); // + 3;
    var load = window.open('http://maps.cloudmade.com/?lat='+lat_deg+'&lng='+lon_deg+'&zoom='+zoom+'&styleId=1&opened_tab=0','','');    
}

function MapEditJOSMCheck(version){
   //alert(version.application + " uses protocol version " + version.protocolversion.major + "." + version.protocolversion.minor);
   // do something useful, maybe showing edit button
   Sjax("http://127.0.0.1:8111/load_and_zoom?left="+MapViewportLeft()+"&right="+MapViewportRight()+"&top="+MapViewportTop()+"&bottom="+MapViewportBottom()+"", {});
}

function MapEditJOSM() {
	var url = "http://127.0.0.1:8111/version";
	var useFallback = false;
	// currently FF3.5, Safari 4 and IE8 implement CORS
	if (XMLHttpRequest) {
	   var request = new XMLHttpRequest();
	   if ("withCredentials" in request) {
	      request.open('GET', url, true);
	      request.onreadystatechange = function(){
	         if (request.readyState != 4) {
	            return;
	         }
	         if (request.status == 200) {
	            MapEditJOSMCheck(eval('(' + request.responseText + ')'));
	         }
	      };
	      request.send();
	   }
	   else if (XDomainRequest) {
	      var xdr = new XDomainRequest();
	      xdr.open("get", url);
	      xdr.onload = function(){
	         MapEditJOSMCheck(eval('(' + xdr.responseText + ')'));
	      };
	      xdr.send();
	   } else {
	      useFallback = true;
	   }
	}
	else {
	   // no XMLHttpRequest available
	   useFallback = true;
	}
	if (useFallback) {
	   // Use legacy jsonp call
	   var s = document.createElement('script');
	   s.src = url + '?jsonp=checkJOSM';
	   s.type = 'text/javascript';
	 
	   if (document.getElementsByTagName('head').length > 0) {
	      document.getElementsByTagName('head')[0].appendChild(s);
	   }
	 
	}
}

// Get absolute position of DOM element
function getElementPosition(elemID) {
    var offsetTrail = elemID;
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail){
	offsetLeft += offsetTrail.offsetLeft;
	offsetTop += offsetTrail.offsetTop;
	offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined'){
        offsetLeft += document.body.leftMargin;
	offsetTop += document.body.topMargin;
    }
    return {left:offsetLeft,top:offsetTop};
}

// Is Number function
function IsNumeric(sText) {
    var ValidChars = "0123456789.";
    var IsNumber=true;
    var Char;
    for (i = 0; i < sText.length && IsNumber == true; i++) { 
	Char = sText.charAt(i); 
        if (ValidChars.indexOf(Char) == -1) {
    	    IsNumber = false;
	}
    }
    return IsNumber;
}

// remove 1st 3 char from string if UTF8 header
function RemoveUTF8Header(input) {
//    return input.replace(/\xef\xbb\xbf/g, "HALLO");
    return input;
}

// GPS conversion
// 1) As decimal degrees (D,DDDDD): N 58.88482°, E 25.56835 °
function DisplayLat(Lat) {
    return (Math.round(Lat * 100000) / 100000) + "°";
}

function DisplayLon(Lon) {
    return (Math.round(Lon * 100000) / 100000) + "°";
}

// 2) As degrees and minutes (DD MM,MMM): N 58° 53.089', E 25 ° 34.101'
function DisplayLatMin(Lat) {
    var gpsdeg = parseInt(Lat);
    var remainder = Lat - (gpsdeg * 1.0);
    var gpsmin = remainder * 60.0;
    return gpsdeg + "°" + (Math.round(gpsmin * 100000) / 100000) + "'";
}

function DisplayLonMin(Lon) {
    var gpsdeg = parseInt(Lon);
    var remainder = Lon - (gpsdeg * 1.0);
    var gpsmin = remainder * 60.0;
    return gpsdeg + "°" + (Math.round(gpsmin * 100000) / 100000) + "'";
}

// 3) As degrees, minutes and seconds (DD MM SS,S): N 58° 53' 5.3 ", E 25 ° 34' 6.1 "
function DisplayLatSec(Lat) {
    var gpsdeg = parseInt(Lat);
    var remainder = Lat - (gpsdeg * 1.0);
    var gpsmin = remainder * 60.0;
    var remainder2 = gpsmin - (parseInt(gpsmin)*1.0);
    return gpsdeg + "°" + parseInt(gpsmin) + "'" + parseInt(remainder2*60.0) + '"'; 
}

function DisplayLonSec(Lon) {
    var gpsdeg = parseInt(Lon);
    var remainder = Lon - (gpsdeg * 1.0);
    var gpsmin = remainder * 60.0;
    var remainder2 = gpsmin - (parseInt(gpsmin)*1.0);
    return gpsdeg + "°" + parseInt(gpsmin) + "'" + parseInt(remainder2*60.0) + '"'; 
}

// datetime
function Timestamp2Text(input) {
    // napisat rozumny text -- pred x minutami, pred hodinou, pre 2-24 hodinami, vcera, predvceraom, pred x dnami, pred x tyznami, 
    // minuly mesiac, pred x mesiacmi, pred rokom, pred x rokmi
    iYear 	= input.substr(0, 4);
    iMonth 	= input.substr(4, 2);
    iDay 	= input.substr(6, 2);
    iHour 	= input.substr(8, 2);
    iMin 	= input.substr(10, 2);
    var iDatum = new Date();
    iDatum.setFullYear(iYear, iMonth-1, iDay);
    iDatum.setHours(iHour, iMin, 0, 0);
    
    var Datum = new Date();
    Datum.setSeconds(0, 0);
    cYear 	= Datum.getFullYear();
    cMonth 	= Datum.getMonth()+1;
    cDay 	= Datum.getDate();
    cHour 	= Datum.getHours();
    cMin 	= Datum.getMinutes();
    
    DiffYears  = Math.round((Datum.getTime() - iDatum.getTime()) / (1000*60*60*24*365));
    DiffMonths = Math.round((Datum.getTime() - iDatum.getTime()) / (1000*60*60*24*30));
    DiffWDays  = Math.round((Datum.getTime() - iDatum.getTime()) / (1000*60*60*24*7));
    DiffDays   = Math.round((Datum.getTime() - iDatum.getTime()) / (1000*60*60*24));
    DiffHours  = Math.round((Datum.getTime() - iDatum.getTime()) / (1000*60*60));
    DiffMins   = Math.round((Datum.getTime() - iDatum.getTime()) / (1000*60));

    // ak je zaporny vypiseme normalne
    if (DiffMins < 0) 
	return cDay + "." + cMonth + "." + cYear + " " + cHour + ":" + cMin; else	
    // pred xx minutami (1 - 90)
    if (DiffMins < 90) 	
	return "pred " + DiffMins + " minútami";  else   
    // pred xx hodinami (2 - 48)
    if (DiffHours < 48) 	
	return "pred " + DiffHours + " hodinami";  else   
    // pred xx dnami (2 - 14)
    if (DiffDays < 14) 	
	return "pred " + DiffDays + " dňami";  else   
    // pred xx tyzdnami (2 - 8)    
    if (DiffWDays < 8) 	
	return "pred " + DiffWDays + " týždňami";  else   
    // pred xx mesiacmi (2 - 24)    
    if (DiffMonths < 24) 	
	return "pred " + DiffMonths + " mesiacmi";  else   
    // pred xx rokmi    
	return "pred " + DiffYears + " rokmi";      
}

// BANER

var bnrid=0;
var bnrs;
var bnrt;
 
function rotatebnr() {
	var elm;
	elm =	document.getElementById(bnrs[bnrid]);
	elm.style.display= 'none' ;
	if (bnrid < bnrs.length-1)
		bnrid++;
	else
		bnrid=0;
	elm =	document.getElementById(bnrs[bnrid]);
	elm.style.display= '' ;
	window.setTimeout('rotatebnr()', bnrt[bnrid] * 1000);
}

// check browser text 
function CheckBrowser() {
	if (Theme_BrowserCompatibility === "0") 
		return "";
	
    if ((navigator.appName == "Netscape") && 
        //(navigator.appVersion.indexOf("Chrome") == -1) && 
        (navigator.appVersion.indexOf("Konqueror") == -1))
	return "";
    var element = document.getElementById(AreaOpen("info"));
//    element.innerHTML =  navigator.appName + " | " + navigator.appVersion + " | " ;
//    return "";
    
    var Browser = navigator.appName;
    if (navigator.appVersion.indexOf("Konqueror") != -1) 
      Browser = "Konqueror";
    if (navigator.appVersion.indexOf("Chrome") != -1) 
      Browser = "Chrome";
    if (element) {
		if (
			(navigator.appName == "Opera") || // Opera
			//(Browser == "Chrome")    || // Chrome
			((navigator.appName == "Microsoft Internet Explorer") && (typeof document.body.style.maxHeight != "undefined")) // IE7
			)
				element.innerHTML = "Niektoré funkcie portálu nie sú v <a href=\"javascript: void(0);\" onclick=\"Ajax('/cms/BrowserCompatibility', {TargetId: 'free_area'});\">prehliadači "+Browser+"</a> plne podporované !";	    
			  else
				element.innerHTML = "<a href=\"javascript: void(0);\" onclick=\"Ajax('/cms/BrowserCompatibility', {TargetId: 'free_area'});\">Prehliadač "+Browser+"</a> nie je podporovaný !!!";
    }
}

function Sleep(delay) {
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay);
}

// SetLocParam, ex. index.php#Name=Value
// TODO ZABEZPECIT OSETRENIE znakov = a ,
function SetLocParam(Name, Value) {
	// If loading site, it is not neccessary
	if (Site['Loading'] == true) 
		return "";
	spl = location.hash.slice(1).split(",");
	if (location.hash.slice(1) === "") {
		spl = Array();
	} else {
    	for (var i = 0; i < spl.length; i++ ) { 
			if ((spl[i].slice(0, spl[i].indexOf("="))) == Name) {
				spl[i] = Name + "=" + Value;
				location.hash = spl.toString();
				return true;
			}
		}									
	}
	spl.push(Name + "=" + Value);
	location.hash = spl.toString();
}

// GetLocParam, ex. index.php#Name=Value
function GetLocParam(Name) {
	loc = location.hash;
	loc = loc.replace(/%7C/g, "|");
	spl = loc.slice(1).split(",");
	if (loc.slice(1) === "") {
		return "";
	} else {
    	for (var i = 0; i < spl.length; i++ ) { 
			if ((spl[i].slice(0, spl[i].indexOf("="))) == Name) {
				return (spl[i].slice(spl[i].indexOf("=")+1)) ;
			}
		}									
	}
}

// GetLocParams. return array with params
function GetLocParams() {
	arr = new Array();
	loc = location.hash;
	loc = loc.replace(/%7C/g, "|");
	spl = loc.slice(1).split(",");
	if (loc.slice(1) === "") {
	} else {
    	for (var i = 0; i < spl.length; i++ ) { 
			arr[(spl[i].slice(0, spl[i].indexOf("=")))] = (spl[i].slice(spl[i].indexOf("=")+1));
		}									
	}
	return arr;
}

function LoadLibrary(Name) {
	Name = "/lib/js/" + Name.replace(/\./g, "/") + ".js";
	if (typeof Libs[Name] == "undefined") {
//		alert('Loading '+Name);
		Libs[Name] = 0;
		$j.ajax({
			url: Name,
			async: false,
			dataType: 'script'
//			, success: function() { Libs[Name] = 1; }
		});
//		while (Libs[Name] != 1) { }
//		alert("Loaded: " + Name + Libs[Name]);
	}
	return true;
}

function DialogOpen(URL, Options) {
	var Data = Sjax(URL + '&Ajax=a', {});
	var Dialog = $j('<div style="padding: 16px"></div>')
		.html(
			Data
		)
		.dialog({
			autoOpen: false,
			title: '',
			width: "60%",
			height: 400,
			modal: true,
			zIndex: 20000
		});
	Dialog.dialog('open');
}

