﻿Ajax.Request2 = Class.create(Ajax.Request, {

    initialize : function($super, url, options){
        if( !Object.isUndefined(options.pager) ){
            var pageParaName = options.pager.current.paramName;
            var pageNo = options.pager.current.value;
            var sizeParaName = options.pager.size.paramName;
            var size = options.pager.size.value;
            var pager = eval("({"+ pageParaName + ": pageNo," + sizeParaName + ": size })");
            
            if(Object.isString(options.parameters)){
                options.parameters += Object.toQueryString(pager);
            }
            else if(Object.isHash(options.parameters)){
                options.parameters = options.parameters.merge(pager);
            }
        }
        $super(url, options);
    } 
});

Service = function(){
	
	var _cfgCentralServerIp = "";
	var _cfgCentralServerDomain = "";
	var _cfgCentralServerPort = "";
	var _isDomainSpan = false;
	
	//服务配置
	var _cfgServices = new Hash();
	//绑定表单
	var _forms = null;
	
	var _HashForm = function(form, params){
	    ForEach(form.elements, function(element){ 

	        var elName = element.getAttribute("name");
	        if(elName != ""){
	        
	            var elCount = document.getElementsByName(elName).length;
    	        
	            if(element.tagName=="textarea"){
	                    var value = element.childNodes[0].nodeValue;
	                    params.set(elName, value);
	            }
	            else if(element.tagName == "INPUT" && element.getAttribute("type") == "checkbox")
                {
                    if(element.getAttribute("checked") == true)
                    {
                        var value = element.getAttribute("value");
                        var prevValue = params.get(elName);
                        if(prevValue != undefined)
                            value = prevValue + "," + value;
                        params.set(elName, value);
                    }
                }
                else if(element.tagName == "INPUT" && element.getAttribute("type") == "radio")
                {
                    if(element.getAttribute("checked") == true)
                    {
                        var value = element.getAttribute("value");
                        params.set(elName, value);
                    }
                }
	            else{ params.set(elName, element.getAttribute("value")); }
	        }
	        
	    })
	    
	}
	return {
	
		getSrvUrl : function(srvname){
		
			if(_isDomainSpan){
				return "http://" + _cfgCentralServerIp + ":" + _cfgCentralServerPort + _cfgServices.get(srvname).path;
			}
			else{
				return _cfgServices.get(srvname).path;
			}
		
		},
		
		request : function(srvname, options){
		    var service = null;
		    var srvUrl = "";
		    try{
		        service = _cfgServices.get(srvname);
		        srvUrl = this.getSrvUrl(srvname);
		    }
		    catch(e){ alert("error: 服务配置错误！"+"\n服务名称: "+srvname + "\n"); }
		    
		    this.options =
		    {
                method: service.method,
                parameters: service.params,
                onFailure: function(transport){  },
                onException: function(transport){  }
    		}
    		                
    		if(_forms!=null)
                for(var i=0; i<_forms.length; i++){
    		        _HashForm(_forms[i], this.options.parameters);
    		    }
    		//清空绑定的表单数组 _forms
            _forms = null;
		    Object.extend( this.options, options || {});
		    return new Ajax.Request2(srvUrl, this.options);
		},
	    addService : function(srvname, options){ _cfgServices.set(srvname, options) },
	    getService : function(srvname){ return _cfgServices.get(srvname) },
	    setForms : function(forms) { _forms = forms; },
	    setServerIp : function(value){ _cfgCentralServerIp = value; },
	    setServerDomain : function(value){ _cfgCentralServerDomain = value; },
	    setServerPort : function(value){ _cfgCentralServerPort = value; },
	    getData: function(srvname, responseText){
	        var json;
	        try{
	            json = eval("("+responseText+")");
	        }
	        catch(e){ alert("Format of json is incorrect");}
	       
	        var service = _cfgServices.get(srvname);
	        if(Object.isUndefined(service.responseDataConfig)){
	            Object.extend( json, {data: data, total: total} );
	            return json;
	        }
	        else{ 
	            try{
	                var data = eval("( json." + service.responseDataConfig.dataKey + ")");
	                var total = eval("( json." + service.responseDataConfig.totalKey + ")");
	                Object.extend( json, {data: data, total: total} );
	                return json; 
	            }
	            catch(e){ alert("The json property named '" + service.responseDataConfig.dataKey + "' is not exist."); }
	        }
	    }
	}
}
var Srv = new Service();