//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//			класс исполняющий запрос к серверу и возвращающий ответ
//
//	function CJQtform(el,func,method) - передать методом method[POST/GET] элементы из формы el и вернуть в func текстовый ответ
//	function CJQaform(el,func,method) - передать методом method[POST/GET] элементы из формы el и вернуть в func массив-ответ
//	function CJQt(url,func,method) - передать url методом method[POST/GET] и вернуть в func текстовый ответ
//	function CJQa(url,func,method) - передать url методом method[POST/GET] и вернуть в func массив-ответ
//
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function cajax() 
{
	//инициализация переменных
	var ajax_req=null;
	var ajax_set_function=null;
	var ajax_unpack=0;	//0-text;1-mypack;
	var ajax_method="POST";
	var ajax_url="";
	var ajax_obj=this;
	
	//создание объекта XMLHTTP
	if (window.XMLHttpRequest) 
	{
		try 
		{
			ajax_req = new XMLHttpRequest();
		} catch (e){}
	} else if (window.ActiveXObject) 
	{
		try 
		{
			ajax_req = new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e){
			try 
			{
				ajax_req = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e){}
		}
	}

		//ввод парамметров
		this.init=function(func,method,unpack)
		{
			ajax_set_function=func;
			ajax_method=method;
			ajax_unpack=unpack;
		}
		
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		//			функция распаковки текста ответа в двумерный массив
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		this.MyUnescape=function(s)
		{
			var o="";
			
			for (i=0;i<s.length;i++)
			{
				if (s.substr(i,2)=="%%")
					{	
						o+="%";
						i++;
						continue;
					}
				if (s.substr(i,1)=="%")
					{
						if (parseInt(s.substr(i+1,2),16)>=192&&parseInt(s.substr(i+1,2),16)<=255)
							o+=String.fromCharCode(parseInt(s.substr(i+1,2),16)+848); else
							o+=String.fromCharCode(parseInt(s.substr(i+1,2),16));
						i+=2;
					}
					else
					o+=s.substr(i,1);
			}
			return o;
		}

		this.parseInTextData=function(data)
		{
			var o=Array();
			var r=Array();
			var cd="";
			
			for (var i=0;i<data.length;i++)
			{
				if (data.substr(i,4)=="</c>")
				{
					r.push(this.MyUnescape(cd));
					cd="";
					i+=3;
					continue;
				}
				if (data.substr(i,4)=="</r>")
				{
					o.push(r);
					r=Array();
					i+=3;
					continue;
				}
				
				cd+=data.substr(i,1);
			}

			return o;
		}

	
		//метод обработки ответа объекта на запрос
		this.process=function() 
		{
			if (ajax_req.readyState == 4) 
				{
					if (ajax_req.status == 200) 
					{
						try 
						{
							if (ajax_unpack==1)
							{
									ajax_set_function(ajax_obj.parseInTextData(ajax_req.responseText));
							} else
							{
									ajax_set_function(ajax_req.responseText);
							}
						} catch (e){}
					}
				};
		}	

		//метод - подача запроса 
		// 	params - "?q=..."
		this.send=function(query,form)
		{
			if (ajax_req) 
			{
//				if (!query) query="";
				var i=0;
				var a=0;
				var q="";
				var u="";
				for (i=0;i<query.length;i++)
				{
					if (a==0&&query.charAt(i)=="?")
						a=1;
					
					if (a==0)
						u+=query.charAt(i);
					if (a==1)
						q+=query.charAt(i);
				}
				
					ajax_req.onreadystatechange = this.process;
				
				if (ajax_method=="POST")
				{
					if (form!=undefined)
						{
							u=query;
							q=form;
						}
					ajax_req.open("POST", u, true);
					ajax_req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
					ajax_req.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); 
					ajax_req.setRequestHeader("Content-length", q.length-1); 
					ajax_req.setRequestHeader("Connection", "close"); 
					ajax_req.send((q.substr(1)));
				} else
				{
					if (form!=undefined)
						{
							if (q!="")
								query+=form; else
								query="?"+form;
						}
					ajax_req.open("GET", query, true);
					ajax_req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
					ajax_req.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); 
					ajax_req.setRequestHeader("Connection", "close"); 
					ajax_req.send();
				}
					
			} else 
			{
				alert("Браузер не поддерживает AJAX");
			}
		}
		
}
 


//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//			функция отсылки запроса на сервер посредством класса
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function CJQa(query,func,method)
{	
var obj_cajax=new cajax();
	obj_cajax.init(func,method,1);
	obj_cajax.send(query);
	obj_cajax.destroy;
}

function CJQt(query,func,method)
{
var obj_cajax=new cajax();
	obj_cajax.init(func,method,0);
	obj_cajax.send(query);
	obj_cajax.destroy;
}

function CJQaform(el,func,method)
{
	var url=CJQgfe(el);
	var obj_cajax=new cajax();
	obj_cajax.init(func,method,1);
	obj_cajax.send(el.getAttribute('action'),url);
	obj_cajax.destroy;
	return false;
}

function CJQtform(el,func,method)
{
	var url=CJQgfe(el);
	
	var obj_cajax=new cajax();
	obj_cajax.init(func,method,0);
	obj_cajax.send(el.action,url);
	obj_cajax.destroy;
	return false;
}

function CJQgfe(el)//ищет элементы формы внутри заданого контэйнера и строит URL
{
	var url="";
	var a1=el.getElementsByTagName("input");
	for (var i=0;i<a1.length;i++)
		if (a1[i].name!="")
		{
			switch(a1[i].type)
			{
				case "checkbox":
					if (a1[i].checked)
						url+="&"+(a1[i].name)+"="+encodeURIComponent(a1[i].value);
					break;
				case "radio":
					if (a1[i].checked)
						url+="&"+(a1[i].name)+"="+encodeURIComponent(a1[i].value);
					break;
				default:
					url+="&"+(a1[i].name)+"="+encodeURIComponent(a1[i].value);
					break;
			}			
		}
				
	var a1=el.getElementsByTagName("select");
	for (var i=0;i<a1.length;i++)
		url+="&"+(a1[i].name)+"="+encodeURIComponent(a1[i].value);
	var a1=el.getElementsByTagName("textarea");
	for (var i=0;i<a1.length;i++)
		url+="&"+(a1[i].name)+"="+encodeURIComponent(a1[i].value);
	
	return url;
}


//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//			
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function cdiv() 
{
	this.out_checkbox=function(el,h)
	{
		el.style.height=h;
	}

	this.over_checkbox=function(el)
	{
		el.style.height="";
	}	
}

var obj_cdiv=new cdiv();

