var Module = {
	
	aConfig : [],
	
	form: true,
	
	config: function(sKey){				
		if(typeof(Module.aConfig[sKey])=='undefined' || Module.aConfig[sKey]===null){
			var oConfig = {};
			oConfig.param	= {};		
			oConfig.form	= [];				
			oConfig.cls 	= null;
			oConfig.method 	= null;
			oConfig.content	= null;
			Module.aConfig[sKey] = oConfig;
		}		
		return Module.aConfig[sKey];
	},	
	
	showErrors: function(errorMap, errorList){		
		for(var i = 0; errorList[i]; i++ ) {
			var error = errorList[i];
			this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass );
			if(i==0 && Module.form){				
				alert(error.message);
				$(error.element).focus();
				Module.form = false;
			}			
		}		
		
		if (this.settings.unhighlight) {
			for(var i = 0, elements = this.validElements(); elements[i]; i++ ){
				this.settings.unhighlight.call( this, elements[i], this.settings.errorClass );					
			}
		}	
	},
	
	update: function(){		
		if(arguments.length){
			var o = arguments[0];			
			var oConfig = Module.config((typeof(o) === 'string')?o:$(o).attr("key"));	
			
			for(var i=1;i<arguments.length;i++){
				if(typeof(arguments[i]) === 'object'){
					for(var k in arguments[i]){
						oConfig.param[k] = arguments[i][k];
					}	
				}
			}
			
			if(oConfig){
				if(typeof(oConfig.param['valid']) != 'undefined' && oConfig.form.length>0){
					var bFlag = true;
					Module.form = true;
					for(i=0;i<oConfig.form.length;i++){
						if(!$('#'+oConfig.form[i]).valid({showErrors:Module.showErrors})){
							bFlag = false;
							break;
						}	
					}					
					if(bFlag){						
						xajax.module({'class':oConfig.cls, 'method':oConfig.method}, xajax.getFormsValues(oConfig.form), oConfig.param, oConfig.content?oConfig.content:null);								
					}
				}else{
					xajax.module({'class':oConfig.cls, 'method':oConfig.method}, xajax.getFormsValues(oConfig.form), oConfig.param, oConfig.content?oConfig.content:null);							
				}
			}				
		}
	}, 
	
	value: function(){
		if(arguments.length){
			var o = arguments[0];
			var oConfig = Module.config((typeof(o) === 'string')?o:$(o).attr("key"));	
			
			for(var i=1;i<arguments.length;i++){
				if(typeof(arguments[i]) === 'object'){
					for(var k in arguments[i]){
						oConfig.param[k] = arguments[i][k];
					}	
				}
			}
			
			if(oConfig && oConfig.cls && oConfig.method){						
				return xajax.value({'class':oConfig.cls, 'method':oConfig.method}, xajax.getFormsValues(oConfig.form), oConfig.param);	
			}				
		}
	},
	
	option: function(aData, sKey){
		$("select[key='"+sKey+"']").removeOption().addOption(aData);
	}
};
