﻿var lib = {
	//去除空白
	trim: function (str) {
		return lib.replace(str, "(^\\s+)|(\\s+$)", "");
	},

	//匹配
	match: function (str, regexp, mode) {
		if (typeof mode == "undefined") mode = "g";
		var re = new RegExp(regexp, mode);
		var arr = re.exec(str);
		return arr;
	},

	//替换
	replace: function (str, regexp, rep, mode) {
		if (typeof rep == "undefined") rep = "";
		if (typeof mode == "undefined") mode = "g";
		var re = new RegExp(regexp, mode);
		var s = str.replace(re, rep);
		return s;
	},

	//取得对象
	element: function (elementId) {
		return document.getElementById(elementId);
	}, 

	//取得一个元素的text
	getText: function (element)
	{
		if (typeof element.innerText != "undefined") return element.innerText;
		if (typeof element.textContent != "undefined") return element.textContent;
		return null;
	},

	//设置一个元素的text
	setText: function (element, text)
	{
		if (typeof element.innerText != "undefined") 
		{
			element.innerText = text;
			return true;
		}
		if (typeof element.textContent != "undefined") 
		{
			element.textContent = text;
			return true;
		}
		return false;
	},

	//取得元素的innerHTML
	getHTML: function (element)
	{
		return element.innerHTML;
	},
	
	//设置元素的innerHTML
	setHTML: function (element, html)
	{
		element.innerHTML = html;
		return true;
	},	

	//通过打印其下元素调试对象
	debug: function (element)
	{
		try 
		{
			var win = window.open("", win, "width=320,height=240,scrollbars=yes");
			win.document.open();
			win.document.write("<ul>");
			for (var i in element)
			{
				win.document.write("<li>" + i + "=" + element[i] + "</li>")
			}
			win.document.write("</ul>");
			win.document.close();
		}catch (e)
		{
			alert(e);
		}
	},

	//取得对象的子节点
	childNodes: function (element)
	{
		var nodes = element.childNodes;
		var _nodes = new Array();
		var j = 0;
		for (var i = 0; i < nodes.length; i ++)
		{
			if (nodes[i].nodeType == 1) 
			{
				_nodes[j] = nodes[i];
				j ++;
			}
		}

		return _nodes;
	},

	//删除一个元素
	remove: function (element)
	{
		element.parentNode.removeChild(element);
	},
	
	//取得一个对象的X坐标
	x: function (element)
	{
		var positionX = 0;
		while (element != null)
		{
			positionX += element.offsetLeft;
			element = element.offsetParent;
		}
		return positionX;
	},
	
	//取得一个对象的y坐标
	y: function (element)
	{
		var positionY = 0;
		while (element != null)
		{
			positionY += element.offsetTop;
			element = element.offsetParent;
		}
		return positionY;
	},

	//取得一个对象的width
	w: function (element) {
		return element.offsetWidth;
	},
	
	//取得一个对象的Height offsetHeight
	h:  function (element) {
		return element.offsetHeight;
	},

	//取得url中参数值
	getParameter: function (varName)
	{
		var query = window.location.search;
		if (query != null || query != "")
		{
			query = query.replace(/^\?+/, "");
			var qArray = query.split("&");
			var len = qArray.length;
			if (len > 0)
			{
				for (var i=0; i<len; i++)
				{
					var sArray = qArray[i].split("=", 2);
					if (sArray[0] && sArray[1] && sArray[0] == varName)
					{
						//return unescape(sArray[1]);
						return decodeURIComponent(sArray[1]);
					}
				}
			}
		}
		return null;
	},

	//url编码
	urlencode: function (str)
	{
		return encodeURIComponent(str);
	},	

	//url解码
	urldecode: function (str)
	{
		return decodeURIComponent(str);
	},
		
	//将字符串转换成整数
	intval:function(s)
	{
		var _s = parseInt(s);
		if (isNaN(_s)) _s = 0;
		return _s;
	},
	
	//取得body对象
	getBody:function(s)
	{
		if (document.compatMode && document.compatMode != "BackCompat")
		{
			return document.documentElement;
		}
		else
		{
			return document.body;
		}
	},
	
	getOs:function()
	{
	   if(navigator.userAgent.indexOf("MSIE")>0)return 1;
	   if(isFirefox=navigator.userAgent.indexOf("Firefox")>0)return 2;
	   if(isChrome=navigator.userAgent.indexOf("Chrome")>0)return 6; 
	   if(isSafari=navigator.userAgent.indexOf("Safari")>0)return 3;   
	   if(isCamino=navigator.userAgent.indexOf("Camino")>0)return 4;
	   if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0)return 5;
	   return 0;
	}
}

//去除空格
String.prototype.trim = function() 
{
	return lib.trim(this);
};

//取得字符串长度，flg:true时 一个中文算两个
String.prototype.strlen = function(flg)
{
	if (typeof flg == "undefined") flg = false;
	if (flg == true)
	{
		return this.replace(/[^\x00-\xff]/g, "##").length;
	}
	else
	{
		return this.length;
	}
}

/**
listener.add(element, "mousedown", function(){alert("xx");});
**/
var listener = {
	/** 添加一事件的监听器 **/
	add: function (element, event, listener)
	{
		if (typeof element.addEventListener != "undefined")
		{
			element.addEventListener(event, listener, false);
		}
		else if (typeof element.attachEvent != "undefined")
		{
			element.attachEvent("on" + event, listener);
		}
		else
		{
			eval("element." + "on" + event + "=listener");
		}
	},

	/** 删除事件的监听器 **/
	remove: function (element, event, listener)
	{
		if (typeof element.removeEventListener != "undefined")
		{
			element.removeEventListener(event, listener, false);
		}
		else if (typeof element.detachEvent != "undefined")
		{
			element.detachEvent("on" + event, listener);
		}
		else
		{
			element["on" + event] = null;
		}
	},

	/** 事件目标 **/
	src: function (event)
	{
		var targetElement = null;
		if (typeof event.target != "undefined")
		{
			targetElement = event.target;
		}
		else
		{
			targetElement = event.srcElement;
		}
		while (targetElement.nodeType == 3 && targetElement.parentNode != null)
		{
			targetElement = targetElement.parentNode;
		}
		return targetElement;
	},

	stop: function (event)
	{
		if (typeof event.stopPropagation != "undefined")
		{
			event.stopPropagation();
		}
		else
		{
			event.cancelBubble = true;
		}
	}
}

/**
cookie.set("name", "value", 3600, "/", "wangyou.com");
cookie.get("name");
**/
var cookie = {
	//设置cookie
	set: function (name, value, time, path, domain) 
	{
		var expires = "";
		if (time) 
		{
			var date = new Date();
			date.setTime(date.getTime() + time * 1000);
			expires = "; expires=" + date.toGMTString();
		}
		if (!path) path = "/";
		
		if (domain)
		{
			document.cookie = name + "=" + value + expires + "; path=" + path + "; domain=" + domain + ";";
		}
		else
		{
			document.cookie = name + "=" + value + expires + "; path=" + path + ";";
		}
	},

	//取得cookie值
	get: function (name) 
	{
		var name = name + "=";
		var cookies = document.cookie.split(";");
		for(var i=0; i<cookies.length; i++) 
		{
			var c = cookies[i];
			while (c.charAt(0) == " ") c = c.substring(1, c.length);
			if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
		}
		return null;
	}
}

function createXMLHttpRequest()
{
		var xmlhttp = null;
		if ( window.ActiveXObject )
		{
			try 
			{ 
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");
			} 
			catch (e) 
			{
				try 
				{ 
					xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
				} 
				catch (e)
				{
					try 
					{ 
						xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
					} 
					catch (e)
					{}
				}
			}
		}
		else if ( window.XMLHttpRequest)
		{
			xmlhttp = new XMLHttpRequest();
		}
		
		return xmlhttp;
}

/**
drag.init(
	{
		element: div,
		start: function()
		{
			this.element.innerHTML = "开始";
		},
		drag: function()
		{
			this.element.innerHTML = "进行中...";
		},
		end: function()
		{
			this.element.innerHTML = "结束";
		}
	}
);
**/
var drag = {
	flg: 0,
	dragX: 0,
	dragY: 0,
	dragEX: 0,
	dragEY: 0,
	element: null,
	direction: null,
	customStart: null,
	customDrag: null,
	customEnd: null, 
	minX: null,
	maxX: null,
	minY: null,
	maxY: null,
	init: function(dragObj)
	{
		this.element = dragObj.element;
		this.customStart = dragObj.start;
		this.customDrag = dragObj.drag;
		this.customEnd = dragObj.end;
		if (typeof dragObj.direction == "undefined") dragObj.direction = "all";
		if (typeof dragObj.minX == "undefined") dragObj.minX = 0;
		if (typeof dragObj.maxX == "undefined") dragObj.maxX = 0;
		if (typeof dragObj.minY == "undefined") dragObj.minY = 0;
		if (typeof dragObj.maxY == "undefined") dragObj.maxY = 0;
		this.direction = dragObj.direction;
		this.minX = lib.intval(dragObj.minX);
		this.maxX = lib.intval(dragObj.maxX);
		this.minY = lib.intval(dragObj.minY);
		this.maxY = lib.intval(dragObj.maxY);
		this.element.style.cursor = "auto";	
		listener.add(this.element, "mousedown", this.start);
		listener.add(this.element, "mousemove", this.drag);
		listener.add(this.element, "mouseout", this.end);
		listener.add(this.element, "mouseup", this.end);  
		this.element.onDragStart=new Function();
		this.element.onDragEnd=new Function();
		this.element.onDrag=new Function()
	},

	start: function(e)
	{
		drag.element.style.cursor = "move";		
		drag.flg = 1;
		drag.dragX = e.clientX;
		drag.dragY = e.clientY;
		drag.dragEX = lib.x(drag.element);
		drag.dragEY = lib.y(drag.element);
		drag.customStart();
	},

	drag:function(e)
	{			
		if (drag.flg == 1)
		{
			drag.element.style.cursor = "move";	
			x1 = e.clientX;
			y1 = e.clientY;		
			drag.element.style.position = "absolute";
			if (drag.direction == "x" || drag.direction == "all")
			{
				drag.element.style.left = drag.left(x1 - drag.dragX + drag.dragEX) + "px";
			}
			if (drag.direction == "y" || drag.direction == "all")
			{
				drag.element.style.top = drag.top(y1 - drag.dragY + drag.dragEY) + "px";
			}
			drag.dragX = x1;
			drag.dragY = y1;
			drag.dragEX = lib.intval(drag.element.style.left);
			drag.dragEY = lib.intval(drag.element.style.top);
			drag.customDrag();
		}	
	},

	end:function(e)
	{
		drag.element.style.cursor = "auto";
		drag.flg = 0;
		drag.customEnd();
	},

	left:function(leftPx)
	{
		if (drag.minX > 0 && leftPx < drag.minX) 
			return drag.minX;
		if (drag.maxX > 0 && leftPx > drag.maxX)
			return drag.maxX;
		return leftPx;
	},

	top:function(topPx)
	{
		if (drag.minY > 0 && topPx < drag.minY) 
			return drag.minY;
		if (drag.maxY > 0 && topPx > drag.maxY)
			return drag.maxY;
		return topPx;
	}
}