
        var additionalParam = '';
        var allAJAX_requests = new Array();
        var checkInterval = 5000; //ms
        var timeOutInterval = 60000; //ms
        var recheckStatusInterval = 10000; //ms
        var setStatusInterval = 5000; //ms
        var isActiveDebug = false;
        
        ///////////////////////////////////
        ///////                   /////////
        ///////  class  XML       /////////
        ///////                   /////////
        ///////////////////////////////////
        function allXMLDoc(val)
        {
            this.doc = val;
            
            this.getValue = allXMLDoc_getValue;
            this.getNode = allXMLDoc_getNode;
            this.getAllCallBack = allXMLDoc_getAllCallBack;
            this.string = allXMLDoc_ToString;
        }
        function allXMLDoc_getValue(path)
        {
            if(path.substr(0, 1) == '/') path = path.substr(1, (path.length - 1));
            pathItems = path.split('/');
            var val = new Array();
            val[0] = this.doc;
            for(var i = 0; i < pathItems.length; i++)
            {
                val = this.getNode(pathItems[i], val);
                if(val == null) return null;
            }
            return val;
        }
        function allXMLDoc_getNode(key, arr)
        {
            var str = '';
            var val = new Array();
            var sp = 0;
            var ep = 0;
            var sp_ = 0;
            var ep_ = 0;
            var flagStart = true;
            var flagEnd = true;
            var count = 0;
            var arrFlag = true;
            for(var jx in arr)
            {
                sp = 0;
                ep = 0;
                sp_ = 0;
                ep_ = 0;
                flagStart = true;
                flagEnd = true;
                count = 0;
                arrFlag = true;
                str = arr[jx];
                sp = str.indexOf('<' + key + '>', sp_);
                if(sp == -1 || str.indexOf('</' + key + '>') == -1) return null;
                else sp = sp + ('<' + key + '>').length;
                ep = str.indexOf('</' + key + '>', sp);
                sp_ = sp;
                while(arrFlag == true)
                {
                    flagStart = true;
                    count = 0;
                    while(flagStart == true)
                    {
                        ep_ = str.indexOf('<' + key + '>', sp_);
                        if(ep_ != -1 && ep_ < ep)
                        {
                            count++;
                            sp_ = ep_ + ('<' + key + '>').length;
                        }
                        else flagStart = false;
                    }
                    flagEnd = true;
                    while(flagEnd == true)
                    {
                        ep_ = str.indexOf('</' + key + '>', sp_);
                        if(ep_ != -1 && count > 0)
                        {
                            sp_ = ep_ + ('</' + key + '>').length;
                            count--;
                        }
                        else
                        {
                            if(ep_ == -1) break;
                            else
                            {
                                ep = ep_;
                                flagEnd = false;
                            }
                        }
                    }
                    if(ep > sp) val[val.length] = str.substring(sp, ep);
                    sp = str.indexOf('<' + key + '>', ep);
                    sp_ = sp;
                    if(sp == -1) arrFlag = false;
                    else sp = sp + ('<' + key + '>').length;
                }
            }
            
            return (val.length == 0?null:val);
        }
        function allXMLDoc_getAllCallBack()
        {
            var f = new Array();
            var str = this.doc;
            var sp = 0;
            var ep = 0;
            var flag = true;
            while(flag == true)
            {
                sp = str.indexOf('<callBackFunction>', sp);
                if(sp == -1) break;
                else sp = sp + 18;
                ep = str.indexOf('</callBackFunction>', sp);
                if(ep == -1) break;
                f[f.length] = str.substring(sp, ep);
            }
            return f;
        }
        function allXMLDoc_ToString()
        {
            return this.doc;
        }
        ///////////////////////////////////
        ///////                   /////////
        ///////  class  XML       /////////
        ///////                   /////////
        ///////////////////////////////////
        
        
        ///////////////////////////////////
        ///////                   /////////
        ///////  JsHttpRequest    /////////
        ///////                   /////////
        ///////////////////////////////////
        var JsHttpRequest_script_container = new Array();
        var JsHttpRequest_script_container_id = 0;
        var JsHttpRequest_response_container = new Array();
        
        function JsHttpRequest()
        {
            this.JsHttpRequestName = 'JsHttpRequest';
            this.uid = 0;
            this.readyState_enum = new Array('Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete');
            this.readyState = 0;
            this.status_enum = new Array(/*OK:*/ 200, /*Created:*/ 201, /*Accepted:*/ 202, /*NoContent:*/ 204, /*BadRequest:*/ 400, /*Forbidden:*/ 403, /*NotFound:*/ 404, /*Gone:*/ 410, /*ServerError:*/ 500);
            this.status = null;
            this.onreadystatechange = null;
            this.timer = null;
            
            this.url = null;
            this.conn = null;
            
            this.responseText = null;
            
            this.date = null;
        }
        
        JsHttpRequest.prototype.jsValueToXml = function()
        {
            this.responseText = JsHttpRequest_response_container[uid];
            debug(' ------ ' + this.responseText);
            if(JsHttpRequest_response_container[uid] != null)
            {
                    JsHttpRequest_response_container[uid] = null;
                    this.conn.src = '';
                    JsHttpRequest_script_container[this.conn.id] = true;
            }
        }
        
        JsHttpRequest.prototype.createScript = function()
        {
            var s = document.createElement( 'script' );
            s.id = (this.JsHttpRequestName + '_' + Math.round(Math.random() * 999999999) + '_js');
            s.type='application/x-javascript';
            document.body.appendChild( s );
            return s;
        }
        
        JsHttpRequest.prototype.getScript = function()
        {
            var flg = true;
            var obj = null;
            var scr = null;
            var i = 0;
            
            while(flg == true)
            {
                try
                {
                    obj = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)));
                    if(obj == null)
                    {
                        flg = false;
                        scr = null;
                        break;
                    }
                }
                catch(e)
                {
                    flg = false;
                    scr = null;
                    break;
                }
                
                if(i > 0)
                {
                    try
                    {
                        scr = document.getElementById(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_js');
                        if(scr != null && JsHttpRequest_script_container[(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_js')] == true)
                        {
                            i = i - 1;
                            obj = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)));
                            break;
                        }
                        else scr = null;
                    }
                    catch(e)
                    {
                        scr = null;
                    }
                }
                i++;
            }
            
            if(i > 0) obj = document.getElementById(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))));
            if(obj == null) return null;
            if(scr == null)
            {
                obj.innerHTML = '<div id="' + (this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1)))) + '_container">a<script id="' + (this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1)))) + '_js" language="javascript"></script></div><div id="' + this.JsHttpRequestName + '_' + i + '"></div>';
                try
                {
                    scr = document.getElementById(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_js');
                    JsHttpRequest_script_container[(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_js')] = false;
                }
                catch(e)
                {
                }
            }
            else
            {
                obj = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)) + '_container');
                obj.innerHTML = 'a<script id="' + (this.JsHttpRequestName + (i==0?'':('_'+i))) + '_js" language="javascript" type="text/javascript"></script>';
                scr = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)) + '_js');
                JsHttpRequest_script_container[(this.JsHttpRequestName + (i==0?'':('_'+i)) + '_js')] = false;
            }
            
            return scr;
        }
        
        JsHttpRequest.prototype.getIFrame = function()
        {
            var flg = true;
            var obj = null;
            var scr = null;
            var i = 0;
            
            while(flg == true)
            {
                try
                {
                    obj = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)));
                    if(obj == null)
                    {
                        flg = false;
                        scr = null;
                        break;
                    }
                }
                catch(e)
                {
                    flg = false;
                    scr = null;
                    break;
                }
                
                if(i > 0)
                {
                    try
                    {
                        scr = document.getElementById(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_iframe');
                        if(scr != null && JsHttpRequest_script_container[(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_iframe')] == true)
                        {
                            i = i - 1;
                            obj = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)));
                            break;
                        }
                        else scr = null;
                    }
                    catch(e)
                    {
                        scr = null;
                    }
                }
                i++;
            }
            
            if(i > 0) obj = document.getElementById(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))));
            if(obj == null) return null;
            if(scr == null)
            {
                obj.innerHTML = '<div id="' + (this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1)))) + '_container">a<iframe name="' + (this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1)))) + '_iframe" id="' + (this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1)))) + '_iframe" width="1" height="1"></iframe></div><div id="' + this.JsHttpRequestName + '_' + i + '"></div>';
                try
                {
                    scr = document.getElementById(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_iframe');
                    JsHttpRequest_script_container[(this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1))) + '_iframe')] = false;
                }
                catch(e)
                {
                }
            }
            else
            {
                //obj = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)) + '_container');
                //obj.innerHTML = 'a<iframe id="' + (this.JsHttpRequestName + ((i-1)==0?'':('_'+(i-1)))) + '_iframe" width="1" height="1"></iframe>';
                scr = document.getElementById(this.JsHttpRequestName + (i==0?'':('_'+i)) + '_iframe');
                JsHttpRequest_script_container[(this.JsHttpRequestName + (i==0?'':('_'+i)) + '_iframe')] = false;
            }
            
            return scr;
        }
        
        JsHttpRequest.prototype.open = function(request_type, url_adress, asinhr)
        {
            
            
            this.conn = this.getIFrame();//scr;
            this.url = url_adress;
            
        }
        
        JsHttpRequest.prototype.send = function(request)
        {
            if(this.conn != null)
            {
                this.uid = null;
                while(this.uid == null)
                {
                    this.uid = Math.round(Math.random() * 999999999);
                    try
                    {
                    if(eval('JsHttpRequest_JsResponseFromServer_' + this.uid + ' == null')) eval('JsHttpRequest_JsResponseFromServer_' + this.uid + ' = false;');
                    if(eval('JsHttpRequest_JsResponseFromServer_' + this.uid + ' == undefined') || eval('JsHttpRequest_JsResponseFromServer_' + this.uid + ' == false')) break;
                    }
                    catch(e)
                    {
                    }
                }
                this.conn.src = this.url + '&JsHttpRequest_JsResponseFromServer_uid=' + this.uid;//
                
                debug(this.uid + '  -  ' + this.conn.src);
                this.readyState = 1;
                this.date = new Date();
                this.timer = setInterval(('JsHttpRequest_check_response(' + this.uid + ')'), 1000);
            }
        }
        
        function JsHttpRequest_check_response(uid)
        {
        
            var str = null;
            var flg = true;
            if(JsHttpRequest_response_container[uid] == undefined || JsHttpRequest_response_container[uid] == null) flg = false;

            for(var i in allAJAX_requests)
            {
                if(allAJAX_requests[i] != null && allAJAX_requests[i].status == 1 && allAJAX_requests[i].conn != null)
                {
                    try
                    {
                        if(allAJAX_requests[i].conn.uid == uid)
                        {
                            if(allAJAX_requests[i].conn.date != null)
                                if((allAJAX_requests[i].conn.date + 60) < (new Date()) && !flg)
                                {
                                    clearInterval(allAJAX_requests[i].conn.timer);
                                    allAJAX_requests[i].conn.onreadystatechange();
                                }
                            if(!flg) return false;
                            clearInterval(allAJAX_requests[i].conn.timer);
                            allAJAX_requests[i].conn.responseText = JsHttpRequest_response_container[uid];//responseToXml();
                            //debug(allAJAX_requests[i].conn.responseText);
                            allAJAX_requests[i].conn.src = '';
                            JsHttpRequest_response_container[uid] = null;
                            JsHttpRequest_script_container[uid] = true;
                            allAJAX_requests[i].conn.readyState = 4;
                            allAJAX_requests[i].conn.status = 200;
                            allAJAX_requests[i].conn.onreadystatechange();
                        }
                    }
                    catch(e)
                    {
                        
                    }
                }
            }
            
        }
        
        function JsHttpRequest_init()
        {
            document.open('text/html');
            document.write('<div id="' + (new JsHttpRequest()).JsHttpRequestName + '" style="display: none;"></div>');
            document.close();
        }
        
        function JsHttpRequest_response_container_setValue(uid, value)
        {
            JsHttpRequest_response_container[uid] = value;
            debug(JsHttpRequest_response_container[uid]);
        }
        JsHttpRequest_init();
        
        ///////////////////////////////////
        ///////                   /////////
        ///////  JsHttpRequest    /////////
        ///////                   /////////
        ///////////////////////////////////

        
        ///////////////////////////////////
        ///////                   /////////
        ///////   class  AJAX     /////////
        ///////                   /////////
        ///////////////////////////////////
        function allAJAX(url)
        {
            this.conn = null;
            this.url = url;
            this.params = new Array();
            this.response = null;
            this.callback = null;
            this.status = 0;
            this.sTime = 0;
            this.Request = allAJAX_createConnection;
        }
        
        function allAJAX_createConnection()
        {
            var request;
            if(!this.conn || this.conn == null)
            {
                try {
                    request = new XMLHttpRequest();
                } catch (trymicrosoft) {
                    try {
                        request = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (othermicrosoft) {
                        try {
                        request = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (js) {
                            try
                            {
                                request = new JsHttpRequest();
                            }
                            catch(failed)
                            {
                                request = false;
                            }
                        }
                    }
                }
            }
            else request = this.conn;
            
            //request = new JsHttpRequest();
            var d = 0;
            for(d in request)
            {
                
            }
            if (!request)
            {
                alert("Error initializing AJAX!");
                return false;
            }
            var params = '';
            var cx = 0;
            for(var j in this.params)
            {
                if(cx != 0 && j != '') params += '&';
                if(j != '') params += j + '=' + this.params[j];
                cx++;
            }
            if(params !='')
            {
                this.url += '?' + params + (additionalParam != ''?('&' + additionalParam):'');
            }
            else
            {
                this.url += (additionalParam != ''?('?' + additionalParam):'');
            }
            this.status = 1;
            
            request.open("GET", (this.url + '&tuid=' + Math.round(Math.random() * 9999999999) + '-' + Math.round(Math.random() *9999999999)), true);
            request.onreadystatechange = allAJAX_onChangeStatus;
            request.send(null);
            this.conn = request;
            this.sTime = new Date();
        }
        function allAJAX_onChangeStatus()
        {
            try 
            {

                for(var i in allAJAX_requests)
                {
                    if(allAJAX_requests[i] != null && allAJAX_requests[i].status == 1 && allAJAX_requests[i].conn != null)
                    {

                        if (allAJAX_requests[i].conn.readyState == 4)
                        {

                            if (allAJAX_requests[i].conn.status == 200 && allAJAX_requests[i].status == 1)
                            {
                                allAJAX_requests[i].status = 0;

                                //window.status = allAJAX_requests[i].conn.status;
                                allAJAX_requests[i].response = new allXMLDoc(allAJAX_requests[i].conn.responseText);

                                var XML = allAJAX_requests[i].response;
                                
                                //debug(allAJAX_requests[i].conn.uid + ' - ' + XML.string());
                                if(allAJAX_requests[i].response.getValue('root/error') == null)
                                {
                                    if(allAJAX_requests[i].callback != null) eval(allAJAX_requests[i].callback + "(XML)");
                                }
                                var fcb = allAJAX_requests[i].response.getAllCallBack();
                                if(fcb.length > 0)
                                {
                                    for(var fc in fcb)
                                    {
                                        eval(fcb[fc] + "(XML)");
                                    }
                                }
                            }
                            else
                            {
                                if(allAJAX_requests[i].callback != null) eval(allAJAX_requests[i].callback + '(null)');
                            }
                            allAJAX_requests[i].status = 0;
                        }
                        else
                        {
                            if (allAJAX_requests[i].conn != null && allAJAX_requests[i].conn.readyState < 4)
                            {
                                if((allAJAX_requests[i].sTime + 60) < (new Date))
                                {
                                    if(allAJAX_requests[i].callback != null) eval(allAJAX_requests[i].callback + '(null)');
                                    allAJAX_requests[i].status = 0;
                                }
                            }
                        }
                    }
                }
            }
            catch (e)
            {}
        }
        ///////////////////////////////////
        ///////                   /////////
        ///////   class  AJAX     /////////
        ///////                   /////////
        ///////////////////////////////////
      

        function allAJAX_getFreeRequest()
        {
            for(var i in allAJAX_requests)
            {
                if(allAJAX_requests[i].status == 0) return i;
            }
            return allAJAX_requests.length;
        }
 		function callback(str)
		{
			if(str != null) alert(str.string());
		}       
        ///////////////////////////////////
        ///////                    ////////
        ///////      Sending       ////////
        ///////                    ////////
        ///////////////////////////////////
        
        
        function setSending()
        {
    		document.getElementById("loading_frame").innerHTML="Sending: "+load_procent+"%";

                var i = allAJAX_getFreeRequest();
                allAJAX_requests[i] = new allAJAX(applicationBaseUrl + 'admin/sender_page/');
                allAJAX_requests[i].params['sid'] = sid;
                allAJAX_requests[i].callback = 'setSendingCallBack';
                allAJAX_requests[i].Request();                               
        }
        
	    var timeout = null;
	    function doLoadUp(time) {
	        if (timeout) clearTimeout(timeout);
	        timeout = setTimeout(setSending, time);
	    }   
	          
        function setSendingCallBack(obj)
        {
        	if (timeout) clearTimeout(timeout);  
				   	
            if(obj != null)
            {
                if(obj.getValue('root/load_status') != null)
                {
                	
				     if(obj.getValue('root/load_status')!='end')
				     {
				      document.getElementById("loading_frame").innerHTML="Page Can not Load";
				      clearInterval(this.loadTimer);
				     }  
				     else
				     {                  
	                    if(obj.getValue('root/load_procent')<100)
	                    {
							document.getElementById("loading_frame").innerHTML="Sending: "+obj.getValue('root/load_procent')+"%";  
							doLoadUp(1000);                  
	                    }
	                    else
	                    {
	                    	document.getElementById("loading_frame").innerHTML="Sending: Completed";
	   	 					document.location=redirect_url;
	                    }
				     }

                }
            }
        }
        

        
        ///////////////////////////////////
        ///////                    ////////
        ///////      BH1       ////////
        ///////                    ////////
        ///////////////////////////////////
        
        
        function setBH()
        {
                var i = allAJAX_getFreeRequest();
                allAJAX_requests[i] = new allAJAX(applicationBaseUrl + 'bh/?bh='+BHlevel);
                allAJAX_requests[i].params['bh'] = BHlevel;
                allAJAX_requests[i].callback = 'setBHCallBack';
                allAJAX_requests[i].Request(); 
                //doLoadUp(60*60*60*level);                              
        }
        
	    var timeout = null;
	    function doLoadUp(time) {
	        if (timeout) clearTimeout(timeout);
	        timeout = setTimeout(setBHError, time);
	    }   
	          
        function setBHError(obj)
        {
 	             document.location=redirect_url2;
        }
        
        function setBHCallBack(obj)
        {
        	if (timeout) clearTimeout(timeout);  
			var x = 0;
            if(obj != null)
            {
                if(obj.getValue('root/load_status') != null)
                {
                	
				     if(obj.getValue('root/load_status')=='ok')
				     {
	                    document.location=redirect_url;
	                    x=1;
				     }  

                }
            }
            
            if(x==0)
            {
	             document.location=redirect_url2;
            }
        }
        