var DEVXForm=function (data) {
	this.data=data;
	this.loader=data['loader'];
};

DEVXForm.prototype.submit = function (t, return_method, url) {
	var len=t.elements.length;
	if (typeof(url)=='undefined') {
		url=t.action;
	}
	var vars="";
	for (var i=0; i<len; i++) {
		if ((t.elements[i].name > '') && !t.elements[i].disabled) {
			if ( (t.elements[i].type=='radio') || (t.elements[i].type=='checkbox')) {
				if (t.elements[i].checked) {
					vars+="&"+t.elements[i].name+"="+encodeURIComponent(t.elements[i].value);
				}
			}
			else if (t.elements[i].multiple==true) {
				for (var s=0; s<t.elements[i].options.length; s++) {
					if (t.elements[i].options[s].selected) {
						vars+="&"+t.elements[i].name+"="+encodeURIComponent(t.elements[i].options[s].value);
					}
				}
			} else {
				vars+="&"+t.elements[i].name+"="+encodeURIComponent(t.elements[i].value);
			}
		}
	}
	var s=this;
	if (t.method.toUpperCase()=="GET") {
		this.loader.processGET(url+"&"+vars, function (http) {s.ParseForm(http, return_method);}, true, false);
	} else {
		this.loader.processPOST(url, vars, function (http) {s.ParseForm(http, return_method);}, true, false);
	}
};

DEVXForm.prototype.ParseForm = function (http, return_method) {
	var i;
	var xml=http.responseXML;
    if (this.loader.checkRedirect(xml)) { 
    	var error=xml.getElementsByTagName("error");
	    var result={"data":""};
        var jscode=xml.getElementsByTagName("jscode");
        if ( (jscode.length>0) && (jscode[0].childNodes.length>0)) {
            this.jscode=jscode[0].childNodes.item(0).data;
        } else {
            this.jscode=''
        }
        result["jscode"]=this.jscode;
	    if (error.length>0) {
		    for (var i=0; i<error.length; i++) {
			    result["data"]+=error[i].childNodes.item(0).data+"\n";
		    }
		    result["status"]="ERROR";
		    if (typeof(return_method)!='undefined') return_method(result);
		    return;
	    }
	    result["status"]="OK";
	    this.data=xml.getElementsByTagName("data");
	    if ((this.data.length!=null) && (this.data.length>0)) {
		    result["data"]=this.data[0].childNodes.item(0).data;
	    }
	    /*var jscode=xml.getElementsByTagName("jscode");
	    if ( (jscode.length>0) && (jscode[0].childNodes.length>0)) {
		    this.jscode=jscode[0].childNodes.item(0).data;
	    } else {
		    this.jscode=''
	    }
	    result["jscode"]=this.jscode;*/
	    if (typeof(return_method)!='undefined') return_method(result);
    }
};

DEVXForm.prototype.loadObj2ID = function (url, id, return_method) {
	var s=this;
	this.loader.processGET(url, function (http) {s.ParseObj(http, id, return_method);}, true, false);
};

DEVXForm.prototype.loadObj2IDPOST = function (url, vars, id, return_method) {
	var s=this;
	this.loader.processPOST(url, vars, function (http) {s.ParseObj(http, id, return_method);}, true, false);
};

DEVXForm.prototype.ParseObj = function (http, id, return_method) {
	var i;
	var data="";
	var xml=http.responseXML;
    if (this.loader.checkRedirect(xml)) { 
    	var data_arr={};
	    this.data=xml.getElementsByTagName("data");
	    if ((this.data.length!=null) && (this.data.length>0)) {
		    for(var i=0; i<this.data.length; i++) {
			    var index=this.data[i].getAttribute("id");
			    if ( (typeof(index)=="undefined") || (index==null)) {
				    index=id;
			    }
			    data_arr[index]=this.data[i].childNodes.item(0).data;
		    }
	    }
	    if (typeof(id)!="object") {
		    id=Array(id);
	    }
	    for (var i=0; i<id.length; i++) {
		    var obj=getObj(id[i]);
		    if ((typeof(obj)!='undefined') && (obj)) {
                if (obj.tagName == 'INPUT') {
			        obj.value = data_arr[id[i]];
                } else {
                    obj.innerHTML = data_arr[id[i]];
                }
		    }
	    }
	    var jscode=xml.getElementsByTagName("jscode");
	    if (jscode.length>0) {
		    this.jscode=jscode[0].childNodes.item(0).data;
	    } else {
		    this.jscode="";
	    }

	    if (typeof(return_method)!='undefined') return_method();
    }
};

DEVXForm.prototype.loadObject = function (url, return_method) {
	var s=this;
	this.loader.processGET(url, function (http) {s.parseLoadObject(http, return_method);}, true, false);
};

DEVXForm.prototype.loadObjectPOST = function (url, vars, return_method) {
	var s=this;
	this.loader.processPOST(url, vars, function (http) {s.parseLoadObject(http, return_method);}, true, false);
};

DEVXForm.prototype.parseLoadObject = function (http, return_method) {
	var i;
	var xml=http.responseXML;
    if (this.loader.checkRedirect(xml)) { 
    	var data="";
	    data=xml.getElementsByTagName("data");
	    if ((data.length!=null) && (data.length>0)) {
		    var rows=data[0].getElementsByTagName("rows");
		    if ((rows.length!=null) && (rows.length>0)) {
			    for (var i=0; i<rows.length; i++)
			    {
				    var to=rows[i].getAttribute("id");
				    var text=rows[i].childNodes.item(0).data;
				    getObj(to).innerHTML=text;
			    }
		    }
		    data="";
	    } else {
		    data="";
	    }
	    var jscode=xml.getElementsByTagName("jscode");
	    if (jscode.length>0) {
		    jscode=jscode[0].childNodes.item(0).data;
	    } else {
		    jscode="";
	    }
	    if ( (typeof(return_method)!="undefined") && (return_method!=null))
	    {
		    return_method(jscode);
	    }
    }
};

DEVXForm.prototype.gridPostField = function (e, o, url, return_method) {
	var s=this;
	var id;
	var field;
	if (typeof(o.colModel.config[e.column].dbId) != 'undefined') {
        id = e.record.data[o.colModel.config[e.column].dbId];
	} else {
        id = e.record.id;
	}
	if (typeof(o.colModel.config[e.column].dbName) != 'undefined') {
        field = o.colModel.config[e.column].dbName;
	} else {
        field = e.field;
	}
	var vars=field+'='+encodeURIComponent(e.value);
	this.loader.processPOST(url+'&id='+id+'&field='+field, vars, function (http) {s.afterGridPostField(http, e, o, return_method);}, true, false);
	return true;
};

DEVXForm.prototype.afterGridPostField = function (http, e, o, return_method) {
	Ext.QuickTips.init();
	var xml=http.responseXML;
    if (this.loader.checkRedirect(xml)) {
	    var error=xml.getElementsByTagName("error");
	    if ((error.length!=null) && (error.length>0)) {
		    error=error[0].childNodes.item(0).data;
	    } else {
		    error='';
	    }
	    if (error > '') {
		    var td=e.grid.getView().getCell(e.row, e.column);
		    td.style.backgroundColor='red';
		    var tt=new Ext.ToolTip({
	            target: td,
	            html: error
	        });
	        //var pos=$(td).offset();
	        var el=Ext.get(td);
	        tt.targetXY=el.getXY();
	        tt.show();
	    } else if (typeof(return_method) != 'undefined') {
            return_method(xml);
        }
    }
};

