var loadedScripts = new Array();
var ajax_loaders_count = 0;
var ajax_loaders = new Array();
var ajax_timeout=0;
var ajax_indicator=0;
var ajax_titleloading="";

Function.prototype.bind = function(object) {
    var method = this
    return function() {
        return method.apply(object, arguments) 
    }
}

var ajax_request = function () {};
ajax_request.prototype =
{
	req : null,
	target : null,
	url : null,
	callback : null,
	settings :
	{	
	},
	
	ajax_request: function ()
	{
	
	},
	
	getTransport : function ()
	{
		this.req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	},
	
	get : function (what,where)
	{
		if(this.target = document.getElementById(where))
		{
			this.getTransport();
			this.req.onreadystatechange = this.complete.bind(this);
			this.req.open("GET",what,true);
			this.req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
			this.req.send(null);
			ajax_loaders_count++;
			this.updateIndicator();
		}
	},
	
	getByCallback : function(what,callback)
	{
			this.callback = callback;
			this.getTransport();
			this.req.onreadystatechange = this.jsonCallback.bind(this);
			this.req.open("GET",what,true);
			this.req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
			this.req.send(null);
			ajax_loaders_count++;
			this.updateIndicator();
	},
	
	postByCallback : function(what,callback,data)
	{
			this.callback = callback;
			this.getTransport();
			this.req.onreadystatechange = this.jsonCallback.bind(this);
			this.req.open("POST",what,true);
			this.req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			this.req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
			this.req.send(data);
			ajax_loaders_count++;
			this.updateIndicator();
	},
	
	post : function (what,where,data)
	{
		if(this.target = document.getElementById(where))
		{
			this.getTransport();
			this.req.onreadystatechange = this.complete.bind(this);
			this.req.open("POST",what,true);
			this.req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			this.req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
			this.req.send(data);
			ajax_loaders_count++;
			this.updateIndicator();
		}
	},
	
	complete : function ()
	{
		if(this.req.readyState == 4)
		{
			if(this.target)
			{
				this.target.innerHTML = '&nbsp;';
				this.target.innerHTML = this.req.responseText;
				this.processScripts();
			}
			this.clean();
			ajax_loaders_count--;
			this.updateIndicator();
		}
	},
	
	jsonCallback : function ()
	{
		if(this.req.readyState == 4)
		{
			var obj = new Function("","return " + this.req.responseText);
			var myObj = null;
			if(myObj = obj())
			{
				this.callback(myObj);
			}
			this.clean();
			ajax_loaders_count--;
			this.updateIndicator();
		}
	},
	
	processScripts: function ()
	{
		var scripts = this.target.getElementsByTagName('script');
		var i=0;
		for(i=0;i<scripts.length;i++)
		{
			if((scripts[i].getAttribute('src') != null && scripts[i].getAttribute('src') != '') && loadedScripts[scripts[i].getAttribute('src')] != 1)
			{
			    span = document.body.appendChild(document.createElement("SPAN"));
			    span.style.display = 'none';
			    span.innerHTML = 'Text for stupid IE.<s'+'cript></' + 'script>';
			    span.getElementsByTagName('script')[0].src = scripts[i].getAttribute('src');
			    loadedScripts[scripts[i].getAttribute('src')] = 1;
			} else
			{
				eval(scripts[i].text);
			}
			
		}
	},
	
	updateIndicator : function ()
	{
		var ind = null;
		if(ind = document.getElementById('loadingIndicator'))
		{
			if(ajax_loaders_count > 0)
			{
				startloadingindicator("Загрузка");
			} else
			{
				//ind.style.display = 'none';
                ajax_timeout=setTimeout('hiddenindicator()',500);
			}
		}
	},
	
	clean : function()
	{
		this.req.onreadystatechange = function () {};
		this.req = null;
	},
	
	setForm : function(formel)
	{
		var _sFormData = '';
		var oForm = formel;
		var oElement, elName, elValue;
		// iterate over the form elements collection to construct the
		// label-value pairs.
		for (var i=0; i<oForm.elements.length; i++){
			oElement = oForm.elements[i];
			elName = oForm.elements[i].name;
			elValue = oForm.elements[i].value;
			switch (oElement.type)
			{
				case 'select-multiple':
					for(var j=0; j<oElement.options.length; j++){
						if(oElement.options[j].selected){
							_sFormData += encodeURIComponent(elName) + '=' + encodeURIComponent(oElement.options[j].value) + '&';
						}
					}
					break;
				case 'radio':
				case 'checkbox':
					if(oElement.checked){
						_sFormData += encodeURIComponent(elName) + '=' + encodeURIComponent(elValue) + '&';
					}
					break;
				case 'file':
				// stub case as XMLHttpRequest will only send the file path as a string.
					break;
				case undefined:
				// stub case for fieldset element which returns undefined.
					break;
				default:
					_sFormData += encodeURIComponent(elName) + '=' + encodeURIComponent(elValue) + '&';
					break;
			}
		}
		_sFormData = _sFormData.substr(0, _sFormData.length - 1);
		return(_sFormData);
	
	}
}

function ajax_loadInto(lnk,container_id)
{
	var req = new ajax_request();
	req.get(lnk,container_id);
	return(false);
}

function ajax_postForm(lnk,container_id,formel)
{
	var req = new ajax_request();
	req.post(lnk,container_id,req.setForm(formel));
	return(false);
}

function ajax_loadIntoCallback(lnk,callback)
{
	var req = new ajax_request();
	req.getByCallback(lnk,callback);
	return(false);
}

function ajax_postIntoCallback(lnk,callback,formel)
{
	var req = new ajax_request();
	req.postByCallback(lnk,callback,req.setForm(formel));
	return(false);
}

function ajax_clear() {
	for (v=0;v<ajax_loaders.length;v++) {
		ajax_loaders[v].clean();
	}
}

function layer_setstat(name,stat)
{
    el=document.getElementById(name);
	if(el)el.className=stat;
}

function startloadingindicator(str){
	ajax_titleloading=str;
	if(ind = document.getElementById('loadingIndicator'))
	{
		oCanvas = document.getElementsByTagName(
		(document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY"
		)[0];
		x = oCanvas.scrollLeft;
		y = oCanvas.scrollTop;
		ind.style.left=x;ind.style.top=y;
		el=document.getElementById('loadingIndicator2');
		el.innerHTML=ajax_titleloading;
		ajax_timeout=setTimeout('loadingindicator()',1);
		ind.style.display = '';
	}
}

function loadingindicator(){
    el=document.getElementById("loadingIndicator2");
	ajax_indicator++;if(ajax_indicator>3)ajax_indicator=0;
	str="";	
	for(i=0;i<ajax_indicator;i++)str+=".";
	el.innerHTML=ajax_titleloading+str;	
	ajax_timeout=setTimeout('loadingindicator()',100);
}
function hiddenindicator(){
	if(ajax_timeout){clearTimeout(ajax_timeout);ajax_timeout=0;ajax_indicator=0};
    el=document.getElementById("loadingIndicator");
    if(el){
		el.style.left=-ajax_indicator*10;
		if(ajax_indicator>10)el.style.display = 'none'; else setTimeout('hiddenindicator()',10);
		ajax_indicator++;
	};
}

/*
Работа с куками.
*/
var Cookies;//массив с куками

//разбор кук. Если стоит 2 одинаковых возьмется последняя для совместимости с php
function ParseCookies(){
    if(document.cookie)
        Cooks=document.cookie.split("; ");
    else
        Cooks=new Array();
    n=0;Cookies=new Array();
    for(var j=0;j<Cooks.length;j++){
        var a=Cooks[j].split("=");
        key=a[0];
        if(a[1])value=unescape(a[1]); else value="";
        flag=-1;
        for(var i=0;i<n;i++){
            if(Cookies[i][0]==key)flag=i;
        };
        if(flag==-1){
            Cookies[n]=new Array(key,value);
            n++;
        }
        else{
            Cookies[flag]=new Array(key,value);
        };
    }
};

//получение значения куки из массива
function GetCookie(name,def){
    for (var i=0; i < Cookies.length; i++){
        if(Cookies[i][0]==name){
            return Cookies[i][1];
        };
    };
    if(!def)def="";
    return def;
};

//установка куки.
function SetCookie (name, value) {
    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;

    value=escape(value);
    if(value.length>3500)return false;//защита от переполнения

    //время действия
    var expires;
    if(argc > 2){
        var time=new Date(), sec=time.getTime()/1000;sec+=argv[2];time.setTime(sec*1000);             
        expires=time;
    }
    else{
        expires=null;
    };
    //путь
    var path = (argc > 3) ? argv[3] : "/";
    //домен
    var domain = (argc > 4) ? argv[4] : null;

    document.cookie=name+"="+value+
                    ((expires == null) ? "" : ("; expires="+expires.toGMTString()))+
                    ((path == null) ? "" : ("; path=" + path))+
                    ((domain == null) ? "" : ("; domain=" + domain));
    ParseCookies();
    return true;
};

function ShowMenu(name,id,namec){
    str=GetCookie(namec,"");
    elem=str.split(",");
    str='';show=0;
    for(i=0;i<elem.length;i++){
        if(elem[i]!=id)str+=elem[i]+','; else show=1;
    };
    if(!show)str=str+id;
    el=document.getElementById(name);
	if(el){
        el.style.display = (show)?'none':'';
        el2=document.getElementById('showhidden'+id);
        el2.innerHTML=(show)?'[+]':'[-]';
    };
    SetCookie(namec, str);
}
function ShowBack(type){
	oCanvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
		ind=document.getElementById('ajaxback');
		ind.style.left=0;//oCanvas.scrollLeft;
		ind.style.top=0;//oCanvas.scrollTop;
		ind.style.width=oCanvas.scrollWidth;//oCanvas.clientWidth;
		ind.style.height=oCanvas.scrollHeight;//oCanvas.clientHeight;
		ind.style.display = type;
}

function DivCenter(div){
	oCanvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
	div.style.left=oCanvas.scrollLeft+((oCanvas.clientWidth-ind.clientWidth)>>1);
	div.style.top=oCanvas.scrollTop+((oCanvas.clientHeight-ind.clientHeight)>>1);
}

ParseCookies();


