﻿/*
Script Name:vBase
*/

/********  public function  ********/
function prt(text) {/*-----  输出信息，调试用  -----*/
/*-----
Firefox下使用console.log输出
其他浏览器使用alert输出
-----*/
	try {
		console.log(text);
	}catch(e) {
		alert(text);
	}
}
function expense(func,time) {/*-----  计算花费时间  -----*/
/*-----
**参数说明**
func：需要执行的函数
time：执行的次数，默认1000次
-----*/
	var starttime = (new Date()).getTime();
	for(var i=0; i<(time||1000); i++) {eval(func);}
	var endtime = (new Date()).getTime();
	prt(endtime-starttime);
}
/*-----  选择器，未完成
var vvBase = function (selector) {
	var self,ele;
	if(this === window || this == window) {self = document;}
	else {self = this;}
	if(selector.nodeType) {//HtmlElements
		return selector;
	}else if(typeof(selector) == 'string') {//选择器
		var isID = /^#.*$/;
		var isClass = /^\..*$/;
		var isName = /^@.*$/;
		if(isID.test(selector)) {
			ele = self.getElementById(selector);
		}else if(isClass.test(selector)) {
			ele = $class(selector);
		}else if(isName.test(selector)) {
			prt("isName");
		}
	}else {
		//
	}
};
var $ = vvBase;
  -----*/

function $id(eleID) {/*-----  根据id获取节点  -----*/
	return document.getElementById(eleID);
}
function $class(eleClassName,eleTagName){/*-----  根据class获取节点  -----*/
	var getEleClass,myclass,elem;
	getEleClass = [];
	myclass = new RegExp("\\b"+eleClassName+"\\b");
	if(eleTagName) {elem = document.getElementsByTagName(eleTagName);}
	else {elem = document.getElementsByTagName("*");}
	for(var h=0,l=elem.length;h<l;++h){
		var classes = elem[h].className;
		if(myclass.test(classes)){getEleClass.push(elem[h]);}
	}
	return getEleClass;
}
function addClass(ele,value) {/*-----  添加样式  -----*/
	if(!ele.className) {
		ele.className = value;
	} else {
		ele.className += ' '+value;
	}
}
function removeClass(ele,value) {/*-----  移除样式  -----*/
	var cn = ele.className;
	if(!cn) {
		cn = '';
	}else {
		var delClass = new RegExp('\\b'+value+'\\b','ig');
		if(delClass.test(cn)) {
			ele.className = cn.replace(delClass,"");
		}
	}
}
function hasClass(ele,classname) {/*-----  判断节点是否有class  -----*/
	var cn = ele.className;
	var rgExp = new RegExp('\\b'+classname+'\\b');
	if(cn.search(rgExp) != -1) {
		return true;
	}else {
		return false;
	}
}
function insertAfter(newElement,targetElement) {/*-----  在节点之后插入节点  -----*/
	var parent = targetElement.parentNode;
	if (parent.lastChild == targetElement) {
		parent.appendChild(newElement);
	} else {
		parent.insertBefore(newElement,targetElement.nextSibling);
	}
}
function prepend(element,targetElement) {/*-----  将element插入到targetElement的前置  -----*/
	if(targetElement.firstChild) {
		targetElement.insertBefore(element,targetElement.firstChild);
	}else {
		targetElement.appendChild(element);
	}
}
function wrap(newparent,ele) {/*-----  创建ele的父节点newprarent  -----*/
	if(ele.nextSibling) {
		var n = ele.nextSibling;
		n.parentNode.insertBefore(newparent,n);
	}else if(ele.previousSibling) {
		insertAfter(newparent,ele.previousSibling);
	}else {
		ele.parentNode.appendChild(newparent);
	}
	newparent.appendChild(ele);
}
function addEvent(tar,ev,fn) {/*-----  添加事件  -----*/
	if(document.attachEvent) {
		tar.attachEvent('on'+ev,fn);
	}else if(document.addEventListener) {
		tar.addEventListener(ev,fn,false);
	}
}
function removeEvent(tar,ev,fn) {/*-----  删除事件  -----*/
	if(document.detachEvent) {
		tar.detachEvent('on'+ev,fn);
	}else if(document.removeEventListener) {
		tar.removeEventListener(ev,fn,false);
	}
}
function showSlow(ele,type,time) {/*-----  渐隐显示元素(需修正IE下子结点如果已经设置了opacity无法渐隐的问题)  -----*/
/*-----
**参数说明**
ele：进行特效显示的目标元素
type：进行显示的样式，默认为渐隐显示
	默认(可留空或0值)：渐隐显示
	(type == 'spread' || type== 1)：垂直向下伸展；//未完成
	(type == 'rightzoom' || type == 2)：向右扩展显示；//未完成
time：显示的速度，默认为80，数值越大速度越慢
-----*/
	if(ele.vvshowSlow) {clearInterval(ele.vvshowSlow);}
	with(ele.style) {
		if(display == 'none') {display = ''}
		if(visibility == 'hidden') {visibility = ''}
		if(ele.filters) {// IE
			zoom = zoom || '1'; //修正子节点无法继承父节点alpha的问题
			filter += 'alpha(opacity=0)';
		}else if(opacity != null) {// 其他标准浏览器
			opacity = 0;
		}else {
			return false;
		}
	}
	this.show = function () {
		if(ele.filters) {
			if(ele.filters.alpha.opacity == 100) {clearInterval(ele.vvshowSlow);return false;}
			ele.filters.alpha.opacity += 5;
		}else if(ele.style.opacity) {
			if(ele.style.opacity == '1') {clearInterval(ele.vvshowSlow);return false;}
			ele.style.opacity = parseFloat(ele.style.opacity)+0.05;
		}
	}
	if(type == 'spread' || type== 1) {//垂直向下伸展
		return false;
	}else if(type == 'rightzoom' || type == 2) {//向右扩展
		return false;
	}else {//默认渐隐
		ele.vvshowSlow = setInterval(this.show,time||80);
	}
}
function getValue(inputOrName) {/*-----  获取form Element的value值  -----*/
/*-----
**参数说明**
inputOrName：对象或者对象的Name值
-----*/
	var eles=[],type,tag,ele,rs;
	if(inputOrName.nodeType) {
		eles = [inputOrName];
	}else if(!inputOrName.nodeType && typeof(inputOrName)=='object') {
		eles = inputOrName;
	}else if(typeof(inputOrName) == 'string'){
		eles = document.getElementsByName(inputOrName);
	}
	for(var i=0, l = eles.length; i < l; ++i) {
		ele = eles[i]
		type = ele.getAttribute('type');
		tag = ele.tagName;
		if((tag=='INPUT' && (type=='text' || type=='password')) || tag=='TEXTAREA' || tag=='SELECT') {
			rs = ele.value;
		}else if(tag=='INPUT' && (type=='radio' || type=='checkbox')) {
			if(ele.checked == true) {rs = ele.value}
			continue;
		}
	}
	return rs;
}
function getBrowser(type) {/*-----  获取浏览器类型  -----*/
/*-----
**各浏览器对应type值**
ie:msie
ff:firefox
op:opera
safari:safari
gecko:gecko
-----*/
	var browserType = window.navigator.userAgent.toLowerCase();
	if(browserType.indexOf(type) != -1) {
		return true;
	}
}
function getChildNodes(ele) {/*-----  获取childNodes，修正FF等标准浏览器下错误地获取到#text的问题  -----*/
	var rs = [];
	if(!getBrowser('msie')) {
		var ec = ele.childNodes;
		for(var i=0, l = ec.length; i < l; ++i) {
			if(ec[i].nodeName === '#text') {continue;}
			rs.push(ec[i]);
		}
	}else {
		rs = ele.childNodes;
	}
	return rs;
}
function getTotalHeight(ele) {/*-----  获取元素的整体高度,height+padding+margin+borde  -----*/
	var rs = ele.offsetHeight + parseInt(getStyle(ele,'marginTop')) + parseInt(getStyle(ele,'marginBottom'));
	return rs;
}
function getTotalWidth(ele) {/*-----  获取元素的整体宽度,width+padding+margin+border  -----*/
	var rs = (ele.offsetWidth||0) + (parseInt(getStyle(ele,'marginLeft')) || 0) + (parseInt(getStyle(ele,'marginRight')) || 0);
	return rs;
}

function getParas(paras,url){/*-----  获取url的参数  -----*/
	var url = url || location.href;
	var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");
	var paraObj = {}
	for (i=0; j=paraString[i]; i++){
		paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length);
	}
	var returnValue = paraObj[paras.toLowerCase()];
	if(typeof(returnValue)=="undefined"){
		return "";
	}else{
		return returnValue;
	}
}
function colorToHex(color) {/*-----  以十六进制格式化style中的color，无法格式化预命名颜色  -----*/
	var rgb = /rgb\((\d{1,3}),(\s)*(\d{1,3}),(\s)*(\d{1,3})\)/; //rgb正则,结果序数为1、3、5
	var noun = /^\w+/; //预命名颜色正则
	var rs;
	if(rgb.test(color)) {
		var rgbfix = rgb.exec(color);
		var r,g,b;
		r = parseInt(rgbfix[1]).toString(16);
		g = parseInt(rgbfix[3]).toString(16);
		b = parseInt(rgbfix[5]).toString(16);
		rs = '#'+(r<10?'0'+r:r)+(g<10?'0'+g:g)+(b<10?'0'+b:b);
	}else {
		rs = color;
	}
	if(rs.length==4 && !noun.test(rs)) {rs = rs+rs.split('#')[1]}//修正简写的十六进制，采取length判断方式
	return rs;
}
function getStyle(ele,value) {/*-----  获取元素的真实style  -----*/
	var rs;
	if(ele.style[value]) {
		rs = ele.style[value];
	}else if(window.getComputedStyle) {
		value=value.replace(/([A-Z])/g,"-$1");
		//value=value.toLowerCase();
		rs = window.getComputedStyle(ele,'').getPropertyValue(value);
		if(value == 'color') {rs = colorToHex(rs);} //格式化color为16进制表示
	}else if(ele.currentStyle) {
		rs = ele.currentStyle[value];
	}else {
		return null;
	}
	return rs;
}
if(getBrowser('firefox')){/*----- 给FireFox添加innerText  -----*/
	HTMLElement.prototype.__defineGetter__("innerText",
		function(){
			var anyString = "";
			var childS = this.childNodes;
			for(var i=0; i<childS.length; i++) {
				if(childS[i].nodeType==1){
					anyString += childS[i].tagName== "BR" ? '\n' : childS[i].innerText;
				}
				else if(childS[i].nodeType==3){
					anyString += childS[i].nodeValue;
				}
			}
			return anyString;
		}
	);
	HTMLElement.prototype.__defineSetter__("innerText",
		function(sText){this.textContent=sText;}
	);
}
function Load(func) {/*-----  动态加载DOM  -----*/
	if(!window.__load_events) {
		var init = function(){
			if(arguments.callee.done) return;
			arguments.callee.done = true;
			if(window.__load_timer){
				clearInterval(window.__load_timer);
				window.__load_timer = null;
			}
			for(var i=0;i < window.__load_events.length;i++) {
				window.__load_events[i]();
			}
		window.__load_events = null;
		}
		// for Mozilla/Opera9
		if(document.addEventListener) {
			document.addEventListener("DOMContentLoaded", init, false);
		}

		// for Internet Explorer
		/*@cc_on @*/
		/*@if(@_win32)
			document.write("<scr"+"ipt id=__ie_onload defer src=//0><\/scr"+"ipt>");
			var script =getDOM("__ie_onload");
			script.onreadystatechange = function() {
				if(this.readyState == "complete") {
				init(); //	call the onload handler
				}
			};
		/*@end @*/

		// for Safari
		if(/WebKit/i.test(navigator.userAgent))	{
			window.__load_timer = setInterval(function() {
				if(/loaded|complete/.test(document.readyState)) {
					init();
				}
			},10);
		}
		// for other browsers
		window.onload = init;
		window.__load_events =[];
	}
	window.__load_events.push(func);
}/*-----  动态加载DOM END  -----*/
/******** public END  ********/

function catMenu(nav,tarclass,linkclass,styles,tartag) {/*-----  选项卡  -----*/
/*
**参数说明**
nav:主导航节点,必须
tarclass:要进行隐藏/显示的class值,必须
linkclass:连接高亮的样式class名，必选
styles:1为启用onmouseover，其余值为不启用，可选
tartag:要进行隐藏/显示的tagname(优化执行速度)，可选
*/
	if(!nav) {return false;}
	var links,wraps;
	links = nav.getElementsByTagName('a');
	wraps = $class(tarclass,tartag?tartag:'');
	var self = this;
	for(var i=0,l=links.length; i<l; ++i) {
		links[i].tid = links[i].getAttribute('href').split('#')[1];
		addEvent(links[i],'click',function(e) {
			e=window.event||e;obj=e.srcElement||e.target;
			this.blur();
			self.do_click(obj.tid,obj.className);
			return false;
		});
		if(styles == '1') {
			addEvent(links[i],'mouseover',function(e) {
				e=window.event||e;obj=e.srcElement||e.target;
				self.do_click(obj.tid,obj.className);
			});
		}
	}
	this.do_click = function(tarid,classname) {
		for(var i=0,l=wraps.length; i<l; ++i) {
			var sta = wraps[i].getAttribute('id');
			if(sta == tarid) {
				wraps[i].style.display='block';
				addClass(links[i],linkclass);
			}else {
				removeClass(links[i],linkclass);
				wraps[i].style.display='none';
			}
		}
	}
}/*-----  选项卡 END -----*/

function navHighLight(nav,highclass) {/*-----  导航栏高亮  -----*/
	if(!nav) {return false;}
	var links,currurl;
	links = nav.getElementsByTagName('a');
	currurl = window.location.href;
	highclass = highclass || 'lh';
	for(var i=0,l = links.length; i<l; i++) {
		var linkurl = links[i].getAttribute('href');
		var expr = linkurl.slice(-6,-1);
		var currexpr = currurl.slice(-6,-1);
		if((currurl.indexOf(linkurl) != -1) && (expr == currexpr)) {
			addClass(links[i],highclass);
		}else {
			removeClass(links[i],highclass);
		}
	}
}/*-----  导航栏高亮 END  -----*/

function resetFields(whichform,clearpw) {/*-----  表单清除默认值  -----*/
/*
**参数说明**
whichform:目标form
clearpw:可选，设定任意值则任何一个input获得焦点的时候密码框都会清除默认值，否则不执行
*/
	if(!whichform) {return false;}
	for(var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		var self = this;
		if(element.type == 'submit' || !element.defaultValue) {continue;}
		if(element.type == 'password' && clearpw) {self.pw = element;}
		addEvent(element,'focus',function (e) {
			e=window.event||e;obj=e.srcElement||e.target;
			if(obj.value == obj.defaultValue) {
				obj.value = '';
				self.pw?(self.pw.value = ''):'';
			}
		});
		addEvent(element,'blur',function (e) {
			e=window.event||e;obj=e.srcElement||e.target;
			if(obj.value == '') {
				obj.value = obj.defaultValue;
				self.pw?self.pw.value = self.pw.defaultValue:'';
			}
		});
	}
}
/*-----  表单清除默认值 END  -----*/