/**
 * 获取字符串的长度,一个中文字符两个英文字节来算.
 */
String.prototype.byteLength = function() {
	var len = 0;
	for (var i=0;i<this.length;i++){
		if (this.charCodeAt(i) > 255) 
			len += 2; 
		else 
			len++;
	}
	return len;
}
String.prototype.getSubstrLen = function() {
	var len = 0;
	var subLen = 0;
	for (var i=0;i<this.length;i++){
		subLen = i+1;
		if (this.charCodeAt(i) > 255) {
			len += 2;
		}else{ 
			len++;
		}
		if(len >= 12){
			break;
		}
	}
	return subLen;
}
/**
 * 去掉字符串出现的空隔.
 */
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, "");
}

/**
 * 判断字符串是不是空串.
 * @param {String} str 输入参数
 * @return 如果是空串返回true,否则返回false
 */
function isStringEmpty(str){	
	if (str == null || str.length == 0)
		return true;
	
	if(str.trim() == "")
		return true;
	
	return false;
}

/**
 * 判断输入的字符串是否都是中文.
 * @param {String} str 输入的字符串
 * @return 如果都是中文返回true,否则返回false.
 */
function checkIsAllChineseString(str){
	if (str == null || str.length == 0)
		return false;
	var pattern = /^([\u4e00-\u9fa5]+)$/;
	return pattern.test(str);
}


/**
 * 判断输入的两个字符串是否相等.
 * @param {String} str1 比较参数一.
 * @param {String} str2 比较参数二.
 * @param {String} isIgnoreCase 是否忽略大小写.
 * @return 如果相等返回true,否则返回false.
 */
function isStringEqual(str1, str2, isIgnoreCase) {
	if (str1 == null) 
		str1 = ''; 
	else {
		if (typeof str1 == 'number') str1 = '' + str1;
		str1 = str1.trim();
		if (isIgnoreCase)
			str1 = str1.toLowerCase();
	}
	if (str2 == null) 
		str2 = ''; 
	else {
		if (typeof str2 == 'number') str2 = '' + str2;
		str2 = str2.trim();
		if (isIgnoreCase)
		str2 = str2.toLowerCase();
	}	
	return (str1 == str2);
}



/**
 * 判断浏览器是否IE.
 * @return 如果是IE返回true,否则返回false.
 */
function isME() {
	var sAgent = navigator.userAgent.toLowerCase() ;	
	if (sAgent.indexOf("msie") != -1) {	
		return true;//IE;
	} else { 
		return false;//other;
	}		
}

//****************************** 单位换算 BEGIN ******************************
var Convert = {};
/**
 * 将Byte转换成KB.
 * @param fileSizeByte 文件大小(单位:Byte).
 * @return fileSizeByte转换成KB后的值.
 */
Convert.convertByteToKB = function(fileSizeByte) {
    var fileSizeKB = ((1*fileSizeByte)/1024).toFixed(0);
    if (fileSizeKB <= 0) {
        fileSizeKB = 1; // 不足1KB按1KB算
    }
    
    return fileSizeKB;
}

/**
 * 将KB转换成MB.
 * @param fileSizeKB 文件大小(单位:KB).
 * @return fileSizeKB转换成MB后的值.
 */
Convert.convertKBToMB = function(fileSizeKB) {
    return ((1*fileSizeKB)/1024).toFixed(2);
}

/**
 * 将Byte转换成MB.
 * @param fileSizeByte 文件大小(单位:Byte).
 * @return fileSizeByte转换成MB后的值.
 */
Convert.convertByteToMB = function(fileSizeByte) {
    return Convert.convertKBToMB(Convert.convertByteToKB(fileSizeByte));
}

/**
 * 将字节单位转换至适当的单位.
 * @param fileSizeByte 文件大小(单位:字节).
 * @return 小于1KB用字节表示；大于等于1KB并且小于1MB用KB表示；大于等于1MB用MB表示.
 */
Convert.convertToSuitableUnit = function(fileSizeByte) {
    if (fileSizeByte < 1024) {
    	return fileSizeByte + "字节";
    } else if (fileSizeByte >= 1024 && fileSizeByte < 1048576) {
    	return Convert.convertByteToKB(fileSizeByte) + "KB";
    } else {
        return Convert.convertByteToMB(fileSizeByte) + "MB";
    }
}

// ****************************** 单位换算 END   ******************************

/**
 * 对B,K,M等单位进行相应转换，把大于1024 的当前单位升一级，小于1024的保持不变.
 * 应用此函数的前提是需知道被转化数据的当前单位是什么。
 * @param {int} size 准备转化的数值
 * @param {int} pres 需要精确的小数点后面的位数
 * @param {String} unit 需要转化成的单位
 */
function byteToKM(size,pres,unit) {
	var pre=1;	
	var sizeInt;
	var temp1,temp2;
	for (var i=0;i<pres;i++) {	
		pre = pre*10;
	}
	
	if (size >= 1024) {	
		sizeInt = size/1024*pre+"";				
		if (sizeInt.indexOf(".")>0) {			 	
		 	temp= sizeInt.split(".");
		 	temp1 = temp[0];
		 	temp2 = (temp[1]).charAt(0);				 	
			if (temp[2]>4) {			
				temp1 = temp1+1;			
			}		
		} else {				
			temp1 = sizeInt;
		}
		temp2 = temp1.substring(0,temp1.length-pres);
		var cc = temp1.substring(temp1.length-pres,temp1.length);
		return temp2+"."+cc+unit;	
	} else {
		if (unit == "K")
			return size+"B";
		if (unit == "M")			
			return size+"K";
	}		
}

/**
 * 把以B为单位的数据转化成以K为单位的数据.
 * @param {int} size 需要进行单位转换的原数据.
 * @param {int} pres 需要精确的精度.
 */
function byteToK(size,pres) {
	var pre=1;	
	var sizeInt;
	var temp1,temp2;
	for (var i=0;i<pres;i++) {	
		pre = pre*10;
	}
	sizeInt = size/1024*pre + "";			
	if (sizeInt.indexOf(".") > 0) {		 	
	 	temp= sizeInt.split(".");
	 	temp1 = temp[0];
	 	temp2 = (temp[1]).charAt(0);				 	
		
		if (temp2 > 4) {					
			var add1 = parseInt(temp1)+1;			
			temp1 = add1;						
		}//是否有进位
		
		if (temp1 == 0) {
			return "0.01";	
		}
		if ((temp1+"").length == 1) {			
			return 	"0.0"+temp1+"";
		}
		if ((temp1+"").length == 2) {
			return 	("0."+temp1+"");
		}				
	} else {
		temp1 = parseInt(sizeInt);
	}
	temp1 = temp1 + "";	
	temp2 = (temp1 + "").substring(0,temp1.length - pres);
	var cc = temp1.substring(temp1.length - pres,temp1.length);	
	return temp2 + "." + cc;
}

/**
 * 检查输入的日期是否合法.
 * @param {int} Y 需检查的年.
 * @param {int} M 需检查的月.
 * @param {int} D 需检查的天.
 * @param {int} H 需检查的时.
 * @param (int) m 需检查的分.
 * @return boolean 如果日期合法则有返回true，否则返回false
 */
function valDate(Y,M,D,H,m) {
	var months= new Array(31,28,31,30,31,30,31,31,30,31,30,31); 
	leap= false; 
	if(((Y % 4 == 0) && (Y % 100 != 0)) || (Y %400 == 0)) 
		leap = true; 
	if((D < 1) || (D > 31) || (M < 1) || (M > 12) || (H < 0) || (H>23) || (m && (m<0)||(m>59)))
		return(false); 
	
	if((D > months[M-1]) && !((M == 2) && (D > 28))) 
		return(false); 
	
	if(!(leap) && (M == 2) && (D > 28)) 
		return(false); 
	
	if((leap) && (M == 2) && (D > 29)) 
		return(false); 		
	return true;
}

/**
 * 决断两次输入的内容是否相同.
 * @param {String} inputstr 第一次输入.
 * @param {String} reinputstr 第二次输入.
 * @return boolean 如果相等，返回true,否则返回false.
 */
function checkTwiceConfirm(inputstr,reinputstr) {		
	var str1 = inputstr.value;
	var str2 = reinputstr.value;
		
	if(str1 != str2) {	
		alert(proStr.PwdConfirm);
		reinputstr.focus();
		reinputstr.select();		
		return false;
	}	
	return true;
}

/**
 * 读取指定cookie，cookie名分别为:popproxy_id1.
 * @param {Object} name
 */
function getCookie(name) {
	var strCookie = document.cookie;
	var cookieName = name +"=";
	var valueBegin,valueEnd,value;
	valueBegin = strCookie.indexOf(cookieName);
	if (valueBegin==-1) return null;
	valueEnd = strCookie.indexOf(";",valueBegin);
	if (valueEnd==-1)
		valueEnd = strCookie.length;
	value = strCookie.substring(valueBegin+cookieName.length,valueEnd);
	return value;
}


/**
 * 保存cookie.
 * @param {String} name cookie的名字.
 * @param {String} value 要保存的值.
 * @param {String} path 
 * @param {String} expires
 * @param {String} domain
 * @param {String} secure
 */
function storeCookie(name,value,expires,path,domain,secure) {
	var strCookie=name+"="+value;
	if (expires) {
		var curTime= new Date();
		curTime.setTime(curTime.getTime()+expires*24*60*60*1000);
		strCookie+=";expires="+curTime.toGMTString();
	} else {
		strCookie+=";expires=Tue, 07 Jan 2010 00:00:01 GMT";
	}
	strCookie +=(path)?";path="+path:"";
	strCookie +=(domain)?";domain="+domain:"";
	strCookie +=(secure)?";path="+secure:"";
	document.cookie=strCookie;
}

/**
 * 控制只能输入数字.
 * @param {Object} oInput 接入输入的控件.
 */
function onlyNum(oInput) {
	oInput.value = oInput.value.replace(/\D/gi,'');
}

/**
 * 解析js国际化字段中的变量.
 * @param {String} originText 需要解析的国际化变量.
 * @param {String} value0 需要替换的变量值.
 */
function textAnalyseValue0(originText,value0) {
	var resultText = "";
	if (originText.indexOf("{0}") >= 0) {
		resultText = originText.replace("{0}",value0);
	}
	return resultText;
}


function showMsg(msg){
	var msg_div = $("#message");
	msg_div.html(msg);
	msg_div.fadeIn(1000);
	setTimeout(hideMsg, 2000);
}

function hideMsg(){
	var msg_div = $("#message");
	msg_div.fadeOut(1000);
}

function showNoHideMsg(msg){
	var msg_div = $("#message");
	msg_div.html(msg);
	msg_div.show();
}

function hideNoHideMsg(){
	var msg_div = $("#message");
	msg_div.hide();
}

function showLoadingPage(msg) {
	var msg_div = $("#message");
	//var msg_cont = $("#message2Cont");
	msg_div.html(msg);
	msg_div.show();
	coverDiv(1);
}

function hideLoadingPage() {
	var msg_div = $("#message");
	msg_div.hide();
	coverDiv(2);
}

function showInputError(emsg, obj) {
	var length = arguments.length;
	if(length == 1) {
		var alertDiv = document.getElementById("alertDiv");
		var errorMsg = document.getElementById("errorMessage");
		errorMsg.innerHTML = emsg;
		alertDiv.style.display = "block";
		alertDiv.style.left = "300px";
		alertDiv.style.top = "200px";
		coverDiv(1);
		$("#closeAlertDiv").click(function(){
			alertDiv.style.display = "none";
			coverDiv(2);
		});
		$("#alertButton").click(function(){
			alertDiv.style.display = "none";
			coverDiv(2);
		});
	} else {
		var alertDiv = document.getElementById("alertDiv");
		var errorMsg = document.getElementById("errorMessage");
		errorMsg.innerHTML = emsg;
		alertDiv.style.display = "block";
		alertDiv.style.left = "300px";
		alertDiv.style.top = "200px";
		coverDiv(1);
		$("#closeAlertDiv").click(function(){
			alertDiv.style.display = "none";
			coverDiv(2);
			$(obj).focus();
		});
		$("#alertButton").click(function(){
			alertDiv.style.display = "none";
			coverDiv(2);
			$(obj).focus();
		});
	}	
}

function showConformWindow(title, tips, doAction, obj) {
	function closeTimerWindow() {
		$("#alertSaveMail").hide();
		coverDiv(2);
	}
	
	$("#alertSaveMail").show();
	$("#alertSaveMail").css("left", 300);
	$("#alertSaveMail").css("top", 200);
	$("#saveMailTitle").html(title);
	$("#saveMailTips").html(tips);
	coverDiv(1);
	$("#closeSaveMail").click(function(){
		closeTimerWindow();
	});
	$("#saveMailY").unbind();
	$("#saveMailY").click(function(){
		closeTimerWindow();
		if (obj == "") {
			doAction();
		} else {
			doAction(obj);
		}
	});
	$("#saveMailN").unbind();
	$("#saveMailN").click(function(){
		closeTimerWindow();
	});
}

//关闭屏蔽层
function hideAlertDiv() {
	var alertDiv = document.getElementById("alertDiv");
	alertDiv.style.display = "none";
	coverDiv(2);
}

//展开屏蔽层
function coverDiv(flag) {
	var div = document.getElementById("coverDiv");
	if (window.ActiveXObject) {
		div.style.filter = "Alpha(Opacity=30)";
	} else {
		div.style.opacity = "0.5"; //透明属性支持firefox和chrome
	}
	div.style.backgroundColor = "#848484";
	if (flag == 1) {
		div.style.width = "100%";
		div.style.height = "2000px";
		//$("#body").attr("style","overflow-y:hidden");
		if (window.ActiveXObject) {
			var seles = document.getElementsByTagName("select");
			for ( var j = 0; j < seles.length; j++) {
				if (seles[j].className != "alertSelect") {
					seles[j].disabled = true;
				}
				if (seles[j].className.indexOf("hiddenSelect") > -1) {
					seles[j].style.display = "none";
				}
			}
		}
	} else {
		//注释掉，因为影响写邮件页面收件人框的长度，当收件人内容很多时会拖长界面
		//$("#body").attr("style","overflow-y:scroll");
		div.style.width = 0;
		div.style.height = 0;
		if (window.ActiveXObject) {
			var seles = document.getElementsByTagName("select");
			for ( var j = 0; j < seles.length; j++) {
				if (seles[j].className != "alertSelect") {
					seles[j].disabled = false;
				}
				if (seles[j].className.indexOf("hiddenSelect") > -1) {
					seles[j].style.display = "";
				}
			}
		}
	}
}

function public_checkSetName(obj,isAllowChinese){
	var _charset_include = "1234567890abcdefghijklmnopqrstuvwxyz_-"+UserName.SpecChar;
	var str = (obj.value.length<1)?"":$.trim(obj.value);	
	
	if (str == "")	
	{				
		showMsg(obj.alt+proStr.Required);
		if($("#UNErrorDiv").length!=0){
			$("#UNErrorDiv").text(obj.alt+proStr.Required);
		}
		obj.focus();				
		return false;
	}
	
	if (str.indexOf(' ')!=-1){
		showMsg(obj.alt+proStr.IncludeBlank);
		if($("#UNErrorDiv").length!=0){
			$("#UNErrorDiv").text(obj.alt+proStr.IncludeBlank);
		}
		obj.focus();
		return false;	
	}
	
	if ("1234567890_-".indexOf(str.substring(0,1)) >= 0){
		showMsg(obj.alt+proStr.FirstCharLimit);
		if($("#UNErrorDiv").length!=0){
			$("#UNErrorDiv").text(obj.alt+proStr.FirstCharLimit);
		}
		obj.focus();
		return false;	
	}	

	if(isAllowChinese==true){
		str = str.replace(/[\u4e00-\u9fa5]/g,"");
	}
	
	for (var i = 0; i < str.length; i++) {
		var ch = str.charAt(i);

		if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(ch) != -1) {
			showMsg(obj.alt+proStr.IncludeCapital);
			if($("#UNErrorDiv").length!=0){
			$("#UNErrorDiv").text(obj.alt+proStr.IncludeCapital);
			}
			obj.select();
			return false;
		}
		if (str.charCodeAt(i) >= 255 || _charset_include.indexOf(ch) < 0) {
			showMsg(obj.alt+proStr.IllegalChar);	
			if($("#UNErrorDiv").length!=0){
				$("#UNErrorDiv").text(obj.alt+proStr.IllegalChar);
			}	
			obj.select();
			return false;
		}
	}
	return true;	
}


function showLoading(displayX, displayY){
    var h = 0;
    var w = 0;
    
    if(displayX) w=displayX;
    if(displayY) h=displayY;

    var loading2 = '<div id="actionLoading" style="border: #7db866 1px solid;background-color: '
            + '#fafcf7;padding: 2px;width:150px;" ><img src="'+rootPath+'/images/'+urlStyle+'/wmail/std/loading.gif" align="absMiddle">&nbsp;&nbsp;<span >'
			+ loadingInfo2 + '</span></div>';
    if ($("#mainContent").find("#actionLoading").length == 0) {
        $(loading2).appendTo($("#mainContent"));
    }
    if($.browser.msie) {
        $("#mainContent").find("#actionLoading").css({top:h+26+"px", left:w+"px", position:"absolute"}).show();
    }
    else
        $("#mainContent").find("#actionLoading").css({top:h+"px",left:w+"px",position:"absolute"}).show();
}

function hideLoading() {
    $("#mainContent").find("#actionLoading").hide();
}

function showAlertNewMail(){
	
//	$("#alertNewMail").find("#mailFrom").html(mailFrom);
//	$("#alertNewMail").find("#mailTitle").html(mailTitle);
	if(typeof($("#a_line").attr("url")) != "undefined"){
		if ($.browser.msie) {
			var screen_height = document.body.clientHeight;
			var screen_width = document.body.clientWidth;
		}else{
			var screen_height = document.documentElement.clientHeight;
			var screen_width = document.documentElement.clientWidth;
		}
		$("#alertNewMail").css({
			"top":(screen_height - 150) +"px",
			"left":(screen_width - 335) +"px",
			"position":"absolute"
		});
		
		$("#alertNewMail").show();
		
		$("#a_line").click(function(){
			var mailUrl = $("#a_line").attr("url");
			$.post(mailUrl,function(data){
				$("#mainContent").html(data);
				init_mailReadPage();
				$("#folderName").html("收件箱");
				var hidBody = $("#hidBody").val();
				if(hidBody != null && hidBody != ''){
					var mailBody = document.getElementById("mailBody");
					mailBody.innerHTML = hidBody;
					resize_mainContent();
				}
			});
		});
		
		$("#newMailNoticeClose").click(function(){
			$("#alertNewMail").hide();
		})
		
		setTimeout(folderManage.getNavigator, 1500);
		
		setTimeout(hideAlertNewMail, 5000);
	}
}

function hideAlertNewMail(){
	$("#alertNewMail").fadeOut(1000);
}

function checkMailForm(strMail){//校验邮箱格式
	/* 如果长度为0则返回假 */
	if(strMail.length==0) return false
	/* 验证邮件地址的格式是否合法，如: abc@def.com/net等 */
	var objReg = new RegExp("[a-z0-9-_]+@[a-z0-9-_]+[\.]{1}[a-z]","gi")
	var IsRightFmt = objReg.test(strMail)
	/* 验证邮件地址中是否含有非法字符，结果等于-1表示不含有 */
	var objRegErrChar = new RegExp("[^a-z0-9-._@]","ig")
	var IsRightChar = (strMail.search(objRegErrChar)==-1)
	/* 邮件地址最大长度为60字符 */
	/* 判断字符'@'和'.'的位置，不能为第一个或者最后一个 */
	var IsRightPos = (strMail.indexOf("@",0) != 0 && strMail.indexOf(".",0) != 0 && strMail.lastIndexOf("@")+1 != strMail.length && strMail.lastIndexOf(".")+1 != strMail.length)
	/* 判断字符'@'是否唯一 */
	var IsNoDupChar = (strMail.indexOf("@",0) == strMail.lastIndexOf("@"))	
	/* 将'格式'、'字符'、'长度'、'@唯一'四者做“与”操作，任一条件不满足都将返回假 */
	return (IsRightFmt && IsRightChar && IsRightPos && IsNoDupChar)
}

function checkMailForPop(strMail){//校验邮箱格式
	/* 验证邮件地址的格式是否合法，如: abc@def.com/net等 */
	var objReg = new RegExp("[a-z0-9-_.&]+@[a-z0-9-_]+[\.]{1}[a-z]","gi");
	var IsRightFmt = objReg.test(strMail);
	/* 验证邮件地址中是否含有非法字符，结果等于-1表示不含有 */
	var objRegErrChar = new RegExp("[^a-z0-9-._&@]","ig");
	var IsRightChar = (strMail.search(objRegErrChar)==-1);
	/* 判断字符'@'和'.'的位置，不能为第一个或者最后一个 */
	var IsRightPos = (strMail.indexOf("@",0) != 0 && strMail.indexOf(".",0) != 0 && strMail.lastIndexOf("@")+1 != strMail.length && strMail.lastIndexOf(".")+1 != strMail.length);
	/* 判断字符'@'是否唯一 */
	var IsNoDupChar = (strMail.indexOf("@",0) == strMail.lastIndexOf("@"));
	/* 将'格式'、'字符'、'长度'、'@唯一'四者做“与”操作，任一条件不满足都将返回假 */
	return (IsRightFmt && IsRightChar && IsRightPos && IsNoDupChar)
}

function checkMailForPop2(strMail){//校验邮箱格式
	/* 验证邮件地址的格式是否合法，如: abc@def.com/net等 */
	var objReg = new RegExp("[a-z0-9-_&.]+@[a-z0-9-&_]+[\.]{1}[a-z&]","gi");
	var IsRightFmt = objReg.test(strMail);
	/* 验证邮件地址中是否含有非法字符，结果等于-1表示不含有 */
	var objRegErrChar = new RegExp("[^a-z0-9-._&@]","ig");
	var IsRightChar = (strMail.search(objRegErrChar)==-1);
	/* 判断字符'@'和'.'的位置，不能为第一个或者最后一个 */
	var IsRightPos = (strMail.indexOf("@",0) != 0 && strMail.indexOf(".",0) != 0 && strMail.lastIndexOf("@")+1 != strMail.length && strMail.lastIndexOf(".")+1 != strMail.length);
	/* 判断字符'@'是否唯一 */
	var IsNoDupChar = (strMail.indexOf("@",0) == strMail.lastIndexOf("@"));
	/* 将'格式'、'字符'、'长度'、'@唯一'四者做“与”操作，任一条件不满足都将返回假 */
	return (IsRightFmt && IsRightChar && IsRightPos && IsNoDupChar)
}

function checkMailForSend(mail) {
	var str = mail;
	if (mail.indexOf("<") != -1) {
		str = str.substring(str.indexOf("<")+1, str.indexOf(">"));
	}
	return checkMailForPop2(str);
}

//判断输入字符只含有中文、英文、数字、“-”、“.”和“_”
function checkNormalStr(str) {
	var strValue = str.replace(/[\u4E00-\u9FA5]/g,'');
	var objReg = new RegExp("[^a-z0-9-._]","ig");
	var isRightChar = (strValue.search(objReg)==-1);
	return isRightChar;
}

//判断输入字符只含有英文、数字、“-”、“.”和“_”
function checkNormalENStr(str) {
	var objReg = new RegExp("[^a-z0-9-._]","ig");
	var isRightChar = (str.search(objReg)==-1);
	return isRightChar;
}
