// JavaScript Document

/**
 *  Class to make dealing with ajax a lot easier
 *  Also creates an instance of AntzXML and holds a reference to it in AntzAjax.xml
 *    
 *  Usage:

 *  someObject{ 
 *     nextMethod : function(){
 *         var xml = this.ajax.xml;
 *         var msg = xml.getByTag('msg');
 *         alert(msg);    
 *     }
 *  }      
 *  params = Array();
 *  params['action']='getError';
 *  url = http://site.com/ajaxController;   
 *  someObject.ajax = AntzAjax.getInstance();
 *  someObject.ajax.send(url, params, 'someObject.nextMethod');
 *  
 */
 
var AntzAjax = {

    init : function(ajax){
        if(typeof(ajax)=='Object'){
            this.ajax = ajax;
            return;
        }
        if (window.XMLHttpRequest) { 
            var ajax = new XMLHttpRequest();
        } else if (window.ActiveXObject) { 
            var ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }else{
            var ajax = null;
        };
        this.ajax = ajax;
    },
    
    getInstance : function(){
        var x = new Object();
        for(var e in AntzAjax){
            x[e] = AntzAjax[e];
        };
        x.init();
        return x;
    },
    
    /**
     * Supply this with 
     * the url to the controller on the server, 
     * any $_GET params as a key=>value array, 
     * the method to call after successfully parsing the file,
     * and whether to be synchronous or not     
     */     
    send : function(urlAction, params, parseMethod, synchronous){
        this.nextAction = parseMethod;
        if(synchronous!==false)synchronous=true;
        var extras = '';
        for(var i=0;i<params.length;i++){
            extras += '&'+params[i]['name']+'='+params[i]['value'];
        };
        extras = extras.substring(1);
        helper = AntzAjaxHelper.add(this);
        this.ajax.onreadystatechange = function(){AntzAjax.parseResponse(AntzAjaxHelper.get(helper));};
//        alert(AntzCatz.url+'?action='+urlAction+extras)
        this.ajax.open("GET", urlAction+'?'+extras, true);
        this.ajax.send(null);
    },
    
    parseResponse : function(helper){
        if(helper.ajax.readyState==4){
            if(helper.ajax.status==200){
                helper.xml = AntzXML.getInstance();
//alert(helper.ajax.responseText);
                helper.xml.init(helper.ajax.responseXML);
                if(helper.xml.getByTag('error')==1){
                    alert(helper.xml.getByTag('msg'));
                    return;
                };
                setTimeout(helper.nextAction, 1);                
            }else{
                alert('There is an error in the response status');
            };
        };
    },
    
    /**
     *  Use this to form arrays for passing as parameters
     *  Usage ( for accessing the rename action ):
     *  params = AntzAjax.appendArray(params, 'action', 'rename');
     */    
    appendArray : function(arr, key, value){
         var i = arr.length;
        arr[i]=Array();
        arr[i]['name']=key;
        arr[i]['value']=value;
        return arr;
    }
    
}

var AntzAjaxHelper = {
    refs : Array(),
    add : function(ref){
        var i = this.refs.length;
        this.refs[i]=ref;
        return i;
    },
    
    get : function(i){
        return this.refs[i];
    }
}
