// 正则表达式
var REGEX_PASSWORD = /[a-zA-Z0-9~!@#$%^&*()_+| -=:"<;',./?]*/;
var REGEX_IDNUM = /[0-9xX]*/;
var REGEX_USER_ID = /[a-zA-Z0-9@_]*/;
var REGEX_PHONE = /[0-9_ -]*/;
var ERROR_REGEX_REPLACE = "?";

var REGEX_EMAIL = /^[-_A-Za-z0-9.]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/; 
//var REGEX_USER_NAME = /^([\w\u4e00-\u9fa5\~!@#$%^&*()_+| -=:"<;',./?])+$/i;//字符、数字、下划线、汉字
var REGEX_USER_NAME = /./;//所有或者没有限制
var REGEX_STR_NUM = /^([a-zA-Z0-9~!@#$%^&*()_+| -=:"<;',./?])+$/i;//字符、数字
var REGEX_NUM = /^([0-9])+$/i;//数字
var REGEX_NUM_XIAN = /^([\0-9\-])+$/i;//数字、横线
var REGEX_URL = /^((http:[/][/])?\w+([.]\w+|[/]\w*)*)?$/;
var REGEX_USER_NAME_12 = /^([a-zA-Z\u4e00-\u9fa5\s-.])+$/i; //字母、汉字、空格、连字符(-)、省略号
var REGEX_HAN_ZI = /^([\u4e00-\u9fa5\ -/?])+$/i;//汉字
var REGEX_ZI_MU = /^([a-zA-Z -])+$/i;//字母

function SetHome(obj,vrl){
    try{
        obj.style.behavior='url(#default#homepage)';obj.setHomePage(vrl);
        }
    catch(e){
            if(window.netscape) {
                    try { 
					netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
                    }  
                    catch (e){ 
                            alert("Your Browser does not support ");
                    }
                    var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
                    prefs.setCharPref('browser.startup.homepage',vrl);
             }
    }
}

function addFavorite(){
var vDomainName=window.location.href;
var description=document.title;
try{//IE
    window.external.AddFavorite(vDomainName,description);
}catch(e){//FF
    window.sidebar.addPanel(description,vDomainName,"");
}
}

/******************************************************************************
* FUNCTION    : isInteger
* DESCRIPTION : 验证是否为整数
* PARAMETER   : strArg(待检验值)
* RETURNS     : TRUE：正确； FALSE：不正确
******************************************************************************/
function isInteger(strArg) {
    return (strArg.match(/[^0-9]/g));
}

/******************************************************************************
* FUNCTION    : isEmail
* DESCRIPTION : 验证是否为有效的E-MAIL地址
* PARAMETER   : String (Email Address)
* RETURNS     : TRUE：正确； FALSE：不正确
* AUTHER      : wiley
* DATE        : 2007-12-17
******************************************************************************/
function isEmail(str){  
 if(REGEX_EMAIL.test(str)){
 	return true; 
 }	
 return false; 
}

/******************************************************************************
* FUNCTION    : checkCharacter  match
* DESCRIPTION : 检查指定的字符串是否符合指定的正则表达式
* PARAMETER   : 要检查的字符串，合法的字符串集合
* RETURNS     : false:不是  true:是
******************************************************************************/
function checkCharacter(checkStr, regexStr) {
    r = checkStr.match(regexStr);
    return (r == checkStr)?true:false;

}

/******************************************************************************
* FUNCTION    : checkReg  match
* DESCRIPTION : 检查是否符合名称要求:字符、数字、下划线、汉字
* PARAMETER   : 要检查的字符串
* RETURNS     : false:不是  true:是
******************************************************************************/
function checkReg(checkStr,regStr) {
    //checkStr = field.value;
    return(checkCharacter(checkStr, regStr));
}

/******************************************************************************
* FUNCTION    : isCheckReg   test
* DESCRIPTION : 正则表达式
* PARAMETER   : str 要验证的字符串,regstr 正则表达式
* RETURNS     : TRUE：正确； FALSE：不正确
* AUTHER      : wiley
* DATE        : 2007-12-17
******************************************************************************/
function isCheckReg(checkStr,regstr){  
 return regstr.test(checkStr);

}

/******************************************************************************
* FUNCTION    : trim
* DESCRIPTION : 删除两端的空格符号（全角和／或半角）
* PARAMETER   : 要处理的字符串
* RETURNS     : 处理后的字符串
******************************************************************************/
function trim(w) {
    while (w.length > 0 
           && (w.substr(0,1) == ' ' || w.substr(0,1) == '　')) {
          w = w.substr(1);
    }
    while (w.length>0 
           && (w.substr(w.length-1) == ' ' || w.substr(w.length-1) == '　')) {
        w = w.substr(0, w.length-1);
    }
    return(w);
}

/******************************************************************************
* FUNCTION    : isValidEmail
* DESCRIPTION : 验证是否为有效的E-MAIL地址
* PARAMETER   : String (Email Address)
* RETURNS     : TRUE：正确； FALSE：不正确
******************************************************************************/
function isValidEmail(theStr) {
    
    var atIndex = theStr.indexOf('@');
    var dotIndex = theStr.indexOf('.', atIndex);

    // 截取第一个'.'之前的子串
    theSub = theStr.substring(0, dotIndex+1);

    //截取连续的两个'.'
    var thedoubledot = theStr.substring(dotIndex+1, dotIndex+2);
    
    //末尾是'.'
	var finalindex = theStr.substring(theStr.lastIndexOf('.')+1, theStr.lastIndexOf('.')+2);
    // '@'在第一位、或者出现两次'@'、或者出现'@.'、或者整个字符串的长度小于等于截取的子串长度
    if ((atIndex < 1)||(atIndex != theStr.lastIndexOf('@'))
            ||(dotIndex < atIndex + 2)
            ||(theStr.length <= theSub.length)
            ||(thedoubledot == '.')
            ||(finalindex == ''))    { 
        return false;
    } else { 
        return true;
    }
}

/******************************************************************************
* FUNCTION    : isBlankTrimed
* DESCRIPTION : 字符串长度是否为空的检测(排除两端空格)
* PARAMETER   : 要处理的表单对象
* RETURNS     : false:为空  true:不为空
******************************************************************************/
function isBlankTrimed(field) {
    strTrimmed = trim(field.value);
    if (strTrimmed.length > 0) {
        //长度不为0，不为空
        return false;
    }
    return true;
}

/******************************************************************************
* FUNCTION    : isBlank
* DESCRIPTION : 字符串长度是否为空的检测（不去除两端空格）
* PARAMETER   : 要处理的表单对象
* RETURNS     : false:为空  true:不为空
******************************************************************************/
function isBlank(field) {
    strTemp = field.value;
    if (strTemp.length > 0) {
        //长度不为0，不为空
        return false;
    }
    return true;
}
/******************************************************************************
* FUNCTION    : checkLength
* DESCRIPTION : 字符串长度的检测(排除两端空格):不能大于某长度
* PARAMETER   : 要处理的表单对象
* RETURNS     : false:不正确  true:正确
******************************************************************************/
function checkXiaoyuLength(field, mostLength){
    
    //filed——对应的判断框，mostLength——最大字符长度
    character = field.value;

    var count = 0;
    var charNum=0;
    for(i = 0; i < character.length; i++) {
        //转化成ACSII
        charNum=character.charCodeAt(i)&0xffff;
        //如果是255内
        if(charNum < 0xff){
            count++;
        }
        else{
            count += 2;
        }
    }
    if(count > mostLength){
        return false;
    }
    return true;
}
/******************************************************************************
* FUNCTION    : checkLength
* DESCRIPTION : 字符串长度的检测(排除两端空格)
* PARAMETER   : 要处理的表单对象， 最小长度，最大长度
* RETURNS     : false:不正确  true:正确
******************************************************************************/
function checkLength(field, leastLength, mostLength){
    
    //filed——对应的判断框，mostLength——最大字符长度
    character = field.value;

    var count = 0;
    var charNum=0;
    for(i = 0; i < character.length; i++) {
        //转化成ACSII
        charNum=character.charCodeAt(i)&0xffff;
        //如果是255内
        if(charNum < 0xff){
            count++;
        }
        else{
            count += 2;
        }
    }
    if(count > mostLength || count < leastLength){
        return false;
    }
    return true;
}
/******************************************************************************
* FUNCTION    : checkLengthRegedit
* DESCRIPTION : 字符串长度的检测(排除两端空格),注册用户时用到:必须为几位
* PARAMETER   : 要处理的表单对象rightLength：正确的长度
* RETURNS     : false:不正确  true:正确
* auther      : wangweili
******************************************************************************/
function checkLengthRegedit(field, rightLength){
    
    //filed——对应的判断框，mostLength——最大字符长度
    character = field.value;

    var count = 0;
    var charNum=0;
    for(i = 0; i < character.length; i++) {
        //转化成ACSII
        charNum=character.charCodeAt(i)&0xffff;
        //如果是255内
        if(charNum < 0xff){
            count++;
        }
        else{
            count += 2;
        }
    }
    if(count != rightLength){
        return false;
    }
    return true;
}
/******************************************************************************
* FUNCTION    : checkLengthTrimed
* DESCRIPTION : 字符串长度的检测(排除两端空格)
* PARAMETER   : 要处理的表单对象， 最小长度，最大长度
* RETURNS     : false:不正确  true:正确
******************************************************************************/
function checkLengthTrimed(field, leastLength, mostLength){
    
    //filed——对应的判断框，mostLength——最大字符长度
    character = trim(field.value);

    var count = 0;
    var charNum=0;
    for(i = 0; i < character.length; i++) {
        //转化成ACSII
        charNum = character.charCodeAt(i)&0xffff;
        //如果是255内
        if(charNum<0xff){
            count++;
        }
        else{
            count += 2;
        }
    }
    
    if(count > mostLength || count < leastLength){
        return true;
    }
    return false;
}


// Check if user input illegal char like '">' and '<!--'
function isSpecialString(strArg) {

    var i;
    var r1;
    var r2;
    r1 = new RegExp("\">","g");
    r2 = new RegExp("<!--","g");

    if (strArg.search(r1) > -1 || strArg.search(r2) > -1)
        return true;
    else
        return false;

}

function isDByteChar(strArg) {
    var i;
    for(i=0;i<=strArg.length-1;i++){
        if(escape(strArg.charAt(i)).length < 4){return false; }
    }
    return true;
}

function cmnSetFotcusElement(elementName){

    targetElement=document.getElementById(elementName);
    if (targetElement==null || targetElement.type=="hidden"){
        return;
    }

    if (targetElement.type=="hidden"){
        return;
    }

    if(window.targetElement.type=="text"){
        window.targetElement.focus();
        window.targetElement.select();
    }else{
        window.targetElement.focus();
    }
}

function autoSelfClose() {

   setTimeout("self.close()",10000) //10秒
}

////////////////////////////验证图片大小
var img=null;
function ys(filed)
{
if(img)img.removeNode(true);
img=document.createElement("img");
img.style.position="absolute";
img.style.visibility="hidden";
img.attachEvent("onreadystatechange",orsc);
img.attachEvent("onerror",oe);
document.body.insertAdjacentElement("beforeend",img);
img.src=filed.value;
}
function oe()
{
//图片类型不正确
alert(pic_type_err);
}
function orsc()
{
if(img.readyState!="complete")return false;
//图片的宽和高
alert(pic_width_height+img.offsetWidth+"X"+img.offsetHeight);
//图片的大小
alert(pic_file_size+img.fileSize);
}

/******************************************************************************
* FUNCTION    : returnLength
* DESCRIPTION : 精确计算字符串长度(若全是空格，返回0; 否则不去除前后空格，返回完整长度)
* PARAMETER   : 要处理的表单对象
* RETURNS     : false:不正确  true:正确
******************************************************************************/
function returnLength(field) {
    
    character = field.value;
	if(trim(character) == 0){
		return 0;
	}else{
		var length = 0;
	    var charNum = 0;
	    for(i = 0; i < character.length; i++) {
	        
	        //转化成ACSII
	        charNum = character.charCodeAt(i)&0xffff;
	        
	        //如果是255内
	        if(charNum < 0xff){
	            length++;
	        }
	        else{
	            length += 2;
	        }
	    }
	    return length;
	}        
}
/******************************************************************************
* FUNCTION    : returnLength
* DESCRIPTION : 精确计算字符串长度(若全是空格，返回0; 否则不去除前后空格，返回完整长度)
* PARAMETER   : 要处理的表单对象
* RETURNS     : false:不正确  true:正确
******************************************************************************/
function returnStringLength(str) {
    
    character = str;
	if(trim(character) == 0){
		return 0;
	}else{
		var length = 0;
	    var charNum = 0;
	    for(i = 0; i < character.length; i++) {
	        
	        //转化成ACSII
	        charNum = character.charCodeAt(i)&0xffff;
	        
	        //如果是255内
	        if(charNum < 0xff){
	            length++;
	        }
	        else{
	            length += 2;
	        }
	    }
	    return length;
	}        
}
/******************************************************************************
* FUNCTION    : hide_tips
* DESCRIPTION : 将页面上的提示框隐藏
* PARAMETER   : 无
* RETURNS     : 无
* P.S.        : 需将成功提示框和失败提示框分别命名为suc_tip和err_tip才能使用此方法
******************************************************************************/
function hide_tips(){
	document.getElementById('err_tip').style.display = "none";
	document.getElementById('suc_tip').style.display = "none";
}

/******************************************************************************
* FUNCTION    : show_tips
* DESCRIPTION : 显示页面上的提示框
* PARAMETER   : id:suc_tip/err_tip; info:要显示的提示信息
* RETURNS     : 无
* P.S.        : 需将成功提示框和失败提示框分别命名为suc_tip和err_tip才能使用此方法
******************************************************************************/
function show_tips(id, info){
	document.getElementById(id).style.display = "";
	document.getElementById(id).innerHTML = info;
}

/******************************************************************************
* FUNCTION    : cascade
* DESCRIPTION : checkbox的全选/全不选联动
* PARAMETER   : id:checkbox的名称; type: 's':二级触发一级, 'p':一级触发二级
* RETURNS     : 无
* P.S.        : 参与联动的checkbox的name要一致
******************************************************************************/
function cascade(id, type){
	
	if(type == 's'){ //二级主动，一级联动
		var elements = document.getElementsByName(id); //此处查出的elements[0]为一级分类Object
		var select_all = true;
		for(var i = 1; i < elements.length; i++){ //从第二个元素起才是二级分类，所以i从1开始计数
			if(elements[i].checked == false){
				select_all = false;
			}
		}
		elements[0].checked = select_all;
	}else{ //一级主动，二级联动
		
		var elements = document.getElementsByName(id); //此处查出的elements[0]为一级分类Object
		for(var i = 1; i < elements.length; i++){ //从第二个元素起才是二级分类，所以i从1开始计数
			elements[i].checked = elements[0].checked;
		}
	}
	
}


/******************************************************************************
* FUNCTION    : inbox_select
* DESCRIPTION : inbox的全选/无
* PARAMETER   : type: 'all':全选/'none':全不选
* RETURNS     : 无
* P.S.        : 适用于页面内只有一组联动的checkbox,若要满足多组分别联动,需要再扩展
******************************************************************************/
function inbox_select(type){
	var elements = document.getElementsByName("select");
	if(type == "all"){
		sel = true;
	}else if(type == "none"){
		sel = false;
	}
	
	if(type == "all" || type == "none"){
		for(var i = 0; i < elements.length; i++){
			elements[i].checked = sel;
		}
	}else{
		for(var i = 0; i < elements.length; i++){
			if(elements[i].getAttribute("read") == type){
				elements[i].checked = true;
			}else{
				elements[i].checked = false;
			}
		}
	}
		
	
	selected_num();
}

/******************************************************************************
* FUNCTION    : selected_num
* DESCRIPTION : 已选中几封
* PARAMETER   : 无
* RETURNS     : 选中的数量
* P.S.        : 适用于页面内只有一组联动的checkbox
******************************************************************************/
function selected_num(){
	var elements = document.getElementsByTagName("input");
	var num = 0;
	for(var i = 0; i < elements.length; i++){
		if(elements[i].type == "checkbox" && elements[i].value != ""){ //elements[i].value != ""是为了忽略全选的那个checkbox
			if(elements[i].checked == true){
				document.getElementById("css_" + elements[i].value).className = "m_sel";
				num++;
			}else{
				document.getElementById("css_" + elements[i].value).className = "m_d";
			}			
		}
	}
	if(document.getElementById("user_checked_1")){
		document.getElementById("user_checked_1").innerHTML = num;
	}if(document.getElementById("user_checked_2")){
		document.getElementById("user_checked_2").innerHTML = num;
	}
	
}

/******************************************************************************
* FUNCTION    : getBrowser
* DESCRIPTION : 得到客户端浏览器版本
* PARAMETER   : 无
* RETURNS     : 浏览器版本
* P.S.        : 区分Firefox,IE6,IE7
******************************************************************************/
function getBrowser(){
	if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){ 
		return "Firefox"; 
	}else{
		var browser=navigator.appName 
		var b_version=navigator.appVersion 
		var version=b_version.split(";"); 
		var trim_Version=version[1].replace(/[ ]/g,""); 
		if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE7.0"){ 
			return "IE 7.0"; 
		}else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE6.0"){ 
			return "IE 6.0"; 
		} 
		return "MSIE"; 
	}   
}

/******************************************************************************
* FUNCTION    : replace_all
* DESCRIPTION : 将字符串中某个字符全部替换为另一个
* PARAMETER   : str:原字符串; str1:替换前字符; str2:替换后字符
* RETURNS     : 替换后的str
******************************************************************************/
function replace_all(str, str1, str2){
	while (str.indexOf(str1) >= 0){
	   str = str.replace(str1, str2);
	}
	return str;
}

/******************************************************************************
* FUNCTION    : show_tags
* DESCRIPTION : 选择标签弹出层
******************************************************************************/
function show_tags(){
	jQuery.get(
		"/inc/foundation.server.php",
		 {
		 	give:"show_tags"
		 },
		function(data){
			eval("var rtn_tags = " + data);
			
			var htmls_hot = "<span class='tag_sort'>热门标签</span><br>";
			for(i = 0; i < rtn_tags.length; i++){
				if(rtn_tags[i]["flag"] == "hot"){
					htmls_hot += "<a href='javascript:sel_tag(\"" + rtn_tags[i]["name"] + "\")'>" + rtn_tags[i]["name"] + "</a>&nbsp;&nbsp;&nbsp;&nbsp;";
				}
			}
			var htmls_mine = "<br><br><span class='tag_sort'>我常用的标签</span><br>";
			for(i = 0; i < rtn_tags.length; i++){
				if(rtn_tags[i]["flag"] == "mine"){
					htmls_mine += "<a href='javascript:sel_tag(\"" + rtn_tags[i]["name"] + "\")'>" + rtn_tags[i]["name"] + "</a>&nbsp;&nbsp;&nbsp;&nbsp;";
				}
			}
			
			var htmls = htmls_hot + htmls_mine;
			jQuery("#tag_text").html(htmls);
			jQuery("#tag_div").show();
		}
 	);
}
/******************************************************************************
* FUNCTION    : tag_hide
* DESCRIPTION : 选择标签层隐藏
******************************************************************************/
function tag_hide(){
	jQuery("#tag_div").hide();
}

function sel_tag(tag_name){
	var tag = jQuery("#tag").val();
	tag = trim(tag) + " " + tag_name;
	jQuery("#tag").val(trim(tag));
}
