
var isIE = document.all?true:false;

function wrong(mess,js_err){
	return;
	if (js_err)
		mess+=' : '+js_err;
	alert(mess);
	
};


function pr(cont, max_level, curr_level, pref){
 var out=$('out');
 if (!curr_level) curr_level=0;
 if (!pref) pref='';
 if (!max_level) max_level=2;
 
 if (typeof cont=='object'){
 		pref=pref.concat('&nbsp;&nbsp;&nbsp;&nbsp;', pref);
 		//pref=pref.concat(' -> ', pref);		
	 	for (var i in cont){
 			out.innerHTML+=pref+' -> '+i+' : '+cont[i]+"<br>";	
 		if (typeof cont[i]=='object' && curr_level<max_level)
 			pr(cont[i], max_level, curr_level, pref);
 	
 	}
 }
 else
 	out.innerHTML+='<br>'+cont;
 out.innerHTML+='-------<br>';
}

function $(element){
	node=document.getElementById(element);
	if (!node){
		//wrong('Элемент с id='+element+' не существует');
		return false;
	}
    else
		return  node;
}

function $$(node_id){
	return node=document.createElement(node_id);
	 
}
function addChild(tag,prnt_el){
	var el=document.createElement(tag);
	prnt_el.appendChild(el);
	return el;
}

function showHide(node_id){
		var m=$(node_id);
		//pr(node_id);
		if (m.style.display=='block')
			m.style.display='none';
		else
			m.style.display='block';
		
}

var mousex=0; var mousey=0;

function getMouseCoords(event){
  mousex= (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)) || event.pageX ;
  mousey=(event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) || event.pageY;
  //window.status=mousex+' '+mousey;
  //mousex=event.clientX+document.body.scrollLeft; 
  //mousey=event.clientY+document.body.scrollTop; 
  return true;

}

function scrolls(){
	//	pr('go');
	var deltaX =  window.pageXOffset 
	                || document.documentElement.scrollLeft 
	                || document.body.scrollLeft 
	                || 0;
	var deltaY =  window.pageYOffset 
	                || document.documentElement.scrollTop 
	                || document.body.scrollTop 
	                || 0;
	return {dx:deltaX, dy:deltaY};
};

		
function addEvent(oElm, eventName, handler){
		 
	if (isIE) { 
		oElm.attachEvent('on'+eventName,handler);
		
	} else { 
	  	oElm.addEventListener(eventName,handler,false);
	}
}
function delEvent(el, evname, func) {
	if (el.detachEvent) { // IE
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) { // Gecko / W3C
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] = null;
	}
};

function trim(string){
	return string.replace(/(^\s+)|(\s+$)/g, "");
}

function getAbsCrds(el){
	var el_left=-1;
	var el_top=-1;
	while (el) {
		el_left +=el.offsetLeft;
		el_top += el.offsetTop;
		el= el.offsetParent;
	}
	
	return {top: el_top, left:el_left}	
};

/////////////////////////////imgs ////

var wnd;
function _imgWin(){
	var _init=0;
	var td_desc_node;
	var win_div_node;
	var img_node;
	var td_img;
	var max_width=800;
	var max_height=600;
	
	this.init=function(){
	  try{
		if (_init==1)
			return;
		
		win_div_node=$('image_win');
		//win_div.onClick=
		td_desc_node=$('img_win_desc');
		img_node=$('img_win_pic');
		td_img=$('td_img');
		_init=1;
	  }catch(e){
	  	wrong('ошибка инициализации окна с графикой'+e)
	  }
	};
	this.show=function(a_node, desc, width, height, _src){
		//pr(width+' '+height);
	  try{
		
		var src='';
		if (_src)
			 src=_src;
		else
			if (typeof a_node.href!='undefined')
				src=a_node.href;
		// если изображение больше max_width*max_height открываем в новом окне		
		
		if (width>max_width || height>max_height){ 
			//alert(max_width+ ' > '+width+' '+max_height+' > '+height);
			if (wnd) { wnd.close();}	
			  width=parseInt(width)+30;
			  height=parseInt(height)+30;      		  
			  wnd = window.open('#', 'wnd_name', 'height=' + height +', width=' + width +', menubar=0, resizable=0, scrollbars=0');
	    	  wnd.document.open();
		      wnd.document.write('<html><head><title>'+desc+'</title></head>');
		      wnd.document.write('<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">');
		      height -= 100;
		      width  -= 40;
		      wnd.document.write('<div align="center"><a href="#" onclick="self.close();"><img align="center"  src="'+src+'" border="0"></a></div></body></html>');
		      wnd.document.close();
		      return false;
		}
		
		
		
		if (_init==0)
			this.init();
		//pr(a_node.href);
		
		
		
		img_node.src=src;
		
		if (!desc)
			desc=src;
		td_desc_node.innerHTML=desc;
		
		
		if (width>max_width){
			height*=(max_width/width);
			width=max_width;
		}
		
		if (height>max_height){
			width*=(max_height/height);
			height=max_height;
		}
		
		
			
		img_node.width=width;
		img_node.height=height;
		
		var srlls=scrolls();
		
		win_div_node.style.marginLeft=(-parseInt(width/2)+parseInt(srlls.dx))+'px';
		win_div_node.style.marginTop=(-parseInt(height/2)+parseInt(srlls.dy))+'px';
		//window.status='-'+srlls.dx+'px '+(parseInt(height/2)+parseInt(srlls.dy))+'px';
		win_div_node.style.display='block';
		
		
		td_img.style.width=width+'px';
		td_img.style.height=height+'px';
		//pr(width+' '+height);
		return false;
	  }catch(e){
	  	wrong('ошибка открытия окна с графикой'+e)
	  }
		
		
		
	};
	this.hide=function (){
		if (_init==0)
			return;
		win_div_node.style.display='none';
		img_node.src='';
		
	};
	
	
};

var imgWin=new _imgWin();

/////////////////////////////selects ////
//////////////////////SELECT//////////////////////////////////////////////////////////////////////

function Slct(){
	var slct_el;
	this.printOptions=function(slct_el,options, is_print_empty){
		//var slct_el=$(slct_id);
		if (typeof slct_el=='string')
			var slct_el=$(slct_el);
		slct_el.options.length = 0;
		
		var o=-1;
		if (is_print_empty){
			var newOption = document.createElement("OPTION");
			newOption.value = 'no';
			newOption.id = 'no';  
			newOption.text = 'нет';
			slct_el.options[o+=1] = newOption;
			newOption = null;
		}
		
		if (!options)
			return;
		if (options.length==0)
			return;
		//pr('----');
		
		for (var i in options){
			//pr(i+' '+options[i].ru_name)
			var newOption = document.createElement("OPTION");
			newOption.value = i;
			newOption.id = i;  
			//var t=document.createTextNode(options[i].name);
			newOption.text = options[i].name;
			//newOption.appendChild(t);//= options[i].name;
			slct_el.options[o+=1] = newOption;
			newOption = null;
		}
	};

	this.setSlctd=function(slct_id,options){
		
		var slct_el=$(slct_id);
		var indx;
		if (slct_el.multiple)
			for (var id in options){
				indx=this.getOptNumById(slct_el,options[id]);
				if (indx)
					slct_el.options[indx].selected = 'On';
			}
		else{
			indx=this.getOptNumById(slct_el,options);
			//pr(slct_el.id+' '+options+' '+indx);
			if (indx>=0){
				//pr('set');
				slct_el.selectedIndex=indx;
			}
			return indx;
		}
		
		
	};
	this.getOptNumById=function(slct_el, id){
		//pr(slct_el+' '+slct_el.options.length);
		for (var i=0; i<slct_el.options.length; i++){
			//pr(slct_el.options[i].id+' '+id);
			if (slct_el.options[i].id==id)
				return i;
		}
		return false;
	};
	this.getSlctd=function(slct_el){
		try{
			if (typeof slct_el=='string')
			var slct_el=$(slct_el);	
				//var slct_el=$(slct_id);
			var indx;
			if (slct_el.multiple){
				//pr('multui')
				var i=-1;
				var ret=new Array();
				//for (var i in slct_el.options)
				//pr(i+' '+slct_el.options.length);
				if (slct_el.options.length>0)
					for (var o=0; o<slct_el.options.length; o++){
						//pr('r '+slct_el.options[o].selected);
						if (slct_el.options[o].selected){
							ret[i+=1]=slct_el.options[o].value;
							//pr('r '+ret[i]);
						}
							
					}
			}
			else{
				var ret;
				//pr(slct_el.options[slct_el.selectedIndex]);
				if (slct_el.selectedIndex>=0)
					ret=slct_el.options[slct_el.selectedIndex].value;
					
			}
			//pr(ret);
			return ret;
		}catch(e){
			wrong('Ошибка получения выбранного элемента Select"a',slct_el.options[1].id);
		}
	}
	
	
};
var Slct= new Slct();
/////////////////////////////ajax ////
/*if (window.ActiveXObject && !window.XMLHttpRequest) {
	window.XMLHttpRequest = function() {
		
        var progIds = new Array("Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP");
        for (i in progIds) {
            try {
                return new ActiveXObject(progIds[i]);
                
            }
            catch(ex) {
            	
            }
        }
        return null;
    };
}*/
//if (!window.dimgel) { window.dimgel = {}; };

var ajax = {

// PUBLIC:
	//old_style:'';
	getXMLHttpRequest: function() {
		if (window.ActiveXObject && !window.XMLHttpRequest) {
			window.XMLHttpRequest = function() {
				
		        var progIds = new Array("Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP");
		        for (i in progIds) {
		            try {
		                return new ActiveXObject(progIds[i]);
		                
		            }
		            catch(ex) {
		            	
		            }
		        }
		        return null;
	    	};
		}	
	},

    request: function(url, post, is_refresh, tag, timeout, loopdelay, is_json, user_callback, style_node) {
        //var callback=this.request_callback;
    	if (style_node){
        	var snode=$(style_node);
    		var old_style=snode.style.cursor;
    		snode.style.cursor='wait';
    	}
    	
        this.getXMLHttpRequest();
        if (!window.XMLHttpRequest) {
            this.callback(null, tag, -1, 'Not supported by browser.', null,false);
            return null;
        }
        //pr(is_refresh +' '+this._lastid);
        
        if (is_refresh==1 && this._lastid>0){
        	for (var i in this._requests){
        		//pr('rm'+this._requests[i].id);
        		this.remove(this._requests[i].id);
        	}	
        	this._lastid=0;
        }
        var id = ++this._lastid;
        var r = {id: id, url: url, post: post, tag: tag, timeout: (timeout ? timeout : 10), loopdelay: loopdelay, xhr: null, refresh: false, is_json:is_json, user_callback: user_callback, style_node: {node:style_node, old_style:old_style}}; 
        this._requests.push(r);
         
        this._exec(r);
       
        return id;
        
    },
    
    changeurl: function(id, url, post) {
        var i = this._findidindex(id);
        if (i < 0) {
            return;
        }
        var r = this._requests[i];
        r.url = url;
        r.post = post;
    },
    
    refresh: function(id, force) {
        var i = this._findidindex(id);
        if (i < 0) {
            return;
        }
        var r = this._requests[i];
        if (force || r.laststate < 0) {
            this._cleanup(r);
            this._exec(r);
        }
        else {
            r.refresh = true;
        }
    },
    
    remove: function(id) {
        var i = this._findidindex(id);
        if (i < 0) {
            return;
        }
        var r = this._requests[i];
        this._requests.splice(i, 1);
        this._cleanup(r, true);
    },
    
// PRIVATE:
    
    _lastid: 0,
    _requests: new Array(),
    
    _findidindex: function(id) {
        for (var i = 0;  i < this._requests.length;  i++) {
            if (this._requests[i].id == id) {
                return i;
            }
        }
        return -1;
    },
    
    _exec: function(r) {
    	
        var id = r.id;
        
        r.xhr = new XMLHttpRequest();
       
        r.xhr.onreadystatechange = function() { ajax._onreadystatechange(id); };
        r.xhr.open(r.post ? "POST" : "GET", r.url, true);
        
        r.xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded, charset=koi8-r');
        r.xhr.setRequestHeader('X_REQUESTED_WITH', 'XmlHTTPRequest');
        //r.xhr.setRequestHeader("Content-Length", r.url.length);
        r.laststate = 0;
        r.timeoutid = setTimeout("ajax._ontimeout(" + id + ")", r.timeout * 1000);
        
        r.xhr.send(r.post);
        
    },
    
    _cleanup: function(r, abort) {
    	
        var ls = r.laststate;
        r.laststate = -1;
        if (r.timeoutid) {
            clearTimeout(r.timeoutid);
            r.timeoutid = null;
        }
        
        if (ls >= 0) {
            
        	delete r.xhr['onreadystatechange'];
            
        	//pr(typeof r.xhr.abort);
        	if (abort && (typeof r.xhr.abort=='function')) {
            	r.xhr.abort();
            }
            delete r['xhr'];
        }
    },

    _onreadystatechange: function(id) {
        var i = this._findidindex(id);
        if (i < 0) {
            return;
        }
        var r = this._requests[i];
        if (!r.xhr) {
            return;
        }
        var readyState = r.xhr.readyState;
        if (r.laststate < 0) {
            return;
        }
        r.laststate = r.xhr.readyState;
        if (r.xhr.readyState != 4) {
            return;
        }
        var status = r.xhr.status;
        var responseText = r.xhr.responseText;
        var responseXML = r.xhr.responseXML;
        this._cleanup(r);
        if (r.refresh) {
            r.refresh = false;
            ajax.refresh(id, true);
        }
        else if (r.loopdelay > 0) {
            r.timeoutid = setTimeout("ajax.refresh(" + r.id + ", false)", r.loopdelay * 1000);
        }
        else {
            this._requests.splice(i, 1);
        }
        this.callback(id, r.tag, status, responseText, responseXML, r.is_json, r.user_callback, r.style_node);
    },
    
    _ontimeout: function(id) {
      //  pr('ontimeout');
        //pr('back');
     	var i = this._findidindex(id);
        if (i < 0) {
            return;
        }
        var r = this._requests[i];
        if (r.laststate < 0) {
            return;
        }
        this._cleanup(r, true);
        if (r.refresh) {
            r.refresh = false;
            ajax.refresh(id, true);
        }
        else if (r.loopdelay > 0) {
            r.timeoutid = setTimeout("ajax.refresh(" + r.id + ", false)", r.loopdelay * 1000);
        }
        else {
            this._requests.splice(i, 1);
        }
        this.callback(id, r.tag, -2, 'Request timed out.', null, r.is_json, r.user_callback, r.style_node);
    },
    
    callback:function (id,tag,status,text,xml,is_json,user_callback, style_node) {
	    //pr('back');
    	if (style_node.node)
    		$(style_node.node).style.cursor=style_node.old_style;
    	var req_rslt=false;
	   
		if (status != 200) {
			user_callback('ERROR','request_error'); 
			return false;   
		}
	    this.remove(id);
	    //alert(text);
	    if (text.length>0){
	    	var req_rslt=text;
	      	if (is_json){
		    	req_rslt=this.treat_json_str(text);
	      	}
		   	if (!req_rslt){
		   		user_callback('ERROR','parse_json_error');	
		   		
		   	}
	
	     }
	     
	     user_callback(req_rslt);
	     delete req_rslt;
	},
	treat_json_str:function (text){
		if (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/.test(text.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) {
			j = eval('(' + text + ')');
			return j;
		}
		else
			return false;
	}
};
/////////////////////////////project  ////
	
	function changeCity(node){
		var cntry=Slct.getSlctd(node);
		Slct.printOptions('change_city',cities[cntry]);
		changeDealers($('change_city'));	
	}
	
	function changeDealers(node){
		var cnty=Slct.getSlctd('change_country');
		var cty=Slct.getSlctd(node);
		var opts=new Array();
		if (typeof dealers[cnty][cty]!='undefined')
		
		for (var d in dealers[cnty][cty]){
			//if (dealers[d]['city_id']==cty && dealers[d]['country_id']==cnty){
				opts[d]={name:dealers[cnty][cty][d]['name']};
			//}
		}
		Slct.printOptions('change_dealer',opts);
	}
	
function ihateajax4choose(err){
		//pr(err);
		_id=Slct.getSlctd('manuf');
		l='?manuf='+_id;
		//pr(l);
		document.location=l;
		//return false;
		//$('choose_glass')
	}
	function changeModels(_node){
		try{
			
			var _name=Slct.getSlctd(_node.id);
			//document.location='?manuf='+_id;
			//return;
			//pr('2');
			//distr_id=distr_node.id;
			l='/?ajax=models&_name='+_name;
			var res= ajax.request(l,null,1,10,0, 0, true, updateModels,'container');
		}catch(e){
			ihateajax4choose('Ошибка Ajax-запроса 1'+e);
			return;
		}
	}
	function updateModels(res){
		try{ 
			//pr(res);
			if (res=='ERROR'){
				ihateajax4choose('Ошибка Ajax-запроса2');
				//pr('hate');
				return false;
			}
			var rslt=eval(res);
			if (rslt.res!="ERROR")	
				Slct.printOptions('model',rslt.res);
			else{
				ihateajax4choose('Ошибка Ajax-запроса3');
				return;
			}
		}catch(e){
			ihateajax4choose(e);
		}		
	}
/////////////////////////////ac_runactiv ////
//v1.0
//Copyright 2006 Adobe Systems, Inc. All rights reserved.
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';

  document.write(str);
  //alert(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

/////////////////////////////selects ////
