/**
 * Money校验组件
 * 属性：isNullable：是否为空。 当为NO时不可以为空，需要非空校验；当为YES时可以为空，不需要非空校验。
 * 说明：1、这里Money的精度固定长度为2。
 *       2、允许输入0－9数字，“.” ，并且对输入进行了限制。
 *       3、将Enter 键转换为 Tab 键。
 *       4、可以通过设定 pattern 属性，进行显示样式的控制
 */

 function MoneyObj(editerObj){

	//定义输入对象
	this.edtObj = editerObj;


	//公共方法
	this.getParentObj = MON_getParentObj;
	this.getBaseObj = MON_getBaseObj;

	this.onvalidate = MON_onvalidate;
	this.checkSymbol = MON_checkSymbol;

	this.OnlyNumber = MON_OnlyNumber;
	this.onReady = MON_onDocumentReady;
 	this.eventBand =MON_eventBand;

 	this.dealInputOnblur = MON_onBlur;
	this.getRealValue =MON_getRealValue;
	//私有方法
	this.getOriValue = MON_getOriValue;
	this.checkvalidate =MON_checkvalidate;
	//私有对象
    var ParObj=null;
    var BasObj=null;
}

	function MON_getParentObj(){
    	if(this.ParObj==null){
    		this.ParObj = new NumberObj(this.edtObj);
    		}
    		return this.ParObj;
   	}
   function MON_getBaseObj(){
   	if(this.BasObj==null){
   		this.BasObj=this.getParentObj().getBaseObj();
   		}
   	return this.BasObj;

   	}


    function MON_onvalidate(){
       var inputName = this.edtObj.name;
       var format = this.edtObj.format;
       var inputStr=this.edtObj.formerValue;
       if(inputStr==null){
       	  inputStr = this.getOriValue(this.edtObj.value);
       	}
        //调用Base.htc中的公用函数检查数据合法性
     	if(!this.getBaseObj().commonCheck())	return false;
	     if(!this.checkvalidate()){
		    alert("["+this.edtObj.prompt + "]输入不合法！");
		   return false;
		 }
          //检查小数点后精度是否符合
	 if(!isNaN(this.edtObj.precision)){
        var n = this.edtObj.value.indexOf(".");
        var m=this.edtObj.value.length-1;
        var z=m-n;
        precision = parseInt(this.edtObj.precision);
        if(!isNaN(precision)){
	      //if((m-n)!= precision){
		if((m-n)< precision){
	         alert("["+this.edtObj.prompt+"]精度不符，最少要求精度"+this.edtObj.precision+"位。");
		     return false;
	      }
       }
      }
	return true;
    }


/**
 *名称：MON_checkSymbol()
 *功能：检查符号“.”和“－”输入的合法性
 */
   function MON_checkSymbol(){
     var checkStr = this.edtObj.formerValue;
//     if(checkStr==null){
//       	  checkStr = this.getOriValue(this.edtObj.value);
//       	}

     if(checkStr==null || checkStr==""){
     	checkStr = this.edtObj.value;
     }
     var j=0;
     var flag=0;
     //第一位不允许输入小数点“.”
     if(checkStr == null || checkStr=="" ){
        if(window.event.keyCode == 46)
            window.event.keyCode = 0 ;

     }
     //如果第一位是负号，第二位禁止输入“.”
     if(checkStr=="-"){
       if(window.event.keyCode == 46)
               window.event.keyCode = 0 ;
     }

     //如果第一位输入负号，其他位不允许输入负号“-”
     if(checkStr.indexOf("-")>-1 || checkStr.length>1){
       if(window.event.keyCode == 45)
              window.event.keyCode = 0 ;
     }
    var checkresult = this.checkvalidate();
    if(checkresult == false)
    {
	return false;
    }

        return true;
   }

 function MON_checkvalidate()
 {
     var checkStr = this.edtObj.formerValue;
     if(checkStr==null){
       	  checkStr = this.getOriValue(this.edtObj.value);
       	}

     if(checkStr==null || checkStr==""){
     	checkStr = this.edtObj.value;
     }
     for (var i = 0; i < checkStr.length; i++) {
           var oneChar = checkStr.charAt(i)

           //第一位可以是负号
           if(i == 0 && oneChar == "-"){
              continue;
           }

           if ( i>0 && oneChar == "-") {
            alert("负号输入不合法");
            event.returnValue = false;
            return false;
           }

           if (oneChar < "0" || oneChar > "9") {
              if(oneChar != "-" && oneChar != ".")
                return false;
           }
      }
        return true;

 }

    function MON_OnlyNumber()
    {
        this.checkSymbol();
        //如果已经输入一个小数点，则禁止再次输入小数点。并且小数点不能输入在第一位
        var n = this.edtObj.value.indexOf(".");
        if(n>-1){
          if(window.event.keyCode == 46)
              window.event.keyCode = 0 ;
          //小数点后超过两位则禁止输入
          var m=this.edtObj.value.length;
          if((m-n)>2){
           window.event.keyCode = 0 ;
          }
        }
	if ( !(((window.event.keyCode >= 48) && (window.event.keyCode <= 57))|| (window.event.keyCode == 13)|| (window.event.keyCode == 46)|| (window.event.keyCode == 45) ))

	{
		window.event.keyCode = 0 ;
	}

 	}

   function MON_onDocumentReady(){
   	//调用ParentObj 的初始化方法
    	 this.getParentObj().onReady();
   	}

   function MON_eventBand(){
   	this.getBaseObj().eventBand("onkeypress","OnlyNumber()");
   	}

	function MON_onBlur(){

		var formerValue = this.edtObj.formerValue;
		var nowValue = this.edtObj.value;
		var pattern = this.edtObj.pattern;
		if(formerValue==null || formerValue==""){
			this.edtObj.formerValue = nowValue;
			formerValue = nowValue;
		}else if( nowValue!= formatNumber(formerValue,pattern) ){
			this.edtObj.formerValue = nowValue;
			formerValue = nowValue;
		}else{
			return;
		}
		if(pattern == null || pattern=="" || this.edtObj.value==""){
			return;
		}else{
			
			var formatValue = this.edtObj.value.replace(/,/g,"");
			formatValue = formatNumber(formatValue,pattern);
			if(formatValue.split('.')[0]!='NaN'){
				this.edtObj.value = formatValue;
			}else{
				//样式转化发生错误，取消转换并设定 formerValue
				this.edtObj.formerValue = this.getOriValue(nowValue);
			}
		}
	}


	function MON_getOriValue(theValue){
			var arr = theValue.split(',');
	     	    	if(arr.length>0){
		     	    	var str="";
		     	    	for(i=0;i<arr.length;i++){
		     	    		str+=arr[i];
		     	    	}
		     	    	return str;
	     		}
	     		return theValue;
	}

function MON_getRealValue()
{
     var checkStr = this.edtObj.formerValue;
     if(checkStr==null){
       	  checkStr = this.getOriValue(this.edtObj.value);
       	}
      if(checkStr==null || checkStr==""){
     	 this.edtObj.value=checkStr;
     }
}


MoneyObj.prototype.beforeSubmit = function(){
	this.edtObj.value=this.edtObj.value.replace(/,/g,"");
	this.getParentObj().beforeSubmit();
}
