//url - adres url strony
//func - funkcja do wykonania po odczytaniu
//method - true = POST | false = GET
//param - parametry z formularza

//wyslanie formularza
//  button.onclick = function ()
//   {
//    return sendForm(this,function () {
//       alert(this.httpRequest.responseText);
//     },true,'tmp/test.php');
//   }

FSite2._ajaxSendRequest = function ()
{
	if (this.sendIframe)
	{
		this.sendIframe.target = 'responseIframe' + this.iframeNumber;
		setTimeout('document.' + this.sendIframe.name + '.submit()', 10);
	}
	else
	{
		this.httpRequest.open(((this.method && (this.method!='get'))?'POST':'GET'), this.location.toString(), true);
		if (this.method=='get')
		{
			this.httpRequest.setRequestHeader("X-Requested-With", 'XMLHttpRequest');
			this.httpRequest.send(null);
		}
		else
		{
			if (this.param && (this.param.length > 0))
			{
				this.httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				this.httpRequest.setRequestHeader("Content-length", this.param.length);
			}
			this.httpRequest.setRequestHeader("X-Requested-With", 'XMLHttpRequest');
			this.httpRequest.send((this.param)?this.param:null);
		}
	}
}

FSite2.sendForm = function (form, func, method, action, stopsend)
{
	this.elementsToString = FSite2.elementsToString;
	this.getFormElements = FSite2.getFormElements;
	requestParam = this.elementsToString(this.getFormElements(form));
	if (this.sendIframe)
		this.sendIframe = form;
	requestMethod = (method)?((method=='get')?'get':'post'):((form.method)?form.method:'get');
	url = encodeURI((action)?action:((form.action)?decodeURI(form.action):document.location.toString()));
	return new FSite2.HTTPRequest(url, func, requestMethod, requestParam, (stopsend)?true:null, null, this.sendIframe);
}

FSite2.getFormElements = function (node)
{
	el = node.getElementsByTagName('*');
	els = [];
	for (i=0;i<el.length;i++)
	{
		if (((el[i].tagName == 'INPUT') && (el[i].disabled != true) && el[i].name) ||
			((el[i].tagName == 'SELECT') && (el[i].disabled != true) && el[i].name) ||
			((el[i].tagName == 'TEXTAREA') && (el[i].disabled != true) && el[i].name))
		{
			els.push(el[i]);
		}
	}
	return els;
}

FSite2.elementsToString = function (fields)
{
	str = '';
	for (i = 0; i < fields.length; i++)
	{
		if ((fields[i].type=='checkbox') || (fields[i].type=='radio'))
		{
			if (fields[i].checked)
				str += '&' + fields[i].name + '=' + encodeURIComponent(fields[i].value);
		}
		else if (fields[i].type=='file')
		{
			this.sendIframe = true;
		}
		else
			str += '&' + fields[i].name + '=' + encodeURIComponent(fields[i].value);
	}
	return str.substr(1, str.length - 1);
}

FSite2._iframeTransports = new Array();

FSite2._iframeReady = function (el)
{
	responseIframe = document.getElementById(el.sendIframe.target);
	var doc;
	if (responseIframe)
	{
		if (responseIframe.contentDocument)
			doc = responseIframe.contentDocument;
		else if (responseIframe.contentWindow)
			doc = responseIframe.contentWindow.document;
		else if(responseIframe.document)
			doc = responseIframe.document;
	}
	if (doc && (!doc.readyState || (doc.readyState == 'complete')) && (doc.body.innerHTML.length > 5))
	{
		if (!el.httpRequest.getResponseHeader('X-Form-Eval'))
		{
			el.httpRequest.responseText = doc.body.innerHTML;
			if (el.loaded)
				el.loaded();
		}
		setTimeout( function() { 
				
				responseIframe.parentNode.removeChild(responseIframe);
				delete responseIframe;
				delete el;
		
		 }, 500 );
	}
	

}

FSite2._iframeGetResponseHeader = function(headerName)
{
	responseIframe = document.getElementById(this.sendIframe.target);
	if (responseIframe)
	{
		var doc;
		if (responseIframe.contentDocument)
			doc = responseIframe.contentDocument;
		else if(responseIframe.contentWindow)
			doc = responseIframe.contentWindow.document;
		else if(responseIframe.document)
			doc = responseIframe.document;
		var i;
		var metas = doc.documentElement.getElementsByTagName('meta');
		for (i = 0; i < metas.length; i++)
		{
			if (metas[i].httpEquiv && (metas[i].httpEquiv == headerName))
				return metas[i].content;
		}
	}
	return null;
}

FSite2._ajaxReady = function (el)
{
	if (el.httpRequest.readyState == 4)
	{
		if ((el.httpRequest.status == 301) || (el.httpRequest.status == 302))
		{
			if (reply_url=el.httpRequest.getResponseHeader('Location'))
			{
				reply_url=el.httpRequest.getResponseHeader('Location');
				reply_loaded=el.loaded;
				if (el.method)
					reply_method=el.method;
				else
					reply_method=null;
				if (el.param)
					reply_param=el.param;
				else
					reply_param=null;
				if (el._level<3)
				{
					new FSite2.HTTPRequest(reply_url,reply_loaded,reply_method,reply_param,null,((el._level)?el._level:null));
				}
			}
		}
		else if (el.httpRequest.status == 200)
		{
			if (el.httpRequest.getResponseHeader('X-Form-Cookie'))
				el.setCookie();
			if (el.httpRequest.getResponseHeader('X-Form-Script'))
				el.executeScript();
			if (el.httpRequest.getResponseHeader('X-Form-Eval'))
				eval(el.httpRequest.responseText);
			else if (el.loaded)
				el.loaded();
		}
	}
}

FSite2.HTTPRequest = function (url, func, method, param, stopsend,level,sendIframe)
{
	this.ajaxSendRequest = FSite2._ajaxSendRequest;
	this.ajaxReady = FSite2._ajaxReady;
	this.iframeReady = FSite2._iframeReady;

	this.method=method;
	this.param=param;
	this.sendIframe=sendIframe;
	this.location = new FSite2.Location(url);

	//url = url.toString();
	//this.url_backup=url;
	
	if (level)
		this._level=level+1;
	else if (!isNaN(new Number(this._level)))
		this._level++;
	else
		this._level=1;
	
	var loadParam = 'load=' + ((Math.random() * 1000000000000000000).toString());
	if (this.method=='get')
	{
		loadParam = this.param + '&' + loadParam;
		this.param='';
	}
	
	if (this.location.search)
		this.location.search+='&'+loadParam;
	else
		this.location.search+='?'+loadParam;

	this.loaded=false;
	if (func) this.loaded = func;

	if (this.sendIframe)
	{
		this.httpRequest = {
			sendIframe: this.sendIframe,
			responseText: '',
			getResponseHeader: FSite2._iframeGetResponseHeader
		};
		var newSize = FSite2._iframeTransports.push(this);
		this.iframeNumber = (newSize - 1);
		var iframeName = 'responseIframe' + this.iframeNumber;
		var responseIframe;
		if (navigator.appName.indexOf("Microsoft") != -1)
			responseIframe = document.createElement('<iframe name="' + iframeName + '">');
		else
		{
			responseIframe = document.createElement('iframe');
			responseIframe.setAttribute('name', iframeName);
		}
		document.body.appendChild(responseIframe);
		responseIframe.id = iframeName;
		responseIframe.style.display = 'none';
		responseIframe.iframeReady = this.iframeReady;
		if (responseIframe.addEventListener) {
			responseIframe.addEventListener('load', FSite2._callRef(this.iframeReady, this), false);
		} else if (responseIframe.attachEvent) {
			responseIframe.attachEvent('onload', FSite2._callRef(this.iframeReady, this));
		}
	}
	else
	{
		if (window.XMLHttpRequest)
		{
			this.httpRequest = new XMLHttpRequest();
			if (this.httpRequest.overrideMimeType)
				this.httpRequest.overrideMimeType('text/xml');
		}
		else if (window.ActiveXObject)
		{
			try
			{
				this.httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				try
				{
					this.httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {}
			}
		}
		
		if (!this.httpRequest) return false;
		
		this.httpRequest.onreadystatechange = FSite2._callRef(this.ajaxReady,this);
	}

	if (!stopsend)
		this.ajaxSendRequest();
	return this;
}

FSite2.HTTPRequest.prototype.setCookie = function ()
{
	var header_cookie;
	if (header_cookie=this.httpRequest.getResponseHeader('Set-Cookie'))
		document.cookie=header_cookie;
}

FSite2.HTTPRequest.prototype.executeScript = function ()
{
	var scripts = this.httpRequest.responseXML.documentElement.getElementsByTagName('script');
	var scriptFile;
	for (var i=0;i<scripts.length;i++)
	{
		if (scriptFile=scripts[i].getAttribute('src'))
			FSite2.loadScript(scriptFile);
		else
			eval(scripts[i].firstChild.nodeValue);
	}
		
}

FSite2.anchorsTarget = new Object();

FSite2.getAjaxAnchorTarget = function(params, targetID)
{
	if (!FSite2.anchorsTarget[targetID])
		FSite2.anchorsTarget[targetID]=new FSite2.AjaxAnchor(params, targetID);
	return FSite2.anchorsTarget[targetID];
}

FSite2.extendAnchors = function(formElement, params)
{
	var i;
	var anchors = formElement.getElementsByTagName('a');
	
	var ajaxLayer = false;
	var ajaxAnchor;
	
	for (i = 0; i < anchors.length; i++)
	{
		if (FSite2.processHrefParams && params.hashAnchorClass && FSite2.hasElementClass(anchors[i], params.hashAnchorClass))
		{
			if (anchors[i].onclick)
				anchors[i]._onclick_hash = anchors[i].onclick;
			anchors[i].onclick = function()
			{
				var res = true;
				if (typeof this._onclick_hash == 'function')
				{
					if (this._onclick_hash() === false)
						res = false;
				}
				if (!res)
					return false;
				return FSite2.processHrefParams(this);
			};
		}
		else if (params.layerAnchorClass && FSite2.hasElementClass(anchors[i], params.layerAnchorClass))
		{
			if (!ajaxLayer)
				ajaxLayer = new FSite2.AjaxLayer(params);
			ajaxLayer.addAnchor(anchors[i]);
		}
		else if (params.ajaxAnchorClass && FSite2.hasElementClass(anchors[i], params.ajaxAnchorClass) && anchors[i].rel)
		{
			ajaxAnchor=FSite2.getAjaxAnchorTarget(params, anchors[i].rel);
			ajaxAnchor.addAnchor(anchors[i]);
		}
	}
}

FSite2.removeAjaxAnchors = function (node)
{
	var anchors = node.getElementsByTagName('a');
	for (var i = 0; i < anchors.length; i++)
	{
		if (anchors[i]._ajaxAnchor)
		{
			anchors[i]._ajaxAnchor._anchorsCount--;
			if (anchors[i]._ajaxAnchor._anchorsCount <= 0)
				delete FSite2.anchorsTarget[anchors[i]._ajaxAnchor.targetId];
			anchors[i]._ajaxAnchor = null;
		}
	}
}

FSite2.AjaxAnchor = function (params, targetId)
{
	this.formClass = (params.ajaxFormClass)?params.ajaxFormClass:false;
	this.loaderId = (params.ajaxLoaderId)?params.ajaxLoaderId:(targetId + '_loader');
	this.targetId =  targetId;
	this._loaderElement = document.getElementById(this.loaderId);
	this._targetElement = document.getElementById(this.targetId);
	this._anchorsCount = 0;
	if (this._targetElement)
	{
		this._targetElement._ajaxAnchor = this;
		if (typeof params.ajaxOnShow == 'function')
			this._targetElement.onShow = params.ajaxOnShow;
		if (typeof params.ajaxOnHide == 'function')
			this._targetElement.onHide = params.ajaxOnHide;
		if (typeof params.ajaxOnLoad == 'function')
			this._targetElement.onLoad = params.ajaxOnLoad;
		if (typeof params.ajaxOnUnload == 'function')
			this._targetElement.onUnload = params.ajaxOnUnload;
	}
	if (this._loaderElement)
	{
		this._loaderElement._ajaxAnchor = this;
		if (typeof params.ajaxLoaderOnShow == 'function')
			this._loaderElement.onShow = params.ajaxLoaderOnShow;
		if (typeof params.ajaxLoaderOnHide == 'function')
			this._loaderElement.onHide = params.ajaxLoaderOnHide;
	}
}

FSite2.AjaxAnchor.prototype.addAnchor = function (anchor)
{
	if (!this._targetElement)
		return true;
	if ((anchor != this._targetElement) && anchor._ajaxAnchor)
		return true;
	anchor._ajaxAnchor = this;
	this._anchorsCount++;
	if (anchor.onclick)
		anchor._onclick_ajax=anchor.onclick;
	anchor.onclick=function(ev)
	{
		if (!ev) ev=window.event;
		var res = true;
		if (this._onclick_ajax)
		{
			if (this._onclick_ajax(ev)===false)
				res=false;
		}
		if (!res)
			return false;

		this.httpRequest = new FSite2.HTTPRequest(encodeURI(decodeURI(this.href)), function() {
			if (this._ajaxAnchor._targetElement.onUnload)
				this._ajaxAnchor._targetElement.onUnload();
			if (FSite2.removeCalendars)
				FSite2.removeCalendars(this._ajaxAnchor._targetElement);
			if (FSite2.removeAjaxAnchors)
				FSite2.removeAjaxAnchors(this._ajaxAnchor._targetElement);
			this._ajaxAnchor._targetElement.innerHTML = this.httpRequest.responseText;
			this._ajaxAnchor.extendContent();
			if (this._ajaxAnchor._targetElement.onLoad)
				this._ajaxAnchor._targetElement.onLoad();
			if (this._ajaxAnchor._loaderElement)
				FSite2.hideElement(this._ajaxAnchor._loaderElement);
			FSite2.showElement(this._ajaxAnchor._targetElement);
		},'get','',true);
		this._ajaxAnchor._targetElement.httpRequest = this.httpRequest;
		this.httpRequest._ajaxAnchor = this._ajaxAnchor;
			
		if (this._ajaxAnchor._loaderElement)
			FSite2.showElement(this._ajaxAnchor._loaderElement);
		FSite2.hideElement(this._ajaxAnchor._targetElement);
		
		this.httpRequest.ajaxSendRequest();
		return false;
	}
}

FSite2.AjaxAnchor.prototype.extendContent = function ()
{
	var forms=this._targetElement.getElementsByTagName('form');
	for (var i=0;i<forms.length;i++)
	{
		if (this.formClass && !FSite2.hasElementClass(forms[i],this.formClass))
			continue;
		this.addForm(forms[i]);
	}
}

FSite2.AjaxAnchor.prototype.addForm = function(formElement)
{
	if (formElement._ajaxAnchor)
		return;
	if (formElement.tagName!='FORM')
		return;
	formElement._ajaxAnchor=this;
	formElement._onsubmit_anchor=formElement.onsubmit;
	formElement.ajaxSubmit = this.sendForm;
	formElement.onsubmit = function(ev)
	{
		if (!ev) ev = window.event;
		if (typeof this._onsubmit_anchor == 'function')
		{
			if (!this._onsubmit_anchor(ev))
				return false;
		}
		this.ajaxSubmit();
		return false;
	}
}

FSite2.AjaxAnchor.prototype.sendForm = function()
{
	this.httpRequest = new FSite2.sendForm(this, function(){
		if (this.httpRequest.getResponseHeader('X-Form-Eval') && (this.httpRequest.getResponseHeader('X-Form-Eval')))
		{
			eval(this.httpRequest.responseText);
			return;
		}
		
		if (this._ajaxAnchor._targetElement.onUnload)
			this._ajaxAnchor._targetElement.onUnload();
		if (FSite2.removeCalendars)
			FSite2.removeCalendars(this._ajaxAnchor._targetElement);
		if (FSite2.removeAjaxAnchors)
			FSite2.removeAjaxAnchors(this._ajaxAnchor._targetElement);
		this._ajaxAnchor._targetElement.innerHTML=this.httpRequest.responseText;
		if (this._ajaxAnchor._targetElement.onLoad)
			this._ajaxAnchor._targetElement.onLoad();
		this._ajaxAnchor.extendContent();
		if (this._ajaxAnchor._loaderElement)
			FSite2.hideElement(this._ajaxAnchor._loaderElement);
		FSite2.showElement(this._ajaxAnchor._targetElement);
	}, null, null, true);
	if (this._ajaxAnchor._loaderElement)
		FSite2.showElement(this._ajaxAnchor._loaderElement);
	FSite2.hideElement(this._ajaxAnchor._targetElement);
	this._ajaxAnchor._targetElement.httpRequest=this.httpRequest;
	this.httpRequest._ajaxAnchor=this._ajaxAnchor;
	this.httpRequest.ajaxSendRequest();
}

FSite2.AjaxLayer = function (params)
{
	this.backgroundId = (params.layerBackgroundId)?params.layerBackgroundId:'FSite2_layer_background';
	this.backgroundClass = (params.layerBackgroundClass)?params.layerBackgroundClass:'layer_background';
	this.loaderId = (params.layerLoaderId)?params.layerLoaderId:'FSite2_layer_loader';
	this.loaderClass = (params.layerLoaderClass)?params.layerLoaderClass:'layer_loader';
	this.contentClass = (params.layerContentClass)?params.layerContentClass:'layer_content';
	this.closeClass = (params.layerCloseClass)?params.layerCloseClass:'layer_close';
	this.onLoad = (typeof params.layerOnLoad == 'function')?params.layerOnLoad:false;
	this.onUnload = (typeof params.layerOnUnload == 'function')?params.layerOnUnload:false;
	this.onShow = (typeof params.layerOnShow == 'function')?params.layerOnShow:false;
	this.onHide = (typeof params.layerOnHide == 'function')?params.layerOnHide:false;
} 

FSite2.AjaxLayer.prototype.addAnchor = function (anchor)
{
	if (anchor._ajaxLayer)
		return true;
	anchor._ajaxLayer=this;
	if (anchor.onclick)
		anchor._onclick_ajax=anchor.onclick;
	anchor.onclick=function(ev)
	{
		if (!ev) ev=window.event;
		var res = true;
		if (this._onclick_ajax)
		{
			if (this._onclick_ajax(ev)===false)
				res=false;
		}
		if (!res)
			return false;
		
		this.httpRequest = new FSite2.HTTPRequest(encodeURI(decodeURI(this.href)), function() {
			this._ajaxLayer._contentLayer.object.innerHTML=this.httpRequest.responseText;
			this._ajaxLayer.extendLayer();
			if (this._ajaxLayer._contentLayer.object.onLoad)
				this._ajaxLayer._contentLayer.object.onLoad();
			this._ajaxLayer._loaderLayer.hide();
			this._ajaxLayer._contentLayer.show();
			this.backgroundLayer = null;
			this.loaderLayer = null;
			this.contentLayer = null
		},'get','',true);
		this.httpRequest._ajaxLayer=this._ajaxLayer;
		this.httpRequest._ajaxLayer._backgroundLayer = new FSite2.Layer(this.httpRequest._ajaxLayer.backgroundClass, true, this.httpRequest._ajaxLayer.backgroundId);
		this.httpRequest._ajaxLayer._backgroundLayer.show();
		this.httpRequest._ajaxLayer._backgroundLayer.fullScreen();
		this.httpRequest._ajaxLayer._contentLayer = new FSite2.Layer(this.httpRequest._ajaxLayer.contentClass, true, this.httpRequest._ajaxLayer.targetId);
		this.httpRequest._ajaxLayer._contentLayer.object.httpRequest=this.httpRequest;
		this.httpRequest._ajaxLayer._contentLayer.object.onShow = (this.httpRequest._ajaxLayer.onShow)?this.httpRequest._ajaxLayer.onShow:false;
		this.httpRequest._ajaxLayer._contentLayer.object.onHide = (this.httpRequest._ajaxLayer.onHide)?this.httpRequest._ajaxLayer.onHide:false;
		this.httpRequest._ajaxLayer._contentLayer.object.onLoad = (this.httpRequest._ajaxLayer.onLoad)?this.httpRequest._ajaxLayer.onLoad:false;
		this.httpRequest._ajaxLayer._contentLayer.object.onUnload = (this.httpRequest._ajaxLayer.onUnload)?this.httpRequest._ajaxLayer.onUnload:false;
		this.httpRequest._ajaxLayer._contentLayer.hide();
		this.httpRequest._ajaxLayer._loaderLayer = new FSite2.Layer(this.httpRequest._ajaxLayer.loaderClass, true, this.httpRequest._ajaxLayer.loaderId);
		this.httpRequest._ajaxLayer._loaderLayer.show();
		this.httpRequest.ajaxSendRequest();
		return false;
	}
}

FSite2.AjaxLayer.prototype.extendLayer = function ()
{
	var closeElements = FSite2.getElementsByClassName(this.closeClass, this._contentLayer.object);
	var i;
	for (i = 0; i < closeElements.length; i++)
	{
		closeElements[i]._ajaxLayer = this;
		closeElements[i].onclick = function()
		{
			this._ajaxLayer._loaderLayer.remove();
			this._ajaxLayer._loaderLayer = null;
			this._ajaxLayer._contentLayer.hide();
			if (this._ajaxLayer._contentLayer.object.onUnload)
				this._ajaxLayer._contentLayer.object.onUnload();
			if (FSite2.removeCalendars)
				FSite2.removeCalendars(this._ajaxLayer._contentLayer.object);
			if (FSite2.removeAjaxAnchors)
				FSite2.removeAjaxAnchors(this._ajaxLayer._contentLayer.object);
			this._ajaxLayer._contentLayer.remove();
			this._ajaxLayer._contentLayer = null;
			this._ajaxLayer._backgroundLayer.remove();
			this._ajaxLayer._backgroundLayer = null;
		}
	}
	
	var submit;
	var forms = this._contentLayer.object.getElementsByTagName('form');
	for (i = 0; i < forms.length; i++)
	{
		forms[i]._ajaxLayer = this;
		forms[i]._onsubmit_layer=forms[i].onsubmit;
		forms[i].ajaxSubmit = this.sendForm;
		forms[i].onsubmit=function(ev)
		{
			if (!ev) ev = window.event;
			if (typeof this._onsubmit_layer == 'function')
			{
				if (!this._onsubmit_layer(ev))
					return false;
			}
			
			this.ajaxSubmit();
			return false;
		}
	}
}

FSite2.AjaxLayer.prototype.sendForm = function ()
{
	this._ajaxLayer._contentLayer.hide();
	this._ajaxLayer._loaderLayer.show();
	this.httpRequest = new FSite2.sendForm(this, function(){
		if (this.httpRequest.getResponseHeader('X-Form-Eval') && (this.httpRequest.getResponseHeader('X-Form-Eval')))
		{
			eval(this.httpRequest.responseText);
			return;
		}
		if (FSite2.removeCalendars)
			FSite2.removeCalendars(this._ajaxLayer._contentLayer.object);
		if (FSite2.removeAjaxAnchors)
			FSite2.removeAjaxAnchors(this._ajaxLayer._contentLayer.object);
		this._ajaxLayer._contentLayer.object.innerHTML=this.httpRequest.responseText;
		this._ajaxLayer.extendLayer();
		if (this._ajaxLayer._contentLayer.object.onLoad)
			this._ajaxLayer._contentLayer.object.onLoad();
		this._ajaxLayer._loaderLayer.hide();
		this._ajaxLayer._contentLayer.show();
	}, null, null, true);
	this._ajaxLayer._contentLayer.httpRequest=this.httpRequest;
	this.httpRequest._ajaxLayer=this._ajaxLayer;
	this.httpRequest.ajaxSendRequest();
}
