﻿// JScript File
/****************************************************
Developed by : Mukesh.Yadav@suviinfo.com
Purpose : Handling Ajax reqests.
Created Date : 29 March 2007

====================================================
Public Interface
Syntax : ajax.Get(url,callback, [errorHandler]);

url         = A valid url within same domain.
callback    = A reference to a function which called on successful completion of request,
              it returns a request object, that can be used to retrive request result
              either by 'responseText' or 'responseHTML' property
errorHandler = (Optional), A reference to a function which is used to display errors.
               A error message is sent as parameter. 
****************************************************/

Ajax = function(){
    //var request = null;
    this._defaultErrorHandler = function(error){alert(error);};
    this._errorHandler = this._defaultErrorHandler;
    
    this.getRequestObject= function(){ 
        var request = null;
            try {
                request = new XMLHttpRequest();
            }
            catch(e){
                try {  
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e2){
                    try {
                        request = new ActiveXObject("Msxml2.XMLHTTP");
                    }
                    catch (e3){
                        this._errorHandler('Browser not support AJAX');
                        request = null;
                    }
                }
            } 
        return request;
     };
     
    this.Get = function(url, callback, errorHandler){
        this._errorHandler=(errorHandler)?errorHandler:this._defaultErrorHandler;
            
        if(!url || url=='')
            this._errorHandler('Url is required');
        else if(!callback)
            this._errorHandler('callback is required');
        else{
            var req = this.getRequestObject();
            if(req){
                req.onreadystatechange = function(){
                    if(req.readyState  == 4){
                        if(req.status  == 200)
                            callback(req); 
                        else {
                            alert(req.status+' : '+req.statusText);
                        }
                    }
                }
                req.open("GET", url,  true); 
                req.send(null); 
            }
        }
    };
    
    this.Post = function(url,data, callback, errorHandler){
        this._errorHandler=(errorHandler)?errorHandler:this._defaultErrorHandler;
            
        if(!url || url=='')
            this._errorHandler('Url is required');
        else if(!data || data=='')
            this._errorHandler('data is required');
        else{
            var dataArray=new Array();
            for(var key in data){
                dataArray.push(key+'='+escape(data[key]));
            }
            var req = this.getRequestObject();
            if(req){
                req.onreadystatechange = function(){
                    if(req.readyState  == 4){
                        if(req.status  == 200)
                            if(callback)
                                callback(req); 
                        else {
                            alert(request.status+' : '+req.statusText);
                        }
                    }
                }
                req.open("POST", url,  true); 
                req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' ); 
                req.send(dataArray.join('&')); 
            }
        }
    };
}
var ajax = new Ajax();
