var AjaxTo = Class.create();
AjaxTo.prototype = {

    thisForm : null,
    actionMethod : '',
    formAction : '',
    callBackAction : '',
    params : '',
    pToken : '',
    asynchronous : true,
    evalScripts : true,
	checkValidate : false,
	pageValidate : null,
    gCallCount : 0,

    initialize: function(form) {
        //this.form  = $(formName);
		if(typeof form == "string"){
			this.addFormElement(form);
		}else{
			this.addFormElement(form.name);
		}
    },

	ajaxRequest : function(){
		var form = this.thisForm;
		var method = form.method;
		var formName = form.name;
		if(method == "get"){
			this.callRequestValidate(formName,"ajaxGet");
		}else if(method == "post"){
			this.callRequestValidate(formName,"ajaxPost");
		}else{
			alert("call method error!!");
		}
	},

    ajaxGet : function(){
        /*
        var form = $(this.postFormName);
        form.request({method: 'get', parameters:'method=' + this.actionMethod + '&sAction=' + this.formAction + '&' + this.params, onSuccess:this.handlerFunc, onFailure:this.errFunc,asynchronous:this.asynchronous, evalScripts:this.evalScripts});
        */
        var form = this.thisForm;
		var actionForm = form.action;
        new Ajax.Request(actionForm, {method: 'get', parameters:Form.serialize(form), onSuccess:this.handlerFunc, onFailure:this.errFunc,asynchronous:this.asynchronous, evalScripts:this.evalScripts});
    },

    ajaxPost : function(){
        /*
        var form = $(this.postFormName);
        form.request({method: 'post', parameters:Form.serialize(form), onSuccess:handlerFunc, onFailure:errFunc,asynchronous:asynchronous, evalScripts:evalScripts});
        */
        var form = this.thisForm;
		var actionForm = form.action;
        new Ajax.Request(actionForm, {method: 'post', parameters:Form.serialize(form), onSuccess:this.handlerFunc, onFailure:this.errFunc,asynchronous:this.asynchronous, evalScripts:this.evalScripts});
    },

    handlerFunc : function(t){
        eval("var rt=" + t.responseText);
        var form = this.thisForm;
        if(rt.content == ""){
            addFormInputElement(form,"submitMod","","hidden");
            addFormInputElement(form,"sAction",this.callBackAction,"hidden");
            addFormInputElement(form,"pToken",this.pToken,"hidden");
            this.formSubmit();
        }else{
            alert(rt.content);
        }
    },

    errFunc : function(t){
        alert('Error ' + t.status + ' -- ' + t.statusText);
    },

	formSubmit : function(){
        var form = this.thisForm;
		form.submit();
	},

    addFormElement : function(elementName){
        var elem = $(elementName);
        if(!elem){
            var obj = document.createElement("form");
            //Element.extend(obj);
            obj.id = elementName;
            obj.name = elementName;
            document.body.appendChild(obj);
        }
		this.thisForm = $(elementName);
    },

	addFormElemByAry : function(queryParams){
		for(i=0; i<queryParams.length;i = i + 2){
			var elName = queryParams[i];
			if(queryParams[i+1] == false){
				var elValue = '';
			}else{
				var elValue = queryParams[i+1];
			}
			this.addFormInputElement(elName,elValue,"hidden");
		}
	},

    addFormInputElement : function(elementName,value,elementType){
        var form = this.thisForm;
		eval('var elem = form.' + elementName + ';');
        if(!elem){
            var obj = document.createElement("input");
            obj.value = value;
            obj.name = elementName;
			obj.id = elementName;
            obj.type = elementType;
            form.appendChild(obj);
        }else{
            eval('form.' + elementName + '.value = "' + value + '";');
        }
    },

    removeFormInputElement : function(elementName){
        var form = this.thisForm;
		eval('var elem = form.' + elementName + ';');
        if(elem){
            elem.remove();
        }
    },

	disableBtn : function(disabled){
        var form = this.thisForm;
		var ary = form.getElements();
		ary.each(function(s) {
		  if(s.type == "button"){
			s.disabled = disabled;
		  }
		});
	},

	requestForm : function(){
		//eval("var form = document." + formName + "");
        var form = this.thisForm;
		var formName = form.name;
		this.callRequestValidate(formName,"formSubmit");
	},

	callRequestValidate : function(formName,callBackMethod){
		this.disableBtn(true);
		var chkSet = this.checkValidate(formName);
		if(!chkSet){
			this.disableBtn(false);
			return;
		}    
		eval("this." + callBackMethod + "()");
	},
	
	setFormElement : function(key,val){
		var form = this.thisForm;
		eval("form." + key + "='" + val + "'");
	}
};

var checkValidate = function(formName){
	return true;
}


var postForm = function(formObj,queryParams,postType,checkValidate){
    var frm = new AjaxTo(formObj);

    frm.checkValidate = checkValidate;
    //frm.setFormElement("action","");
    //frm.setFormElement("method","post");
    frm.addFormElemByAry(queryParams);
    if(postType == "ajax"){
        frm.ajaxRequest();
    }else{
        frm.requestForm();
    }
}


