/*
		UWAGA wszystkie obiekty, tablice i funkcje są kopiowane przez referencje - ZAWSZE!!!
*/


var is = new checkBrowser();

var obj_frame = null;
var obj_frame_content = null;
var frame_content = '';
//var visible = null;
var batimeout = null;//background animation
var fatimeout = null;//frame animation
var smtimeout = null;//system message animation

var ptimeout = null;//preview


//var obj_checkbox = null;

var destination;
var destination2;

var dirs = {
	search: new Array(),
	replace: new Array()
};

var lang = [];
var path = [];



if(is.ie){
	try{
		document.execCommand('BackgroundImageCache', false, true);
	} catch(e){}	
}



/*
 * Based on:
 * AdvancedAJAX 1.1.2
 * (c) 2005-2006 Lukasz Lach
 *  mail: anakin@php5.pl
 *  www:  http://advajax.anakin.us/
 *        http://anakin.us/
 * http://creativecommons.org/licenses/LGPL/2.1/
 *
 */

function RequestHandler(){
	var self = this;

	//var request = null;
	this.request = null;

	this.method = '';
	this.url = '';
	this.query = '';
	this.async = true;//przy false nie dziala
	this.username = null;
	this.password = null;
	this.headers = new Object();
	this.params = new Object();
	this.form = null;
	
	this.unique = true;
	this.uniqueParam = 'anticache';
	
	var progress = 0;
	this.timeout = 0;
	var aborted = false;
	var retry = 0;
	this.retryDelay = 0;
	this.retryLimit = 0;
	
	this.responseXML = null;
	this.responseText = null;
	this.status = null;
	this.statusText = null;
	this.responseHeaders = null;

	/*this.onTimeout = null;
	this.onRetry = null;
	this.onLoading = null;
	this.onLoaded = null;
	this.onInteractive = null;
	this.onComplete = null;
	this.onSuccess = null;
	this.onError = null;*/
	var events = {
		user: {
			onTimeout: null,
			onRetryDelay: null,
			onRetry: null,
			onLoading: null,
			onLoaded: null,
			onInteractive: null,
			onComplete: null,
			onSuccess: null,
			onError: null		
		},
		
		onTimeout: function(){
			if(self == null || self.request == null || progress == 4) return;
			aborted = true;
			self.request.abort();
			runEvent('Timeout', self);
			if(self.retry < self.retryLimit){
				/*self.*/init();
				if(self.retryDelay > 0){
					runEvent('RetryDelay', self);
					setTimeout(this.onRetry, self.retryDelay);
				} else{
					this.onRetry();
				}
			} else{
				delete self.request.onreadystatechange;
				self.request = null;
				runEvent('Error', self);
			}		
		},
		
		onRetry: function(){
			self.retry++;
			runEvent('Retry', self);
			self.start();
		},
		
		onLoading: function(){
			if(progress >= 1) return;
			progress = 1;

			/*self.*/runEvent('Loading', self);
		},
		
		onLoaded: function(){
			if(progress >= 2) return;
			progress = 2;
		
			/*self.*/runEvent('Loaded', self);
		},
		
		onInteractive: function(){
			if(progress >= 3) return;
			progress = 3;

			/*self.*/runEvent('Interactive', self);
		},
		
		onComplete: function(){
			if(progress == 4 || aborted) return;
			progress = 4;
			with(self.request){
				self.responseXML = responseXML;
				self.responseText = responseText;
				if(typeof(status) != 'undefined') self.status = status;
				if(typeof(statusText) != 'undefined') self.statusText = statusText;
				self.responseHeaders = getAllResponseHeaders();
			}
			delete self.request.onreadystatechange;
			self.request = null;
			if(self.status == 200) /*self.*/runEvent('Success', self);
			else /*self.*/runEvent('Error', self);
		
		}
	}
	
	/*this.*/var runEvent = function(name, args){
		if(typeof(events.user['on' + name]) == 'function') events.user['on' + name](args);
	}
	
	this.config = function(args){
		if(this.form){
			with(this.form){
				this.method = getAttribute('method').toUpperCase();
				this.url = getAttribute('action');
				for(var i = 0; i < elements.length; i++){
					var el = elements[i];
					if(el.disabled) continue;//tego nie bylo
					//alert(el.type + ' ' + typeof(el));
					switch(el.type){
						case 'text':
						case 'password':
						case 'hidden':
						case 'textarea':
						//case 'file':
							//alert(el.name + ' ' + el.value);
							addParam(el.name, el.value);
							break;
						case 'radio':
						case 'checkbox':
							if(el.checked) addParam(el.name, el.value);
							break;
						case 'select-one':
							if(el.selectedIndex >= 0) addParam(el.name, el.options[el.selectedIndex].value);
							break;
						case 'select-multiple':
							for(var j = 0; j < el.options.length; j++){
								if(el.options[j].selected) addParam(el.name, el.options[j].value);
							}
							break;
					}
				}	
			}		
		}

		for(var name in args){
//			alert(typeof(this[name]));
			if(name.indexOf('on') == 0 && typeof(events.user[name]) != 'undefined'){
				events.user[name] = args[name];
			} else if(typeof(this[name]) != 'undefined'){
				if(name == 'params'){
					for(var name2 in args[name]){
						addParam(name2, args[name][name2]);
					}
				} else{
					this[name] = args[name];
				}
			} else{
				alert('Bad argument: ' + name);
//				addParam(name, args[name]);
			}		
		}
	}
	
	var addParam = function(name, value){
//		alert(self.params[name] + ' ' + typeof(self.params[name]));
		if(typeof(self.params[name]) == 'undefined'){//nowy
			self.params[name] = value;
		} else if(typeof(self.params[name]) != 'object'){//stworzony jak powyzszy
			self.params[name] = [self.params[name], value];
		} else{//ju¿ array
			self.params[name][self.params[name].length] = value;
		}
	}
	
	var deleteParam = function(name){
		if(typeof(self.params[name]) != 'undefined')	delete self.params[name];
	}
	
	/*this.*/var init = function(){
		/*this.*/self.request = /*request = */(typeof(XMLHttpRequest) != 'undefined') ? new XMLHttpRequest() : new ActiveXObject('Msxml2.XMLHTTP'/* + '.3.0'*/);
//		alert(typeof(this.request));
		if(/*this.*/self.request == null) return false;

		progress = 0;
		
		/*this.*/self.request.onreadystatechange = function(){
			//alert(self.request);
			if(self == null || self.request == null) return;
			//if(self.request.readyState == 4) events.onComplete();// /*alert(request.responseText)*/events.onSuccess();
			switch(self.request.readyState){
				case 1: events.onLoading(); break;
				case 2: events.onLoaded(); break;
				case 3: events.onInteractive(); break;
				case 4: events.onComplete(); break;
			}
			
		}		
		
	}
	
	this.start = function(){//to do poszerzenia (uwzglednic uniqeid)
		if(this.request == undefined) /*this.*/init();
		aborted = false;
//		alert(typeof(this.request));

		if(this.method == 'GET' && this.unique) this.params[this.uniqueParam] = new Date().getTime().toString(16) + Math.floor(Math.random() * 983039 + 65536).toString(16);

		if(retry == 0){
			for(var name in this.params){
				if(typeof(this.params[name]) != 'object'){
					this.query += (this.query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(this.params[name]);
				} else{
					for(var i = 0; i < this.params[name].length; i++){
						this.query += (this.query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(this.params[name][i]);
					}
					/*for(var name2 in this.params[name]){
						this.query += (this.query ? '&' : '') + encodeURIComponent(name + '[' + name2 + ']') + '=' + encodeURIComponent(this.params[name][name2]);
					}*/
				}			
				//alert(this.query);
			}
			
			
			
			if(this.method == 'GET' && this.query){
				this.url += ((this.url.indexOf('?') != -1) ? '&' : '?') + this.query;
//				alert(this.url);
			}		
		}
		
		//można try catch dac
//		alert(this.method + ', ' + this.url + ', ' + this.query);
		this.request.open(this.method, this.url, this.async, this.username, this.password);

		if(this.timeout > 0) setTimeout(events.onTimeout, this.timeout);
		
		if(typeof(this.request.setRequestHeader) != 'undefined'){
			for(var name in this.headers){
				this.request.setRequestHeader(encodeURIComponent(name), encodeURIComponenet(this.headers[name]));
			}
		}
		
		if(this.method == 'POST' && typeof(this.request.setRequestHeader) != 'undefined'){
			this.request.setRequestHeader('Content-type', "application/x-www-form-urlencoded");
			this.request.send(this.query);
		} else if(this.method == 'GET'){
			this.request.send(null);
		}
	}
}
//var request = new RequestHandler();
var ajax = {
	handler: null,
	
	get: function(args){
		this.handleRequest('GET', args);
	},
	
	post: function(args){
		this.handleRequest('POST', args);
	},

	head: function(args){
		this.handleRequest('HEAD', args);
	},
	
	submit: function(form, args){
		if(typeof(form) != 'object' || form == null) return;
		if(typeof(args) == 'undefined' || args == null) return;
		
		this.handler = new RequestHandler();
		this.handler.form = form;
		this.handler.config(args);
//		alert(typeof(ajax.handler.onSuccess));
		this.handler.start();	
	},
	
	handleRequest: function(requestType, args){
		if(typeof(args) == 'undefined' || args == null) return;

		this.handler = new RequestHandler();
		this.handler.method = requestType;
		this.handler.config(args);
//		alert(typeof(ajax.handler.onSuccess));
		this.handler.start();	
	}
}
/*function ajax(){
	var handler = null;

	this.get = function(args){
		this.handleRequest('GET', args);
	}
	
	this.post = function(args){
		this.handleRequest('POST', args);
	}

	this.head = function(args){
		this.handleRequest('HEAD', args);
	}
	
	this.handleRequest = function(requestType, args){
		handler = new RequestHandler();
		handler.method = requestType;
		handler.init(args);
//		alert(typeof(ajax.handler.onSuccess));
		handler.start();	
	}
}
var ajax = new ajax();*/
/*ajax.get({
	url: '/jstest/obiekty.html', 
	onSuccess: function(obj){
		alert(obj.responseText);
//		alert(handler);
//		alert(ajax.handler.request.status);
//		alert(ajax.handler.request.responseText);
 	}
});*/
//alert(typeof(ajax.handler.onSuccess));

/*
 * end of based on
 */




function getObject(id){
//	if(document.all) return document.all[id];
	return document.getElementById(id);
}

function removeAllChildren(obj){
	while(obj.firstChild){
		obj.removeChild(obj.firstChild);
	}
}


function getLeft(obj){//ciekawe sprawy z border
	var left = 0;
	while(obj){
		left += obj.offsetLeft;
//		alert(obj.tagName + ' ' + left);
		if(is.ie && obj.border != undefined && obj.border != 0) /*alert(obj.border);*/left += parseInt(obj.border);
		if((is.ie || obj.style.position == 'relative') && obj.style.borderLeftWidth != undefined && obj.style.borderLeftWidth != 0) /*alert(obj.style.border);*/left += parseInt(obj.style.borderLeftWidth);
//		if(obj.id == 'menu') break;
		obj = obj.offsetParent;
	}
	return left;
}

function getTop(obj){//ciekawe sprawy z border
	var top = 0;
	while(obj){
		top += obj.offsetTop;
//		alert(obj.tagName + ' ' + top);
		if(is.ie && obj.border != undefined && obj.border != 0) /*alert(obj.border);*/top += parseInt(obj.border);
		if((is.ie || obj.style.position == 'relative') && obj.style.borderTopWidth != undefined && obj.style.borderTopWidth != 0) /*alert(obj.style.border);*/top += parseInt(obj.style.borderTopWidth);
//		if(obj.id == 'menu') break;
		obj = obj.offsetParent;
	}
	return top;
}


function checkBrowser(){
//proste na razie, a jak by by3o problemy z innymi przegladarkami to zmienie
	var agent = navigator.userAgent.toLowerCase();
	this.agent = agent;
	var version = navigator.appVersion.toLowerCase();
	this.version = version;

	this.ie = ((agent.indexOf('msie') != -1) && (agent.indexOf('opera') == -1));
	this.ie6 = (this.ie && version.indexOf('msie 6') != -1);
	this.ie7 = (this.ie && version.indexOf('msie 7') != -1);
	this.nav = ((agent.indexOf('mozilla') != -1) && (agent.indexOf('spoofer') == -1) && (agent.indexOf('compatible') == -1) && (agent.indexOf('opera') == -1) && (agent.indexOf('webtv') == -1) && (agent.indexOf('hotjava') == -1));
	this.opera = (agent.indexOf('opera') != -1);
	this.firefox = (agent.indexOf('firefox') != -1);
}


function openWindow(url, title, width, height, mode){
	if(mode == undefined) mode = '';
	if(mode == 'full'){
		mode = '';
	} else if(mode == '' || mode == 0 || mode == 'scroll' || mode == 'scrollresize'){
		if(width == 0 || width == ''){
			width = 400;
		}
		if(height == 0 || height == ''){
			height = 250;
		}
		if(mode == 'scroll'){
			mode = 'top=100,left=200,width=' + width + ',height=' + height + ',resizable=no,scrollbars=yes,menubar=0,toolbar=0,location=0,directories=0,status=0';
		} else if(mode == 'scrollresize'){
			mode = 'top=100,left=200,width=' + width + ',height=' + height + ',resizable=yes,scrollbars=yes,menubar=0,toolbar=0,location=0,directories=0,status=0';
		} else{
			mode = 'top=100,left=200,width=' + width + ',height=' + height + ',resizable=no,scrollbars=no,menubar=0,toolbar=0,location=0,directories=0,status=0';//nie mog by䟳pacje pomiedzy bo inaczej si蟰suje w operze (ogolnie spacje s.a. niedozwolone)
		}
	}

	var temp = window.open(url, title, mode);
	temp.focus();
	return temp;
}


function setCookie(name, value, expires){
	document.cookie = name + '=' + escape(value) + ((expires != undefined && typeof(expires) == 'object') ? ';expires=' + expires.toGMTString() : '');
}

function getCookie(name){
	if(document.cookie.length > 0){
		results = document.cookie.match(new RegExp('(^| |\n|\r)' + name + '=(.+?)(;|$)'));
		if(results == null) return null;
		else return unescape(results[2]);
	}	
	return null;
}

function deleteCookie(name){
	if(getCookie(name) != null){
		var now = new Date();
		now.setDate(now.getDate() - 365);
		document.cookie = name + '=;expires=' + now.toGMTString();
	}
}


function highlightItem(id, state){
	if(state){
		getObject(id).className = 'item_selected';
	} else{
		getObject(id).className = 'item';
	}	
}

function checkItems(name){
	var items = document.getElementsByName(name + '[]');
	for(var i = 0; i < items.length; i++){
		/*if(items[i].checked) */items[i].onclick();
	}
}


function invertAll(obj, name, lines){
//	if(!obj_checkbox) obj_checkbox = obj;
	var newvalue = obj.checked ? 'checked' : '';
	var items = document.getElementsByName(name + '[]');
	for(var i = 0; i < items.length; i++){
		items[i].checked = newvalue;
		if(lines != undefined && lines) invertLine(items[i]);
	}
}

function invertLine(obj, normal, highlighted){
	if(obj.checked == true){
		obj.parentNode.parentNode.className = ((highlighted != undefined) ? highlighted : 'bg_highlight');
	} else{
		obj.parentNode.parentNode.className = ((normal != undefined) ? normal : '');
	}
}


function selectAll(name){
	var items = document.getElementsByName(name + '[]');
	for(var i = 0; i < items.length; i++){
		items[i].checked = 'checked';
		if(typeof(items[i].onclick) == 'function') items[i].onclick();
	}
}

function selectNone(name){
	var items = document.getElementsByName(name + '[]');
	for(var i = 0; i < items.length; i++){
		items[i].checked = '';
		if(typeof(items[i].onclick) == 'function') items[i].onclick();
	}
}

function invertSelection(name){
	var items = document.getElementsByName(name + '[]');
	for(var i = 0; i < items.length; i++){
		items[i].checked = (!items[i].checked ? 'checked' : '');
		if(typeof(items[i].onclick) == 'function') items[i].onclick();
	}
}


function checkSelected(name){
	var items = document.getElementsByName(name + '[]');
	for(var i = 0; i < items.length; i++){
		if(items[i].checked == true) return true;
	}
	
	return false;
}


function initPages(){
	var gotopage = document.getElementsByName('gotopage');
	alert(gotopage.length);
	for(var i = 0; i < gotopage.length; i++){
		if(typeof(gotopage[i].onkeyp) == 'undefined') gotopage[i].onkeyup = function(e){handleKeyPress(e, this);};
	}
}

function handleKeyPress(e, funcs, args){
	if(!e) var e = window.event || window.Event;
	var keycode;
	if(typeof(e.keyCode) != 'undefined') keycode = e.keyCode;
//	else if(typeof(e.which) != 'undefined') keycode = e.which;
	else if(typeof(e.charCode) != 'undefined') keycode = e.charCode;
	else return;
//	alert(keycode);

	/*switch(keycode){
		case 13:
			//if(typeof(handleReturn) == 'function') handleReturn(obj);
			if(typeof(funcs[13]) == 'function') funcs[13](args);
			break;
		default:
			if(typeof(funcs['default']) == 'function') funcs['default'](args, keycode);
	}*/
	if(typeof(funcs[keycode]) == 'function') funcs[keycode](args);
	else if(typeof(funcs['default']) == 'function') funcs['default'](args, keycode);
}


function prepareBackground(){
	//var html = document.getElementsByTagName('html')[0];
	var body = document.getElementsByTagName('body')[0];
	if(getObject('bg')) var div = getObject('bg');//¿eby opera dzialala
	else var div = document.createElement('div');
	div.style.top = '0px';
	div.style.left = '0px';
	div.style.backgroundColor = '#000000';
	div.style.zIndex = 99;
	div.id = 'bg';
	//div.setAttribute('style', 'top: 0px; left: 0px; background-color: #000000; z-index: 1;');
	//div.setAttribute('id', 'background');
//	var test = getObject('test');
	if(!is.ie){
		div.style.position = 'fixed';
		div.style.MozOpacity = 0;
		div.style.width = '100%';
		div.style.height = '100%';
	} else{
		div.style.position = 'absolute';
		div.style.filter = 'alpha(opacity=0)';
		div.style.width = ((document.body.clientWidth > document.body.scrollWidth) ? document.body.clientWidth : document.body.scrollWidth);
		div.style.height = ((document.body.clientHeight > document.body.scrollHeight) ? document.body.clientHeight : document.body.scrollHeight);
		var initialheight, initialwidth;//potrzebne dla resize w ie
//		var initialwidth = document.body.clientWidth;
		var initialheight = document.body.scrollHeight;
		
		var selects = document.getElementsByTagName('select');
		for(var i = 0; i < selects.length; i++) selects[i].style.visibility = 'hidden';
	}
	if(getObject('bg')) div.style.display = 'block';//¿eby opera dzialala
	else body.appendChild(div);
	

	//html.style.height = body.style.height = '100%';
	//html.style.overflow = body.style.overflow = 'hidden';
	//var td = document.getElementsByTagName('td')[0];
	//alert(td.parentNode.parentNode.parentNode.parentNode);
	//td.style.height = '100%';
	//td.style.width = '50px';
	//td.style.overflow = 'auto';
	//td.style.position = 'relative';
	//td.style.zIndex = '2';
	//body.lastChild.style.width = '50px';
	//body.lastChild.style.height = '100%';
	//body.lastChild.style.overflow = 'auto';
	//body.lastChild.style.position = 'relative';
	//body.lastChild.style.zIndex = '2';
	//var body = getElementsByTagName
	
	//resizes[resizes.length] = fix;
	//scrolls[scrolls.length] = fix;
	handleResize.addItem('bg', fix);
	handleScroll.addItem('bg', fix);
	
	//window.onscroll = fixscroll;
	
	function fix(){
		if(is.ie){//do zrobienia jeszcze
//			div.style.pixelWidth = '1px';
//			div.style.pixelHeight = '1px';

			//alert(document.body.offsetHeight);
			//alert(document.body.clientHeight + ' ' + document.body.scrollHeight);
//			alert(initialheight + ', ' + document.body.clientHeight + ', ' + document.body.scrollHeight);
			if(initialheight == undefined || document.body.scrollHeight < initialheight) initialheight = document.body.scrollHeight;
			div.style.height = ((document.body.clientHeight > initialheight) ? document.body.clientHeight : initialheight) + 'px';
			
//			alert(initialwidth + ', ' + document.body.clientWidth + ', ' + document.body.scrollWidth);
//			div.style.width = document.body.clientWidth + 'px';
//			div.style.width = document.body.scrollWidth + 'px';
//			div.style.width = ((document.body.clientWidth > document.body.scrollWidth) ? document.body.scrollWidth : document.body.clientWidth);
			if(initialwidth == undefined || document.body.scrollWidth < initialwidth) initialwidth = document.body.scrollWidth;
			div.style.width = ((document.body.clientWidth > initialwidth) ? document.body.clientWidth : initialwidth) + 'px';
		}/* else{
			test.style.height = window.innerHeight + 'px';
			test.style.width = window.innerWidth + 'px';
		}*/
	}
	
	bAnimation(0);
}

function hideBackground(){
	if(batimeout) clearTimeout(batimeout);
	if(is.ie){
		var selects = document.getElementsByTagName('select');
		for(var i = 0; i < selects.length; i++) selects[i].style.visibility = '';
	}
	getObject('bg').style.display = 'none';
//	document.getElementsByTagName('body')[0].removeChild(getObject('background'));//opera jest do dupy
	handleResize.deleteItem('bg');
	handleScroll.deleteItem('bg');
	//window.onscroll = null;
	//scrolls = new Array();
}

function bAnimation(step/*, hspeed, vspeed, clipx, clipy*/){
	obj_bg = getObject('bg');
	if(step < 7/*15*//*clipx + hspeed < obj.offsetWidth || clipy + vspeed< obj.offsetHeight*/){
		//qwe.innerHTML += (obj.style.top.substring(0, obj.style.top.indexOf('px')) - vspeed / 2) + ' ' + (obj.style.left.substring(0, obj.style.left.indexOf('px')) - hspeed / 2) + '<br />';
		/*obj.style.top = (obj.style.top.substring(0, obj.style.top.indexOf('px')) - vspeed / 2) + 'px';
		obj.style.left = (obj.style.left.substring(0, obj.style.left.indexOf('px')) - hspeed / 2) + 'px';
		//qwe.innerHTML += clipy + ' ' + clipx + '<br />';
		clipy += vspeed;
		clipx += hspeed;
		obj.style.clip = "rect(auto, " + clipx + "px, " + clipy + "px, auto)";*/
		
		if(is.ie) obj_bg.style.filter = 'alpha(opacity=' + (step * 10/*5*/) + ')';
		else obj_bg.style.opacity = step * 0.1;//0.05 ;
		//else obj_frame.style.MozOpacity = step * 0.05 / 100;
		batimeout = setTimeout("bAnimation(" + (step + 1) + ");", 10);
	} else{
		/*clipy += vspeed;
		clipx += hspeed;
		obj.style.clip = "rect(auto, " + clipx + "px, " + clipy + "px, auto)";
		if(window.innerHeight){
	 		top = window.innerHeight / 2 - obj.offsetHeight / 2;
			left = window.innerWidth / 2 - obj.offsetWidth / 2;
	  	} else{
			top = document.body.clientHeight / 2 - obj.offsetHeight / 2;
			left = document.body.clientWidth / 2 - obj.offsetWidth / 2;
		}
		obj.style.top = top + 'px';
		obj.style.left = left + 'px';*/
		
		if(is.ie) obj_bg.style.filter = 'alpha(opacity=75)';
		else obj_bg.style.opacity = 0.75;
//		else obj_frame.style.MozOpacity = 1;
		clearTimeout(batimeout);
		batimeout = null;
	}
}


function showFrame(id, id2, func, value, position, skipbg){
	obj_frame = getObject(id);
	if(obj_frame.style.display == 'block') return;

	if(id2 != null && id2 != '') obj_frame_content = getObject(id2);
	//obj_frame_content.innerHTML = frame_template(value);
	if(typeof(func) == 'function') obj_frame_content.innerHTML = func(value);
	/*var hspeed = Math.ceil(obj_frame.offsetWidth / 20);
	var vspeed = Math.ceil(obj_frame.offsetHeight / 20);*/
	
	obj_frame.style.position = 'absolute';
	if(is.ie){
		if(is.ie7) obj_frame.style.position = 'fixed';
		obj_frame.style.filter = 'alpha(opacity=0)';
	} else{
		obj_frame.style.position = 'fixed';
		obj_frame.style.opacity = 0;
	}
	obj_frame.style.zIndex = 100;
	obj_frame.style.display = 'block';

//	resizes[resizes.length] = fix;
//	scrolls[scrolls.length] = fix;
	handleResize.addItem('frame', fix);
	handleScroll.addItem('frame', fix);
	
	function fix(){
	//	alert(obj_frame.offsetHeight);
		var top = /*15*/0;
		var left = 0;
		if(window.innerHeight){
//			alert(window.innerHeight + ' ' + window.pageYOffset + ' ' + obj_frame.offsetHeight);
			//top = window.innerHeight / 2 - obj_frame.offsetHeight / 2;
			if(position != undefined && position == 'center'){
				//srodek strony uwzgledniajac scroll
				top = /*window.pageYOffset + */window.innerHeight / 2 - obj_frame.offsetHeight / 2;//bo zmienilem na position fixed
			} else{
				//gora na 1/4 wysokosci
				//top = /*window.pageYOffset + */window.innerHeight / 4;//bo zmienilem na position fixed
				//odstep gorny 1/3 wysokosci okna bez frame
				top = /*window.pageYOffset + */(window.innerHeight - obj_frame.offsetHeight) / 3;//bo zmienilem na position fixed
			}
//			alert(top);
			//left = window.innerWidth / 2 - obj_frame.offsetWidth / 2;
			left = /*window.pageXOffset + */window.innerWidth / 2 - obj_frame.offsetWidth / 2;//bo zmienilem na position fixed
		} else if(is.ie7 && document.documentElement){
//			alert(document.documentElement.clientHeight + ' ' + document.documentElement.scrollTop + ' ' + obj_frame.offsetHeight);
			//top = document.body.clientHeight / 2 - obj_frame.offsetHeight / 2;//bo zmienilem na position fixed
			if(position != undefined && position == 'center'){
				//srodek strony uwzgledniajac scroll
				top = /*document.documentElement.scrollTop + */document.documentElement.clientHeight / 2 - obj_frame.offsetHeight / 2;//bo zmienilem na position fixed
			} else{
				//gora na 1/4 wysokosci
				//top = /*document.body.scrollTop + */document.body.clientHeight / 4;//bo zmienilem na position fixed
				//odstep gorny 1/3 wysokosci okna bez frame
				top = /*document.documentElement.scrollTop + */(document.documentElement.clientHeight - obj_frame.offsetHeight) / 3;//bo zmienilem na position fixed
			}
//			alert(top);
			//left = document.body.clientWidth / 2 - obj_frame.offsetWidth / 2;
			left = /*document.documentElement.scrollLeft + */document.documentElement.clientWidth / 2 - obj_frame.offsetWidth / 2;//bo zmienilem na position fixed
		} else{
//			alert(document.body.clientHeight + ' ' + document.body.scrollTop + ' ' + obj_frame.offsetHeight);
			//top = document.body.clientHeight / 2 - obj_frame.offsetHeight / 2;
			if(position != undefined && position == 'center'){
				//srodek strony uwzgledniajac scroll
				top = document.body.scrollTop + document.body.clientHeight / 2 - obj_frame.offsetHeight / 2;
			} else{
				//gora na 1/4 wysokosci
				//top = document.body.scrollTop + document.body.clientHeight / 4;
				//odstep gorny 1/3 wysokosci okna bez frame
				top = document.body.scrollTop + (document.body.clientHeight - obj_frame.offsetHeight) / 3;
			}
//			alert(top);
			//left = document.body.clientWidth / 2 - obj_frame.offsetWidth / 2;
			left = document.body.scrollLeft + document.body.clientWidth / 2 - obj_frame.offsetWidth / 2;
		}
		obj_frame.style.top = top + 'px';
		obj_frame.style.left = left + 'px';
	}
	
	fix();
//	window.onresize = fixResize;
//	window.onscroll = fixScroll;
	if(skipbg == undefined || !skipbg) prepareBackground();
	fAnimation(id, 0);
}

function hideFrame(/*id*/skipbg){
	if(fatimeout) clearTimeout(fatimeout);
	obj_frame.style.display = 'none';
	if(getObject('bg') && (skipbg == undefined || !skipbg)) hideBackground();
	handleResize.deleteItem('frame');
	handleScroll.deleteItem('frame');
//	window.onresize = null;
//	window.onscroll = null;
//	resizes = new Array();
//	scrolls = new Array();
}

function fAnimation(id, step/*, hspeed, vspeed, clipx, clipy*/){
//	bAnimation(step);
	obj_frame = getObject(id);
	if(step < 10/*clipx + hspeed < obj.offsetWidth || clipy + vspeed< obj.offsetHeight*/){
		//qwe.innerHTML += (obj.style.top.substring(0, obj.style.top.indexOf('px')) - vspeed / 2) + ' ' + (obj.style.left.substring(0, obj.style.left.indexOf('px')) - hspeed / 2) + '<br />';
		/*obj.style.top = (obj.style.top.substring(0, obj.style.top.indexOf('px')) - vspeed / 2) + 'px';
		obj.style.left = (obj.style.left.substring(0, obj.style.left.indexOf('px')) - hspeed / 2) + 'px';
		//qwe.innerHTML += clipy + ' ' + clipx + '<br />';
		clipy += vspeed;
		clipx += hspeed;
		obj.style.clip = "rect(auto, " + clipx + "px, " + clipy + "px, auto)";*/
		
		if(is.ie) obj_frame.style.filter = 'alpha(opacity=' + (step * 10/*5*/) + ')';
		else obj_frame.style.opacity = step * 0.1;//0.05 ;
		//else obj_frame.style.MozOpacity = step * 0.05 / 100;
		fatimeout = setTimeout("fAnimation('" + id + "', " + (step + 1) + ");", 10);
	} else{
		/*clipy += vspeed;
		clipx += hspeed;
		obj.style.clip = "rect(auto, " + clipx + "px, " + clipy + "px, auto)";
		if(window.innerHeight){
	 		top = window.innerHeight / 2 - obj.offsetHeight / 2;
			left = window.innerWidth / 2 - obj.offsetWidth / 2;
	  	} else{
			top = document.body.clientHeight / 2 - obj.offsetHeight / 2;
			left = document.body.clientWidth / 2 - obj.offsetWidth / 2;
		}
		obj.style.top = top + 'px';
		obj.style.left = left + 'px';*/
		
		if(is.ie){
			obj_frame.style.filter = '';//'alpha(opacity=100)';//bo inaczej przy scrolowaniu wewnatrz ramki znikaly selecty

			var selects = obj_frame.getElementsByTagName('select');
			for(var i = 0; i < selects.length; i++) selects[i].style.visibility = '';
		}
		else obj_frame.style.opacity = 1;
//		else obj_frame.style.MozOpacity = 1;
		clearTimeout(fatimeout);
		fatimeout = null;
	}
}


function ResizeHandler(){
	var items = [];
	var length = 0;
	
	this.addItem = function(name, func){
		items[name] = func;
		length++;
//		alert(length)
		if(window.onresize == undefined) window.onresize = this.callItems;

	}
		
	this.deleteItem = function(name){
		//items[name] = null;
		delete items[name];
		length--;
		if(length == 0) window.onresize = null;
	}
	
	this.callItems = function(){
//		alert(length);
		for(name in items){
//			alert(this.items[name]);
			//alert(name + ' ' + items[name]);
			items[name]();
		}
	}
}
var handleResize = new ResizeHandler();

function ScrollHandler(){
	var items = [];
	var length = 0;
	
	this.addItem = function(name, func){
		items[name] = func;
		length++;
//		alert(length)
		if(window.onscroll == undefined) window.onscroll = this.callItems;
	}
		
	this.deleteItem = function(name){
		//items[name] = null;
		delete items[name];
		length--;
		if(length == 0) window.onscroll = null;
	}
	
	this.callItems = function(){
//		alert(length);
		for(name in items){
//			alert(this.items[name]);
			//alert(name + ' ' + items[name]);
			items[name]();
		}
	}
}
var handleScroll = new ScrollHandler();


function escapeToUTF16(str, short){
	var codes = ''
	for(var i = 0; i < str.length; ++i){
		var hex = str.charCodeAt(i).toString(16).toUpperCase();
		codes += ((short == undefined || !short) ? "\\u" : "") + "0000".substr(hex.length) + hex;
	}
	return codes;
}

function unescapeFromUTF16(codes, short, shift){
	if(shift == undefined || !shift){
		//alert(codes.replace(/(.{4})/g, '\\u$1'));
		if(short != undefined && short) codes = codes.replace(/(.{4})/g, '\\u$1');
		eval('var str = \'' + codes + '\';');
		return str;
	} else{
		var utf16_codes = [];
		var str = '';
		for(var i = 0; i < codes.length; i += 4){
			utf16_codes[utf16_codes.length] = codes.charAt(i) + codes.charAt(i + 1) + codes.charAt(i + 2) + codes.charAt(i + 3);
			str += String.fromCharCode(parseInt(utf16_codes[utf16_codes.length - 1], 16) + shift);
		}
		//alert(utf16_codes);
		
		
		/*for (var i = 0; i < utf16_codes.length; ++i) {
			
		}*/
		return str;
	}
}

function retranspose(codes2){
//	alert(codes2[0]);//nie dziala w ie
	codes3 = [];
	var j = 0;
	for(var i = 0; i < codes2.length; i += 8){
		if((codes2.length / 4) % 2 != 1 || i != codes2.length - 4){
			/*codes3[4 * j] = codes2[i + 4];
			codes3[4 * j + 1] = codes2[i + 1];
			codes3[4 * j + 2] = codes2[i + 6];
			codes3[4 * j + 3] = codes2[i + 3];
			codes3[codes2.length - (4 * j) - 4] = codes2[i];
			codes3[codes2.length - (4 * j) - 3] = codes2[i + 5];
			codes3[codes2.length - (4 * j) - 2] = codes2[i + 2];
			codes3[codes2.length - (4 * j) - 1] = codes2[i + 7];*/
			codes3[4 * j] = codes2.charAt(i + 4);
			codes3[4 * j + 1] = codes2.charAt(i + 1);
			codes3[4 * j + 2] = codes2.charAt(i + 6);
			codes3[4 * j + 3] = codes2.charAt(i + 3);
			codes3[codes2.length - (4 * j) - 4] = codes2.charAt(i);
			codes3[codes2.length - (4 * j) - 3] = codes2.charAt(i + 5);
			codes3[codes2.length - (4 * j) - 2] = codes2.charAt(i + 2);
			codes3[codes2.length - (4 * j) - 1] = codes2.charAt(i + 7);
		} else{
			/*codes3[4 * j] = codes2[i + 1];
			codes3[4 * j + 1] = codes2[i];
			codes3[4 * j + 2] = codes2[i + 3];
			codes3[4 * j + 3] = codes2[i + 2];*/
			codes3[4 * j] = codes2.charAt(i + 1);
			codes3[4 * j + 1] = codes2.charAt(i);
			codes3[4 * j + 2] = codes2.charAt(i + 3);
			codes3[4 * j + 3] = codes2.charAt(i + 2);
		}
		j++;
	}
	return codes3.join('');
}

function decode(str, transposed, shift){
	str.replace(/\'(.{1})/g, /$1/);
	str.replace(/\"(.{1})/g, /$1/);
	str.replace(/\\(.{1})/g, /$1/);
	//alert(str);
	//alert(str.length);
	
	codes2 = escapeToUTF16(str, true);
	//alert(codes3);
	//alert(codes3.length);
	
	codes = retranspose(codes2);
	if(transposed != undefined && transposed > 1){
		for(var j = 1; j < transposed; j++){
			codes = retranspose(codes);
			//alert(codes);
		}
	}

	return unescapeFromUTF16(codes, true, shift);
}

function convertUTF16CodesToString(utf16_codes) {
	var unescaped = '';
	for (var i = 0; i < utf16_codes.length; ++i) {
		unescaped += String.fromCharCode(utf16_codes[i]);
	}
	return unescaped;
}