var ot="", timer=0, x=-1,y=0;
var option_position=0 ;
var beg_value ='' ;
var products =new Array() ;
var orders =new Array() ;

function Product(id,code,name,price_p,price_n,price_o){
	this.id =id ;
	this.code =code ;
	this.name =name ;
	this.price_p =price_p ;
	this.price_n =price_n ;
	this.price_o =price_o ;
}

function Order(id,name,price,code,date){
	this.id =id ;
	this.name =name ;
	this.price =price ;
	this.code =code ;
	this.date =date ;
}


function getObj(objID){
	if (document.getElementById) {
		return document.getElementById(objID);
	} else if (document.all) {
		return document.all[objID];
	} else if (document.layers) {
		return document.layers[objID];
	}
}

function ajaxLoad(obj,formname, url0,defMessage,post,callback){
	var ajaxObj;

	url =encodeURI(url0) ;
	//alert(url) ;
    
	if (defMessage)	document.getElementById(obj).innerHTML=defMessage;
	if (window.XMLHttpRequest) {
		ajaxObj = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		return; 
	} 

	//ajaxObj.open ((post?'POST':'GET'), url);
	ajaxObj.open ('POST', url);
	if (post&&ajaxObj.setRequestHeader)
		ajaxObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251;");
	ajaxObj.setRequestHeader("Referer", location.href);	// нужен в Donate
	
	ajaxObj.onreadystatechange = ajaxCallBack(obj,formname,ajaxObj,(callback?callback:null));
	ajaxObj.send(post); 
	return false;
} 

function ss1(){
	alert('ss') ;
	return false ;
}

function ajaxCallBack(obj, formname, ajaxObj, callback){
    return function(){
        if (ajaxObj.readyState == 4) {
			if (callback) if (!callback(obj,ajaxObj))return;
			if (ajaxObj.status==200) {
				if (ajaxObj.getResponseHeader("Content-Type").indexOf("application/x-javascript")>=0) {
					eval(ajaxObj.responseText);
				} else {
					if(obj=='weight'){
						count_total_weight() ;
						return ;
					}
						

                    var ss =document.getElementById(obj+'div') ;
					ss.innerHTML = '';

					//alert(ajaxObj.responseText) ;
					
					var str = ajaxObj.responseText.split("\n");
					j=0 ;
					
					if(formname=='orderform'){
						products =new Array() ;
						for (i=0; i < str.length - 1; i++) {
							if(trim(str[i])==''){
								continue
							}

							//alert(str[i]) ;
							var prodinfo = str[i].split("=");
							
							prod_id    =prodinfo[0] ;
							prod_code  =prodinfo[1] ;
							prod_name  =prodinfo[2] ;
							prod_comment  =prodinfo[3] ;
							prod_price_p =prodinfo[4] ;
							prod_price_n =prodinfo[5] ;
							prod_price_o =prodinfo[6] ;

							//alert(prod_id+' '+prod_code+' '+prod_name+' '+prod_price_p+' '+prod_price_n+' '+prod_price_o) ;

							products[j] =new Product(prod_id,prod_code,prod_name,prod_price_p,prod_price_n,prod_price_o) ;

                            var suggest = '<div id="option'+ (j++) +'" onmouseover="javascript:suggestOver(this);" ';
							suggest += 'onmouseout="javascript:suggestOut(this);" ';
							suggest += 'onclick="javascript:setSearch(\''+ obj +'\',\''+formname+'\','+j+');" ';
							suggest += 'class="suggest_link">' + prod_code+' '+prod_name+' '+prod_comment+' '+ prod_price_p+'/'+prod_price_n + '</div>';
                            ss.innerHTML += suggest;
						}

					}else if(formname=='payform' || formname=='otkazform'){
                        orders =new Array() ;
						
						for (i=0; i < str.length - 1; i++) {
							if(trim(str[i])==''){
								continue
							}

							//alert(str[i]) ;
							var orderinfo = str[i].split("=");
							
							ord_id    =orderinfo[0] ;
                            ord_ind  =orderinfo[1] ;
							ord_name  =orderinfo[2] ;
							ord_city =orderinfo[3] ;
							ord_date =orderinfo[4] ;
							ord_code =orderinfo[5] ;
							ord_sum =orderinfo[6] ;


							//alert(ord_id+' '+ord_ind+' '+ord_name+' '+ord_city) ;

							orders[j] =new Order(ord_id,ord_name,ord_sum,ord_code,ord_date) ;

                            var suggest = '<div id="option'+ (j++) +'" onmouseover="javascript:suggestOver(this);" ';
							suggest += 'onmouseout="javascript:suggestOut(this);" ';
							suggest += 'onclick="javascript:setSearch(\''+ obj +'\',\''+formname+'\','+j+');" ';
							suggest += 'class="suggest_link">'+ ord_date + ' #'+ ord_code+ ' $='+ ord_sum + '<br>' + ord_name+'<br>'+ord_ind+'&nbsp;' +ord_city + '</div>';
                            ss.innerHTML += suggest;
						}
                    
                    }else if(formname == 'clientform'){
						clients =new Array() ;
						var suggest ="" ;
						for (i=0; i < str.length - 1; i++) {
                            if(trim(str[i])==''){
								continue
							}

                            var prodinfo = str[i].split("=");
							if(prodinfo.length ==1){// оригинальное название города по справочнику
								var city =document.getElementById("client_city") ;
								if(city != null){
									city.value =trim(str[i]) ;
									continue ;
								}
							}else{
								client_id    =prodinfo[0] ;
								client_index  =prodinfo[1] ;
								client_fio  =prodinfo[2] ;
								client_city =prodinfo[3] ;
								client_address =prodinfo[4] ;
								client_phone =prodinfo[5] ;
								client_email =prodinfo[6] ;
	
                                clients[j] =new Client(client_id,client_index,client_fio,client_city,client_address,client_phone,client_email) ;
								suggest +="<tr><td><a href=\"javascript:useClient("+(j++)+")\" title=\"Использовать данные клиента\"><img src=\"/xsl/staroslav/img/return.png\" border=\"0\"></a></td>" ;
								suggest +="<td><b>"+client_fio+"</b><br />"+client_city+"<br />"+client_address+"<br />"+client_phone+"<br />"+client_email+"</td></tr>" ;
							}
						}

						var client_list =document.getElementById("client_list") ;
						if(client_list == null){
							alert("no client list area...!") ;
							return ;
						}else{
							var tab ="<table class=\"clients\" cellpadding=\"0\" cellspacing=\"0\"><tr><th colspan=\"2\" nowrap=\"1\">Клиенты по этому индексу:</th></tr>" ;
							tab +=suggest ;
							tab +="</table>" ;
							client_list.innerHTML =tab ;
						}
					}else{
						for (i=0; i < str.length - 1; i++) {
							if(trim(str[i])==''){
								continue
							}
							var suggest = '<div id="option'+ (j++) +'" onmouseover="javascript:suggestOver(this);" ';
							suggest += 'onmouseout="javascript:suggestOut(this);" ';
							suggest += 'onclick="javascript:setSearch(\''+ obj +'\',\''+formname+'\',this.innerHTML);" ';
							suggest += 'class="suggest_link">' + str[i] + '</div>';
                            ss.innerHTML += suggest;
                        }
					}
					
					
					if(j>0){
                        showLayer(obj) ;
					}else{
                        hideLayer(obj) ;
					}
					
				}
			}
		}
	}
}


function PressKey2(e,objname){ // вызывается при нажатии клавиши в select
    e=e||window.event;
	t=(window.event) ? window.event.srcElement : e.currentTarget; // объект для которого вызывно
	
	if (e.keyCode==13) { // Enter
		t=(window.event) ? window.event.srcElement : e.currentTarget; // объект для которого вызывно
		t.form.onsubmit();
		return;
	}
	if ((e.keyCode==38 && t.selectedIndex==0) || e.keyCode==27) { // Up or ESC
		getObj(objname+'id').focus();
		//getObj(objname).className = 'hideselect';	// спрячем select
		hideLayer(objname) ;
	}
}
// Определение координаты элемента
function pageX(elem) {
	return elem.offsetParent ?
	elem.offsetLeft + pageX( elem.offsetParent ) :
	elem.offsetLeft;
}
function pageY(elem) {
	return elem.offsetParent ?
	elem.offsetTop + pageY( elem.offsetParent ) :
	elem.offsetTop;
}

function absPosition(obj) { 
	var x = y = 0; 
	while (obj) {
		x += obj.offsetLeft; 
		y += obj.offsetTop; 
		obj = obj.offsetParent; 
	} 
	return {x:x, y:y}; 
}

//Mouse over function
function suggestOver(div_value) {
	div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}

//Click function
function setSearch(obj,formname,value) {
    var inp =getObj(obj+'id') ;
	
    hideLayer(obj) ;
    
    if(formname =='orderform'){
		var current_product =products[value-1] ;
		if(typeof(current_product)=='undefined' || current_product == null){
			return ;
		}
		inp.value ='' ;
		inp.blur() ;
		addProduct(current_product.id,current_product.code,current_product.name,current_product.price_p,current_product.price_n,current_product.price_o) ;
		var numcel =document.getElementById('num'+current_product.id) ;
        numcel.focus() ;
	}else if(formname =='payform'){
        var current_order =orders[value-1] ;
		//alert(current_order) ;
		if(typeof(current_order)=='undefined' || current_order == null){
			return ;
		}
		inp.value ='' ;
		inp.blur() ;
		addOrder(current_order.id,current_order.name,current_order.price) ;
		var numcel =document.getElementById('sum'+current_order.id) ;
        numcel.focus() ;
	}else if(formname =='otkazform'){
        var current_order =orders[value-1] ;
		//alert(current_order) ;
		if(typeof(current_order)=='undefined' || current_order == null){
			return ;
		}
		inp.value ='' ;
		inp.blur() ;
		setOrder(current_order.id,current_order.name,current_order.price,current_order.code,current_order.date) ;
		var numcel =document.getElementById("reason") ;
        numcel.focus() ;
	}else{
        inp.value =trim(value) ;
		var frm =getObj(formname) ;
		if(frm!=null){
			hid =frm[obj+'search'] ;
			if(hid!=null){
				hid.value=1 ;
			}else{
				alert("hidden ["+obj+"]search not found") ;
				return ;
			}
			frm.submit() ;
		}else{
			alert('form name ['+obj+'form] not defined') ;
		}
	}
}

function PressKey(e,objname,formname){
	//alert('press key='+objname+"/"+formname) ;
	e=e||window.event;
	t=(window.event) ? window.event.srcElement : e.currentTarget; // объект для которого вызывно

    var current_product =products[option_position] ;
	if(typeof(current_product)!='undefined'){
		//alert("products["+option_position+"]="+current_product.name) ;
	}
    var current_order =orders[option_position] ;

	//alert(option_position) ;

    setPos(objname+'id',objname+'div',1,{'x':0, 'y':1}); 

	gd =getObj(objname+'div');
	inpobj =getObj(objname+'id');

	if (e.keyCode==27) { // ESC
        timer=0; 
        hideLayer(objname) ;
		return;
	}

	if (e.keyCode==13) { // Enter
        timer=0; 
        
		var current_product =products[option_position-1] ;
		var current_order =orders[option_position-1] ;
		/*
		if(typeof(current_product)!='undefined'){
			alert("products["+option_position+"]="+current_product.name) ;
		}
		*/
        
		hideLayer(objname) ;

        if(formname == 'orderform'){
			if(typeof(current_product)=='undefined' || current_product == null){
                return ;
			}
			inpobj.value ='' ;
			//inpobj.blur() ;
			
			addProduct(current_product.id,current_product.code,current_product.name,current_product.price_p,current_product.price_n,current_product.price_o) ;
			var numcel =document.getElementById('num'+current_product.id) ;
            numcel.focus() ;
		}else if(formname == 'payform'){
			//alert('pay form1')
			
			if(typeof(current_order)=='undefined' || current_order == null){
				return ;
			}
			inpobj.value ='' ;
			//inpobj.blur() ;
			addOrder(current_order.id,current_order.name,current_order.price) ;
			var numcel =document.getElementById('sum'+current_order.id) ;
			numcel.focus() ;
		}else if(formname == 'otkazform'){
			//alert('pay form1')
			
			if(typeof(current_order)=='undefined' || current_order == null){
				return ;
			}
			inpobj.value ='' ;
			//inpobj.blur() ;
			setOrder(current_order.id,current_order.name,current_order.price,current_order.code,current_order.date) ;
			var numcel =document.getElementById("reason") ;
			numcel.focus() ;
		}else{
			frm =getObj(formname) ;
			if(frm!=null){
				//alert(frm.name.value) ;
				hid =frm[objname+'search'] ;
				if(hid!=null){
					hid.value=1 ;
				}else{
					alert("hidden ["+objname+"]search not found") ;
					return ;
				}
				frm.submit() ;
			}else{
				alert('form name ['+objname+'form] not defined') ;
			}	
		}
		return;
	}
	
	if (e.keyCode==38) { // стрелка вверх
		//g.focus();
		//g.selectedIndex=0;
		//return;

		//alert('start option='+option_position) ;
		
		div_cur =getObj('option'+(option_position-1)) ;
		div_next =getObj('option'+(option_position-2)) ;
        
        if(div_next != null){
			div_cur.className ='suggest_link' ;
			div_next.className ='suggest_link_over' ;
			option_position-- ;
			inpobj.value =div_next.innerHTML ;
		}else{
			if(products.length>0){
				option_position =products.length ;
				div_prev =getObj('option0') ;
				div_next =getObj('option'+(option_position-1)) ;
				div_prev.className ='suggest_link' ;
				div_next.className ='suggest_link_over' ;
				inpobj.value =div_next.innerHTML ;
			}
		}
        
        //alert('end option='+option_position) ;

		return ;
	}
	
	if (e.keyCode==40) { // стрелка вниз
		//g.focus();
		//g.selectedIndex=0;
		//return;
		
		//alert('start option='+option_position) ;

		div_cur =getObj('option'+(option_position-1)) ;
		div_next =getObj('option'+option_position) ;
        
        if(div_cur == null){
			div_cur =div_next ;
			div_cur.className ='suggest_link' ;
        }else{
			//alert('prev div undefined') ;
		}
        
        if(div_next != null){
			div_cur.className ='suggest_link' ;
            div_next.className ='suggest_link_over' ;
			inpobj.value =div_next.innerHTML ;
			option_position++ ;
		}else{
			//alert('cur div undefined') ;
			//if(div_prev != null){
			//	div_prev.className ='suggest_link_over' ;
			//}
            //option_position-- ;
		}

		//alert('end option='+option_position) ;
		
		return ;
	}
	

	
    if (ot==t.value)return;	// если ничего не изменилось не "замучить" сервер
	ot=t.value;
    if (timer)clearTimeout(timer);
	var max_len =3 ;
	if(objname == 'index'){
		max_len =6 ;
	}

	if (ot.length<max_len) {
		timer=0; 
        hideLayer(objname) ;
		return;
	}
	
	timer=window.setTimeout("Load('"+objname+"','"+formname+"')",300);	 // загружаю через 1 секунду после последнего нажатия клавиши
}

function Load(target,formname){
	var obj =getObj(target+'div') ;
	var objname =obj.name ;
	var page ='search' ;
	if(formname=='orderform'){
        page ='searchproduct' ;
	}

	ajaxLoad(target, formname, '/ecom/'+page+'.jsp?target='+target+'&pattern='+trim(ot), '','','');
	//obj.className ="showselect" ;
	timer=0;
	//showLayer("divtest") ;
}


function showLayer(id){
	if(id != 'index'){
		var ooo =getObj(id+'div') ;
		var inp =getObj(id+'id') ;
		ooo.className="showselectdiv" ;
		option_position =0 ;
		if(inp != null){
			beg_value =inp.value ;
		}
	}else{
		//alert('show clients') ;
	}
}

function hideLayer(id){
    if(id != 'index'){
		var ooo =getObj(id+'div') ;
		if(ooo != null){
			ooo.innerHTML ='' ;
			ooo.className="hideselectdiv" ;
			option_position =0 ;
			beg_value ='' ;
		}else{
			alert('div ['+ id +'] undefined') ;
		}
	}else{
		var client_list =document.getElementById("client_list") ;
		if(client_list == null){
			alert("no client list area...!") ;
			return ;
		}else{
			client_list.innerHTML ="" ;
		}

	}
	
}


function setPosXY(obj,x,y) {
	if (obj) {
		obj.style.position='absolute';
		obj.style.left=x+'px';
		obj.style.top=y+'px';
	}
}


function getBounds(obj){
	var w=obj.offsetWidth;
	var h=obj.offsetHeight;
	var x=y=0;
	while (obj) {
		x+=obj.offsetLeft;
		y+=obj.offsetTop;
		obj=obj.offsetParent;
	}
	return{x:x,y:y,width:w,height:h};
}

function setPos(anc_id,obj_id,corner,margin){
// anc_id – id элемента, относительно которого будем позиционировать
// obj_id – id элемента, который будем позиционировать
// corner – номер угла (смотрите Рис.1)
// margin – отступ между элементами, чтобы они не “слипались”
    if (!corner)corner=1;
	var obj=document.getElementById(obj_id);
	var anc=document.getElementById(anc_id);

	if (!obj||!anc) {
		alert('noobj') ; 
		return;
	}
	var b=getBounds(anc);
	var c=getBounds(obj);
	var xs=0,ys=0; // координаты left и top родительского элемента (на случай, если кто-то из родителей абсолютно позиционирован)
	var par=obj;
	for (var i=0;i<50;i++) {
		par=par.parentNode;
		if (!par||par.tagName=='BODY') break;
		var s=getCurrentStyle(par);
		if (par.tagName=='DIV'&&s&&s.position=='absolute') {
			var p=getBounds(par);
			xs+=p.x
			ys+=p.y;
			break;
		}
	}
	var xc=0,yc=0; // Дополнительные отступы, учитывающие номер угла
	switch (corner) {
	case 2:
		yc=-c.height-b.height;
		break;
	case 3:
		yc=-c.height-b.height;
		xc=-c.width;
		break;
	case 4:
		xc=-c.width+b.width;
		break;
	}
	var xm=0;ym=0; // Дополнительные отступы, учитывающие параметр margin
	if (margin) {
		xm=margin.x;
		ym=margin.y;
	}
	setPosXY(obj,b.x-xs+xc+xm,b.y+b.height-ys+yc+ym);
}

function getCurrentStyle(el){
	if (!el) return null;
	var s=el.currentStyle; 
	if (!s)	s=document.defaultView.getComputedStyle(el,null); // Для FireFox
	return s;
}

function trim(str){
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

