/**
 * Itown Javascript 1.0 对象集
 * @author  LongHongYe(ebizs@itpub.net)
 * @data  2005.01
 */


function BaseObj(editerObj){
	//成员变量
	this.edtObj = editerObj;
	//一般方法
	this.enterToTab = BSO_enterToTab;
	this.commonCheck = BSO_commonCheck;
	this.checkEmpty = BSO_checkEmpty;
	this.checkMinLength = BSO_checkMinLength;
	this.checkMaxLength = BSO_checkMaxLength;
	this.checkFixLength = BSO_checkFixLength;
	this.getObjValue = BSO_getObjValue;
	this.isEmpty = BSO_isEmpty;
	//行为方法
	this.onReady = BSO_onContentReady;
	this.eventBand = BSO_eventBand;
}
/**
 *名称：enterToTab
 *功能：将回车键转换成TAB,但是如果shift,ctrl,alt按下,则不认为是回车
 *返回：
 */
function BSO_enterToTab(){
        if(event.srcElement.type != 'button' && event.keyCode == 13&&!event.shiftKey&&!event.ctrlKey&&!event.altKey){
                event.keyCode = 9;
        }
}
/**
 *名称：checkEmpty()
 *功能：根据属性isNullable,检查是否合法
 *返回：Boolean型
 */
function BSO_commonCheck(){
	if(!this.checkEmpty())		return false;
	if(!this.checkMinLength()) return false;
	if(!this.checkMaxLength()) return false;
	if(!this.checkFixLength())	return false;
	
	return true;
}
/**
 *名称：checkMinLength()
 *功能：检查是否满足最小长度
 *返回：Boolean型
 */
function BSO_checkMinLength(){
	var myObj=this.edtObj;
	
	if(this.edtObj.length){
		if(lowerCase(this.edtObj[0].type)=="checkbox" || lowerCase(this.edtObj[0].type)=="radio"){
			myObj=this.edtObj[0];
		}
	}
	
	var minLength = myObj.getAttribute("minLength");
	if(minLength == null) return true;
	if(!isNaN(parseInt(minLength,10))){
		var value = this.getObjValue();
		if(value==undefined || value==""){
			//保证该域可以为空。因为有的域可以为空，但有值时，最小就要求不能少于多少位。
			//而能不能为空是由isNull属性来决定。
			return true;
		}
		var valueLength = bitLength(value);
		minLength = parseInt(minLength,10);
		if(minLength > valueLength){
			showAlert("长度最小为"+minLength+"位,请重新输入！\n注意：一个汉字占"+ItownGlobals.bitsOfOneChinese+"位",this.edtObj,true);
			return false;
		}
	}
	return true;
}

/**
 *名称：checkMaxLength()
 *功能：检查是否满足最大长度
 *返回：Boolean型
 */
function BSO_checkMaxLength(){
	var myObj=this.edtObj;
	
	if(this.edtObj.length){
		if(lowerCase(this.edtObj[0].type)=="checkbox" || lowerCase(this.edtObj[0].type)=="radio"){
			myObj=this.edtObj[0];
		}
	}
	
	var maxLength = myObj.getAttribute("maxLength");
	if(maxLength == null) return true;
	if(!isNaN(parseInt(maxLength,10))){
		var value = this.getObjValue();
		var valueLength = bitLength(value);
		maxLength = parseInt(maxLength,10);
		if( valueLength > maxLength){
			showAlert("长度最大为"+maxLength+"位,请重新输入！\n注意：一个汉字占"+ItownGlobals.bitsOfOneChinese+"位",this.edtObj,true);
			return false;
		}
	}
	return true;
}

/**
 *名称：checkFixLength()
 *功能：检查是否满足固定长度
 *返回：Boolean型
 */
function BSO_checkFixLength(){
	var myObj=this.edtObj;
	
	if(this.edtObj.length){
		if(lowerCase(this.edtObj[0].type)=="checkbox" || lowerCase(this.edtObj[0].type)=="radio"){
			myObj=this.edtObj[0];
		}
	}
	
	var fixLength = myObj.getAttribute("fixLength");
	if(fixLength == null) return true;
	if(!isNaN(parseInt(fixLength,10))){
		var value = this.getObjValue();
		if(value==undefined || value==""){
			//保证该域可以为空。因为有的域可以为空，但有值时，就必须为多少位。
			//而能不能为空是由isNull属性来决定。
			return true;
		}
		var valueLength =bitLength(value);
		fixLength = parseInt(fixLength,10);
		if(fixLength != valueLength){
			showAlert("长度必须为"+fixLength+"位,请重新输入！\n注意：一个汉字占"+ItownGlobals.bitsOfOneChinese+"位",this.edtObj,true);
			return false;
		}
	}
	return true;
}
/**
 *名称：checkEmpty()
 *功能：根据属性isNullable或nullable,检查是否合法.如果没有这两个属性中的一个,则返回true
 *返回：Boolean型
 */
function BSO_checkEmpty(){
	var myObj=this.edtObj;
	
	if(this.edtObj.length){
		if(lowerCase(this.edtObj[0].type)=="checkbox" || lowerCase(this.edtObj[0].type)=="radio"){
			myObj=this.edtObj[0];
		}
	}
	var nullFlag=myObj.getAttribute("isNullable");
	
	if(nullFlag == null||nullFlag=="undefined"||nullFlag==""){
		nullFlag = myObj.getAttribute("nullable");
		if(nullFlag == null||nullFlag==undefined||nullFlag=="undefined"||nullFlag==""){
			var nullFlag=myObj.getAttribute("nullable");
		}
	}
	if((lowerCase(nullFlag) != "false" )){
		return true;
	}

	if((lowerCase(nullFlag) == "false" )){
		if(this.isEmpty()){
			var mes = "不能为空，请重新输入！";
			if(lowerCase(this.edtObj.tagName) == "select"){
				mes = "不能为空，请选择！";
			}
			showAlert(mes,this.edtObj,true);
			return false;
		}
	}
	return true;
}
/**
 *名称：isEmpty()
 *功能：对象值是否为空
 *返回：Boolean型
 */
function BSO_isEmpty(){
	if(this.getObjValue() == null)	return true;
	return false;
}
/**
 *名称：getObjValue()
 *功能：获取对象的值
 *返回：
 */
function BSO_getObjValue(){
	var value = this.edtObj.value;
	if(this.edtObj.length){
		if(lowerCase(this.edtObj[0].type)=="checkbox" || lowerCase(this.edtObj[0].type)=="radio"){
			var fldValue="";
			for(var i=0; i<this.edtObj.length; i++){
				if(this.edtObj[i].checked){
					if(fldValue==""){
						fldValue=this.edtObj[i].value;
					}else{
						fldValue+=","+this.edtObj[i].value;
					}
				}
			}
			return fldValue == null || fldValue.trim() == "" ? null : fldValue;
		}
	}else{
		if(lowerCase(this.edtObj.type)=="checkbox" || lowerCase(this.edtObj.type)=="radio"){
			if(this.edtObj.checked){
				return this.editObj.value;
			}else{
				return null;
			}
		}
	}
	
	return value == null || value.trim() == "" ? null : value;
}

/**
 *名称：onContentReady()
 *功能：置标志
 *形参：
 *返回：
 */
function BSO_onContentReady(){
	var myObj=this.edtObj;
   this.edtObj.isItownObject=true;
   
   if(myObj.length && myObj[0].type){
		if(lowerCase(myObj[0].type)=="radio" || lowerCase(myObj[0].type)=="checkbox" ){
			//考虑到单选、复选框的特殊情况。
			myObj=myObj[0];
		}
	}
   //把所有的fixLength属性转成maxLength属性
   var fixLength = myObj.getAttribute("fixLength");
   if( fixLength != null && fixLength != "undenfied" && fixLength != "")  this.edtObj.maxLength = fixLength;
   //如果没有定义prompt属性，定义其值为name的值
   if(myObj.getAttribute("prompt") == null || myObj.getAttribute("prompt") == undefined 
   		|| myObj.getAttribute("prompt") == "undenfied"){
    if(myObj.getAttribute("chsname") == null || myObj.getAttribute("chsname") == undefined
    		|| myObj.getAttribute("chsname") == "undenfied")
    {
      if(myObj.getAttribute("chname") == null || myObj.getAttribute("chname") == undefined 
      		|| myObj.getAttribute("chname") == "undenfied")
       {
       	this.edtObj.prompt = myObj.name;
       }
      else
      {
			this.edtObj.prompt = myObj.chname;
      }
    }
    else
    {
       this.edtObj.prompt = myObj.chsname;
    }
  }
   
  var isReadOnly = myObj.getAttribute("isreadonly");
	if(isReadOnly != null && isReadOnly.toUpperCase() == "TRUE"){
		if(myObj.tagName.toUpperCase() == "SELECT"){
			this.edtObj.disabled = true;
		}else if(myObj.type.toUpperCase() == "CHECKBOX" || myObj.type.toUpperCase() == "RADIO"){
			if(this.edtObj.length){
				for(var i=0; i<this.edtObj.length; i++){
					this.edtObj[i].disabled=true;
				}
			}else{
				this.edtObj.disabled=true;
			}
		}else{
			this.edtObj.readOnly = true;
		}
  }
  if(myObj.disabled || myObj.readOnly)
		this.edtObj.className = "ItownReadOnlyArea";
}
//绑定事件
function BSO_eventBand(eventID,eventHandler){
	if("onkeydown" == eventID.toLowerCase()){
	 	var handler = eval("itownObjsMgr.getEAPObj(this).getBaseObj().enterToTab");
               	this.edtObj.attachEvent("onkeydown",handler);
	}
	else
	{
	 if(ItownGlobals.DEBUG)
	 {
	  //alert(eventID+","+eventHandler);
	  //alert(this.edtObj);
	  this.edtObj.attachEvent(eventID," itownObjsMgr.getEAPObj(this)."+eventHandler+";");
	  //this.edtObj.attachEvent(eventID,"alert(this);");
	  alert(eventID+","+eventHandler);
	 }
	}
	return;
}

///////////////  公用函数 ////////////////////////////////////
/**
 *名称：upperCase()
 *功能：把字符串转换成大写
 *返回：转换后的字符串
 */
function upperCase(arg){
	return makeCase(arg,"UPPER");
}
/**
 *名称：lowerCase()
 *功能：把字符串转换成小写
 *返回：转换后的字符串
 */
function lowerCase(arg){
	return makeCase(arg,"LOWER");
}
/**
 *名称：showAlert()
 *功能：显示提示信息
 *形参：message 显示的信息
 *      obj     相关对象
 *      isFocus 是否聚焦
 */
function showAlert(message,obj,isFocus){
	var mes = "";
	var flag = false;
	if(obj){
		if(obj.prompt){
			mes = "["+obj.prompt+"]";
		}else if(obj.chsname){
			mes = "["+obj.chsname+"]";
		}else if(obj.length){
			if(obj[0].chsname){
				mes = "["+obj[0].chsname+"]";
			}
		}
		if(isFocus) flag = true;
	}
	alert(mes + message);
	if(flag)	try{obj.focus();}catch(e){}
}
/**
 *名称：makeCase()
 *功能：按要求转换大小写
 *形参：
 *返回：转换后的字符串
 */
function makeCase(arg,kind){
	if(arg == null)	return "";
	var str = ""+arg;
	if(kind == "UPPER")
	{
	  return str.toUpperCase();
	}
	return str.toLowerCase();
}
/**
 *名称：bitLength()
 *功能：判断一个字符串的长度，可定义一个汉字占几位
 *形参：
 *返回：长度
 */
function bitLength(str){
	if(str==null || str == "") return 0;
	
	//原来的有bug
	//var len = 0;
	//for(var i=0; i < str.length; i++){
	//	//非汉字
	//	if(str.substring(i,i+1).charCodeAt(0) < 0x4e00){
	//		len ++;
	//	 	continue;
	//	}
	//	//汉字
	//	len += ItownGlobals.bitsOfOneChinese;
	//}
	//return len;
	
	//修改后的长度检查
	return str.replace(/[^\x00-\xff]/g,"aa").length;
}

/**
 * 提交前要作的处理
 */
BaseObj.prototype.beforeSubmit=function (){
	
}

