/*
 *	JavaScript
 */

/* 业务相关函数
 **********************************************************/

//显示指定的下拉菜单
function showMenu(obj, name) {
	var top = $.browser.msie? obj.offsetTop - 10: obj.offsetTop + 28;
	$("#" + name).css('top', top + 'px').css('left', (obj.offsetLeft + 1) + 'px').slideDown(50);
	$("#" + name).hover(function(){}, function(){$("#" + name).slideUp(0);});
}

//根据TAB IDENT设置各页面高度
function setPageHeight(ident) {
	if(ident == 'option' || ident == 'tools') {
		resizeHeight("pageMain", "0", null);
	} else if(	ident == 'mailbox' || ident == 'userinfo' || ident == 'blacklist' || ident == 'whitelist' ||
				ident == 'fetchmail' ||ident == 'password' || ident == 'userprefs' || ident == 'signature' ||
				ident == 'userfeedback' || ident == 'autoreply' || ident == 'autoforward') {
		resizeHeight("pageMain", "38", null);
	} else if(	ident == 'welcome' || ident.substring(0, 3) == 'cps' || ident == 'pab' || ident.substring(0, 3) == 'msg' ||
				ident == 'oab') {
		resizeHeight("pageMain", "0", null);
		var obj = document.getElementById("pageMain");
			obj.style.overflowY = 'hidden';
	}
}

//设置指定对象的高度
function resizeHeight(objname_list, offset_list, callback) {
	var height = document.body.clientHeight - 70;

	var objname_arr = objname_list.split(',');
	var offset_arr  = offset_list.split(',');

	if(objname_arr.length > 0 && objname_arr[0] != '') {
		for(var i=0; i<objname_arr.length; i++) {
			var objname = objname_arr[i];
			var offset  = offset_arr[i];
			var hei_tmp = height - offset;
			var obj = document.getElementById(objname);
				obj.style.height = hei_tmp + 'px';

			//设置滚动条类型
			var x_type = 'hidden';
			var y_type = 'scroll';
			if(objname == 'oabTree') {
				x_type = 'auto';
				y_type = 'auto';
			} else if(objname == 'groupList') {
				y_type = 'auto';
			}

			if(objname.search('___Frame') == -1) {
				obj.style.overflowX = x_type;
				obj.style.overflowY = y_type;
			}
		}
	}

	//运行回调函数
	if(callback != null) {callback();}

	//设置窗口更改大小后的函数调用
	window.onresize = function() {
		setPageHeight(current_tab);
		resizeHeight(objname_list, offset_list, callback);
	}
}


/* 建立 TAB 回调函数
 **********************************************************/

//设置各页面的工具栏
function setToolbarData(ident) {
	var html_all = '';
	var type = ident;
	var obj  = document.getElementById("pageToolbar");

	if(type.substring(0, 3) == 'msg') {
		type = 'msg';
	} else if(type.substring(0, 3) == 'cps') {
		type = 'compose';
	}
	eval("var button_list = toolbar." + type + ';');

	if(!button_list) {
		obj.style.display = 'none';
		return;
	}

	for(var i=0; i<button_list.length; i++) {
		var str_id = str_func = '';
		if(button_list[i].id) {
			str_id = button_list[i].id.replace(/{IDENT}/, ident) || '';
		}
		if(button_list[i].func) {
			str_func = button_list[i].func.replace(/{IDENT}/, ident) || '';
		}

		var html  = '';
			html += '<div class="toolNavOn" ' + (str_id != ''? 'id="' + str_id + '" ': '') + (str_func != ''? 'onclick="' + str_func + '" ': '') + 'onMouseOver="toobarButtonSwitch(event)" onMouseOut="toobarButtonSwitch(event)">';
			html += '<li class="lb"></li>';
			html += '<li class="cb"><img src="images/' + button_list[i].icon + '" align="absmiddle">&nbsp;' + button_list[i].name + '</li>';
			html += '<li class="rb"></li>';
			html += '</div>';
		html_all += html;
	}
	obj.innerHTML = html_all;
	obj.style.display = '';
}

//工具栏按键背景切换
function toobarButtonSwitch(event) {
	event = event || window.event;
	var target = event.srcElement || event.target;

	if(target.parentNode.className == 'cb') {
		target = target.parentNode.parentNode;
	} else {
		target = target.parentNode;
	}

	if(event.type == 'mouseover') {
		target.className = 'toolOn'
	} else {
		target.className = 'toolNavOn'
	}
}


/* 页面载入函数
 **********************************************************/

//文件夹管理
function manageFolder() {
	createTab('folder', '文件夹', true);	//创建TAB页

	var url = "index.php?module=mail&action=folder";
	var target = document.getElementById("tabPage_folder");

	jQuery.get(url, {}, function(page_data) {
		target.innerHTML = page_data;
	});
}

//写邮件
function composeMail(title, param, maildata) {
	var ident = "cps" + (compose_id++);
	if(checkFunction("initCompose")) {
		createTab(ident, title, true, composeActive, composeCancel);
		loadComposePage(ident, param, maildata);
	} else {
		jQuery.getScript("script/compose.js", function() {
			jQuery.getScript("script/yui/build/yahoo-dom-event/yahoo-dom-event.js", function() {
				jQuery.getScript("script/yui/build/datasource/datasource-min.js", function() {
					jQuery.getScript("script/yui/build/autocomplete/autocomplete-min.js", function() {
						jQuery.getScript("script/yui/build/connection/connection-min.js", function() {
							createTab(ident, title, true, composeActive, composeCancel);
							loadComposePage(ident, param, maildata);
						});
					});
				});
			});
		});
	}
}
//初始化调用写信操作
function initComposeMail() {
	composeMail('写信');
}

//显示联系人面板 Address Book Panel
function showABP() {
	if(checkFunction("initABP")) {
		initABP(false);
	} else {
		jQuery.getScript("script/abp.js", function() {jQuery.getScript("script/tree_component.js", function() {initABP(true);});});
	}
}

//显示首页小工具
function showTools(type, name) {
	if(document.getElementById('tabItem_tools')) {
		updateTab('tools', name, true);
	} else {
		createTab('tools', name, true);
	}

	var url = "index.php?module=other&action=tools";
	var target = document.getElementById("tabPage_tools");
	jQuery.get(url, {'type': type}, function(page_data) {target.innerHTML = page_data;});

	activeTabDiv('tools');
	activeContentDiv('tools');
}

//显示个人地址簿
function showPAB() {
	createTab('pab', '个人通讯录', true);
	if(checkFunction("initPAB")) {
		initPAB(false);
	} else {
		jQuery.getScript("script/pab.js", function() {initPAB(true);});
	}
}

//显示组织通讯录
function showOAB() {
	createTab('oab', '企业通讯录', true);
	if(checkFunction("initOAB")) {
		initOAB(false);
	} else {
		jQuery.getScript("script/oab.js", function() {jQuery.getScript("script/tree_component.js", function() {initOAB(true);});});
	}
}

//显示网络文件柜
function showNetdisk() {
	createTab('netdisk', '网络文件柜', true);
	if(checkFunction("initNetdisk")) {
		initNetdisk(false);
	} else {
		jQuery.getScript("script/netdisk.js", function() {initNetdisk(true);});
	}
}

//显示设置项首页
function showOption() {
	createTab('option', '设置', true);
	if(checkFunction("initOption")) {
		initOption(false);
	} else {
		jQuery.getScript("script/option.js", function() {initOption(true);});
	}
}


/* 基础函数
 **********************************************************/

function E(name) {return document.getElementById(name);}
function Go(path) {window.location.href = path;}

//剔除字符串空白: http://www.yaosansi.com
String.prototype.trim  = function() {return this.replace(/(^\s*)|(\s*$)/g, "");}
String.prototype.ltrim = function() {return this.replace(/(^\s*)/g, "");}
String.prototype.rtrim = function() {return this.replace(/(\s*$)/g, "");}

//删除数组中指定位置的元素
function removeArray(array, dx) {if(isNaN(dx)||dx>array.length){return false;}array.splice(dx,1);}

//查询数据组是否存在指定项目
function findArrayItem(array, item) {for(var i=0; i<array.length; i++) {if(array[i] == item) return true;}return false;}

//删除数组中指定的元素
function removeArrayItem(array, item) {for(var i=0; i<array.length; i++) {if(array[i] == item) {array.splice(i, 1);break;}}}

//检测是否存在指定名称的函数
function checkFunction(funcName) {try {if(typeof(eval(funcName)) == "function") {return true;} else {return false;}} catch(e) {return false;}}

//密码强度检测
function evaluatePassword(word) {if (word == "") {return 0;} else if (word.length < 6) {return 1;} else {return word.match(/[a-z](?![^a-z]*[a-z])|[A-Z](?![^A-Z]*[A-Z])|\d(?![^\d]*\d)|[^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d])/g).length;}}

//检测邮件列表格式
function checkMailListFormat(maillist) {
	var mail_arr = maillist.split(',');
	for(var i=0; i<mail_arr.length; i++) {
		var str = mail_arr[i];
		var j = str.search("<");
		if(j != -1) {
			var name = str.substring(0, j);
			var mail = str.substring((j + 1), (str.length - 1));
			if(!checkStringFormat(mail.trim(), {'type': 'email'})) return false;
		} else {
			if(!checkStringFormat(str.trim(), {'type': 'email'})) return false;
		}
	}
	return true;
}

//选择多个复选框
function selectCheckboxAll(form_name, prefix, checkall) {
	var form = E(form_name);
	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;}
	}
}

//取得指定复选框的值
function getCheckboxValue(form_name, prefix) {
	var form = E(form_name);
	var data_list = [];
	for(var i = 0; i < form.elements.length; i++) {
		var e = form.elements[i];
		if(e.name && e.name.match(prefix) && e.checked) {data_list.push(e.value);}
	}
	return data_list;
}

//从 FILE 类型的 INPUT 表单中取得文件名称
function getInputFileName(string) {
	var string;
	if(string.indexOf('\\') || string.indexOf('/')) {
		if(string.indexOf('\\')) {var split_char = '\\';} else {var split_char = '/';}
		var array = string.split(split_char);
		string = array[array.length - 1];
	}
	return string;
}

/* 编辑器用函数 ***/
function getEditorHTMLContents(EditorName) {var oEditor = FCKeditorAPI.GetInstance(EditorName);return(oEditor.GetXHTML(true));}
function setEditorContents(EditorName, ContentStr) {var oEditor = FCKeditorAPI.GetInstance(EditorName);oEditor.SetHTML(ContentStr);}

/* 格式检测函数 ***/

//检测指定的值是否为无效或空值
function isInvalid(v) {if(v == undefined || v == '') return true;else return false;}

//检测指定的值是否为空
function isEmpty(v) {if(v == '') return true;else return false;}

//检测字串格式
//调用方法：checkStringFormat(string, {type: 'custom', pattern: /^[a-zA-Z0-9_]{3,15}$/})
function checkStringFormat(string, param) {
	if(isInvalid(string)) {return false;}
	if(isInvalid(param.type)) {alert("参数错误！");return false;}
	if(!isInvalid(param.length) && (string.length > param.length)) {return false;}

	var 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 "mailname":
			pattern = /^\w+([-+.]\w+)*$/;
		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 "domain":
			pattern = /^\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
		break;
		case "url":
			pattern = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
		break;
		case "phones":
			pattern = /^[0-9-]{3,15}$/;
		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;
}

