﻿/*常用js封装库
Lei.Common.Lib 1.1
sun.Lei 2009.7
Last update 2010.7
*/

var Lei;(function(w, undefined) {
var d = w.document; var userAgent = navigator.userAgent.toLowerCase(), toString = Object.prototype.toString; var $ = { version: "1.1.0.1", isFunction: function(obj) { return toString.call(obj) === "[object Function]" }, isArray: function(obj) { return toString.call(obj) === "[object Array]" }, browser: (function() { var b = { version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, '0'])[1], webkit: /webkit/.test(userAgent), opera: /opera/.test(userAgent), msie: /msie/.test(userAgent) && !/opera/.test(userAgent), mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) }; b.msie6 = b.msie && parseInt(b.version, 10) == 6; b.msie7 = b.msie && parseInt(b.version, 10) == 7; b.msie8 = b.msie && parseInt(b.version, 10) == 8; return b })(), each: function(object, callback, args) { var name, i = 0, length = object.length, isObj = length === undefined || $.isFunction(object); if (args) { if (isObj) { for (name in object) { if (callback.apply(object[name], args) === false) { break } } } else { for (; i < length; ) { if (callback.apply(object[i++], args) === false) { break } } } } else { if (isObj) { for (name in object) { if (callback.call(object[name], name, object[name]) === false) { break } } } else { for (var value = object[0]; i < length && callback.call(value, i, value) !== false; value = object[++i]) { } } } return object }, getText: function(elems) { var ret = "", elem; elems = typeof (elems) === "string" ? $.$(elems) : elems; if (!elems.length) { elems = elems.childNodes }; for (var i = 0; elems[i]; i++) { elem = elems[i]; if (elem.nodeType === 3 || elem.nodeType === 4) { ret += elem.nodeValue } else if (elem.nodeType !== 8) { ret += Lei.getText(elem.childNodes) } } return ret }, click: function(elems) { elems = typeof (elems) === "string" ? $.$(elems) : elems; if ($.browser.msie) { elems.click() } else { var evt = d.createEvent("MouseEvents"); evt.initEvent("click", true, true); elems.dispatchEvent(evt) } } }; var domMethod = function() {
    this.$Tag = function(tag, filterHandler) { var tags = $.$Tag(tag, this, filterHandler); return tags },

    this.hide = function() { this.style.display = 'none' }, 
    
    this.visible = function() { this.style.display = 'block' }, this.setOpacity = function(v) { if (!$.Validator.isNumberic(v) || v < 0 || v > 1) v = 1; $.Utils.setStyle(this, "opacity", v) }, this.setStyle = function(name, value) { $.Utils.setStyle(this, name, value) }, this.getStyle = function(name) { return $.Utils.getStyle(this, name) }, this.doClick = function() { $.click(this) } }; $.$ = function(id) { var o = typeof (id) === "string" ? d.getElementById(id) : id; domMethod.apply(o, arguments); return o }; $.$Tag = function(tag, obj, filterHandler, args) { if (tag == undefined || tag.length == 0) tag = "*"; var o, s = filterHandler != undefined && $.isFunction(filterHandler), t = []; var a = args && $.isArray(args); if (typeof (obj) != "object") { o = d.getElementsByTagName(tag) } else { o = obj.getElementsByTagName(tag) }; for (var i = 0, l = o.length; i < l; i++) { var tem = o[i]; var r = a ? filterHandler.apply(tem, args) : filterHandler.call(tem, tem); if (s && r) { t.push(tem) }; domMethod.apply(tem, arguments) } return s ? t : o }; $.$Name = function(name) { return d.getElementsByName(name) }; $.Validator = { Check: function(reg, str) { var re = new RegExp(reg); return re.test(str) }, isNumberic: function(str) { return /^(-|\+)?\d+(\.\d+)?$/.test(str) }, isInt: function(str) { return /^\d+$/.test(str) }, isEmail: function(str) { return /^[\w\.]+([-]\w+)*@[A-Za-z0-9-_]+[\.][A-Za-z0-9-_]/.test(str) }, isChinese: function(str) { return /^[u4E00-u9FA5]+$/.test(str) }, isMobile: function(str) { return /^[1][3,5,8][0-9]{9}$/.test(str) }, isDate: function(str) { return /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/.test(str) } }; $.Utils = { getObjectPos: function(node) { node = typeof (node) === "string" ? $.$(node) : node; var r = { left: 0, top: 0 }; if ($.browser.msie || !node.getBoundingClientRect) { var n = node; for (r.left = 0, r.top = 0; n != null; r.left += n.offsetLeft, r.top += n.offsetTop, n = n.offsetParent); } else { var rect = node.getBoundingClientRect(); r.left = $.Utils.getScrollLeft(node.ownerDocument); r.top = $.Utils.getScrollTop(node.ownerDocument); r.left += rect.left; r.top = r.top += rect.top } return r }, getScrollLeft: function(node) { if (node === d) { return d.documentElement.scrollLeft || d.body.scrollLeft } return node.scrollLeft }, getScrollTop: function(node) { if (node === d) { return d.documentElement.scrollTop || d.body.scrollTop } return node.scrollTop }, contains: d.defaultView ? function(a, b) { return !!(a.compareDocumentPosition(b) & 16) } : function(a, b) { return a != b && a.contains(b) }, curStyle: d.defaultView ? function(elem) { return d.defaultView.getComputedStyle(elem, null) } : function(elem) { return elem.currentStyle }, getStyle: function(elem, styleName) { if (typeof (elem) == "string") elem = $.$(elem); if (d.defaultView) { var style = d.defaultView.getComputedStyle(elem, null); return styleName in style ? style[styleName] : style.getPropertyValue(styleName) } else { var style = elem.currentStyle; if (styleName == "float") styleName = "styleFloat"; if (styleName == "opacity") { if (/alpha\(opacity=(.*)\)/i.test(style.filter)) { var opacity = parseFloat(RegExp.$1); return opacity ? opacity / 100 : 0 } return 1 }; var ret = style[styleName] || style[styleName.replace(/-([a-z])/ig, function($, $1) { return $1.toUpperCase() })]; if (!/^\-?\d+(px)?$/i.test(ret) && /^\-?\d/.test(ret)) { style = elem.style, left = style.left, rsLeft = elem.runtimeStyle.left; elem.runtimeStyle.left = elem.currentStyle.left; style.left = ret || 0; ret = style.pixelLeft + "px"; style.left = left; elem.runtimeStyle.left = rsLeft } return ret } }, setStyle: function(elems, style, value) { if (!elems.length) { elems = [elems] } if (typeof style == "string") { var s = style; style = {}; style[s] = value } $.each(elems, function() { for (var name in style) { var value = style[name]; if (name == "opacity" && $.browser.msie) { this.style.filter = (this.currentStyle.filter || "").replace(/alpha\([^)]*\)/i, "") + "alpha(opacity=" + value * 100 + ")" } else if (name == "float") { this.style[$.browser.ie ? "styleFloat" : "cssFloat"] = value } else { this.style[name.replace(/-([a-z])/ig, function($, $1) { return $1.toUpperCase() })] = value } } }) }, getMousePos: function() { var posx = 0, posy = 0; e = Lei.Event.getEvent(false); if (e.pageX || e.pageY) { posx = e.pageX; posy = e.pageY } else if (e.clientX || e.clientY) { if (d.documentElement.scrollTop) { posx = e.clientX + d.documentElement.scrollLeft; posy = e.clientY + d.documentElement.scrollTop } else { posx = e.clientX + d.body.scrollLeft; posy = e.clientY + d.body.scrollTop } }; return { MX: posx, MY: posy} } }; $.Event = { getEvent: function(isformat) { if (window.event) { return isformat ? Lei.Event.formatEvent(window.event) : window.event } else { var se = Lei.Event.getEvent; while (se.caller) { var ev = se.caller.arguments[0]; if (typeof (ev) == "object" && ev.type != "") { return ev } se = se.caller }; return null } }, addEventHandler: function(object, eventType, handler) { if (object.nodeType == 3 || object.nodeType == 8) return; if (object.addEventListener) { object.addEventListener(eventType, handler, false) } else if (object.attachEvent) { object.attachEvent("on" + eventType, handler) } else { object["on" + eventType] = handler } }, removeEventHandler: function(object, eventType, handler) { if (object.removeEventListener) { object.removeEventListener(eventType, handler, false) } else if (object.detachEvent) { object.detachEvent("on" + eventType, handler) } else { object["on" + eventType] = null } }, formatEvent: function(oEvent) { if ($.browser.msie) { oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0; oEvent.eventPhase = 2; oEvent.isChar = (oEvent.charCode > 0); oEvent.pageX = oEvent.clientX + d.body.scrollLeft; oEvent.pageY = oEvent.clientY + d.body.scrollTop; oEvent.preventDefault = function() { this.returnValue = false }; if (oEvent.type == "mouseout") { oEvent.relatedTarget = oEvent.toElement } else if (oEvent.type == "mouseover") { oEvent.relatedTarget = oEvent.fromElement }; oEvent.stopPropagation = function() { this.cancelBubble = true }; oEvent.target = oEvent.srcElement; oEvent.time = (new Date).getTime() }; return oEvent } }; $.Object = { Create: function() { return function() { this.init.apply(this, arguments) } }, Bind: function(objParent, objChild) { return function() { return objParent.apply(objChild, arguments) } }, Extend: function(destination, source) { for (var property in source) { destination[property] = source[property] }; return destination } }; $.Ajax = $.Object.Create(); $.Ajax.prototype = { init: function(url, options) { this.setOptions(options); this.url = url; this.a = this.xmlObject() }, setOptions: function(options) { this.opt = { format: "text", method: "get", isCache: false, parms: "", isSendWebService: false, ServiceOpt: {}, onSuccess: function(responseObj) { }, onError: function(errorMess) { } }; this.opt = $.Object.Extend(this.opt, options || {}) }, xmlObject: function() { var a = false; if (window.XMLHttpRequest) { a = new XMLHttpRequest(); if (a.overrideMimeType) { } } else if (window.ActiveXObject) { var v = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP']; for (var i = 0; i < v.length; i++) { try { a = new ActiveXObject(v[i]); if (a) { return a } } catch (e) { } } }; return a }, onReadyStateChange: function() { if (this.a.readyState == 4) { if (this.a.status == 200) { if (this.opt.format == "text") { this.opt.onSuccess(this.a.responseText) } else if (this.opt.format == "json") { var json = this.a.responseText.toString(); try { json = eval('(' + json + ')'); } catch (e) { alert('Json对象创建失败!检查Json字符串格式,' + e.message); return; } finally { this.a.abort() }; this.opt.onSuccess(json); } else if (opt.format == "xml") { this.opt.onSuccess(a.responseXML) } else { alert('format参数错误!') }; this.a.abort() } else { this.opt.onError(this.a.status) } } }, Send: function() { if (typeof this.a != "object") { this.opt.onError('创建对象失败'); return false }; if ($.browser.mozilla) { var l = window.location.toString(); if (l.toLowerCase().indexOf("file:") == 0) { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead") } }; if (!this.opt.isCache) { if (this.url.indexOf("?") < 0) { this.url = this.url + "?rnd=" + Math.random() } else { this.url = this.url + "&rnd=" + Math.random() } }; this.a.onreadystatechange = $.Object.Bind(this.onReadyStateChange, this); this.a.open(this.opt.method, this.url, true); this.a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=GB2312"); this.a.send(this.opt.parms) }, getSoapDoc: function(sCommand, sNamespace) { sXmlDocumentStart += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"; sXmlDocumentStart += "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"; sXmlDocumentStart += "<soap:Body>"; sXmlDocumentStart += "<" + sCommand + " xmlns=\"" + sNamespace + "\">"; sXmlDocumentEnd += "</" + sCommand + ">"; sXmlDocumentEnd += "</soap:Body>"; sXmlDocumentEnd += "</soap:Envelope>" } }; String.prototype.trim = function() { var str = this, str = str.replace(/^\s\s*/, ''), ws = /\s/, i = str.length; while (ws.test(str.charAt(--i))); return str.slice(0, i + 1) }; String.prototype.trimLeft = function() { return this.replace(/(^\s*)/g, "") }; String.prototype.trimRigth = function() { return this.replace(/(\s*$)/g, "") }; if (!String.format) { String.format = function(fmt) { var params = arguments; var pattern = /{{|{[1-9][0-9]*}|\x7B0\x7D/g; return fmt.replace(pattern, function(p) { if (p == "{{") return "{"; return params[parseInt(p.substr(1, p.length - 2), 10) + 1] }) } }; Lei = $;
    /*防止与其它类库命名冲突，可以自定义变量名称, w=window*/
    w.$ = w.$id = $.$;
    w.$t = w.$Tag = $.$Tag;
    w.$n = w.$Name = $.$Name;
    w.$v = $.Validator;
    w.$u = $.Utils;
    w.$e = $.Event;
    w.$a = $.Ajax;
    w.$o = $.object
})(window);



