/* 设置全局用变量
----------------------------------------------- */

var userAgent = navigator.userAgent.toLowerCase();
var is_opera = userAgent.indexOf('opera') != -1 && opera.version();
var is_moz = (navigator.product == 'Gecko') && userAgent.substr(userAgent.indexOf('firefox') + 8, 3);
var is_ie = (userAgent.indexOf('msie') != -1 && !is_opera) && userAgent.substr(userAgent.indexOf('msie') + 5, 3);

/* 自定义函数区
----------------------------------------------- */

function E(e) {return (typeof(e) == 'string')? document.getElementById(e): e;}
function UT(v) {return (typeof(v) == 'undefined')? '': '' + v;}
function Go(url) {window.location.href = url;}
function reloadPage() {document.location.reload(1);}

//打开音乐盒
function openMusicBox() {
	var w=280;
	var h=420;
	var url = "/music/box";
	var popupWindow = window.open(url, '_blank', 'width='+w+', height='+h+', toolbar=no, menubar=no, scrollbars=no, resizable=no');
	//popupWindow.location = url;
}

/*--- 变量验证函数 ---*/

/*
 *	检测字符串格式
 *	调用方法：checkStringFormat(string, {type: 'custom', pattern: /^[a-zA-Z0-9_]{3,15}$/})
 */
function checkStringFormat(string, param) {
	var string;
	var pattern;
	var type;

	if(isInvalid(string)) {return false;}
	if(isInvalid(param.type)) {alert("参数错误！");return false;}
	if(!isInvalid(param.length) && (strlen(string) > param.length)) {return false;}

	type = param.type;
	switch(type) {
		case "custom":
			if(isInvalid(param.pattern)) {alert("参数错误！");return false;}
			pattern = param.pattern;
		break;
		case "userid":
			pattern = /^[a-zA-Z0-9_]{3,15}$/;
		break;
		case "alphanum":
			pattern = /^[a-zA-Z0-9_.]*$/;
		break;
		case "number":
			pattern = /^\d+(\.(\d)+)?$/;
		break;
		case "integer":
			pattern = /^[-\+]?\d+$/;
		break;
		case "chinese":
			pattern = /^[\u4e00-\u9fa5_a-zA-Z0-9_.]+$/;
		break;
		case "email":
			pattern = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
		break;
		case "url":
			pattern = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
		break;
		case "mobile":
			pattern = /(^[1][3][0-9]{9}$)|(^0[1][3][0-9]{9}$)/;
		break;
		case "phone":
			pattern = /(^([0][1-9]{2,3}[-])?\d{3,8}(-\d{1,6})?$)|(^\([0][1-9]{2,3}\)\d{3,8}(\(\d{1,6}\))?$)|(^\d{3,8}$)/;
		break;
		case "date":
			var re_dt = /^(\d{4})\-(\d{1,2})\-(\d{1,2})$/;
			pattern = function (s_date) {
				if (!re_dt.test(s_date))
					return false;
				if (RegExp.$3 > 31 || RegExp.$2 > 12)
					return false;
				var dt_test = new Date(RegExp.$1, Number(RegExp.$2-1), RegExp.$3);
				if (dt_test.getMonth() != Number(RegExp.$2-1))
					return false;
				return true;
			}
		break;
		case "time":
			var re_tm = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})$/;
			pattern = function (s_time) {
				if (!re_tm.test(s_time))
					return false;
				if (RegExp.$1 > 23 || RegExp.$2 > 59 || RegExp.$3 > 59)
					return false;
				return true;
			}
		break;
		case "ip":
			var re = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
			pattern = function (s_ip) {
				if (!re.test(s_ip))
					return false;
				if (RegExp.$1>255 || RegExp.$2>255 || RegExp.$3>255 || RegExp.$4>255)
					return false;
				return true;
			}
		break;
		case "mac":
			pattern = /^([0-9A-Fa-f]{2})(-[0-9A-Fa-f]{2}){5}|([0-9A-Fa-f]{2})(:[0-9A-Fa-f]{2}){5}/;
		break;
		case "port":
			var re = /^[-\+]?\d+$/;
			pattern = function(s_port) {
				if (!re.test(s_port))
					return false;
				if (s_port > 65535)
					return false;
				return true;
			}
		break;
	}

	if(typeof(pattern) != "function") {
		if(!pattern.test(string)) 
			return false;
		if(string.search(pattern) == -1) {
			return false;
		}
	} else if(!pattern(string)) {
		return false;
	}

	return true;
}

/*
 *	检测指定的值是否为无效或空值
 */
function isInvalid(v) {
	if(v == undefined || v == '') return true;
	else return false;
}

/*
 *	检测指定的值是否为空
 */
function isEmpty(v) {
	if(v == '') return true;
	else return false;
}


/*--- HTTP相关操作函数 ---*/

/*
 *	进行HTTP请求
 */
function httpRequest(method, action, data, callback){
	var method;
	var action;
	var data;
	var callback;
	if(isInvalid(method) || isInvalid(action) || isInvalid(callback)) {alert('参数错误！');return;}

	xmlHttp = CreateXmlRequest();
	xmlHttp.onreadystatechange = function() {
		StateContent();
	}
	if(method == 'get') {
		xmlHttp.open('GET', action, true);
		xmlHttp.send(null);
	} else {
		xmlHttp.open('POST', action, true);
		xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		xmlHttp.send(data);
	}
	function StateContent() {
		if(xmlHttp.readyState == 4) {
			if(xmlHttp.status == 200) {
				//alert(xmlHttp.responseText);
				eval(callback + "(" + xmlHttp.responseText + ");");
			}
		}
	}
}

/*
 *	创建HTTP请求连接
 */
function CreateXmlRequest(){    
    var xmlhttp_request = false;    
    try {
		if(window.ActiveXObject) {
			for(var i = 5; i; i--) {
				try {
					if( i == 2 ){
						xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP" );
					} else {
						xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP." + i + ".0" );    
                        xmlhttp_request.setRequestHeader("Content-Type","text/xml");
                        xmlhttp_request.setRequestHeader("Content-Type","utf-8");               
                    }
					break;
				} catch(e) {xmlhttp_request = false;}
			}
		} else if(window.XMLHttpRequest) {
			xmlhttp_request = new XMLHttpRequest();
			if (xmlhttp_request.overrideMimeType) {
				xmlhttp_request.overrideMimeType('text/xml');
			}
		}   
    } catch(e) {
		xmlhttp_request = false;
	}
	return xmlhttp_request ;
}


/*--- Cookie 操作函数 ---*/

/*
 *	获得指定名称的Cookie值
 */
function getCookie() {
	if (arguments.length == 2) {

		var CookieFound = false;
		var CookieString = getCookie(arguments[0]);

		var aCookieString = CookieString.split('&');
		for (var i=0;i<aCookieString.length;i++) {
			j = aCookieString[i].indexOf('=');
			if(arguments[1] == aCookieString[i].substring(0,j))
				return unescape(aCookieString[i].substr(j+1));
		}
	} else {
		var CookieFound = false;
		var CookieString = document.cookie;

		var aCookieString = CookieString.split('; ');
		for(var i=0;i<aCookieString.length;i++) {
			j = aCookieString[i].indexOf('=');
			if(arguments[0] == aCookieString[i].substring(0,j))
				return unescape(aCookieString[i].substr(j+1));
		}
	}
	return '';
}

/*
 *	设置指定名称Cookie的值
 */
function setCookie(name, value, expiry, path, domain, secure){
	var nameString = name + '=' + escape(value);
	var expiryString = (expiry == null) ? '' : ' ;expires = '+ expiry.toGMTString();
	var pathString = (path == null) ? '' : ' ;path = '+ path;
	var domainString = (domain == null) ? '' : ' ;domain = '+ domain;
	var secureString = (secure) ?';secure':'';
	document.cookie = nameString + expiryString + pathString + domainString + secureString;
}

/*
 *	删除指定名称的Cookie
 */
function deleteCookie(name){
	var expires = new Date();
	expires.setTime(expires.getTime() - 1);
	setCookie(name, "Delete Cookie", expires, null, null, false);
}


/*--- 字符串操作函数 ---*/

/*
 *	GB编码转为UTF-8编码
 */
function urlencode_gb2utf8(rawtext) {
	rawtext = rawtext.replace(/\r\n/g,"\n");
	var utftext = "";
	for(var n=0; n<rawtext.length; n++) {
		//
		var c=rawtext.charCodeAt(n);
		// 0-127 => 1byte
		if (c<128) {
			utftext += escape(String.fromCharCode(c));    
		// 127 - 2047 => 2byte
		} else if((c>127) && (c<2048)) {
			utftext += escape(String.fromCharCode((c>>6)|192));
			utftext += escape(String.fromCharCode((c&63)|128));
		// 2048 - 66536 => 3byte
		} else {
			utftext += escape(String.fromCharCode((c>>12)|224));
			utftext += escape(String.fromCharCode(((c>>6)&63)|128));
			utftext += escape(String.fromCharCode((c&63)|128));
		}
	}
	return utftext;
}

/*
 *	获取字符串长度
 */
function strlen(str) {
	return (is_ie && str.indexOf('\n') != -1) ? str.replace(/\r?\n/g, '_').length : str.length;
}

/*
 *	削除字符串两端的空白
 */
function trim(str) {
	return (str + '').replace(/(\s+)$/g, '').replace(/^\s+/g, '');
}

/*
 *	HTML转义
 */
function escapeHTML(s) {
	function esc(c) {return '&#' + c.charCodeAt(0) + ';';}
	return s.replace(/[&"'<>\r\n]/g, esc);
}


/*--- 表单操作函数 ---*/

/*
 *	创建多项表单表格
 */
function createFieldTable(param, data) {
	var param;
	var data;
	var buf = [];
	var fields;
	var item;

	buf.push('<table');
	if(param.id) buf.push(' id="' + param.id + '"');		//所生成的容器ID
	if(param.hidden) buf.push(' style="display:none"');		//是否隐藏容器
	buf.push(' width="100%" border="0" cellpadding="0" cellspacing="0">');
	for (data_i = 0; data_i < data.length; ++data_i) {
		var v = data[data_i];

		if(!v) {
			buf.push('<tr><td colspan="2">&nbsp;</td></tr>');
			continue;
		}//处理空行
		if (v.ignore) continue;								//是否忽略此项

		buf.push('<tr');
		if (v.rid) buf.push(' id="' + v.rid + '"');			//项目容器ID
		if (v.hidden) buf.push(' style="display:none"');	//是否隐藏
		buf.push('>');

		if (v.text) {
			if (v.title) {
				buf.push('<th class="indent' + (v.indent || 1) + '">' + v.title + '</th><td>' + v.text + '</td>');
			} else {
				buf.push('<td class="indent' + (v.indent || 1) + '" colspan="2">' + v.text + '</td>');
			}
			buf.push('</tr>');
			continue;
		}//项目说明
		if(v.title) buf.push('<th class="indent' + (v.indent ? v.indent : 1) + '">' + v.title + '</th>');
		buf.push("<td>");

		if (v.multi) fields = v.multi;
		else fields = [v];
		for (n = 0; n < fields.length; ++n) {
			item = fields[n];
			buf.push(createFormField(item));
		}

		buf.push("</td>");
		buf.push('</tr>');
	}
	buf.push('</table>');

	if(param.t_id) {
		if(param.t_mode == 'add')  E(param.t_id).innerHTML += buf.join('');
		else E(param.t_id).innerHTML = buf.join('');
	} else {
		document.write(buf.join(''));
	}
}

/*
 *	创建单项表单表格
 */
function createFormField(f) {
	var i;
	var id;
	var common;
	var name;
	var a;
	var buf = [];

	if (f.prefix) buf.push(f.prefix);

	// 1.元素ID
	if((f.type == 'radio') && (!f.id)) id = '_' + f.name + '_' + i;
	else id = (f.id ? f.id : ('_' + f.name));
	// 2.组合元素ID和触发事件
	common = ' onchange="verifyFields(this)" id="' + id + '"';
	// 3.元素附加属性
	if(f.attrib) common += ' ' + f.attrib;
	// 4.元素名称
	name = f.name? (' name="' + f.name + '"') : '';

	switch (f.type) {
		case 'checkbox':
			buf.push('<input type="checkbox"' + name + ' class="checkbox" value="' + escapeHTML(UT(f.value)) + '"' + (f.checked ? ' checked' : '') + ' onclick="verifyFields(this)"' + common + '>' + (f.desc? f.desc: '') + '&nbsp;');
			break;
		case 'radio':
			buf.push('<input type="radio"' + name + ' class="checkbox" value="' + escapeHTML(UT(f.value)) + '"' + (f.checked ? ' checked' : '') + ' onclick="verifyFields(this)"' + common + '>' + (f.desc? f.desc: '') + '&nbsp;');
			break;
		case 'password':
		case 'text':
			buf.push('<input type="' + f.type + '"' + name + ' value="' + escapeHTML(UT(f.value)) + '" maxlength=' + f.maxlen + (f.size ? (' size=' + f.size) : '') + common + '>');
			break;
		case 'select':
			buf.push('<select' + name + common + '>');
			for (i = 0; i < f.options.length; ++i) {
				a = f.options[i];
				if (a.length == 1) a.push(a[0]);
				buf.push('<option value="' + a[0] + '"' + ((a[0] == f.value) ? ' selected' : '') + '>' + a[1] + '</option>');
			}
			buf.push('</select>');
			break;
		case 'textarea':
			buf.push('<textarea' + name + common + '>' + escapeHTML(UT(f.value)) + '</textarea>');
			break;
		default:
			if (f.custom) buf.push(f.custom);
			break;
	}

	if (f.suffix) buf.push(f.suffix);
	return buf.join('');
}

/*
 *	下拉选单选项操作
 */
function moveSelectOption(param) {
	var param;
	var srcObj = E(param.src);
	var dstObj = E(param.dst);

	if(param.remove == undefined) param.remove = true;
	if(param.repeat == undefined) param.repeat = false;

	for(var i=0; i<srcObj.options.length; i++) {
		if(srcObj.options[i].selected) {
			if(!param.repeat) {
				if(checkSelectExistOption(dstObj, srcObj.options[i])) {
					alert('已存在"' + srcObj.options[i].text + '"项！')
					continue;
				}
			}
			var op = document.createElement("option");
			op.text  = srcObj.options[i].text;
			op.value = srcObj.options[i].value;
			dstObj.options.add(op);
			if(param.remove) {
				srcObj.remove(i);
				i--;
			}
		}
	}
}
function checkSelectExistOption(obj, op) {
	for(var i=0; i<obj.options.length; i++) {
		if(obj.options[i].value == op.value) {
			return true;
		}
	}
	return false;
}

/*
 *	取得选择框中的被选项的值
 */
 function getCheckCheckedValue(obj) {
	var data = [];
	for(var i=0; i<obj.length; i++) {
		if(obj[i].checked) data.push(obj[i].value);
	}
	return data;
}
function getRadioCheckedValue(obj) {
	for(var i=0; i<obj.length; i++) {
		if(obj[i].checked) return obj[i].value;
	}
	return false;
}

/*
 *	选中批定ID前缀的所有多选框
 */
function selectCheckboxAll(form, prefix, checkall) {
	var checkall = checkall ? checkall : 'chkall';
	for(var i = 0; i < form.elements.length; i++) {
		var e = form.elements[i];
		if(e.name && e.name != checkall && (!prefix || (prefix && e.name.match(prefix)))) {
			e.checked = form.elements[checkall].checked;
		}
	}
}
