/***************************************************************
 EnGine's class to AJAX... (Класс для работы с технологией AJAX)
 все вопросы и пожелания: ICQ: 921217
 
  metods:
 AJAX.sendPOST 		- send message with method POST 
 AJAX.sendPOSTmas 	- send massive with method POST 
 AJAX.sendGET  		- send message with method GET
 AJAX.sendGETmas	- send massive with method GET
***************************************************************/

AJAX 		= new Object();	
AJAX.GET  	= new Array();	// Массив, из которого формируется строка запроса GET
AJAX.POST 	= new Array();	// Массив, из которого формируется строка запроса POST




   try {																					// проверяем состояние готовности объекта
     AJAX.request = new XMLHttpRequest();
     } catch (trymicrosoft) {
     try {
       AJAX.request = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (othermicrosoft) {
       try {
         AJAX.request = new ActiveXObject("Microsoft.XMLHTTP");
       } catch (failed) {
         AJAX.request = false;
       }  
     }
   }

   if (!AJAX.request)																		// Инициализация завершилась успешно?
     alert("Error initializing XMLHttpRequest!");

     
     
     
   ////////////////// AJAX.sendPOST //////////////////
   /*********ФУНКЦИЯ ОТПРАВКИ POST-ЗАПРОСА***********/
   /* vname -	переменная 							*/
   /* value -	значение переменной 				*/
   /* url	-	адрес назначение					*/
   /* func	-	функция, выполняющаяся при ответе	*/
   /*************************************************/
     AJAX.sendPOST = function(vname,value,url,func){						
     if (!AJAX.request)
     alert("XMLHttpRequest не инициализирован"); 											// Проверяем на присутствие request
     
     var post;																				//  Формируется строка запроса
     AJAX.request.open("post", url, true);
     post = '&' +vname +'=' +encodeURIComponent(value); 									// строка запроса сформирована
     AJAX.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");	// параметры post-запроса
     AJAX.request.setRequestHeader("Content-Length", post.length);
     AJAX.request.onreadystatechange = func;												// переход на функцию, которую надо запросить
     AJAX.request.send(post);															 
     }
       
    
     
     
   /////////////////// AJAX.sendGET //////////////////
   /*********ФУНКЦИЯ ОТПРАВКИ GET-ЗАПРОСА************/
   /* vname -	переменная 							*/
   /* value -	значение переменной 				*/
   /* url	-	адрес назначение					*/
   /* func	-	функция, выполняющаяся при ответе	*/
   /*************************************************/
     AJAX.sendGET = function(vname,value,url,func){						
     if (!AJAX.request)
     alert("XMLHttpRequest не инициализирован"); 											// Проверяем на присутствие request
     
     var get;																				//  Формируется строка запроса
     get = url +'/?' +vname +'=' +encodeURIComponent(value);
     AJAX.request.open("get", get, true);
     AJAX.request.onreadystatechange = func;												// переход на функцию, которую надо запросить
     AJAX.request.send(null);															 
     }
     
     

     
   //////////////// AJAX.sendGETmas //////////////////
   /******ФУНКЦИИ ОТПРАВКИ GET-ЗАПРОСА массивом******/
   /* url	-	адрес назначение					*/
   /* func	-	функция, выполняющаяся при ответе	*/
   /*************************************************/
	 AJAX.setGET = function(vname, value){													// функция ввода массива
	 AJAX.GET[vname] = value;
	 }
  	 
     AJAX.sendGETmas = function(url,func){						
     if (!AJAX.request)
     alert("XMLHttpRequest не инициализирован"); 											// Проверяем на присутствие request
     var v;																					//  Формируется строка запроса
     url += "/?";
     for(v in AJAX.GET){																	//  Формируем запрос
      url += v + "=" + encodeURIComponent(AJAX.GET[v]) + "&";
     }
     AJAX.request.open("get", url, true);
     AJAX.request.onreadystatechange = func;												// переход на функцию, которую надо запросить
     AJAX.request.send(null);	
     AJAX.GET =  new Array();													 			// Новый массив	
     }
     

     
     
   //////////////// AJAX.sendPOSTmas//////////////////
   /*****ФУНКЦИИ ОТПРАВКИ POST-ЗАПРОСА массивом******/
   /* url	-	адрес назначение					*/
   /* func	-	функция, выполняющаяся при ответе	*/
   /*************************************************/
   	 AJAX.setPOST = function(vname, value){													// функция ввода массива
	 AJAX.POST[vname] = value;
	 }
   
     AJAX.sendPOSTmas = function(url,func){						
     if (!AJAX.request)
     alert("XMLHttpRequest не инициализирован"); 											// Проверяем на присутствие request
     var post='';																			// POST поначалу пуста
     var v;	
     for(v in AJAX.POST){																	//  Формируем запрос
      post += "&" +v +"=" +encodeURIComponent(AJAX.POST[v]);
     }		
     AJAX.request.open("post", url, true);
     AJAX.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");	// параметры post-запроса
     AJAX.request.setRequestHeader("Content-Length", post.length);
     AJAX.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");	// параметры post-запроса
     AJAX.request.onreadystatechange = func;												// переход на функцию, которую надо запросить
     AJAX.request.send(post);
  	 AJAX.POST = new Array();																// Новый массив					 
     }

     
         
     
     
/******
* select_innerHTML - innerHTML to add option(s) to select(s)
* Problem: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Parametros:
* objeto(tipo object): the select
* innerHTML(tipo string): the new innerHTML
*******/
function select_innerHTML(objeto,innerHTML){
    objeto.innerHTML = ""
    //creating phantom element to receive temp innerHTML
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1"
    document.body.appendChild(selTemp)
    selTemp = document.getElementById("micoxselect1")
    selTemp.style.display="none"
    if(innerHTML.toLowerCase().indexOf("<option")<0){//if not option, convert do option
        innerHTML = "<option>" + innerHTML + "</option>"
    }
    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
    selTemp.innerHTML = innerHTML
    //transfering childs of phantom element to options
    for(var i=0;i<selTemp.childNodes.length;i++){
        if(selTemp.childNodes[i].tagName){
            opt = document.createElement("OPTION")
            for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
                opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
            }
            opt.value = selTemp.childNodes[i].getAttribute("value")
            opt.text = selTemp.childNodes[i].innerHTML
            if(document.all){ //IEca
                objeto.add(opt)
            }else{
                objeto.appendChild(opt)
            }                    
        }    
    }
    //clear phantom
    document.body.removeChild(selTemp)
    selTemp = null
}
     
     
     

   /*******ЭТАЛОННАЯ ФУНКЦИЯ ОБРАБОТКИ ОТВЕТА********/
   /*************************************************/ 
     
    AJAX.update = function() {
       if (AJAX.request.readyState == 4)
       if (AJAX.request.status == 200){
       	
       var response = AJAX.request.responseText;
         document.getElementById("id1").innerHTML = response;
         
       }
       else if (AJAX.request.status == 404)
         alert("Request URL does not exist");
       else
         alert("Error: status code is " + AJAX.request.status);
   }