//ąćęłńóśżź
/**********************************************************
 * 
 * categ v0.01 Copyright (c) 2008 ruler.pl
 * Contact us at the@ruler.pl
 * This copyright notice MUST stay intact for use.
 * 
 * Obiekt Rdzenia Systemu
 * 
 **********************************************************/

var CORE={

	isMSIE:navigator.appName=="Microsoft Internet Explorer"?true:false,//wykrycie przeglądarki IE
	isFF:!document.all && document.getElementById && !this.isOpera,//wykrycie przeglądarki FF
	isOpera:navigator.appName=="Opera"?true:false,//wykrycie przeglądarki Opera

	//funkcja zewnętrzna - anulowanie eventu dla elementów propagowanych
	cancelEvent:function(e) {
		if(!e) return false;
		if(this.isMSIE) {
			e.returnValue=false;
			e.cancelBubble=true;
		}
		else{
			e.preventDefault();
			e.stopPropagation && e.stopPropagation();
		}
		return false;	
	},

	//funkcja zewnętrzna - dodanie nowego eventListenera
	addEvent:function(obj,ev,fu) {//obj - objekt (cel), ev - zdarzenie (bez on! np. zamiast onclick - click), fu - funkcja obsługująca dany eventListaner
		if(obj.attachEvent) obj.attachEvent("on"+ev,fu);
		else obj.addEventListener(ev,fu,false);
	},
	
	//funkcja zewnętrzna - usunięcie istniejącego eventListenera
	removeEvent:function(obj,ev,fu) {//obj - objekt (cel), ev - zdarzenie (bez on! np. zamiast onclick - click), fu - funkcja obsługująca dany eventListaner
		if (obj.attachEvent) obj.detachEvent("on"+ev,fu);
		else obj.removeEventListener(ev,fu,false);
	},

	//funkcja zewnętrzna - implementacja SHA1
	test:function(msg) {
		var marginTop=1*document.getElementById("iHead01").style.marginTop.replace(/([px])/gi,"","gi");
		var size=this.getSizeXY();
		var scrl=this.getScrlXY();
		alert(scrl);
	},

	getSizeXY:function() {
		var sizeX=0,sizeY=0;

		if(typeof(window.innerWidth)=='number'){
			sizeX=window.innerWidth;
			sizeY=window.innerHeight;
		}
		else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)){
			sizeX=document.documentElement.clientWidth;
			sizeY=document.documentElement.clientHeight;
		}
		else if(document.body && (document.body.clientWidth || document.body.clientHeight)){
			sizeX=document.body.clientWidth;
			sizeY=document.body.clientHeight;
		}
		return [sizeX,sizeY];
	},

	getScrlXY:function() {
		var scrOfX=0, scrOfY=0;

		if(typeof(window.pageYOffset)=='number'){
			scrOfY=window.pageYOffset;
			scrOfX=window.pageXOffset;
		}
		else if(document.body && (document.body.scrollLeft || document.body.scrollTop)){
			scrOfY=document.body.scrollTop;
			scrOfX=document.body.scrollLeft;
		}
		else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)){
			scrOfY=document.documentElement.scrollTop;
			scrOfX=document.documentElement.scrollLeft;
		}
		return [scrOfX,scrOfY];
	},

	//funkcja zewnętrzna - zwraca szerokość elementu (chyba ma problemy z padding)
	getWidth:function(elem) {
		function _Convert(val) {
			if(!val) return;
			val=val.replace("px","");
			if(isNaN(val)) return 0;
			return parseInt(val);
		}
		var currentStyle;
		if(typeof(elem)=='string') elem=document.getElementById(elem);
		if(elem.currentStyle) currentStyle=elem.currentStyle;
		else if(window.getComputedStyle) currentStyle=document.defaultView.getComputedStyle(elem,null);
		else currentStyle=elem.style;
		return (elem.offsetWidth-_Convert(currentStyle.marginLeft)-_Convert(currentStyle.marginRight)-_Convert(currentStyle.borderLeftWidth)-_Convert(currentStyle.borderRightWidth));
	},
 
	//funkcja zewnętrzna - zwraca wysokość elementu (chyba ma problemy z padding)
	getHeight:function(elem) {
		function _Convert(val) {
			if(!val) return;
			val=val.replace("px","");
			if(isNaN(val)) return 0;
			return parseInt(val);
		}
		var currentStyle;
		if(typeof(elem)=='string') elem=document.getElementById(elem);
		if(elem.currentStyle) currentStyle=elem.currentStyle;
		else if(window.getComputedStyle) currentStyle=document.defaultView.getComputedStyle(elem,null);
		else currentStyle=elem.style;
		return (elem.offsetHeight-_Convert(currentStyle.marginTop)-_Convert(currentStyle.marginBottom)-_Convert(currentStyle.borderTopWidth)-_Convert(currentStyle.borderBottomWidth));	
	},

	entityDecode:function(str) {
		var element=document.createElement("textarea");

		element.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");

		return element.value;
	},

	selectBlocking:function(elem) {
		var d=document;

		if(typeof(elem)=='string' && d.getElementById(elem)) elem=d.getElementById(elem);
		if(typeof(elem.onselectstart)!='undefined') elem.onselectstart=function(){return false;}
		else if(typeof(elem.style.MozUserSelect)!='undefined') elem.style.MozUserSelect='none';
		else elem.onmousedown=function(){return false;}
		//elem.style.cursor='default';

	},

	//funkcja zewnętrzna - implementacja SHA1
	sha1:function(msg) {

		function rotate_left(n,s) {
			var t4=(n<<s) | (n>>>(32-s));
			return t4;
		};

		function lsb_hex(val) {
			var str="";
			var i;
			var vh;
			var vl;

			for(i=0;i<=6;i+=2) {
				vh=(val>>>(i*4+4))&0x0f;
				vl=(val>>>(i*4))&0x0f;
				str+=vh.toString(16)+vl.toString(16);
			}
			return str;
		};

		function cvt_hex(val) {
			var str="";
			var i;
			var v;

			for(i=7;i>=0;i--) {
				v=(val>>>(i*4))&0x0f;
				str+=v.toString(16);
			}
			return str;
		};


		function Utf8Encode(string) {
			string=string.replace(/\r\n/g,"\n");
			var utftext="";

			for (var n=0;n<string.length;n++) {
				var c=string.charCodeAt(n);
				if(c < 128) {
					utftext+=String.fromCharCode(c);
				}
				else if((c>127) && (c<2048)) {
					utftext+=String.fromCharCode((c >> 6) | 192);
					utftext+=String.fromCharCode((c & 63) | 128);
				}
				else {
					utftext += String.fromCharCode((c >> 12) | 224);
					utftext += String.fromCharCode(((c >> 6) & 63) | 128);
					utftext += String.fromCharCode((c & 63) | 128);
				}
			}
			return utftext;
		};

		var blockstart;
		var i,j;
		var W=new Array(80);
		var H0=0x67452301;
		var H1=0xEFCDAB89;
		var H2=0x98BADCFE;
		var H3=0x10325476;
		var H4=0xC3D2E1F0;
		var A,B,C,D,E;
		var temp;

		msg=Utf8Encode(msg);

		var msg_len=msg.length;

		var word_array=new Array();
		for(i=0;i<msg_len-3;i+=4) {
			j=msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
			msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
			word_array.push(j);
		}

		switch(msg_len % 4) {
			case 0:
				i=0x080000000;
			break;
			case 1:
				i=msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
			break;
			case 2:
				i=msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
			break;
			case 3:
				i=msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8    | 0x80;
			break;
		}

		word_array.push(i);

		while((word_array.length % 16)!=14) word_array.push(0);

		word_array.push(msg_len>>>29);
		word_array.push((msg_len<<3)&0x0ffffffff);

		for(blockstart=0;blockstart<word_array.length;blockstart+=16) {
			for(i=0;i<16;i++) W[i]=word_array[blockstart+i];
			for(i=16;i<=79;i++) W[i]=rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16],1);
			A=H0;
			B=H1;
			C=H2;
			D=H3;
			E=H4;
			for(i=0;i<=19;i++) {
				temp=(rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
				E=D;
				D=C;
				C=rotate_left(B,30);
				B=A;
				A=temp;
			}
			for(i=20;i<=39;i++) {
				temp=(rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
				E=D;
				D=C;
				C=rotate_left(B,30);
				B=A;
				A=temp;
			}
			for(i=40;i<=59;i++) {
				temp=(rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
				E=D;
				D=C;
				C=rotate_left(B,30);
				B=A;
				A=temp;
			}
			for(i=60;i<=79;i++) {
				temp=(rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
				E=D;
				D=C;
				C=rotate_left(B,30);
				B=A;
				A=temp;
			}
			H0=(H0 + A) & 0x0ffffffff;
			H1=(H1 + B) & 0x0ffffffff;
			H2=(H2 + C) & 0x0ffffffff;
			H3=(H3 + D) & 0x0ffffffff;
			H4=(H4 + E) & 0x0ffffffff;
		}
		var temp=cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

		return temp.toLowerCase();
	},

	getParam:function(param) {
		var query=window.location.search.substring(1);
		var parms=query.split('&');
		for(var i=0;i<parms.length;i++){
			var pos=parms[i].indexOf('=');
			if(pos>0){
				var key=parms[i].substring(0,pos).toLowerCase();
				var val=parms[i].substring(pos+1);
				if(key==param.toLowerCase()) 
				return val;
			}
		}
		return null;
	},

	getUrls:function() {
		var wl=window.location;
		var sHost=wl.host;
		var sHash=wl.hash;
		var sProt=wl.protocol+'//';
		var sPath=wl.pathname.toString().substring(0,wl.pathname.toString().lastIndexOf("/")+1);
		var sFile=wl.pathname.toString().substring(wl.pathname.toString().lastIndexOf("/")+1);
		var oTemp=wl.search.substring(1).split('&');
		var oVars=new Object();

		if(oTemp.length>0) for(var i=0;i<oTemp.length;i++) oVars[oTemp[i].toString().substring(0,oTemp[i].toString().indexOf("="))]=oTemp[i].toString().substring(oTemp[i].toString().indexOf("=")+1);
		oTemp={sProt:sProt,sHost:sHost,sPath:sPath,sFile:sFile,oVars:oVars,sHash:sHash};

		return oTemp;
	}
}


