function $() {
	var elements = new Array();
	for ( var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}
/**
 * @param type 标签类型:div,tr,label,span
 * @param id 标签ID
 * @param parent
 */
function $c(type, id, parent) {
	var el = null;
	if (document.createElementNS) {
		el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
	} else {
		el = document.createElement(type);
	}
	if (typeof parent != "undefined") {
		parent.appendChild(el);
	}
	if (typeof id != "undefined") {
		el.id = id;
	}
	return el;
}
function IsNumber(v){
  return !isNaN(v);
}

document.getElementsByIdRegex = function(r, ele) {
	if (!ele)
		ele = document;
	var children = ele.getElementsByTagName('*') || ele.all;
	var elements = new Array();
	var reg = new RegExp(r);
	for ( var i = 0; i < children.length; i++) {
		var child = children[i];
		var id = child.id;
		if (id) {
			try {
				if (id.match(reg)) {
					elements.push(child);
				}
			} catch (e) {
			}
		}
	}
	return elements;
}

function getFormElement(fid, fname) {
	var f = $(fid);
	if (!f)
		f = document.forms[fid];
	if (!f)
		return false;
	var e = new Array();
	for ( var i = 0; i < f.elements.length; ++i) {
		var ee = f.elements.item(i);
		if (ee && ee.name && ee.name == fname) {
			e.push(ee);
		}
	}
	if (e.length == 1)
		return e[0];
	if (e.length == 0)
		return false;
	return e;
}
function loc(u, target) {
	var id = 'loc_form_tmp';
	var f = $(id);
	if (!f) {
		f = $c('form', id, document.body);
	}
	if (!target)
		target = '';
	f.target = target;
	f.action = u;
	f.method = 'get';
	if (u.indexOf('?') >= 0) {
		var t = u.split('?')[1];
		var ts = t.split('&');
		if (ts && ts.length > 0) {
			for ( var i = 0; i < ts.length; ++i) {
				var tss = ts[i].split('=');
				if (tss && tss.length == 2) {
					var h = $c('input', null, f);
					h.type = 'hidden';
					h.name = tss[0];
					h.value = tss[1];
				}
			}
		}
	}
	f.submit();
}

function jsEncode(str) {
	return encodeURIComponent(str);
}
function jsDecode(str) {
	return decodeURIComponent(str);
}

function serializerForm(fname) {
	var f = $(fname) || document.forms[fname];
	if (!f)
		return '';
	var s = ''
	for ( var i = 0; i < f.elements.length; ++i) {
		var e = f[i];
		if (!e.name)
			continue;
		var name = e.name;
		var value = null;
		if (e.tagName.toLowerCase() == 'textarea') {
			value = e.value || e.innerHTML;
		} else if (e.tagName.toLowerCase() == 'select') {
			if (!e.options[e.selectedIndex])
				continue;
			value = e.options[e.selectedIndex].value;
		} else if (e.tagName.toLowerCase() == 'input') {
			switch (e.type.toLowerCase()) {
			case 'submit':
			case 'hidden':
			case 'password':
			case 'text':
				value = e.value;
				break;
			case 'checkbox':
			case 'radio':
				if (!e.checked)
					continue;
				value = e.value;
				break;
			default:
				continue;
			}
		}

		s += e.name + '=' + jsEncode(value) + '&';
	}
	return s;
}

function utf8(wide) {
	var c, s;
	var enc = '';
	var i = 0;
	while (i < wide.length) {
		c = wide.charCodeAt(i++);
		if (c >= 0xDC00 && c < 0xE000)
			continue;
		if (c >= 0xD800 && c < 0xDC00) {
			if (i >= wide.length)
				continue;
			s = wide.charCodeAt(i++);
			if (s < 0xDC00 || c >= 0xDE00)
				continue;
			c = ((c - 0xD800) << 10) + (s - 0xDC00) + 0x10000;
		}
		if (c < 0x80)
			enc += String.fromCharCode(c);
		else if (c < 0x800)
			enc += String.fromCharCode(0xC0 + (c >> 6), 0x80 + (c & 0x3F));
		else if (c < 0x10000)
			enc += String.fromCharCode(0xE0 + (c >> 12),
					0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
		else
			enc += String.fromCharCode(0xF0 + (c >> 18),
					0x80 + (c >> 12 & 0x3F), 0x80 + (c >> 6 & 0x3F),
					0x80 + (c & 0x3F));
	}
	return enc;
}
var hexchars = "0123456789ABCDEF";
var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
function toHex(n) {
	return hexchars.charAt(n >> 4) + hexchars.charAt(n & 0xF);
}
function encodeURIComponentNew(s) {
	var s = utf8(s);
	var c;
	var enc = '';
	for ( var i = 0; i < s.length; i++) {
		if (okURIchars.indexOf(s.charAt(i)) == -1)
			enc += '%' + toHex(s.charCodeAt(i));
		else
			enc += s.charAt(i);
	}
	return enc;
}
function unescapeHTML(s) {
	s = s.replace(/&nbsp;/g, ' ');
	s = s.replace(/&lt;/g, '<');
	s = s.replace(/&gt;/g, '>');
	s = s.replace(/&amp;/g, '&');
	s = s.replace(/&quot;/g, '"');
	return s;
}
function escapeHTML(s) {
	s = s.replace(/ /g, '&nbsp;');
	s = s.replace(/</g, '&lt;');
	s = s.replace(/>/g, '&gt;');
	s = s.replace(/&/g, '&amp;');
	s = s.replace(/\"/g, '&quot;');
	return s;
}
function getAbsPos(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = {
		x :el.offsetLeft - SL,
		y :el.offsetTop - ST
	};
	if (el.offsetParent) {
		var tmp = this.getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}
function trim(s) {
	return s.replace(/(^\s+)|(\s+$)/g, '');
}
function byteLength(str) {
	var len = 0;
	for ( var i = 0; i < str.length; i++) {
		if (str.charCodeAt(i) > 255) {
			len += 2;
		} else {
			len++;
		}
	}
	return len;
}
function getInt(o, d) {
	if (!d)
		d = 0;
	o = parseInt(o);
	if (isNaN(o))
		o = d;
	return o;
}
function getFloat(o, d) {
	if (!d)
		d = 0.0;
	o = parseFloat(o);
	if (isNaN(o))
		o = d;
	return o;
}
function addEvent(el, evname, func) {
	if (el.attachEvent) {
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) {
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] = func;
	}
}
function removeEvent(el, evname, func) {
	if (el.detachEvent) {
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) {
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] = null;
	}
}
function stopEvent(ev) {
	ev || (ev = window.event);
	if (document.all && window.event) {
		ev.cancelBubble = true;
		ev.returnValue = false;
	} else {
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
}
function removeClass(el, className) {
	if (!(el && el.className)) {
		return;
	}
	var cls = el.className.split(" ");
	var ar = new Array();
	for ( var i = cls.length; i > 0;) {
		if (cls[--i] != className) {
			ar[ar.length] = cls[i];
		}
	}
	el.className = ar.join(" ");
}
function addClass(el, className) {
	Calendar.removeClass(el, className);
	el.className += " " + className;
}
function mergeTemplate(template, context) {
	for ( var k in context) {
		for ( var i = 0; i < 100; ++i) {
			if (template.search('var_' + k + '_') != -1) {
				template = template.replace('var_' + k + '_', context[k]);
			} else {
				break;
			}
		}
		for ( var i = 0; i < 100; ++i) {
			if (template.search('{' + k + '}') != -1) {
				template = template.replace('{' + k + '}', context[k]);
			} else {
				break;
			}
		}
	}
	return template;
}
function getTemplate(id) {
	var e = $(id);
	if (!e)
		return '';
	var s = e.innerHTML;
	if (!s)
		return '';
	return s.replace('<!--', '').replace('-->', '');
}
var timeouts = new Array();
function $t(ev, t) {
	if (timeouts[ev]) {
		clearTimeout(timeouts[ev]);
		timeouts[ev] = null;
	}
	if (t >= 0) {
		timeouts[ev] = setTimeout(ev, t);
	}
}
if (typeof encodeURIComponent == "function") {
} else {
	function encodeURIComponent(s) {
		return encodeURIComponentNew(s);
	}
}
if (typeof decodeURIComponent == "function") {
} else {
	function decodeURIComponent(s) {
		return unescape(s);
	}
}
if (!Array.prototype.push) {
	Array.prototype.push = function() {
		var startLength = this.length;
		for ( var i = 0; i < arguments.length; i++)
			this[startLength + i] = arguments[i];
		return this.length;
	}
}
if (!String.prototype.byteLength) {
	String.prototype.byteLength = function() {
		return byteLength(this);
	}
}
if (!String.prototype.trim) {
	String.prototype.trim = function() {
		return trim(this);
	}
}
if (!String.prototype.escapeHTML) {
	String.prototype.escapeHTML = function() {
		return escapeHTML(this);
	}
}
if (!String.prototype.unescapeHTML) {
	String.prototype.unescapeHTML = function() {
		return unescapeHTML(this);
	}
}
function emptyFunc() {
}
function errorFunc(req) {
	alert('系统异常，错误代码：' + req.status);
}
/**
 * @param func 函数
 * @param method post:get
 * @param url 访问URL
 * @param data 参数?
 * @param efunc 异常处理函数
 * @return
 */
function sAJAX(func, method, url, data, efunc) {
	AJAX(func, method, url, true, null, null, data, efunc);
} 
function gAJAX(func, url, date, efunc) {
	sAJAX(func, 'get', url, date, efunc);
}
function pAJAX(func, url, date, efunc) {
	sAJAX(func, 'post', url, date, efunc);
} 
function AJAX(func, method, url, async, user, password, data, efunc) {
	try {
		//alert(url);
		var req = new XMLHttpRequest();
		if (req) {
			req.onreadystatechange = function() {
				if (req.readyState == 4 && req.status == 200) {
					if (func)
						func(req);
				} else if (req.readyState == 4 && req.readyState > 200) {
					if (efunc)
						efunc(req);
				}
				if (req.readyState == 4) {
					req.onreadystatechange = window.emptyFunc;
				}
			};
			method = method.toUpperCase();
			req.open(method, url, async, user, password);
			if (method == 'POST') {
				req.setRequestHeader('Content-type',
						'application/x-www-form-urlencoded');
			}
			if (data) {
				req.send(data);
			} else {
				req.send(null);
			}
		}
	} catch (e) {alert(e);
	}
	return req;
}
if (window.ActiveXObject && !window.XMLHttpRequest) {
	window.XMLHttpRequest = function() {
		var msxmls = new Array('Msxml2.XMLHTTP', 'Microsoft.XMLHTTP');
		for ( var i = 0; i < msxmls.length; i++) {
			try {
				return new ActiveXObject(msxmls[i]);
			} catch (e) {
			}
		}
		return null;
	};
}

function showBoxInfo(text, infoBox) {
	if ($('infoBoxDiv')) {
		var infoBox = $('infoBoxDiv');
	}
	var body = document.body;
	if (!infoBox) {
		var infoBox = document.createElement("div");
		body.appendChild(infoBox);
	}
	infoBox.innerHTML = "<img src=\"/resource/images/y_loading.gif\"/> " + text;
	infoBox.id = "infoBoxDiv";
	infoBox.style.color = "#333";
	infoBox.style.border = "1px solid #cecece";
	infoBox.style.background = "#ffffe1";
	infoBox.style.padding = "10px";
	infoBox.style.display = "block";
	infoBox.style.zIndex = "1";
	infoBox.style.position = "absolute";
	var x = (body.offsetWidth - infoBox.offsetWidth)/2;
	var y = Math.ceil((document.documentElement.clientHeight - infoBox.offsetHeight)/2) + document.documentElement.scrollTop;
	infoBox.style.left = x + "px";
	infoBox.style.top = y + "px";
}
function hideBoxInfo(infoBox, infoBoxShadow) {
	if (infoBox && infoBoxShadow) {
		infoBox.style.display = 'none';
	}
	else if($('infoBoxDiv')) {
		$('infoBoxDiv').style.display = 'none';
	}
}
