// utf-8
// author  : Kerry 
// email : wr_asdf@163.com
function $(id){
	if(id==null){
			return null;
		}
	if(typeof(id)=='string'){
			return document.getElementById(id);
		}
	else if(typeof(id) == 'object'){
			return id;
	}	
}
var Base = {
	Browser:{
    	IE:     !!(window.attachEvent && !window.opera),
    	Opera:  !!window.opera,
    	WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    	Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
	},
	domCreat:function(dom){		//创建dom
		return document.createElement(dom);
	},
	getMouseXY:function(ev){	//获取当前鼠标的xy
		ev = ev ? ev : (window.event ? window.event : null);
		if(ev.pageX || ev.pageY)
		{
			return {x:ev.pageX, y:ev.pageY};
			}
		else
		{
			return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,y:ev.clientY + document.body.scrollTop  - document.body.clientTop  }; 
			}
	},			
	getSrcDom:function(ev){	//返回触发的事件源
		ev = ev ? ev : (window.event ? window.event : null);
		if(Base.Browser.IE){
			return 	ev.srcElement;
		}
		else{
			return 	ev.target;
		}
	},
	addEvent:function(o,t,f){			
		if (window.addEventListener) o.addEventListener(t, f, false);
		else if (window.attachEvent) o.attachEvent('on'+ t, f);
		else o['on'+ t] = f;
	},
	removeEvent:function(o,t,f){		
		if (o.removeEventListener) o.removeEventListener(t, f, false);
		else if (o.detachEvent) o.detachEvent('on'+ t, f);
		else o['on'+ t] = null;
	},
	getView:function(){		//获取document可见宽高
		var height = self.innerHeight; // Safari, Opera
		var width = self.innerWidth;  // Safari
		var mode = document.compatMode;
	
		if ( (mode || Base.Browser.IE) && !Base.Browser.Opera ) { // IE, Gecko
			height = (mode == 'CSS1Compat') ?
					document.documentElement.clientHeight : // Standards
					document.body.clientHeight; // Quirks
		}
		if (mode || Base.Browser.IE) { // IE, Gecko, Opera
			width = (mode == 'CSS1Compat') ?
					document.documentElement.clientWidth : // Standards
					document.body.clientWidth; // Quirks
		}
		return {w:width,h:height}
	},
	getWindowView:function(){	//获取页面总可见宽高;
        var scrollWidth = (document.compatMode != 'CSS1Compat') ? document.body.scrollWidth : document.documentElement.scrollWidth;
        var scrollHeight = (document.compatMode != 'CSS1Compat') ? document.body.scrollHeight : document.documentElement.scrollHeight;
	    var w = Math.max(scrollWidth, Base.getView().w);
        var h = Math.max(scrollHeight, Base.getView().h);
		return {w:w,h:h}
	},
	getDomWH:function(id){		//获取dom的真实宽高
		var width = $(id).offsetWidth;	
		var height = $(id).offsetHeight;
		return {w:width,h:height};
	},
	getStyle:function(element,style){
		if(Base.Browser.IE){
			element = $(element);
			style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style;
			var value = element.style[style];
			if (!value && element.currentStyle) value = element.currentStyle[style];
		
			if (style == 'opacity') {
			  if (value = (Base.getStyle(element,'filter') || '').match(/alpha\(opacity=(.*)\)/))
				if (value[1]) return parseFloat(value[1]) / 100;
			  return 1.0;
			}
			return value;
		}
		else{
			element = $(element);
			style = style == 'float' ? 'cssFloat' : style;
			var value = element.style[style];
			if (!value) {
			  var css = document.defaultView.getComputedStyle(element, null);
			  value = css ? css[style] : null;
			}
			if (style == 'opacity') return value ? parseFloat(value) : 1.0;
			return value == 'auto' ? null : value;
		}
	},
	setStyle:function(element,styles){	//style 为json格式的，支持多个同时修改
		element = $(element);
		var elementStyle = element.style;
	
		for (var property in styles)
		  if (property == 'opacity') Base.setOpacity(element,styles[property])
		  else
			elementStyle[(property == 'float' || property == 'cssFloat') ?
			  (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
			  property ] = styles[property];
	
		return element;
	},
	setOpacity:function(element,value){
		if(Base.Browser.IE){
			element = $(element);
			var filter = Base.getStyle(element,'filter'), style = element.style;
			if (value == 1 || value === '') {
			  style.filter = filter.replace(/alpha\([^\)]*\)/gi,'');
			  return element;
			} else if (value < 0.00001) value = 0;
			style.filter = filter.replace(/alpha\([^\)]*\)/gi, '') +
			  'alpha(opacity=' + (value * 100) + ')';
			return element;
		}
		else if(Base.Browser.Gecko){
			element = $(element);
			element.style.opacity = (value == 1 || value === '') ? '' :
			  (value < 0.00001) ? 0 : value;
			return element;
		}
		else{
			element = $(element);
			element.style.opacity = (value == 1 || value === '') ? '' :
			  (value < 0.00001) ? 0 : value;
			return element;
		}
	},
	getOpacity: function(element) {
		return Base.getStyle(elemnet,'opacity');
	},
	getScroll:function(){	//获取滚动条信息
		var t, l, w, h;        
		if (document.documentElement && document.documentElement.scrollTop)
		{    
		   t = document.documentElement.scrollTop;    
		   l = document.documentElement.scrollLeft;  
		   w = document.documentElement.scrollWidth;   
		   h = document.documentElement.scrollHeight;   
		} 
		else if (document.body) 
		{  
			t = document.body.scrollTop; 
			l = document.body.scrollLeft; 
			w = document.body.scrollWidth; 
			h = document.body.scrollHeight;  
		}  
		return { t: t, l: l, w: w, h: h };		
	},
	cleanWhitespace: function(id,type) {//清除空白节点，增加迭代法
		var element = $(id);
		var node = element.firstChild;
		while (node) {
		  var nextNode = node.nextSibling;
		  if (node.nodeType == 3 && !/\S/.test(node.nodeValue)){
				element.removeChild(node);
			}
		  else if(node.nodeType != 3 && type){
				Base.cleanWhitespace(node,true)
			}	
		  node = nextNode;
		}
		//return element;
	},
	domRealPos:function(id){	// 获取dom的真实位置
		var valueL = 0, valueT = 0;	
		var element = $(id);
		do {
			valueT += element.offsetTop  || 0;
			valueL += element.offsetLeft || 0;
			element = element.offsetParent;
		} while (element);
		return [valueL, valueT];
	},
	positionOffset:function(id){	//获取特殊dom的pos
		var valueT = 0, valueL = 0;
		var element = $(id);
		do {
			valueT += element.offsetTop  || 0;
			valueL += element.offsetLeft || 0;
			element = element.offsetParent;
			if (element) {
				if(element.tagName=='BODY') break;
				var p = Element.getStyle(element, 'position');
				if (p == 'relative' || p == 'absolute') break;
			}
		} while (element);
		return [valueL, valueT];
	},
	setHomepage:function(url){		//设置为首页
		if (document.all){
			document.body.style.behavior='url(#default#homepage)';
			document.body.setHomePage(url);
		}else if (window.sidebar){
			if(window.netscape){
				try{
					netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
					var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);
					prefs.setCharPref('browser.startup.homepage',url);
				}catch (e){
					alert( "该操作被浏览器拒绝，如果想启用该功能，请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true" );
				}
			}
		}
	},
	addFavorite:function(url,title){	//添加到收藏夹
		if (window.external || window.external.addFavorite){
		   window.external.addFavorite(url,title);
		}else if (window.sidebar){
		   window.sidebar.addPanel(title, url, "");
		}
	}
};
var Ajax = {
	createXMLHttp:function(){
	  if(typeof XMLHttpRequest!="undefined"){
			return new XMLHttpRequest();
	  }else if(window.ActiveXObject){
			var aVersions=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
			for(var i=0;i<aVersions.length;i++){
				try{
					var oXmlHttp=new ActiveXObject(aVersions[i]);
					return oXmlHttp;
				}catch(oError){};
			}
	  	}
	},
	get:function(url,args,f,sync){	//sync:      true同步，false异步
		var xmlhttp = Ajax.createXMLHttp();
		if (args != "") args = "?" + args;
		xmlhttp.open("get", url + args,!sync);
		xmlhttp.onreadystatechange = function(){
			if(xmlhttp.readyState == 4){
				if(xmlhttp.status == 200 ||xmlhttp.status == 304 ){
					f(xmlhttp);
				}
			}
		}
		xmlhttp.send('');
	},
	post:function(url, args, fn,sync){
		var req = new Ajax.createXMLHttp();
		req.open('POST',url,!sync);
		req.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		req.onreadystatechange = function(){
			if (req.readyState == 4){
				//var s; try {s = req.status;}catch (ex){ fns.error(ex.description || ex); }
				if (req.status == 200 || req.status == 304) fn(req);
			}
		};
		req.send(args);
	}
};
var Cookie = {
	getExpDate:function(days, hours, minutes){
		var expDate = new Date();
		if(typeof(days) == "number" && typeof(hours) == "number" && typeof(hours) == "number")
		{
			expDate.setDate(expDate.getDate() + parseInt(days));
			expDate.setHours(expDate.getHours() + parseInt(hours));
			expDate.setMinutes(expDate.getMinutes() + parseInt(minutes));
			return expDate.toGMTString();
		}	
	},
	setCookie:function(name,value,expiry,path,domain,secure){	//expiry可以通过Cookie.getExpDate获取
		var nameString = name + "=" + value;
		var expiryString = (expiry == null) ? "" : " ;expires = "+ expiry;
		var pathString = (path == null) ? "" : " ;path = "+ path;
		var domainString = (domain == null) ? "" : " ;domain = "+ domain;
		var secureString = (secure) ?";secure":"";
		document.cookie = nameString + expiryString + pathString + domainString + secureString;
	},
	getCookie:function(name){
		var cookieValue = "";
		var search = name + "=";
		if(document.cookie.length > 0){ 
			offset = document.cookie.indexOf(search);
			if (offset != -1){ 
				offset += search.length;
			end = document.cookie.indexOf(";", offset);
			if (end == -1) end = document.cookie.length;
			cookieValue = unescape(document.cookie.substring(offset, end))
			}
		}
		return cookieValue;
	},
	deleteCookie:function(name){
		var expires = new Date();
		expires.setTime (expires.getTime() - 1);
		setCookie( name , "Delete Cookie", expires,null,null,false);
	}
}
