nav = navigator.appName.indexOf("Microsoft")!= -1 ? 1 : 2;

String.prototype.regQuote=function(){
    return this.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\\$1");
}

function setSelRange(input,start,end){
	if(input.setSelectionRange){
		input.setSelectionRange(start,end);
	}else{
		var range=input.createTextRange(),m;
		range.collapse(true);
		if(m=input.value.substr(0,start).match(/\n/g)){
			start-=m.length;
		}
		if(m=input.value.substr(0,end).match(/\n/g)){
			end-=m.length;
		}
		range.moveStart("character",start);
		range.moveEnd("character",end-start);
		range.select();
	}
}

function getSelStart(input) {
	if(input.setSelectionRange){
		return input.selectionStart;
	}else{
		var range=document.selection.createRange();
		var stored_range=range.duplicate();
		stored_range.moveToElementText(input);
		stored_range.setEndPoint('EndToEnd',range);
		return stored_range.text.length-range.text.length;
	}
}

function getSelEnd(input){
	if(input.setSelectionRange){
		return input.selectionEnd;
	}else{
		var range=document.selection.createRange();
		var stored_range=range.duplicate();
		stored_range.moveToElementText(input);
		stored_range.setEndPoint('EndToEnd',range);
		return stored_range.text.length-range.text.length+range.text.length;
	}
}

function xmlRemoveWhiteSpace(xml){
	if(xml.hasChildNodes()){
		for(var i=0;i<xml.childNodes.length;i++){
			if(xml.childNodes[i].nodeType==1){
				xmlRemoveWhiteSpace(xml.childNodes[i]);
			}else{
				if(xml.childNodes[i].nodeType==7 || xml.childNodes[i].nodeType==3 && xml.childNodes[i].nodeValue.replace(/\s\t\r\n/g,'')==""){
					xml.removeChild(xml.childNodes[i]);
				}
			}
		}
	}
	return xml;
}

String.prototype.trim=function(charList){
	if(charList==null){
		charList=" \r\n";
	}
	return this.replace(new RegExp("^["+charList+"]+|["+charList+"]+$","g"),"");
}

getE=function(id){
	return document.getElementById(id);
}

function hex2rgb(val) {
	//v1.0 (17.06.2005)
	return [val >> 16, val >> 8 & 0xff, val & 0xff];
};

function backgroundTrans(obj,color,time,prop,callback){
	//v1.3 (26.10.2005)
	if(prop == undefined){
		prop = "bgColor";
	}
	clearInterval(obj.interval);
	var endValue = color;
	color = hex2rgb(Number("0x"+color.substr(1)));
	var startValue = hex2rgb(Number("0x"+obj[prop].substr(1)));
	var timePast = 0;
	obj.stopTrans = function(){
		clearInterval(this.interval);
	}
	obj.endTrans = function(){
		this.stopTrans();
		this[prop] = endValue;
		if(callback!=null){
			callback(this);
		}
	}
	var callf = function(){
		timePast+=50;
		if(timePast >= time){
			obj.endTrans();
		}else{
			var new_color = (parseInt(startValue[0]+timePast*(color[0]-startValue[0])/time))*0x10000;
			new_color += (parseInt(startValue[1]+timePast*(color[1]-startValue[1])/time))*0x100;
			new_color += (parseInt(startValue[2]+timePast*(color[2]-startValue[2])/time));
			new_color = new_color.toString(16);
			try{
				obj[prop] = "#"+new_color;
			}catch(err){
				//alert(err.description+new_color);
			}
		}
	}
	obj.interval=setInterval(callf,10);
	callf();
}

function addEvent(obj,type,fn,bubbling){
	bubbling=bubbling || false;
	if(window.addEventListener){
		//Standard
		obj.addEventListener(type,fn,bubbling);
		return true;
	}else if(window.attachEvent){
		//IE
		obj['e'+type+fn]=fn;
		obj.attachEvent('on'+type,function(){
			obj['e'+type+fn](window.event);
		});
		//obj.attachEvent('on'+type,fn);
		return true;
	}
	return false;
}

sendAndLoad=function(url,callback,method,extra){
	// method = GET,POST,HEAD
	// extra = for GET and POST requests:0-plain text,1-xml,2-JSON, for HEAD:header property
	var xmlhttp=false;
	/*@cc_on @*/
	/*@if(@_jscript_version>=5)
	//JScript gives us Conditional compilation, we can cope with old IE versions.
	//and security blocked creation of the objects.
	try{
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}catch(E){
			xmlhttp=false;
		}
	}
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined'){
		try{
			xmlhttp=new XMLHttpRequest();
		}catch(e){
			xmlhttp=false;
		}
	}
	if (!xmlhttp && window.createRequest){
		try{
			xmlhttp=window.createRequest();
		}catch(e){
			xmlhttp=false;
		}
	}
	if(xmlhttp){
		if(method==null){
			method="GET";
		}
		try{
			if(method=='POST'){
				var params=url.match(/\?[^?]+$/);
				params=params ? params[0].substr(1) : '';
				url=url.replace(/\?[^?]+$/,'');
				if(url==''){
					url='?';
				}
			}
			xmlhttp.open(method,url,true);
			if(method=='POST'){
				xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
				xmlhttp.setRequestHeader("Content-length",params.length);
				xmlhttp.setRequestHeader("Connection","close");
			}
			if(callback){
				xmlhttp.onreadystatechange=function(){
					if(xmlhttp.readyState==4){
						if(xmlhttp.status==200){
							if(method=="HEAD"){
								var value=extra==null ? xmlhttp.getAllResponseHeaders() : xmlhttp.getResponseHeader(extra);
							}else{
								try{
									var value=extra ? (extra==2 ? eval("("+xmlhttp.responseText+")") : xmlRemoveWhiteSpace(xmlhttp.responseXML)) : xmlhttp.responseText;
								}catch(e){
									value=false;
								}
							}
							callback(value);
						}else{
							callback(false);
						}
					}
				}
			}
			xmlhttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
			xmlhttp.send(method=='POST' ? params : null);
		}catch(e){
		}
		return true;
	}else{
		return false;
	}
}

