AE.namespace('AE.form.observer');

AE.form.observer = function(){
	var _self = this;
	
	//ÅäÖÃ
	var config = {
		
		
		//µ±Ç°Ò³ÃæÐ£Ñé¿ò¼ÜÊµÀýÃû£¬ÓÃstring¸ñÊ½
		formValidatorInstance : '',
		
		//COS·þÎñÆ÷ÓòÃû
		observerDomain : 'http://127.0.0.1',
		
		//·þÎñ¶ËÊä³öµ½Ò³ÃæÉÏµÄÊý¾Ý½á¹¹£¨°üÀ¨sessionId,stepId,unitIdµÈ£©initµÄÊ±ºòmerge½øÀ´
		pageData: {},
		
		//²»±Ø´«ÊäÄÚÈÝµÄ×Ö¶Î
		noContent: ['password','passwordConfirm'],
		
		//µãµÄtag¼ÇÂ¼±êÊ¶
		pointTag: '/point.html',
		
		//µ¥×Ö¶ÎµÄtag¼ÇÂ¼±êÊ¶
		fieldTag: '/field.html',
		
		//¿ìÕÕµÄtag¼ÇÂ¼±êÊ¶
		snapShotTag: '',
		
		//¿ìÕÕÐèÒª±£´æµÄ×Ö¶Î±êÊ¶£¬initµÄÊ±ºòmerge½øÀ´
		snapShotFields: []
	}
	
	//Í¨¹ý¿Í»§¶ËÐ£Ñé¿ò¼Ü´«À´µÄclientDataºÍÒ³ÃæÉÏµÄpageDataÆ´³öÍêÕûÊý¾Ý½á¹¹£¬Èç¹ûµÃ²»µ½Ôò·µ»Øfalse;
	_self.getData = function(clientData){
		var dataObj = false;
		if(clientData['result'] == false) {
			clientData['content'] = get(clientData['fieldId']).value.replace(/#/g, '%23');
			if(config.noContent.indexOf(clientData['fieldId']) >= 0 ){
				clientData['content']= '';
			}
			delete clientData['result'];
			dataObj = YL.merge(config.pageData, clientData);
		}
		return dataObj;
	}
	
	//·¢ËÍÊý¾Ýµ½LOG
	_self.sendData = function(tag, dataObj){
		var tmpImg = new Image();
		var sURL = config.observerDomain; 
		sURL += tag+'?';
		for(var s in dataObj){
			if(sURL == config.observerDomain+tag+'?'){
				sURL += s+'='+encode(dataObj[s]);
			} else {
				sURL += '&'+s+'='+encode(dataObj[s]);
			}
		}
		sURL += '&ts='+_self.getTimeStamp();
		tmpImg.src = sURL;
	}
	
	//ÂÖÑ­µÃµ½checkbox»òÕßradioµÄÖµ
	_self.getRadioOrCheckboxValue = function(el){
		var s = '';
		var els = document.getElementsByName(el.name);
		var v;
		for(var i=0,j=els.length;i<j;i++){
			if(els[i].checked == true){
				v = els[i].value.replace(/#/g, '%23');
				if(s == ''){s += v}
				else{s += '||'+v}
			}
		}
		return s;
	}
	
	
	//µÃµ½ÍêÕûµÄ±íµ¥Êý¾Ý£¬ÎÞÂÛ×Ö¶ÎÕýÈ·»òÕß´íÎó¡£
	//¾ßÌå²É¼¯ÄÄÐ©×Ö¶Î¸ù¾Ý snapShotFieldsÀïµÄÅäÖÃ¾ö¶¨¡£
	_self.getSnapData = function(){
		var snapData = {};
		var el;
		for(var i=0,j=config.snapShotFields.length;i<j;i++){
			el = get(config.snapShotFields[i]);
			if(el.type == 'radio' || el.type == 'checkbox'){
				snapData[el.id] = _self.getRadioOrCheckboxValue(el);
			} else {
				snapData[el.id] = el.value.replace(/#/g, '%23');
			}
		}
		
		snapData = YL.merge(config.pageData, snapData)
		
		return snapData;
	}
	
	//×¥È¡¿ìÕÕ
	_self.snapShot = function(){
		
		var snapData = _self.getSnapData();
		
		_self.sendData(config.snapShotTag, snapData);
	}
	
	//Êý¾Ý²É¼¯
	_self.collectData = function(ev, args){
		
        var clientData = {};
        clientData['fieldId'] = args[0];
        clientData['validatorName'] = args[1].getItem().getName();
        clientData['result'] = !args[1].getItem().isError();
        var dataObj = _self.getData(clientData);
        if(dataObj){
            _self.sendData(config.fieldTag, dataObj);
        }
	}
	
	//µãlog¼ÇÂ¼£¬Íâ²¿¿ÉÒÔÖ±½Óµô¸Ã·½·¨
	_self.logPoint = function(stepPoint, sc){
		
		var tmpImg = new Image();
		var sURL = config.observerDomain;
		sURL += config.pointTag+'?'; 
		for(var s in config.pageData){
			if(sURL == config.observerDomain+config.pointTag+'?'){
				sURL += s+'='+encode(config.pageData[s]);
			} else {
				sURL += '&'+s+'='+encode(config.pageData[s]);
			}
		}
		sURL += '&point='+stepPoint;
		sURL += '&sc='+sc;
		sURL += '&ts='+_self.getTimeStamp();
		tmpImg.src = sURL;
	}
	
	_self.getTimeStamp = function(){
	    var t = new Date();
	    return t.getTime();
	}
	
	_self.init = function(userConfig){
		config = YL.merge(config, userConfig || {});
		//ÓëformValidator¹Ò½Ó
		if(config.formValidatorInstance){
			eval(config.formValidatorInstance).customEvent['afterValidateOneField'].subscribe(_self.collectData);
		}
	}
	
}

