

var ToteBox = {
	Version : '0.1',
	Description : '目前只支持 textarea，input',
	/**
	 *自动生成textarea 或 input 插入指定的div内，
	 * 并且该textarea 或 input失去焦点时触发自定义事件，可以传参数
	 * @param elementName
	 * @param cols
	 * @param rows
	 * @param target
	 * @param callBackFunc
	*/
	dynamicFill : function(elementName,cols,rows,target,callBackFunc){
		var eText;
		if(elementName == 'text'){
			eText = document.createElement('input');
			eText.type = elementName;	
			eText.size = cols;
		}else if(elementName == 'textarea'){
			eText = document.createElement('textarea');
			eText.cols = cols;
			eText.rows = rows;
		}else{
			return;
		}
		eText.id = 'df_'+target;
		
		if($(eText.id))return;
		
		eText.value = $(target).innerHTML;
		
		$(target).innerHTML = '';
		
		addEvent(eText,'blur',callBackFunc);
		
		$(target).appendChild(eText);
		
	},
	/**
	 * @param elId 先top document内的div的 id，可以用它来做更多的事情，默认为'_topDiv_'
	 * @param srcEl div源，即要显示的div 对象，或id
	 * @param parentEl 父div，即srcEl 的参照物
	 * @param ot srcEl显示的位置相对于parentEl向上偏移量
	 * @param ol srcEl显示的位置相对于parentEl向上偏移量
	 * @param divInnerHtml  div 内容
	 */
	dynamicFillDiv : function(elId,srcEl,parentEl,cssText,ot,ol,divInnerHtml){
		var win=window;
		var top=window;
		while(top.parent.document!=top.document&&top.parent.document.getElementsByTagName("frameset").length==0){
			top=top.parent;
		}
		elId = (isNull(elId) == true?'_topDiv_':elId);
		srcEl =(typeof(srcEl) == 'string' ? $('srcEl'):srcEl);
		parentEl =(typeof(parentEl) == 'string' ? $('parentEl'):parentEl);
		cssText =(isNull(cssText) == true?'':cssText);
		ot = isNaN( parseInt(ot) ) ? parseInt(ot) : 0;
		ol = isNaN( parseInt(ol) ) ? parseInt(ol) : 0;

		var objxy = this.$getBoundingClientRect(parentEl);
		var mm = this.$getAbsM(top);
		var ddTop = mm.topM+objxy.bottom;
		var ddLeft = mm.leftM+objxy.left;
		var oDiv = $(elId);
		if(oDiv != null){
			oDiv.style.display = 'block';
		}else{
			
			oDiv = top.document.createElement("DIV");
			oDiv.id = elId;
			oDiv.style.cssText =
				'left:'+(ddLeft+ol)+';'+
				'top:'+(ddTop+ot)+';'+	cssText;		
			oDiv.innerHTML = divInnerHtml;//srcEl.innerHTML;
			top.document.body.appendChild(oDiv);	
			
		}
		var bMouseState = false;
		this.addEvent(parentEl,'click',function(){//鼠标单击时显示
			if(bMouseState == false){
				if(oDiv.style.display == 'block'){
					oDiv.style.display = 'none';
				}else{
					oDiv.style.display = 'block'
				}
				
			}
		});
		this.addEvent(oDiv,'mouseover',function(){//鼠标悬停时显示
			bMouseState = true;
			oDiv.style.display = 'block';	
		});
		this.addEvent(oDiv,'mouseout',function(){//鼠标离开时消失
			bMouseState = false;
			oDiv.style.display = 'none';	
		});
		this.addEvent(parentEl,'blur',function(){//parentEl失去焦点时消失
			
			if(bMouseState == true){
				//
			}else{
				bMouseState = false;
				oDiv.style.display = 'none';	
			}	
		});
		
		return oDiv;
	},
	/**
	 * 
	 * @param obj
	 * @param strFunc
	 */
	createFunction : function(obj,strFunc){
	      var args=[];
	      if(!obj)obj=window;
	      for(var i=2;i<arguments.length;i++){
	      	args.push(arguments[i]);
	      }
	      return function(){
	            obj[strFunc].apply(obj,args);
	      }
	},
	/**
	 * 
	 * @param obj
	 * @param type
	 * @param fn
	 */
	addEvent : function(obj,type,fn){
	    if(obj.addEventListener){
			obj.addEventListener(type,fn,false);
		}else if(obj.attachEvent){
	        obj["e"+type+fn] =fn;
	        obj[type+fn] = function(){
				obj["e"+type+fn](window.event);
			}
	        obj.attachEvent("on"+type,obj[type+fn]);
	    }
	},
	/**
	 * 
	 * @param obj
	 * @param type
	 * @param fn
	 */
	removeEvent :function(obj,type,fn){
		if(obj.removeEventListener){
			obj.removeEventListener(type,fn,false);
		}else if(obj.detachEvent){
		    obj.detachEvent("on"+type,obj[type+fn]);
		    obj[type+fn]=null;
		    obj["e"+type+fn]=null;
		}
	},
	/**
	 * 
	 * * 此方法摘自My97DatePicker.js
	 */
	$getClientWidthHeight :function (w){
		var win=w||window;
		if(win.document.documentElement&&win.document.documentElement.scrollTop){
			return{'width':win.document.documentElement.clientWidth,'height':win.document.documentElement.clientHeight};
		}else if(win.document.body){
			return{'width':win.document.body.clientWidth,'height':win.document.body.clientHeight};
		}
	},
	/**
	 * 
	 * * 此方法摘自My97DatePicker.js
	 */
	$getScroll : function (w){
		var win=w||window;
		if(win.document.documentElement&&win.document.documentElement.scrollTop){
			return{'top':win.document.documentElement.scrollTop,'left':win.document.documentElement.scrollLeft};
		}else if(win.document.body){
			return{'top':win.document.body.scrollTop,'left':win.document.body.scrollLeft};
		}
	},
	/**
	 * 
	 * * 此方法摘自My97DatePicker.js
	 */
	$getAbsM : function (topWin){
		if(topWin==null){
			topWin=top;
		}
		var leftM=0;
		var topM=0;
		var tempWin=window;
		while(tempWin!=topWin){
			var ifs=tempWin.parent.document.getElementsByTagName('iframe');
			for(var i=0;i<ifs.length;i++){
				try{
					if(ifs[i].contentWindow==tempWin.window){
						var rc=this.$getBoundingClientRect(ifs[i]);
						leftM+=rc.left;
						topM+=rc.top;
						break;
					}
				}
				catch(e){
					continue;
				}
			}
			tempWin=tempWin.parent;
		}
		return{'leftM':leftM,'topM':topM};
	},
	/**
	 * 得到 TextRectangle 对象
	 * 此方法摘自My97DatePicker.js
	 */
	$getBoundingClientRect : function(obj){
		if(navigator.product=='Gecko'){
			var objWin = null;
			var top = obj.offsetTop;
			var left = obj.offsetLeft;
			var right = obj.offsetWidth;
			var bottom = obj.offsetHeight;
			while(obj = obj.offsetParent){
				top += obj.offsetTop;
				left += obj.offsetLeft;
				if(obj.tagName.toLowerCase() == "body"){
					objWin = obj.ownerDocument.defaultView;
				}
			}
			var theScroll = this.$getScroll(objWin);
			left -= theScroll.left;
			top -= theScroll.top;
			right += left;
			bottom += top;
			return{'left':left,'top':top,'right':right,'bottom':bottom};
		}else{
			return obj.getBoundingClientRect();
		}
	}

}
/*
	example:
	function test (){
		var common ;//调用savaPlansField方法的对象 空则为 window调用该方法
		var pp = createFunction(common,'savaPlansField','../plans/!savaField.do');
		common.dynamicFill('text',5,1,divId,pp);//创建一个size为5的text 并将该元素放入 $(divId) 内  回调方法为savaPlansField,并传入一个参数
	}
	function savaPlansField (url){
		alert(url);//输出../plans/!savaField.do
	}
*/

/**
 * 如果没有引用prototype包则创建函数 $();
 */
if (!window.$) {
	$ = function () {
		var elements = new Array();
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == "string") {
				element = document.getElementById(element);
			}
			if (arguments.length == 1) {
				return element;
			}
			elements.push(element);
		}
		return elements;
	};
}
if (!window.isXNull) {
	/**
	*是否非空
	*/
	isXNull = function(str){
		return !isNull(str);
	}
}
if (!window.isNull) {
	/**
	*是否非空
	*/
	isNull = function(str){
		if(str == undefined || str == null || str.length == 0){
			return true;
		}else{
			return false;
		}
	}

}









