// www.geocontext.org
// info@geocontext.org



// start GEOCONTEXT.js -----------------------------------------------------------------------------------------------------------------------------

	var GEOCONTEXT={version:1};
	var w=window;
	var d=w.document;
	var _userid=0;



	// odwołuje się do getElementById lub querySelectorAll
	// przykład: tag("#toc ul li"); lub tag("#toc ul li",2); lub tag("toc");
	function tag(x,n){
		var n=n?n:0;
		var regex=/ |\.|#|\(.*\)|\[.*\]|\:|>/; // wyrażenie reg. sprawdza czy wystąpi spacja lub . lub # lub ( ) lub [ ] lub : lub >
		if(regex.test(x)==true&&d.querySelectorAll&&d.querySelectorAll(x)[n]){
			return d.querySelectorAll(x)[n];
		}else if(d.getElementById(x)){
			return d.getElementById(x);
		}else{
			return false;
		}
	};



	// ajax

	// przykład wywołania GET:
	/*
	ajx.init({
		type:"GET",
		uri:"example.php?param=1&q=1",
		send:null,
		dataType:"xml",
		header:null,
		onError:function(msg){
			alert("Error");
		},
		onSuccess:function(msg){
			// script
		},
		onComplete:function(msg){
			alert("Complete");
		}
	});
	*/

	// przykład wywołania POST:
	/*
	ajx.init({
		type:"POST",
		uri:"example.php",
		send:"param=1&q=1",
		dataType:"xml",
		header:"application/x-www-form-urlencoded",
		onError:function(msg){
			alert("Error");
		},
		onSuccess:function(msg){
			// script
		},
		onComplete:function(msg){
			alert("Complete");
		}
	});
	*/
	var ajx={
		init:function(opt){
			var opt={
				type:opt.type||"POST",
				uri:opt.uri||"",
				send:opt.send||null,
				onComplete:opt.onComplete||function(){},
				onError:opt.onError||function(){},
				onSuccess:opt.onSuccess||function(){},
				dataType:opt.dataType||"text",
				header:opt.header||"application/x-www-form-urlencoded"
			};
			var a=w.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
			a.open(opt.type,opt.uri,true);
			if(opt.type=="POST"){
				a.setRequestHeader("Content-Type",opt.header);
			}
			a.onreadystatechange=function(){
				if(a.readyState==4){
					if(ajx.httpSuccess(a)){
						var returnData=(opt.dataType=="xml")?a.responseXML:a.responseText;
						opt.onSuccess(returnData);
					}else{
						opt.onError();
					}
					opt.onComplete();
					a=null;
				}
			};
			a.send(opt.send);
		},
		httpSuccess:function(r){
			try{
				return (r.status>=200&&r.status<300||r.status==304);
			}catch(e){
				return false;
			}
		}
	};



	// rozmywanie
	// działa po id fade_in('top',400);
	// i na querySelectorAll np. fade_in('#publ div p',400);
	function fade_in(x,ms){
		var t=tag(x);
		if(t){
			for(i=1;i<=100;i++){
				(function(j){
					w.setTimeout(function(){
						t.style.opacity=j/100;
						t.style.MozOpacity=j/100;
						t.style.filter=" alpha(opacity="+j+")";
					},j*ms/100);
				})(i);
			};
		}
	};
	function fade_out(x,ms){
		var t=tag(x);
		if(t){
			for(i=1;i<=100;i++){
				(function(j){
					w.setTimeout(function(){
						t.style.opacity=(100-j)/100;
						t.style.MozOpacity=(100-j)/100;
						t.style.filter=" alpha(opacity="+(100-j)+")";
					},j*ms/100);
				})(i);
			};
		}
	};



	// klasyczny efekt toogle,
	// działa po id toggle("id");
	// i na querySelectorAll np. toggle("div.iw a.btn");
	function toggle(x){
		var el=tag(x);
		if(el){
			if(el.style.display=="block"){
				el.style.display="none";
			}else{
				el.style.display="block";
			}
		}
	};



	// zwraca wybraną ilość znaków z bieżącej lokalizacji
	// lpath(8); na stronie z adresem www.example.com/photos/photo-1/
	// zwróci pierwsze osiem znaków za domeną, czyli /photos/
	// lpath(); zwróci całą sciężkę, czyli /photos/photo-1/
	function lpath(x){
		if(x){
			return w.location.pathname.substring(0,x);
		}else{
			return w.location.pathname;
		}
	};



	// przykład round_num(0.045,2) zwróci 0.05 jest to lepsze rozwiązanie niż 0.045.toFixed(2));
	// lub 0.045.toPrecision(1)); które w przypadku tej liczby zwrócą 0.04
	function round_num(x,y){
		var x=Math.round(x*Math.pow(10,y))/Math.pow(10,y);
		return parseFloat(x);
	};



	// generuje hasz o dłogości max 17 cyfr np.: 20101071658201253
	// pomieszany trochę aby był niezbyt czytelny
	function gen_ha(){ // tworzy hasz z cyfr daty i czasu
		var year=(new Date).getUTCFullYear();
		var month=(new Date).getUTCMonth()+1; // korekta na miesiąc
		if(month<10)month="0"+month; // dostawia zero dla jednocyfrowych
		var day=(new Date).getUTCDate();
		var hours=(new Date).getUTCHours();
		var min=(new Date).getUTCMinutes();
		var sec=(new Date).getUTCSeconds();
		var milisec=(new Date).getUTCMilliseconds();

		return year+""+month+""+milisec+""+min+""+hours+""+day+""+sec;
	};



	// ładowanie zewnętrznych skryptów i css
	// przykład dla css: load.css("/css/style.css");
	// przykład dla js: load.js("/js/script.js");
	// lub ładowanie sekwencyjne skryptów z czekaniem - czyli kolejno ładuje skrypty ale po załadowaniu poprzedniego:
	// load.js(["/js/script.js","/js/lib.js","/js/query.js","/js/scr.js"]);
	var load={
		css:function(href){
			var c=d.createElement("link");
			c.type="text/css";
			c.rel="stylesheet";
			c.href=href;
			d.getElementsByTagName("head")[0].appendChild(c);
		},
		js:function(src){
			if(typeof src=="object"){ // jeśli tablica
				for(var i=0;i<src.length;i++){
					var s=d.createElement("script");
					s.type="text/javascript";
					s.src=src[0];          // ładuje pierwszy element z tablicy
					s.onload=function(){   // po załadowaniu skryptu
						src.shift();   // usunie pierwszy element z tablicy
						if(src.length>0){
							load.js(src[0]); // załaduje pierwszy element z tablicy
						}
					};
					d.getElementsByTagName("head")[0].appendChild(s);
				};
			}else{
				var s=d.createElement("script");
				s.type="text/javascript";
				s.src=src;
				d.getElementsByTagName("head")[0].appendChild(s);
			}
		}
	};



	// preloading grafik, css i skryptów za pomocą żądania ajax
	function preload(x){
		ajx.init({
			type:"GET",
			uri:x,
			dataType:"text"
		});
	};



	// startowanie funkcji tuż po załadowaniu drzewa DOM
	// na podstawie skryptu Riddlea http://riddle.jogger.pl/2007/05/22/wykonywanie-skryptow-po-zaladowaniu-dom/
	// np. docReady(example_func); startuje funkcję example_func
	var isIE=/*@cc_on!@*/false;
	if(!w.addEventListener&&isIE){
		d.write('<script id="_defer" defer="true" src="//:"><\/script>');
	}
	function docReady(callback){
		if(w.addEventListener){
			w.addEventListener("DOMContentLoaded",callback,false);
		}else if(isIE){
			var dfr=d.getElementById("_defer");
			if(dfr){
				dfr.onreadystatechange=function(){
					if(this.readyState=="complete"){
						callback();
					}
				};
				dfr.onreadystatechange();
				dfr=null;
			}
		}else{
			w.onload=callback;
		}
	};



	// startowanie funkcji po załadowaniu całego dokumentu
	// np. docLoad(example_func); startuje funkcję example_func
	function docLoad(callback){
		if(w.addEventListener){
			w.addEventListener("load",callback,false);
		}else{
			w.onload=callback;
		}
	};



	// startowanie funkcji przy wyjściu ze strony
	// np. docUnload(example_func); startuje funkcję example_func
	function docUnload(callback){
		if(w.addEventListener){
			w.addEventListener("unload",callback,false);
		}else{
			w.onbeforeunload=callback;
		}
	};



	// pobieranie parametrów z adresu, po znaku zapytania "?"
	// istnieje możliwość odczytywania parametrów
	// po znaku hasz z wykrzyknikiem "#!"
	// np: www.example.com?aa=aa&bb=bb#!cc=cc&dd=dd
	// można się odwoływać do dowolnego parametru
	// alert(_GET("aa")); zwróci aa
	// alert(_GET("dd")); zwróci dd
	function _GET(x){
		var q=w.location.search.substring(1);
		if(w.location.hash.substring(0,2)=="#!"){
			var q=q+"&"+w.location.hash.substring(2);
		}
		return param(x,q);
	};

	function param(x,q){ // wyłapuje parametry z ciągu typu aa=aa&bb=bb
		var q=q.split("&");
		for(var i=0;i<q.length;i++){
			var p=q[i].split("=");
			if(p[0]==x){
				return p[1];
			}
		};
	};



	// zwraca ilość sekund od 1970 roku
	// http://stackoverflow.com/questions/221294/how-do-you-get-a-timestamp-in-javascript/1714649#1714649
	function timestamp(){
		return Math.round(((new Date()).getTime()-Date.UTC(1970,0,1))/1000);
	};



	// formatuje cyfry tzn. wstawia spację lub przecinek w długich cyfrach aby były czytelniejsze

	// format_num(1000,"m",".");    // return 1000
	// format_num(10000,"m",".");   // return 10,000

	// format_num(1000,"m",",");    // return 1000
	// format_num(10000,"m",",");   // return 10 000

	// format_num(1000,"e",".");    // return 1,000
	// format_num(10000,"e",".");   // return 10,000

	// format_num(1000,"e",",");    // return 1000
	// format_num(10000,"e",",");   // return 10 000

	// format_num(1000,"e");        // return 1,000
	// format_num(10000,"e");       // return 10,000

	// format_num(1000,"m");        // return 1000
	// format_num(10000,"m");       // return 10 000
	function format_num(num,units,sepd){

		// w zależności od ustawionych jednostek lub ustawionego separatora liczb, ustawia odpowiedni separator dla cyfr
		if(sepd=="."){                           // najpierw sprawdza czy nie ustawiono separatora
			var regex=/^[0-9.,+-]{4,999}$/;  // separator wstawia do cyfr dłuższych niż 4 znaki
			var sepd=","; // separator tysięcy
		}else if(sepd==","){                     // najpierw sprawdza czy nie ustawiono separatora
			var regex=/^[0-9.,+-]{5,999}$/;  // separator wstawia do cyfr dłuższych niż 5 znaków
			var sepd=" "; // separator tysięcy
		}else if(units=="e"){                    // jeśli nie ustawiono separatora to sprawdza jednostki
			var regex=/^[0-9.,+-]{4,999}$/;  // separator wstawia do cyfr dłuższych niż 4 znaki
			var sepd=","; // separator tysięcy
		}else{
			var regex=/^[0-9.,+-]{5,999}$/; // separator wstawia do cyfr dłuższych niż 5 znaków
			var sepd=" "; // separator tysięcy
		}

		// sprawdza wyrażenie regularne i czy liczba mieści się w przedziale kwalifikującym do rozdzielenia spacją lub przecinkiem
		if(
		regex.test(num)==true&&num<=-10000&&units=="m"||
		regex.test(num)==true&&num>=10000&&units=="m"||
		regex.test(num)==true&&num<=-1000&&units=="e"||
		regex.test(num)==true&&num>=1000&&units=="e"
		){
			// http://ntt.cc/2008/04/25/6-very-basic-but-very-useful-javascript-number-format-functions-for-web-developers.html
			// http://www.netlobo.com/javascript-number-format.html
			// author site http://www.mredkj.com/javascript/numberFormat.html
			// license http://www.mredkj.com/legal.html - "Code marked as public domain is without copyright, and can be used without restriction."
			num+="";
			x=num.split(".");
			x1=x[0];
			x2=x.length>1?"."+x[1]:"";
			var regex=/(\d+)(\d{3})/;
			while(regex.test(x1)){
				x1=x1.replace(regex,"$1"+sepd+"$2");
			}
			//---

			if(sepd=="."){
				return x1+x2;
			}else if(sepd==","){
				return str_replace(".",",",x1+x2); // jeśli wystąpi kropka w ciągu to ją zamieni na przecinek
			}else if(units=="e"){
				return x1+x2;
			}else{
				return str_replace(".",",",x1+x2); // jeśli wystąpi kropka w ciągu to ją zamieni na przecinek
			}
		}else{
			if(sepd=="."){
				return num;
			}else if(sepd==","){
				return str_replace(".",",",num); // jeśli wystąpi kropka w ciągu to ją zamieni na przecinek
			}else if(units=="e"){
				return num;
			}else{
				return str_replace(".",",",num); // jeśli wystąpi kropka w ciągu to ją zamieni na przecinek
			}
		}
	};



	// wspomaga ciasteczka i localStorage np. w statystykach
	// http://www.java2s.com/Code/JavaScript/Development/BillDortchsCookieFunctions.htm
	//  Cookie Functions -- "Night of the Living Cookie" Version (25-Jul-96)
	//
	//  Written by:  Bill Dortch, hIdaho Design <bdortch@hidaho.com>
	//  The following functions are released to the public domain.
	//
	// rozbudowane o localStorage jeśli przeglądarka obsługuje
	// np. getItem("test1");
	function getItem(name){
		if(("localStorage" in w)&&w.localStorage!=null&&w.addEventListener){
			return w.localStorage.getItem(name);
		}else{
			return getCookie(name);
		}
	};

	// np. setItem("test1","txt");
	function setItem(name,value){
		if(("localStorage" in w)&&w.localStorage!=null&&w.addEventListener){
			w.localStorage.setItem(name,value);
		}else{
			setCookie(name,value,expires(60*60*24*365*15),"/");
		}
	};

	// np. delItem("test1");
	function delItem(name){
		if(("localStorage" in w)&&w.localStorage!=null&&w.addEventListener){
			w.localStorage.removeItem(name);
		}else{
			delCookie(name,"/");
		}
	};

	function getCookieVal(offset){
	  var endstr = d.cookie.indexOf (";", offset);
	  if (endstr == -1)
	    endstr = d.cookie.length;
	  return unescape(d.cookie.substring(offset, endstr));
	};

	function expires(x){ // ustawia ważność cookies - przykład na 30 minut expires(60*30)
		var dt=new Date();
		dt.setTime(dt.getTime()+(1000*x));
		return dt;
	};

	// np. getCookie("test1");
	function getCookie(name){
	  var arg = name + "=";
	  var alen = arg.length;
	  var clen = d.cookie.length;
	  var i = 0;
	  while (i < clen) {
	    var j = i + alen;
	    if (d.cookie.substring(i, j) == arg)
	      return getCookieVal (j);
	    i = d.cookie.indexOf(" ", i) + 1;
	    if (i == 0) break;
	  }
	  return null;
	};

	// np. setCookie("test1","txt",expires(60*60*24*365*15),"/");
	function setCookie(name,value,expires,path,domain,secure){
	  d.cookie = name + "=" + escape (value) +
	    ((expires) ? "; expires=" + expires.toUTCString() : "") +
	    ((path) ? "; path=" + path : "") +
	    ((domain) ? "; domain=" + domain : "") +
	    ((secure) ? "; secure" : "");
	};

	// np. delCookie("test1","/");
	function delCookie(name,path,domain){
	  if (getCookie(name)) {
	    d.cookie = name + "=" +
	      ((path) ? "; path=" + path : "") +
	      ((domain) ? "; domain=" + domain : "") +
	      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
	  }
	};



/* 
 * More info at: http://phpjs.org
 * 
 * This is version: 3.26
 * php.js is copyright 2011 Kevin van Zonneveld.
 * 
 * Portions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld
 * (http://kevin.vanzonneveld.net), Onno Marsman, Theriault, Michael White
 * (http://getsprink.com), Waldo Malqui Silva, Paulo Freitas, Jack, Jonas
 * Raoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Legaev
 * Andrey, Ates Goral (http://magnetiq.com), Alex, Ratheous, Martijn Wieringa,
 * Rafał Kukawski (http://blog.kukawski.pl), lmeyrick
 * (https://sourceforge.net/projects/bcmath-js/), Nate, Philippe Baumann,
 * Enrique Gonzalez, Webtoolkit.info (http://www.webtoolkit.info/), Carlos R.
 * L. Rodrigues (http://www.jsfromhell.com), Ash Searle
 * (http://hexmen.com/blog/), Jani Hartikainen, travc, Ole Vrijenhoek,
 * Erkekjetter, Michael Grier, Rafał Kukawski (http://kukawski.pl), Johnny
 * Mast (http://www.phpvrouwen.nl), T.Wild, d3x,
 * http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,
 * Rafał Kukawski (http://blog.kukawski.pl/), stag019, pilus, WebDevHobo
 * (http://webdevhobo.blogspot.com/), marrtins, GeekFG
 * (http://geekfg.blogspot.com), Andrea Giammarchi
 * (http://webreflection.blogspot.com), Arpad Ray (mailto:arpad@php.net),
 * gorthaur, Paul Smith, Tim de Koning (http://www.kingsquare.nl), Joris, Oleg
 * Eremeev, Steve Hilder, majak, gettimeofday, KELAN, Josh Fraser
 * (http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/),
 * Marc Palau, Kevin van Zonneveld (http://kevin.vanzonneveld.net/), Martin
 * (http://www.erlenwiese.de/), Breaking Par Consulting Inc
 * (http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7),
 * Chris, Mirek Slugen, saulius, Alfonso Jimenez
 * (http://www.alfonsojimenez.com), Diplom@t (http://difane.com/), felix,
 * Mailfaker (http://www.weedem.fr/), Tyler Akins (http://rumkin.com), Caio
 * Ariede (http://caioariede.com), Robin, Kankrelune
 * (http://www.webfaktory.info/), Karol Kowalski, Imgen Tata
 * (http://www.myipdf.com/), mdsjack (http://www.mdsjack.bo.it), Dreamer,
 * Felix Geisendoerfer (http://www.debuggable.com/felix), Lars Fischer, AJ,
 * David, Aman Gupta, Michael White, Public Domain
 * (http://www.json.org/json2.js), Steven Levithan
 * (http://blog.stevenlevithan.com), Sakimori, Pellentesque Malesuada,
 * Thunder.m, Dj (http://phpjs.org/functions/htmlentities:425#comment_134018),
 * Steve Clay, David James, Francois, class_exists, nobbler, T. Wild, Itsacon
 * (http://www.itsacon.net/), date, Ole Vrijenhoek (http://www.nervous.nl/),
 * Fox, Raphael (Ao RUDLER), Marco, noname, Mateusz "loonquawl" Zalega, Frank
 * Forte, Arno, ger, mktime, john (http://www.jd-tech.net), Nick Kolosov
 * (http://sammy.ru), marc andreu, Scott Cariss, Douglas Crockford
 * (http://javascript.crockford.com), madipta, Slawomir Kaniecki,
 * ReverseSyntax, Nathan, Alex Wilson, kenneth, Bayron Guevara, Adam Wallner
 * (http://web2.bitbaro.hu/), paulo kuong, jmweb, Lincoln Ramsay, djmix,
 * Pyerre, Jon Hohle, Thiago Mata (http://thiagomata.blog.com), lmeyrick
 * (https://sourceforge.net/projects/bcmath-js/this.), Linuxworld, duncan,
 * Gilbert, Sanjoy Roy, Shingo, sankai, Oskar Larsson Högfeldt
 * (http://oskar-lh.name/), Denny Wardhana, 0m3r, Everlasto, Subhasis Deb,
 * josh, jd, Pier Paolo Ramon (http://www.mastersoup.com/), P, merabi, Soren
 * Hansen, Eugene Bulkin (http://doubleaw.com/), Der Simon
 * (http://innerdom.sourceforge.net/), echo is bad, Ozh, XoraX
 * (http://www.xorax.info), EdorFaus, JB, J A R, Marc Jansen, Francesco, LH,
 * Stoyan Kyosev (http://www.svest.org/), nord_ua, omid
 * (http://phpjs.org/functions/380:380#comment_137122), Brad Touesnard, MeEtc
 * (http://yass.meetcweb.com), Peter-Paul Koch
 * (http://www.quirksmode.org/js/beat.html), Olivier Louvignes
 * (http://mg-crea.com/), T0bsn, Tim Wiel, Bryan Elliott, Jalal Berrami,
 * Martin, JT, David Randall, Thomas Beaucourt (http://www.webapp.fr), taith,
 * vlado houba, Pierre-Luc Paour, Kristof Coomans (SCK-CEN Belgian Nucleair
 * Research Centre), Martin Pool, Kirk Strobeck, Rick Waldron, Brant Messenger
 * (http://www.brantmessenger.com/), Devan Penner-Woelk, Saulo Vallory, Wagner
 * B. Soares, Artur Tchernychev, Valentina De Rosa, Jason Wong
 * (http://carrot.org/), Christoph, Daniel Esteban, strftime, Mick@el, rezna,
 * Simon Willison (http://simonwillison.net), Anton Ongson, Gabriel Paderni,
 * Marco van Oort, penutbutterjelly, Philipp Lenssen, Bjorn Roesbeke
 * (http://www.bjornroesbeke.be/), Bug?, Eric Nagel, Tomasz Wesolowski,
 * Evertjan Garretsen, Bobby Drake, Blues (http://tech.bluesmoon.info/), Luke
 * Godfrey, Pul, uestla, Alan C, Ulrich, Rafal Kukawski, Yves Sucaet,
 * sowberry, Norman "zEh" Fuchs, hitwork, Zahlii, johnrembo, Nick Callen,
 * Steven Levithan (stevenlevithan.com), ejsanders, Scott Baker, Brian Tafoya
 * (http://www.premasolutions.com/), Philippe Jausions
 * (http://pear.php.net/user/jausions), Aidan Lister
 * (http://aidanlister.com/), Rob, e-mike, HKM, ChaosNo1, metjay, strcasecmp,
 * strcmp, Taras Bogach, jpfle, Alexander Ermolaev
 * (http://snippets.dzone.com/user/AlexanderErmolaev), DxGx, kilops, Orlando,
 * dptr1988, Le Torbi, James (http://www.james-bell.co.uk/), Pedro Tainha
 * (http://www.pedrotainha.com), James, Arnout Kazemier
 * (http://www.3rd-Eden.com), Chris McMacken, gabriel paderni, Yannoo,
 * FGFEmperor, baris ozdil, Tod Gentille, Greg Frazier, jakes, 3D-GRAF, Allan
 * Jensen (http://www.winternet.no), Howard Yeend, Benjamin Lupton, davook,
 * daniel airton wermann (http://wermann.com.br), Atli Þór, Maximusya, Ryan
 * W Tenney (http://ryan.10e.us), Alexander M Beedie, fearphage
 * (http://http/my.opera.com/fearphage/), Nathan Sepulveda, Victor, Matteo,
 * Billy, stensi, Cord, Manish, T.J. Leahy, Riddler
 * (http://www.frontierwebdev.com/), Rafał Kukawski, FremyCompany, Matt
 * Bradley, Tim de Koning, Luis Salazar (http://www.freaky-media.com/), Diogo
 * Resende, Rival, Andrej Pavlovic, Garagoth, Le Torbi
 * (http://www.letorbi.de/), Dino, Josep Sanz (http://www.ws3.es/), rem,
 * Russell Walker (http://www.nbill.co.uk/), Jamie Beck
 * (http://www.terabit.ca/), setcookie, Michael, YUI Library:
 * http://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html, Blues at
 * http://hacks.bluesmoon.info/strftime/strftime.js, Ben
 * (http://benblume.co.uk/), DtTvB
 * (http://dt.in.th/2008-09-16.string-length-in-bytes.html), Andreas, William,
 * meo, incidence, Cagri Ekin, Amirouche, Amir Habibi
 * (http://www.residence-mixte.com/), Luke Smith (http://lucassmith.name),
 * Kheang Hok Chin (http://www.distantia.ca/), Jay Klehr, Lorenzo Pisani,
 * Tony, Yen-Wei Liu, Greenseed, mk.keck, Leslie Hoare, dude, booeyOH, Ben
 * Bryan
 * 
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */ 


function str_replace (search, replace, subject, count) {
    // Replaces all occurrences of search in haystack with replace  
    // 
    // version: 1109.2015
    // discuss at: http://phpjs.org/functions/str_replace
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   input by: Oleg Eremeev
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Oleg Eremeev
    // %          note 1: The count parameter must be passed as a string in order
    // %          note 1:  to find a global variable in which the result will be given
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'
    var i = 0,
        j = 0,
        temp = '',
        repl = '',
        sl = 0,
        fl = 0,
        f = [].concat(search),
        r = [].concat(replace),
        s = subject,
        ra = Object.prototype.toString.call(r) === '[object Array]',
        sa = Object.prototype.toString.call(s) === '[object Array]';
    s = [].concat(s);
    if (count) {
        this.window[count] = 0;
    }

    for (i = 0, sl = s.length; i < sl; i++) {
        if (s[i] === '') {
            continue;
        }
        for (j = 0, fl = f.length; j < fl; j++) {
            temp = s[i] + '';
            repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
            s[i] = (temp).split(f[j]).join(repl);
            if (count && s[i] !== temp) {
                this.window[count] += (temp.length - s[i].length) / f[j].length;
            }
        }
    }
    return sa ? s : s[0];
}

// end GEOCONTEXT.js -------------------------------------------------------------------------------------------------------------------------------



	// statystyki odwiedzin
	(function(){

		// def. data i czas
		var dt=new Date();
		var hours=dt.getHours();
		var min=dt.getMinutes();
		var month=dt.getMonth()+1;
		var year=dt.getFullYear();
		var day=dt.getDate();
		var sec=dt.getSeconds();
		var hours_min_sec=((hours<10)?"0":"")+hours+":"+((min<10)?"0":"")+min+":"+((sec<10)?"0":"")+sec;
		if(day<10)day="0"+day;
		if(month<10)month="0"+month;
		if(year<1000)year+=1900;



		/////////////////////////////----------------------------------------------------start adaptera---
		// ADAPTER STAREGO SKRYPTU jeśli są ciasteczka ze starego skryptu js
		// to je przekształca na nowe ciasteczko i dalej zlicza już wg nowego skryptu - za jakiś czas można to usunąć, tak koło 2015 r.
		/////////////////////////////
		if(getCookie("c___c")!=null){
			var c_tbl=getCookie("c___c").split("."); // rozbija ciąg na tablicę

			var c_hours_min_cnt=c_tbl[0];
			var c_hour=(c_hours_min_cnt+"").substring(2,4);
			var c_min=(c_hours_min_cnt+"").substring(4,6);

			var c_date=parseInt(c_tbl[1])-12345678;
			var c_datey=(c_date+"").substring(0,4);
			var c_datem=(c_date+"").substring(4,6);
			var c_dated=(c_date+"").substring(6,8);
			var c_date=c_datey+"-"+c_datem+"-"+c_dated;

			var c_datetime=c_date+" "+c_hour+":"+c_min+"";
			var c_cookie="userid="+c_tbl[3]+"&last_visit="+c_datetime+"&counter_revisit="+c_tbl[2]+"&timestamp=0&geolocation=";
			setCookie("s1",c_cookie,expires(60*60*24*365*15),"/");
			delCookie("c___c","/");
		}else if(getCookie("c___g_l")!=null){
			var cc_hours_min_cnt=getCookie("c___g_l");
			var cc_hour=(cc_hours_min_cnt+"").substring(2,4);
			var cc_min=(cc_hours_min_cnt+"").substring(4,6);

			var cc_date=parseInt(getCookie("c___d"))-12345678;
			var cc_datey=(cc_date+"").substring(0,4);
			var cc_datem=(cc_date+"").substring(4,6);
			var cc_dated=(cc_date+"").substring(6,8);
			var cc_date=cc_datey+"-"+cc_datem+"-"+cc_dated;

			var cc_datetime=cc_date+" "+cc_hour+":"+cc_min+"";
			var cc_cookie="userid="+gen_ha()+"&last_visit="+cc_datetime+"&counter_revisit="+getCookie("c___l")+"&timestamp=0&geolocation=";
			setCookie("s1",cc_cookie,expires(60*60*24*365*15),"/");
			delCookie("c___g_l","/");
		}
		if(("localStorage" in w)&&w.localStorage!=null&&getCookie("s1")&&w.addEventListener&&/\|/.test(getCookie("s1"))){
			var tbl=getCookie("s1").split("|"); // rozbija ciąg na tablicę
			var cooki="userid="+tbl[0]+"&last_visit="+tbl[1]+"&counter_revisit="+tbl[2]+"&timestamp=0&geolocation=";
			setItem("s1",cooki);
			delCookie("s1","/");
		}else if(("localStorage" in w)&&w.localStorage!=null&&getCookie("s1")&&w.addEventListener){
			setItem("s1",getCookie("s1"));
			delCookie("s1","/");
		}else if(getCookie("s1")&&/\|/.test(getCookie("s1"))){
			var tbl=getCookie("s1").split("|"); // rozbija ciąg na tablicę
			var cooki="userid="+tbl[0]+"&last_visit="+tbl[1]+"&counter_revisit="+tbl[2]+"&timestamp=0&geolocation=";
			setCookie("s1",cooki,expires(60*60*24*365*15),"/");
		}
		/////////////////////////////----------------------------------------------------koniec adaptera---



		// geolokacja w statystykach bazuje na ciasteczkach geolocation które są wysyłane
		// z GEOCONTEXT-Profilera
		if(getItem("geolocation")){
			var _geolocation=getItem("geolocation");
		}else{
			var _geolocation="";
		}

		// ciasteczka lub localStorage w statystykach
		if(getItem("s1")==null){
			var _last_visit="";
			var _counter_revisit="";
			_userid=gen_ha(); // <-- generuje _userid, ten parametr może być przydatny do innych skryptów dlatego jest ustawiony globalnie <---

			var counter=1;

			var now=year+"-"+month+"-"+day+" "+hours_min_sec;
			var pstr="userid="+_userid+"&last_visit="+now+"&counter_revisit="+counter+"&timestamp="+timestamp()+"&geolocation="+_geolocation;
			setItem("s1",pstr);
		}else{
			var qstr=getItem("s1");
			var tmp=param("timestamp",qstr);
			_userid=param("userid",qstr); // <-- generuje _userid, ten parametr może być przydatny do innych skryptów dlatego jest ustawiony globalnie <---

			if((timestamp()-tmp)>1800){ // 1800 sekund
				var _last_visit=param("last_visit",qstr);
				var _counter_revisit=param("counter_revisit",qstr);

				var counter=parseInt(_counter_revisit)+1;

				var now=year+"-"+month+"-"+day+" "+hours_min_sec;
				var pstr="userid="+_userid+"&last_visit="+now+"&counter_revisit="+counter+"&timestamp="+timestamp()+"&geolocation="+_geolocation;
				setItem("s1",pstr);
			}else{
				var _last_visit="";
				var _counter_revisit="";
			}
		}

		// to cookie blokuje zliczenie powrotu na witrynę przez 30 minut
		// i jest wykorzystywane tylko przez skrypt statystyk s.php
		// - używa go do blokady zliczania wizyt przez noscript w przeglądarkach,
		// które wczytują zawartość noscript, mimo włączonej obsługi js
		// tak się dzieje tylko na stronach serwowanych jako xhtml
		// na html noscript nie wczytuje.
		setCookie("b",1,expires(60*30),"/");

		// detekcja javy
		var jv=w.navigator.javaEnabled()?"jv;":"";

		// detekcja obsługi ciasteczek
		var coo=w.navigator.cookieEnabled?"coo;":"";

		// detekcja geolokalizacji
		var geol=w.navigator.geolocation?"geol;":"";

		// detekcja localStorage
		var lstor="localStorage"in w&&w.localStorage!=null?"lstor;":"";

		// detekcja języka
		if(w.navigator.language){
			var lang=w.navigator.language+";";
		}else if(w.navigator.userLanguage){
			var lang=w.navigator.userLanguage+";";
		}else{
			var lang="";
		}

		var _id="geocontext";
		var _url=w.location.href;
		var _c=screen.colorDepth;
		var _detect=jv+""+coo+""+geol+""+lstor+""+lang;
		var _r=screen.width+"x"+screen.height;
		var _rand=Math.round(Math.random()*100000000)+""+gen_ha();

		// przetwarza referer aby nie było krzaków
		if(typeof(encodeURIComponent)=="function"){
			var _referer=encodeURIComponent(d.referrer);
		}else{
			var _referer=escape(d.referrer);
		}

		// NIE ZMIENIAJ znaku end na amp w skryptach,
		// bo wtedy statystyki źle wskazują wejścia!
		var _parameters="?id="+_id+"&st=img&showme=n&r="+_r+"&c="+_c+"&userid="+_userid+"&url="+_url+"&referer="+_referer+"&last_visit="+_last_visit+"&counter_revisit="+_counter_revisit+"&detect="+_detect+"&geolocation="+_geolocation+"&rand="+_rand;
		var system1="http://www.geocontext.org/a/system/1/s_js.php"+_parameters;

		// ładuje obrazki statów
		if(d.createElement&&d.getElementsByTagName){
			var img=d.createElement("img");
			img.alt="";
			img.src=system1;
			d.getElementsByTagName("head")[0].appendChild(img);
		}else{
			var img=new Image();
			img.src=system1;
		}

	})();
	// koniec statystyk pphl



	(function(){

		function load_plugins_docReady(){
			load.css("/a/2010/plugins/jq_lightbox/jq_lightbox.css");                    // jquery lightbox css
			load.js([ // sekwencyjnie
				"/a/2010/plugins/jquery/jquery-1.4.2.min.js",                       // jquery
				"/a/2010/plugins/jq_lightbox/jq_lightbox.js",                       // jquery lightbox script - działa ok z jquery do wer. 1.4.2 !!!
				"/a/2010/plugins/imenu/imenu.js",                                   // rozwijane media imenu
				//"/a/2010/plugins/donate_btn/donate_btn.js");                        // przycisk dotacja
				"/a/2010/plugins/for_all/for_all.js"                                // różne dodatki
			]);

			if(lpath()=="/"){
				load.js("/a/2010/plugins/home/home.js");                            // tylko na stronę główną
			}else if(lpath(6)=="/foto/"){
				load.js("/a/2010/plugins/foto/foto.js");                            // foto skrypty dla stron foto
				load.js("/a/2010/plugins/foto-preload/foto-preload.js");            // foto preload
			}
		};

		docReady(load_plugins_docReady); // startuje funkcje po załadowaniu drzewa DOM



		// dla ie
		// rozpoznaje wer. js, np. jscript_version 5.7 obsługiwał ie7, 5.8 obsługuje ie8, a 9 ie9
		/*@cc_on @*/
		/*@if (@_jscript_version<=9)

		d.write('<script type="text/javascript" src="/a/2010/plugins/fix_ie/ie6789.js"></script>');

		@end @*/

	})();

