// Some function not releated to AJAX
function clientWidth()
{
	return filterResults(
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function clientHeight() 
{
	return filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function scrollLeft() {
	return filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function scrollTop() {
	return filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

// Some function releated to AJAX
if (window.ActiveXObject && !window.XMLHttpRequest) {
    window.XMLHttpRequest = function() {
        return new ActiveXObject((navigator.userAgent.toLowerCase().indexOf("msie 5") != -1)?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP");
    };
}
global_fakeOperaXMLHttpRequestSupport = false;
if (window.opera && (!window.XMLHttpRequest || !(new window.XMLHttpRequest()).setRequestHeader)) {
    global_fakeOperaXMLHttpRequestSupport = true;
    window.XMLHttpRequest = function() {
        this.readyState = 0;
        this.status = 0;
        this.statusText = "";
        this._headers = [];
        this._aborted = false;
        this._async = true;
        this.abort = function() {
            this._aborted = true;
        };
        this.getAllResponseHeaders = function() {
            return this.getAllResponseHeader("*");
        };
        this.getAllResponseHeader = function(_1) {
            var _2 = "";
            for (var i = 0; i < this._headers.length; i++) {
                if (_1 == "*" || this._headers[i].h == _1) {
                    _2 += this._headers[i].h + ": " + this._headers[i].v + "\n";
                }
            }
            return _2;
        };
        this.setRequestHeader = function(_4, _5) {
            this._headers[this._headers.length] = {
                h:_4,v:_5};
        };
        this.open = function(_6, _7, _8, _9, _10) {
            this.method = _6;
            this.url = _7;
            this._async = true;
            this._aborted = false;
            if (arguments.length >= 3) {
                this._async = _8;
            }
            if (arguments.length > 3) {
                opera.postError("XMLHttpRequest.open() - user/password not supported");
            }
            this._headers = [];
            this.readyState = 1;
            if (this.onreadystatechange) {
                this.onreadystatechange();
            }
        };
        this.send = function(_11) {
            if (!navigator.javaEnabled()) {
                alert("XMLHttpRequest.send() - Java must be installed and enabled.");
                return;
            }
            if (this._async) {
                setTimeout(this._sendasync, 0, this, _11);
            } else {
                this._sendsync(_11);
            }
        };
        this._sendasync = function(req, _13) {
            if (!req._aborted) {
                req._sendsync(_13);
            }
        };
        this._sendsync = function(_14) {
            this.readyState = 2;
            if (this.onreadystatechange) {
                this.onreadystatechange();
            }
            var url = new java.net.URL(new java.net.URL(window.location.href), this.url);
            var _16 = url.openConnection();
            for (var i = 0; i < this._headers.length; i++) {
                _16.setRequestProperty(this._headers[i].h, this._headers[i].v);
            }
            this._headers = [];
            if (this.method == "POST") {
                _16.setDoOutput(true);
                var wr = new java.io.OutputStreamWriter(_16.getOutputStream());
                wr.write(_14);
                wr.flush();
                wr.close();
            }
            var _18 = false;
            var _19 = false;
            var _20 = false;
            var _21 = false;
            var _22 = false;
            var _23 = false;
            for (var i = 0; ; i++) {
                var _24 = _16.getHeaderFieldKey(i);
                var _25 = _16.getHeaderField(i);
                if (_24 == null && _25 == null) {
                    break;
                }
                if (_24 != null) {
                    this._headers[this._headers.length] = {
                        h:_24,v:_25};
                    switch (_24.toLowerCase()) {
                        case "content-encoding":_18 = true;break;case "content-length":_19 = true;break;case "content-type":_20 = true;break;case "date":_21 = true;break;case "expires":_22 = true;break;case "last-modified":_23 = true;break;}
                }
            }
            var val;
            val = _16.getContentEncoding();
            if (val != null && !_18) {
                this._headers[this._headers.length] = {
                    h:"Content-encoding",v:val};
            }
            val = _16.getContentLength();
            if (val != -1 && !_19) {
                this._headers[this._headers.length] = {
                    h:"Content-length",v:val};
            }
            val = _16.getContentType();
            if (val != null && !_20) {
                this._headers[this._headers.length] = {
                    h:"Content-type",v:val};
            }
            val = _16.getDate();
            if (val != 0 && !_21) {
                this._headers[this._headers.length] = {
                    h:"Date",v:(new Date(val)).toUTCString()};
            }
            val = _16.getExpiration();
            if (val != 0 && !_22) {
                this._headers[this._headers.length] = {
                    h:"Expires",v:(new Date(val)).toUTCString()};
            }
            val = _16.getLastModified();
            if (val != 0 && !_23) {
                this._headers[this._headers.length] = {
                    h:"Last-modified",v:(new Date(val)).toUTCString()};
            }
            var _27 = "";
            var _28 = _16.getInputStream();
            if (_28) {
                var _29 = new java.io.BufferedReader(new java.io.InputStreamReader(_28));
                var _30;
                while ((_30 = _29.readLine()) != null) {
                    if (this.readyState == 2) {
                        this.readyState = 3;
                        if (this.onreadystatechange) {
                            this.onreadystatechange();
                        }
                    }
                    _27 += _30 + "\n";
                }
                _29.close();
                this.status = 200;
                this.statusText = "OK";
                this.responseText = _27;
                this.readyState = 4;
                if (this.onreadystatechange) {
                    this.onreadystatechange();
                }
                if (this.onload) {
                    this.onload();
                }
            } else {
                this.status = 404;
                this.statusText = "Not Found";
                this.responseText = "";
                this.readyState = 4;
                if (this.onreadystatechange) {
                    this.onreadystatechange();
                }
                if (this.onerror) {
                    this.onerror();
                }
            }
        };
    };
}


function removeXML(text){
	text=text.replace('<?xml version="1.0" encoding="utf-8"?>','');
	if(text.indexOf('>')!=-1)	text=text.substring(text.indexOf('>')+1)
	text=text.replace(/&gt;/g,'>');
	text=text.replace(/&lt;/g,'<');
	text=text.replace(/&amp;/g,'&');
	text=text.replace('</string>','');
	return text;
}
		
function XmlHttp()
{
	var HttpUrl = document.Services; //"http://localhost/FreeTextBox/Service.asmx"
	var loader = document.getElementById("loader");
	var loaderText = document.getElementById("loaderText");
	var xmlhttp = new window.XMLHttpRequest();	
	var xmldom = null;
	var Parent = this;
	var isCompleted = false;
	if(xmlhttp!=null)
	{
		xmlhttp.onreadystatechange = function(){
			if(xmlhttp.readyState==4 && isCompleted==false)
			{
				
				if(isCompleted==false)
				{
					if(Parent.xmlDocument)
					{
						if(window.ActiveXObject)
						{
							try{
								xmldom = new ActiveXObject("MSXML2.DOMDocument.3.0")
							}catch(e){
								try{
									xmldom = new ActiveXObject("MSXML2.DOMDocument")
								}catch(e){
									try{
										xmldom = new ActiveXObject("MSXML.DOMDocument")
									}catch(e){
										try{
											xmldom = new ActiveXObject("Microsoft.XMLDOM")
										}catch(e){
											alert(e.toString());
										}
									}
								}
							}
							xmldom.onreadystatechange = function(){ if(xmldom.readyState==4) Parent.OnCompleted(LoadXml(xmldom.documentElement,Parent.IsObject)) };
						}
						xmldom.loadXML('<table>' + removeXML(xmlhttp.responseText) + '</table>')
					}
					else
						Parent.OnCompleted(LoadXml(xmlhttp.responseText,Parent.IsObject));
				}
				isCompleted = true;
			} 
			Parent.OnStateChange(xmlhttp.readyState);
		};	
	}
	LoadXml = function(XMLValue,IsObject){
	    
        if(window.ActiveXObject){
            try{
				oXML = new ActiveXObject("MSXML2.DOMDocument.3.0");
			}catch(e){
			    try{
				    oXML = new ActiveXObject("MSXML2.DOMDocument")
		        }catch(e){
				    try{
					    oXML = new ActiveXObject("MSXML.DOMDocument")
					}catch(e){
					    try{
						    oXML = new ActiveXObject("Microsoft.XMLDOM")
						}
					    catch(e){
					    alert(e.toString());
					    }
				    }
				 }
			}
			oXML.async=false;		
										
	        oXML.loadXML(XMLValue);
	        if(IsObject){
	                oXML.loadXML(oXML.documentElement.firstChild.text)
	                return oXML;
	            }
	        else
	            return oXML.documentElement.firstChild.text;
	    }
	    else{
	        var parser = new DOMParser(); 
		    oTemlXML = parser.parseFromString(XMLValue, "text/xml"); 
		    if(IsObject){
		            var oXMLText = new String(oTemlXML.documentElement.firstChild.textContent.replace(/\n/g,''));
		            oTemlXML = parser.parseFromString(oXMLText, "text/xml"); 
		            return oTemlXML;
		        }
		    else
		        return oTemlXML.documentElement.firstChild.textContent;
	    }
    };
    
	this.OnCompleted = function(){};
	this.Post = function(MethodName,QueryValues)
	{
		isCompleted = false;
		var url =  HttpUrl + "/" + MethodName
		if(loader) loader.style.top = scrollTop() + (clientHeight() * 50)/100 ;
		try {
			xmlhttp.open("POST",url, true);
			xmlhttp.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");	
			xmlhttp.send(QueryValues)
		}catch(err){
			alert(err);
		}
	}
	this.Get = function(MethodName,QueryValues)
	{
		isCompleted = false;		
		var url =  HttpUrl + "/" + MethodName 		
		if(QueryValues.length>0){
			url = url + "?" + QueryValues
		}		
		if(loader) loader.style.top = scrollTop() + (clientHeight() * 50)/100 ;
		try {
			xmlhttp.open("GET",url,true);
			xmlhttp.send("");						
		}catch(err){
			alert(err);
		}
	};	
	this.OnStateChange = function(result){	
		if(loader==null || loaderText==null)  return;
		switch(result){
			case 0 ://Uninitialized 				
				loader.style.display="block";
			break;
			case 1:// Open
				loader.style.display="block";
			break;
			case 2:// Sent	
				loaderText.innerText = "Updating...";
			break;
			case 3:// Receiving				
				loaderText.innerText = "Loading...";
			break;
			case 4:// Loaded
				loader.style.display="none";
			break;
		}
	};
	XmlHttp.prototype.xmlDocument = false;
	XmlHttp.prototype.IsObject = false;
	return this;			
}
