/**
 * @title   SynchronizerPHP
 * @author  SB from Synchronizer.js of ClassTA
 * v 1.1 working with post
 */


SynchronizerPHP = Class.create();
Object.extend(SynchronizerPHP.prototype, {


    /**
     * @constructor: Instantiate a local XMLHttpRequest object depending on browser support.
     */
    // url, xx, yy, (*.php
    initialize: function(sLocalRelPath, sTargetAbsPath) {

        this.sLocalRelPath = sLocalRelPath; // php url in the local host that will curl
        this.sTargetAbsPath = sTargetAbsPath; // php url in the test host at sdsu
    //alert("SynchronizerPHP.js: this.url = "+sLocalRelPath+' '+sTargetAbsPath);
        this.oXMLHttp = null
        if(window.XMLHttpRequest) {
            this.oXMLHttp = new XMLHttpRequest();
        }
        else if(window.ActiveXObject) {
            this.oXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    },


    // simplified response
    handleHttpResponse : function()
    {
        var args = $A(arguments);

        var oSynchronizer = args.shift();
        var callbackData =  args.shift();  // original this
        var callbackFunction =  args.shift();   // call back function


        if (oSynchronizer.oXMLHttp.readyState == 2 || oSynchronizer.oXMLHttp.readyState == 3)
        {

        }
        else if (oSynchronizer.oXMLHttp.readyState == 4 || oSynchronizer.oXMLHttp.readyState == 'complete')
        {
            switch(oSynchronizer.oXMLHttp.status)
            {
                case 404:
                    return;
                default:
                    callbackFunction.call(oSynchronizer, oSynchronizer, oSynchronizer.oXMLHttp.responseText, callbackData);
                    return;
            }
        }
    },


    _xmlError: function(e) {
        //alert(e);
        return;
    },
    //-----------------------------login related calls --------------------

    //send info by inJSON, get info by outJSON, method name is same in host and target (but in diff. paths)
    standardUpdate: function() {
        var args = $A(arguments);
        var sInJSON = args.shift(); // first argument after event and this
        var sMethod = args.shift(); // php method in local and remote server
        var callbackFunc = args.shift(); //call back method
        var callbackData = args.shift(); //this object


        var sLocalURL = this.sLocalRelPath + sMethod; // set by constructor
        var sTargetURL =this.sTargetAbsPath + sMethod;

        var params = "sInJSON="+sInJSON+"&sTargetURL="+sTargetURL;
        //alert('about to try standardUpdate'+ sMethod);
        try {


            this.oXMLHttp.open("POST", sLocalURL, true);

            //Send the proper header information along with the request
            this.oXMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            this.oXMLHttp.setRequestHeader("Content-length", params.length);
            this.oXMLHttp.setRequestHeader("Connection", "close");
            this.oXMLHttp.onreadystatechange = this.handleHttpResponse.bind(this, this, callbackData, callbackFunc);

            this.oXMLHttp.send(params);
        }
        catch(err) {
            alert('There was some problem contacting the server, please try again! Error Synch.js: 134                                .');
        }
    }




});

//alert('i am in synchphp.js');