/*****	路径：base.js	********/
/*****	名称：底层框架	********/
/*****	作者：应龙	********/
/*****	时间：2008-9-19	********/
/*****	介绍：存放常用的函数，兼容方法	********/

/*FF兼容函数，修改ＦＦ内置方法*/
!function (bool){
	//兼容FF一些方法
	if (bool){
		//event
		window.constructor.prototype.__defineGetter__("event", function (){//兼容Event对象
			var o=arguments.callee;
			do{
				if (o.arguments[0] instanceof Event)return o.arguments[0];
			}while (o=o.caller);
			return null;
		});
		//outerHTML
		HTMLElement.prototype.__defineGetter__("outerHTML",function() 
		{ 
			var a=this.attributes, str="<"+this.tagName, i=0;for(;i<a.length;i++) 
			if(a[i].specified) 
				str+=" "+a[i].name+'="'+a[i].value+'"'; 
			if(!this.canHaveChildren) 
				return str+" />"; 
			return str+">"+this.innerHTML+"</"+this.tagName+">"; 
		}); 
		HTMLElement.prototype.__defineSetter__("outerHTML",function(s) 
		{ 
			var r = this.ownerDocument.createRange(); 
			r.setStartBefore(this); 
			var df = r.createContextualFragment(s); 
			this.parentNode.replaceChild(df, this); 
			return s; 
		}); 
		HTMLElement.prototype.__defineGetter__("canHaveChildren",function() 
		{ 
			return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase()); 
		}); 
		//
	}
	
}(/Firefox/.test(window.navigator.userAgent));
if (window.HTMLElement && !HTMLElement.prototype.insertAdjacentHTML)
HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
//BlueDestiny
    var df; var r = this.ownerDocument.createRange();
    switch (String(sWhere).toLowerCase()) {
        case "beforebegin":
            r.setStartBefore(this);
            df = r.createContextualFragment(sHTML);
            this.parentNode.insertBefore(df, this);
            break;
        case "afterbegin":
            r.selectNodeContents(this);
            r.collapse(true);
            df = r.createContextualFragment(sHTML);
            this.insertBefore(df, this.firstChild);
            break;
        case "beforeend":
            r.selectNodeContents(this);
            r.collapse(false);
            df = r.createContextualFragment(sHTML);
            this.appendChild(df);
            break;
        case "afterend":
            r.setStartAfter(this);
            df = r.createContextualFragment(sHTML);
            this.parentNode.insertBefore(df, this.nextSibling);
            break;
    }
};

/*自定义函数*/
var bit={};
bit.base={
	$:function(id){return document.getElementById(id)}//获取对 ID 标签属性为指定值的第一个对象的引用
	,tagArr:function(o,name){return o.getElementsByTagName(name)}//获取基于指定元素名称的对象集合
	,nameArr:function(name){return document.getElementsByName(name)}//根据 NAME 标签属性的值获取对象的集合
	,att:function(o,name,fun){return document.all ? o.attachEvent(name,fun) : o.addEventListener(name.substr(2),fun,false);}//给指定元素添加事件attachEvent方法
	,style:function(o){	//获取全局样式表、内嵌样式（不能设置）
		return o.currentStyle || document.defaultView.getComputedStyle(o,null);
	}
	,innerText:function(obj){//设置或获取位于对象起始和结束标签内的文本
		return obj.innerText || obj.textContent;
	}
	,activeElement:function(){//获取当父 document 拥有焦点时获得焦点的对象
		return event.explicitOriginalTarget || document.activeElement;
	}
	,onmousewheel:function(o,fun){//给鼠标滚轮指定事件
		return document.all ? o.attachEvent('onmousewheel', fun) : o.addEventListener('DOMMouseScroll', fun, false);;
	}
	,documentElement:function(type){//兼容DTD头
		return	document.documentElement[type] || document.body[type];
	}
	,dElement:function(){//兼容DTD头
		return	document.documentElement || document.body;
	}
	,offset:function(o,type){//元素相对于整个窗口的位置 o对象 type类型
		var intVlue=0;
		var ffObj=o[type];
		while(document.body!=o)
		{		
			intVlue+=o[type];
			o=o.parentNode;
		}
		if(document.all){
			return intVlue;
		}else{
			return ffObj;
		}
	}
	,offsetLT:function(o){//元素相对于整个窗口的位置 o对象 返回 x y
        var x = 0, y = 0;
        do { x += o.offsetLeft, y += o.offsetTop; } while (o = o.offsetParent);
        return { 'x' : x, 'y' : y };
    }
	,position:function(){//获取当前鼠标位置(x,y)
		return {
		'x':event.pageX || (event.clientX + this.documentElement('scrollLeft'))
		,'y':event.pageY || (event.clientY + this.documentElement('scrollTop'))
		}
	}
	,alpha:function(o,num){//设置透明度	
		o.style.filter='alpha(opacity='+num+')';
		o.style.opacity=num/100;
	}
	,rePreviousSibling:function(o){//寻找上一个兄弟对象
		do {
			o = o.previousSibling;
		} while (o && (o.nodeType != 1));
		return o;
	}
	,reNextSibing:function(o){//寻找下一个兄弟对象
		do {
			o = o.nextSibling;
		} while (o && (o.nodeType != 1));
		return o;
	}
	,newImage:function(img,url,fun){//new Image 预加载图片，并返回数组
		var a=[];
		for(i=0;i<img.length;i++){		
			a[i]=new Image;
			a[i].onload=function (i) {
				return function () {
					if(fun){fun(a[i]),a[i] = null};
				};
			}(i);
			a[i].src=url+img[i];
		}
		return a;
	}
	,buildTag:function(id,tagName,arr,object){//循环生成标签，附加标签样式
		var obj=document.createElement(tagName);
		if(id){obj.id=id;}
		if(arr){
			for(i=0;i<arr.length;i++){
				obj.style[arr[i][0]]=arr[i][1];
			}
		}
		object.appendChild(obj);
	}
	,selectFun:function(num){//选择 || 取消选择  ie
		document.onselectstart=num ? function(){ return true} : function(){ return false};
	}
	,capture:function(obj,num){
		if(document.all){
			num?obj.setCapture():obj.releaseCapture();
		}	
	}
	,formatSwitch:function(text,dataArr){//指定格式返回时间 yyyy/MM/dd yyyy-MM-dd yyyy年MM月dd日
		text=text.replace('yyyy',dataArr[0]);//4位数年
		text=text.replace('yy',dataArr[0].substring(2,4));//2位数年
		text=text.replace('y',dataArr[0].substring(3,4));//1位数年
		text=text.replace('MM',this.renew(dataArr[1]));//2位数月
		text=text.replace('M',dataArr[1]);//1位数月
		text=text.replace('dd',this.renew(dataArr[2]));//2位数日
		text=text.replace('d',dataArr[2]);//1位数日
		if(dataArr[3]){
		text=text.replace('HH',this.renew(dataArr[3]));//时 
		text=text.replace('H',dataArr[3]);//时
		}
		if(dataArr[4]){
		text=text.replace('mm',this.renew(dataArr[4]));//分
		text=text.replace('m',dataArr[4]);//分
		}
		if(dataArr[5]){
		text=text.replace('ss',this.renew(dataArr[5]));//秒
		text=text.replace('s',dataArr[5]);//秒
		}
		return text;
	}
	,renew:function(text){//判断补充 1985-5-1 1985-05-01 
		return ((text.length==1)?('0'+text):text);
	}
	,loadJS:{
		lock : false, ranks : []
		, callback : function (startTime, callback) {
		//载入完成		
			callback && callback(new Date().valueOf() - startTime.valueOf()); //回调	
			this.lock = false, this.read(); //解锁，在次载入
		}
		, read : function () {
		//读取
			if (!this.lock && this.ranks.length) {
				var head = document.getElementsByTagName("head")[0];
				
				if (!head) {
					ranks.length = 0, ranks = null;
					throw new Error('HEAD不存在');
				}
				
				var wc = this, ranks = this.ranks.shift(), startTime = new Date, script = document.createElement('script');
				
				this.lock = true;
				
				script.onload = script.onreadystatechange = function () {
					if (script && script.readyState && script.readyState != 'loaded' && script.readyState != 'complete') return;
					
					script.onload = script.onreadystatechange = script.onerror = null, script.src = ''
						, script.parentNode.removeChild(script), script = null; //清理script标记
						
					wc.callback(startTime, ranks.callback), startTime = ranks = null;
				};
				
				script.charset = ranks.charset || 'gb2312';
				script.src = ranks.src;
				
				head.appendChild(script);
			}
		}
		, push : function (src, charset, callback) {
		//加入队列
			this.ranks.push({ 'src' : src, 'charset' : charset, 'callback' : callback });
			this.read();
		}
	}
}