var Ajax = new Object();
Ajax.isUpdating = true;

Ajax.Request = function(method, url, query, callback){
    this.isUpdating = true;
    this.callbackMethod = callback;
    this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject("MSXML2.XMLHTTP"); 
    this.request.onreadystatechange = function() { Ajax.checkReadyState(); };
    
    if(method.toLowerCase() == 'get') url = url+"?"+query;
    this.request.open(method, url, true);
    this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    this.request.send(query);
}
    
Ajax.checkReadyState = function(_id){
    switch(this.request.readyState){
        case 1: break;
        case 2: break;
        case 3: break;
        case 4:
            this.isUpdating = false;
            this.callbackMethod(this.request.responseText);
    }
}

var Post = new Object();
var submitForm = '';
Post.Send = function(form){
    var query = Post.buildQuery(form);
    submitForm = form;
    Ajax.Request(form.method, form.action, query, Post.OnResponse);
}

Post.OnResponse = function(response){
    SubmitResponse(response);
}

Post.buildQuery = function(form){
    var query = "";
    for(var i=0; i<form.elements.length; i++){
        var key = form.elements[i].name;
        var value = Post.getElementValue(form.elements[i]);
        if(key && value!=undefined){
            query += key +"="+ escape(value) +"&";
        }
    }
    return query;
}

Post.getElementValue = function(formElement){
    if(formElement.length != null) var type = formElement[0].type;
    if((typeof(type) == 'undefined') || (type == 0)) var type = formElement.type;

    switch(type){
        case 'undefined': return;

        case 'radio':
            if(formElement.checked == true) return formElement.value;
            return;
        case 'select-multiple':
            var myArray = new Array();
            for(var x=0; x < formElement.length; x++) 
                if(formElement[x].selected == true)
                    myArray[myArray.length] = formElement[x].value;
            return myArray;

        case 'checkbox': return formElement.checked;
       
        default: return formElement.value;
    }
}

function emptyForm(){
    var form = submitForm;
    form.reset();
}

function SubmitResponse(response){
    var RStatus = '';
    var RMessage = '';
    var sDiv = document.getElementById('successdiv');
    var eDiv = document.getElementById('errordiv');
    
    if (response.substring(0,9) != 'RStatus =') {
        RStatus = 'BAD';
        RMessage = 'Cannot connect to server, please try again later.';
    }else{
        eval(response);
    }

    sDiv.innerHTML =  RStatus == 'OK' ? RMessage : '';
    sDiv.style.display = RStatus == 'OK' ? 'block' : 'none';
    eDiv.innerHTML =  RStatus != 'OK' ? RMessage : '';
    eDiv.style.display = RStatus != 'OK' ? 'block' : 'none';
    
    if (RStatus == 'OK') emptyForm();
}

jQuery.ImgPreloadZ = function(){
  for(var i = 0; i<arguments.length; i++)  {
    jQuery("<img>").attr("src", arguments[i]);
  }
}

