/*
Функции работы с графикой
*/
function rgb2hex(r,g,b) {
	var c,s,i,h='', x='0123456789ABCDEF';
	s=new Array(r,g,b);
	for (i=0; i < 3; i++){
		n=s[i];
		h += x.charAt(n>>4) + x.charAt(n&15);
	}
	return h;
}

/*
Функции ajax. Взято гдето в интернете.
*/
var message_show;
var ajax_process=0;
var ajax_process2=0;
var loadedScripts = new Array();
var ajax_loaders_count = 0;
var ajax_loaders = new Array();
var ajax_timeout=0;
var classindicator='ajaxblockcur';

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 ()
	{
		if(ajax_loaders_count > 0)
		{
			LoadStart("Идет загрузка",1);
		} else
		{
			ajax_timeout=setTimeout('LoadStop()',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_setclass(name,stat)
{
    el=document.getElementById(name);
	if(el)el.className=stat;
}


/* открытие окна с вопросом и двумя кнопками Да, Нет */
function WindowsShowYesNo(message,urlyes,urlno,ajax){
	ind=document.getElementById('ajaxwindows');
	ind.innerHTML="<div style='float: right; margin: -13px;'><a href='javascript:;' onclick=\"WindowsClose('ajaxwindows');return false;\" title='Закрыть'>[x]</a></div>"+message+"<br/><br/><a href='"+urlyes+"' "+(ajax?"onclick=\"WindowsClose();ajax_loadInto('"+urlyes+"','"+ajax+"');return false;\"":"")+">Да</a> | <a href='"+urlno+"' "+(ajax?"onclick=\"WindowsClose();"+(urlno?("ajax_loadInto('"+urlno+"','"+ajax+"');"):"")+"return false;\"":"onclick=\"return WindowsClose();\"")+">Нет</a>";
	ind.style.display = '';
	DivCenter(ind);
	ShowBack('');
	return false;
}

function WindowsShow(message,width,height){
	ind=document.getElementById('ajaxwindows');
	ind.innerHTML="<div style='float: right; margin: -13px;'><a href='javascript:;' onclick=\"WindowsClose('ajaxwindows');return false;\" title='Закрыть'>[x]</a></div>"+message;
	ind.style.display = '';
	if(width){
		ind.style.Width = width+'px';
		ind.style.Height = height+'px';
	}
	DivCenter(ind);
	ShowBack('');
	return false;
}

/* Закрытие окна */
function WindowsClose(){
	ind=document.getElementById('ajaxwindows');
	ind.innerHTML='';
	ind.style.display = 'none';
	ShowBack('none');
	return false;
}

/*разместить слой по центру экрана*/
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);
}

/*показать или скрыть закрывающий слой*/
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 LoadStart(str,back){
	oCanvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
	if(back)ShowBack('');
	classindicator='ajaxblockcur';
	ind=document.getElementById('ajaxloadindicator');
	s="<table width='100%'><tr><td align='center'><div id='ajaxlitext' style='display:none'>"+str+"</div>";
	s=s+"<table border='0'><tr><td id='ajaxblock0' class='ajaxblock'>&nbsp;</td><td class='ajaxblock'> </td></tr><tr><td id='ajaxblock1' class='ajaxblock'>&nbsp;</td><td class='ajaxblock'> </td></tr><tr><td id='ajaxblock2' class='ajaxblock'>&nbsp;</td><td id='ajaxblock3' class='ajaxblock'>&nbsp;</td></tr></table>";
	s=s+"</td></tr><tr><td align='center'><div style='position:relative;top:-27px'>";
	for(i=0;i<str.length;i++)s=s+"<span id='ajaxli"+i+"'>"+str.substr(i,1)+"</span>";
	s=s+"</div></td></tr></table>";
	ind.innerHTML=s;
	ind.style.display = '';
	ajax_process=0;
	ajax_process2=0;
	DivCenter(ind);
	if(ajax_timeout)clearTimeout(ajax_timeout);
	ajax_timeout=setTimeout('LoadProcessing()',100);
};

/*стоп загрузки*/
function LoadStop(){
	if(ajax_timeout)clearTimeout(ajax_timeout);
	ShowBack('none');
	ind=document.getElementById('ajaxloadindicator');
	ind.style.display = 'none';
};

/*процесс загрузки*/
function LoadProcessing(){
	ind=document.getElementById('ajaxlitext');
	str=ind.innerHTML;
	len=str.length;
	for(i=0;i<len;i++){
		ind=document.getElementById('ajaxli'+i);
		rr=Math.abs((ajax_process-i)/len*3);
		r=200-rr*200;
		if(r<0)r=0;
		ind.style.color=rgb2hex(r,r,r);
	};
	for(i=0;i<4;i++){
		ind=document.getElementById('ajaxblock'+i);
		if(ind)
			if(ajax_process2==i)ind.className=classindicator; else ind.className='ajaxblock';
	};
	ajax_process++;if(ajax_process>len+10)ajax_process=-10;
	ajax_process2++;if(ajax_process2>5)ajax_process2=0;
	ajax_timeout=setTimeout('LoadProcessing()',100);
};

