if(typeof(jlaurino) === 'undefined') jlaurino = {};


jlaurino.xmlhttp = {};

jlaurino.xmlhttp = {
    "ContentType" : {
        "TEXT" : 0,
        "DOM" : 1,
        "FEED" : 2,
        "JSON" : 3
    },
    "RequestParameters" : {
        "CONTENT_TYPE" : "cnttype"
    }      
}


jlaurino.xmlhttp.AjaxRequest = function(){

    //activeX versions to check for in IE
    var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];

    //Test for support for ActiveXObject in IE first 
    //(as   XMLHttpRequest in IE7 is broken)

    if (window.ActiveXObject){   

        for (var i=0; i<activexmodes.length; i++){
            try{
                return new ActiveXObject(activexmodes[i]);
            }catch(e){
                 //supress error
            }
        }
    }else if (window.XMLHttpRequest){
        // if Mozilla, Safari etc
        return new XMLHttpRequest();
    }else{
        return null;
    }
}


jlaurino.xmlhttp.makeRequest = function(url,callback,opt_params){

    try{

        function processtext(){
            mygetrequest.onreadystatechange=function(){
             
                if (mygetrequest.readyState === 4){
                    if (mygetrequest.status === 200 || window.location.href.indexOf("http") === -1){
                        
                        retinfo.text =  mygetrequest.responseText;
                    }else{
                        retinfo.errors = mygetrequest.statusText;
                    }
                }
                callback(retinfo);
           }

           mygetrequest.open("GET", url, jlaurino.xmlhttp.async);
           mygetrequest.send(null);

       }//end processtext

       function processxml(){

            if (mygetrequest.overrideMimeType){
                mygetrequest.overrideMimeType("text/xml");
            }

            mygetrequest.onreadystatechange=function(){
                if (mygetrequest.readyState === 4){
                    if (mygetrequest.status === 200 || window.location.href.indexOf("http") === -1){

                        var contentType=mygetrequest.getResponseHeader("Content-Type");
                        if (contentType==="text/xml"){

                            retinfo.data = mygetrequest.responseXML;
                        }else if (contentType==="text/json"){
                            alert("jlaurino.xmlhttp.makeRequest expected xml - content JSON");
                            retinfo.data =  eval(mygetrequest.responseText); 
                        }else {
                            retinfo.data =  jlaurino.xml.loadString(mygetrequest.responseText);
                        } 

                    }else{
                        retinfo.errors = mygetrequest.statusText;
                    }
               }
               callback(retinfo);
           }

           mygetrequest.open("GET", url, true);
           mygetrequest.send(null);

       }//end processxml

        var retinfo = {};
        retinfo.data=null;
        retinfo.errors=null;
        retinfo.text=null;

        var mygetrequest = new jlaurino.xmlhttp.AjaxRequest();


       if(opt_params[jlaurino.xmlhttp.RequestParameters.CONTENT_TYPE] === jlaurino.xmlhttp.ContentType.TEXT){

           processtext();

       }else if(opt_params[jlaurino.xmlhttp.RequestParameters.CONTENT_TYPE] === jlaurino.xmlhttp.ContentType.DOM){

           processxml(); 
       } 
   
       return retinfo;

   }catch(err){

       retinfo.text = null;
       retinfo.data = null;
       retinfo.errors = err.description; 
       callback(retinfo);
       return retinfo;


   }

}

jlaurino.xmlhttp.readfile = function(url,params,custparams){

    function reqcb(obj){

         if(obj.text){
            custparams.parsecb(obj.text,custparams.parseparams);  
        }else if(obj.data){
            custparams.parsecb(obj.data,custparams.parseparams);  
        }

        if(obj.errors){ 
           if(custparams.errorcb){
               custparams.errorcb(obj.errors,custparams.errorparams);
            }else{
               alert("Error making ajax request " + obj.errors);
           }     
        }
    }//end reqcb 

    if(!params) {
        return;
    }

    if(!custparams && !custparams.parsecb) {
        return;
    }

    jlaurino.xmlhttp.makeRequest(url,reqcb,params);

}
