/*
Создание XMLHttpRequest-объекта
Возвращает созданный объект или null, если XMLHttpRequest не поддерживается
*/



//var asynchrone = false; //Ассинхроный режим передачи (в Firefox) или нет (IE)
var asynchrone = false;
function createRequestObject() {
    var request = null;
   
    if(!request) try {
    	
        request=new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e){}
    
    if(!request) try {
            request=new ActiveXObject('Microsoft.XMLHTTP');
    } catch(e){}
    
    if(!request) try {
        request=new XMLHttpRequest();
        asynchrone = true;
    } catch(e){}
	
    return request;
}


/*
Кодирование данных (простого ассоциативного массива вида { name : value, ...} в
URL-escaped строку (кодировка UTF-8)
*/
function urlEncodeData(data) {
    var query = [];
    if (data instanceof Object) {
        for (var k in data) {
            query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
        }
        return query.join('&');
    } else {
        return encodeURIComponent(data);
    }
}


/*
Выполнение запроса 
url  - адрес запроса
data - параметры в виде простого ассоциативного массива { name : value, ...} 
callback - (не обяз.) callback-функция, которая будет вызвана после выполнения запроса и получения ответа от сервера
*/
function serverRequest(method, url, data, callback, xsl_path, res_div) {
    
	var	request = createRequestObject();
	
	
	
    if (!data) data = new Array();
    data['tellserver'] = 1;

    if(!request) return false;
   
    request.onreadystatechange  = function() { 
    		
            if (request.readyState == 4) {
            	
                if (document.getElementById('loading')) document.getElementById('loading').style.display = 'none';
            	if (callback) callback(request, xsl_path, res_div);
            }
    };
    
  
    if (document.getElementById('loading')) {
    	document.getElementById('loading').style.display = 'block';
    	
    	document.getElementById('loading').style.top = document.body.scrollTop;
    	document.getElementById('loading').style.left = document.body.scrollLeft;
    }


    //if(o=document.getElementById('ddd'))
    //	  $o.innerHTML=method+"<br/>"+url+"<br/>"+asynchrone;
    
    request.open(method, url, asynchrone);
    
     
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
    
   
    
    request.send(urlEncodeData(data));

    return true;
}


var data=new Array();


function debugWriter(obj) {
	var w=window.open();
	w.document.open();
	w.document.writeln(obj.responseText);
	w.document.close();
}

function render(obj, xsl_path, res_div) {
	
	xmldoc = obj.responseXML;
	
	
	
	//debugWriter(obj);
    // for native XMLHttpRequestObject
    if (window.XMLHttpRequest && window.XSLTProcessor) {
    	isIE = false;
        try {
        	
            xslreq = new XMLHttpRequest();
            proc   = new XSLTProcessor();
        } catch(e) {
            alert('Ошибка инициализации:\n'+e.message);
        }

        if (xslreq && proc) {
           
        		xslreq.open("GET", xsl_path, false);
		        xslreq.send(null);
	        	proc.importStylesheet(xslreq.responseXML);  
	        	    		
        	
                    
            
            viewDoc(res_div);
        }
   }

   // for IE/Windows ActiveX
     else if (window.ActiveXObject) {
         isIE = true;
         try {
             var xslt = new ActiveXObject('MSXML2.XSLTemplate');
             var xsldoc = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
             
             
          
             	
         } catch(e) {
             alert('Ошибка инициализации:\n'+e.message);
         }

         if (xsldoc && xslt) {
             xmldoc.async = false;
             xsldoc.async = false;
         
             if (xmldoc.parseError.errorCode != 0 ) {
                alert('Ошибка загрузки XML документа:\n'+xmldoc.parseError.reason);
             } else if (xsldoc.parseError.errorCode != 0) {
                alert('Ошибка загрузки XSL документа:\n'+xsldoc.parseError.reason);
             }
             
             
             
        		
	        	 xsldoc.load(xsl_path);
	
	             xslt.stylesheet = xsldoc;
	
	             proc = xslt.createProcessor();
	             proc.input = xmldoc;
	             
	          
	             
	           
             
             viewDoc(res_div);
         }

     } else {
         alert('Отсутствует поддержка HTTPRequest/XML/XSLT');
     }
}


var order_list_before = "";
function render_sortable_list(obj, xsl_path, res_div) {
	render(obj, xsl_path, res_div);
	init_sort();
	var sort_div, additional_sort_div;
	if ((sort_div = document.getElementById('sortable_list'))) {
		Sortable.create(sort_div.id, {tag:'div', onUpdate:function(){getListOrder(sort_div)}, evalScripts:true, asynchronous:true});
		order_list_before = Sortable.sequence(sort_div);	
	}
	if ((additional_sort_div = document.getElementById('additional_list'))) {
		Sortable.create(additional_sort_div.id, {tag:'div', onUpdate:function(){getAdditionalListOrder(additional_sort_div)}, evalScripts:true, asynchronous:true});
	}
}


function getListOrder(sort_div) {
		query = gc_path+'/item/reorderAll/'+document.getElementById('page_parent_id').value+'/?output_method=xml&'+request_vars;
		var params = new Array();
		params['tree_ids'] = Sortable.sequence(sort_div);
		params['tree_ids_old'] = order_list_before;
			serverRequest('POST',query,params,float_message,null,null);
		order_list_before = params['tree_ids'];
		return true;
}

function getAdditionalListOrder(sort_div) {
		query = gc_path+'/'+document.getElementById('page_kind').value+'/reorderAllItems/'+document.getElementById('page_parent_id').value+'/?output_method=xml&'+request_vars;
		var params = new Array();
		params['ids'] = Sortable.sequence(sort_div);
		serverRequest('POST',query,params,float_message,null,null);
		return true;
}


function render_sortable_propvalues(obj, xsl_path, res_div) {
	render(obj, xsl_path, res_div);
	var sort_div;
	if ((sort_div = document.getElementById('list_div'))) {
		
		Sortable.create(sort_div.id, {tag:'div', onUpdate:function(){getPropValuesListOrder(sort_div)}, evalScripts:true, asynchronous:true});
	}
}


function getPropValuesListOrder(sort_div) {
	
		query = gc_path+'/prop/reorderAllValues/'+document.getElementById('page_parent_id').value+'/'+document.getElementById('page_id').value+'/'+document.getElementById('page_item_id').value+'/?output_method=xml&'+request_vars;
		var params = new Array();
		params['ids'] = Sortable.sequence(sort_div);
		//alert(query);
	
	
		var i, len = params['ids'].length;
		for(i=0; i<len; i++) {
			document.getElementById('div_'+params['ids'][i]).id = 'temp_'+(i+1);
		}
		for(i=0; i<len; i++) {
			document.getElementById('temp_'+(i+1)).id = 'div_'+(i+1);
		}
		serverRequest('POST',query,params,float_message,null,null);
		//alert(params['ids']);
		return true;
}





function viewDoc(res_div) {
   if (isIE) {
   
      proc.addParameter('current','');
      proc.transform();
        
 
     res_div.innerHTML = proc.output;
      		
   } else {
      proc.setParameter(null,"current",'');
      res_div.innerHTML = "";
      try{
     	 res_div.appendChild(proc.transformToFragment(xmldoc,document));
      }catch(e){}
   }
}


var TimerId;

function float_message(res, xsl_path, res_div) {

	var str_message='';
	window.clearTimeout(TimerId);
	if(res!=null){
	var xmldoc = res.responseXML;
	if (!xmldoc) return;
	var message = xmldoc.getElementsByTagName('msg');
	if (message[0].textContent)
			 str_message=message[0].textContent;
	}
	else {
		str_message='Значение установлено';
	}
	if (str_message!='') {
		document.getElementById('tellserver_msg').innerHTML = str_message;
		var obj = document.getElementById('tellserver');
		var x = document.body.offsetWidth/2 - 100;
		var y = 0;
		if (self.pageYOffset) y = self.pageYOffset;
		if (document.body.scrollTop) y = document.body.scrollTop;
		y+=200;
		
		obj.style.left = x+"px";
		obj.style.top = y+"px";
		obj.style.display = 'block';
		
			
		TimerId = window.setTimeout("close_float_message()",2000);
	}
		
}


function close_float_message() {
	window.clearTimeout(TimerId);
	document.getElementById('tellserver').style.display = 'none';
}



function sessionRestart(time){
	//return ;
	if(has_session){
		serverRequest('GET',"/sess_regenerat.php",new Array(),null,null,null);
		setTimeout(function(){sessionRestart(time);},time);	
	}
	
	
}
