﻿//include base.js

if(!_httpRequest_){
   var _httpRequest_=true;
   
      //////// XMLhttpRequest /////////
    //if (typeof XMLHttpRequest == "undefined" && window.ActiveXObject ) {//browser is IE
    if ( isIE() ){//browser is IE

        XMLHttpRequest= function() {//return mghjRequest

            var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
            "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
            "Microsoft.XMLHTTP"];
            for (var i=0; i < arrSignatures.length; i++) {
                try {
                    var oRequest = new ActiveXObject(arrSignatures[i]);
                        //mghj add
                        

                   return oRequest;
                } catch (oError) {
                //IE no another way to new oRequest needed
                }
            }
           throw new Error("for IE only :MSXML is not installed on your system.");

      };
      
    } 


        
    function mghjHttpRequest(){
                
                       var mghjRequest=new Object();
                       
                        mghjRequest.oRequest=new XMLHttpRequest();
                        mghjRequest.url='';//public
                        mghjRequest.method='post'; //public post or get default post
                        mghjRequest.postParam=''; //private
                        mghjRequest.asyn=true;//public 
                        mghjRequest.showDivLoding=true;
                        mghjRequest.parentNodeDivLoding=null;
                        mghjRequest._hasAbortButton=false;
                        mghjRequest._pfOnAbort=null;
                        
                            mghjRequest.Init=function (url,pFonReady,method,asyn,showloding){ Init(url,pFonReady,method,asyn,showloding);};
                            mghjRequest.addPostParam=function ( sParamName, sParamValue){ mghjRequest.postParam= addPostParam(mghjRequest.postParam, sParamName, sParamValue); };
                            mghjRequest.addURLParam=function ( sParamName, sParamValue){ mghjRequest.url=addURLParam(mghjRequest.url, sParamName, sParamValue);};
                            mghjRequest.Send=function (){
                                                        try{ openCon(); if(mghjRequest.showDivLoding)ShowLoading(); sendCon();}
                                                        catch(error){HideLoading(true); alert('متاسفانه مشكلي در ارتباط با سرور پيش آمده در نتيجه درخواست شما انجام نشد'+'\n check that you are connected to internet and your browser is not in Work Offline');} };
                            
                            mghjRequest.setAbort=function(pfOnAbort){mghjRequest._hasAbortButton=true; if(pfOnAbort){mghjRequest._pfOnAbort=pfOnAbort;} };
                            mghjRequest.abort=function(){mghjRequest.oRequest.abort(); mghjRequest._pfOnAbort(); HideLoading(true);};
                            mghjRequest.getResponse=function(){ return mghjRequest.oRequest.responseText;};
		                    mghjRequest.getState=function(){var ret; ret=mghjRequest.oRequest.readyState; return ret; };
    			            
    			                                     

                            ///////  function  ///
                               function Init(url,pFonReady,method,asyn,showloding){ //default post asyn true
                                  if(showloding)mghjRequest.showDivLoding= showloding ;
                                  mghjRequest.url=url; 
                                  if(method!=null)mghjRequest.method=method; 
                                  if(asyn!=null)mghjRequest.asyn=asyn;
                                  if(mghjRequest.asyn==true){ if(pFonReady)mghjRequest.oRequest.onreadystatechange =function(){if(mghjRequest.showDivLoding){HideLoading(); if(mghjRequest.interval){clearInterval(mghjRequest.interval);} }  pFonReady(); }; }
                                  else { mghjRequest.oRequest.onreadystatechange =function(){}; }
                               }
                              
                               function addPostParam(sParams, sParamName, sParamValue) {
                                    if (sParams.length > 0) {
                                    sParams += "&";
                                    }
                                    return sParams + encodeURIComponent(sParamName) + "="
                                    + encodeURIComponent(sParamValue);
                                }
                                 function addURLParam(sURL, sParamName, sParamValue) {
                                    sURL += (sURL.indexOf("?") == -1 ? "?" : "&");
                                    sURL += encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue);
                                    return sURL;
                                }                            
                                function openCon(){                           
                                    mghjRequest.oRequest.open(mghjRequest.method, mghjRequest.url, mghjRequest.asyn);
                                    if(mghjRequest.method=='post'){ mghjRequest.oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); }
                                }
                                function sendCon(){//private
                                   if(mghjRequest.method!='post'){ mghjRequest.oRequest.send(null);}
                                   else{mghjRequest.oRequest.send(mghjRequest.postParam); }                             
                                }
                                function ShowLoading(){
                                      if(mghjRequest.divLoading){                                  
                                      }
                                      else{
                                        var div= $c('div');
                                        div.innerHTML='لطفا كمي صبر كنيد ...';                                  
                                        div.style.cssText='color:#ff0000; background-color:#ffffff; position:absolute; top:0px; left:0px;';
                                        div.className='rightwrite ddClassName';//ddClassName for dragable 
                                        if(mghjRequest._hasAbortButton){
                                            var abortdiv=$c('div');
                                            var btn=$c('input');
                                            btn.type='button';
                                            btn.value='لغو';
                                            btn.onclick=function(){mghjRequest.abort();};
                                            abortdiv.appendChild(btn);
                                            abortdiv.style.width='100%';
                                            div.appendChild(abortdiv);
                                        }
                                        
                                        if(mghjRequest.parentNodeDivLoding){
                                            //mghjRequest.parentNodeDivLoding.style.position='relative';
                                            div.style.position='relative';
                                            mghjRequest.parentNodeDivLoding.appendChild(div);                                            
                                        }
                                        else{
                                            div.style.top = document.body.scrollTop;
                                            document.body.appendChild(div);
                                                                                        
                                            mghjRequest.interval= setInterval( function (){  
                                               var div=mghjRequest.divLoading;
                                               var orginaltop= document.body.scrollTop  ;
                                               if( parseInt( div.style.top) != orginaltop){
                                                   div.style.top = orginaltop - Math.ceil( (orginaltop-parseInt( div.style.top) )/2 ) ;
                                               }
                                              },50);                                            
                                        }                                        
                                        mghjRequest.divLoading=div; 
                                        
                              
                                     }   
                                  mghjRequest.divLoading.style.visibility='visible';
                                }
		                        function HideLoading(anyway){//if anyway = true the function do his work anyway
		                          if(anyway || mghjRequest.getState()==4){
		                              mghjRequest.divLoading.style.visibility='hidden'; 
		                              mghjRequest.divLoading.parentNode.removeChild(mghjRequest.divLoading); // the divLoading with 
		                           }
		                        }  
                    //mghj add
                    
               return mghjRequest;
    }

}//end if _httpRequest_
//testmode
else{
    alert('the httpRequest.js file duplicated');
}
//end testmode

