/**
 * JavaScript 公共函数
 *
 * @since 2007-11-11 15:16
 * @auther SkyObscure.姜枫渔火
 * @version 1.0.2
 */
//document.domain = "jiaming.com";    // 设置域

/**
 * 布尔类型转换成字符串输出
 */
function bool2str( bool ) {
	return bool ? '是' : '否';
} 


/**
 * 判断变量是否为空
 *
 * @param val 将要检测的变量
 * @return boolean
 */
function isBlank( val ) {
	if ( val == null || val == undefined || ( typeof val != "number" && val.length == 0 ) )
		return true;

	if ( typeof val == "string" ) {
		for ( var i = 0; i < val.length; i++ ) {
			var c = val.charAt( i );
			if ( c != ' ' && c != '\n' && c != '\t' && c != '\r' )
				return false;
		}

		return true;
	}

	return false;
}

// 判断变量是否不为空
function isNotBlank( val ) {
	return !isBlank( val );
}

// 将一个空的字符串转换成空格
function dealNull( str ) {
	if ( isBlank( str ) )
		return '';

	return str;
}

/**
 * 将HTML标签转换成实体内容
 *
 * @param str 实际需要转化的字符串
 * @return string
 */
function encodeHtml( str ) {
	if ( isNotBlank( str ) ) {
		str = str.replace( /&/g, "&amp;" );
		str = str.replace( /&amp;amp;/g, "&amp;" );
		str = str.replace( /&amp;quot;/g, "&quot;" );
		str = str.replace( /\"/g, "&quot;" );
		str = str.replace( /&amp;lt;/g, "&lt;" );
		str = str.replace( /</g, "&lt;" );
		str = str.replace( /&amp;gt;/g, "&gt;" );
		str = str.replace( />/g, "&gt;" );
		str = str.replace( /&amp;nbsp;/g, "&nbsp;" );
		str = str.replace( /&amp;apos;/g, "&apos;" );
		str = str.replace( /\'/g, "&apos;" );
	}

	return str;
}

/**
 * 将实体内容转换成HTML标签
 *
 * @param str 实际需要转化的字符串
 * @return string
 */
function decodeHtml( str ) {
	if ( isNotBlank( str ) ) {
		str = str.replace( /&amp;amp;/g, "&" );
		str = str.replace( /&amp;/g, "&" );

		str = str.replace( /&amp;quot;/g, "\"" );
		str = str.replace( /&quot;/g, "\"" );

		str = str.replace( /&amp;lt;/g, "<" );
		str = str.replace( /&lt;/g, "<" );

		str = str.replace( /&amp;gt;/g, ">" );
		str = str.replace( /&gt;/g, ">" );

		str = str.replace( /&nbsp;/g, " " );

		str = str.replace( /&amp;apos;/g, "'" );
		str = str.replace( /&apos;/g, "\'" );
	}

	return str;
}

// 输出带有换行
function printbr( str ) {
	if ( isBlank( str ) ) {
		document.writeln( '<br />' );
		return void 0;
	}

	document.writeln( str + '<br />' );
	return void 0;
}

/**
 * 输出数组的内容
 * 
 * @param arr 数组
 */
function printArray( arr ) {
	var tmp = "[";
	for ( var str in arr ) {
		tmp += str + ":" + arr[str] + ", ";
	}

	tmp += "]";

	return printbr( tmp );
}

/**
 * 将一个值转换成字符串 var x_as_string = x + "";
 *
 * @param val 将要转换的变量
 * @return string
 */
function var2str( val ) {
	return val + "";
}

/**
 * 将一个值转换成数字 var x_as_number = x - 0;
 * x 必须是10进制的数字字符串，并且后面不能有空格
 * 建议使用parseInt和parseFloat
 *
 * @param val 将要转换的变量
 * @return number
 */
function var2number( val ) {
	return val - 0;
}

/**
 * 将一个值转换成布尔值 var x_as_boolean = !!x;
 *
 * @param val 将要转换的变量
 * @return number
 */
function var2boolean( val ) {
	return !!val;
}

/**
 * 判断一个对象是否已经定义
 *
 * @param obj 等待检测的对象
 * @return boolean
 */
function isObject( obj ) {
	if ( obj == null || obj == undefined || typeof( obj ) != 'object' )
		return false;

	return true;
}

/**
 * 判断一个函数是否已经定义
 *
 * @param func 等待检测的对象
 * @return boolean
 */
function isFunction( func ) {
	if ( func == null || func == undefined || typeof func != 'function' )
		return false;

	return true;
}

/**
 * js类的公共toString()方法
 * ObjectName.prototype.toString = buildToString;
 *
 * @see Object#toString()
 */
function buildToString() {
	var tmp = "[";
	for ( var pro in this ) {
		if ( typeof this[pro] == 'function' )
			continue;

		tmp += pro + ":" + this[pro] + ", ";
	}

	tmp = tmp.substring( 0, tmp.length - 2 );
	tmp += "]";
	return tmp;
}

/**
 * 去掉字符串左边的空格
 *
 * @param str 带处理的字符串变量
 * @return string
 */
function toLeftTrim( str ) {
	var whitespace = " \t\n\r";
	if ( whitespace.indexOf( str.charAt( 0 ) ) != -1 ) {
		var j = 0, i = str.length;
		while ( j < i && whitespace.indexOf( str.charAt( j ) ) != -1 ) {
			j++;
		}
		str = str.substring( j, i );
	}

	return str;
}

/**
 * 去掉字符串右边的空格
 *
 * @param str 带处理的字符串变量
 * @return string
 */
function toRightTrim( str ) {
	var whitespace = " \t\n\r";

	if ( whitespace.indexOf( str.charAt( str.length - 1 ) ) != -1 ) {
		var i = str.length - 1;
		while ( i >= 0 && whitespace.indexOf( str.charAt( i ) ) != -1 ) {
			i--;
		}

		str = str.substring( 0, i + 1 );
	}
	return str;
}

/**
 * 去掉字符串两边的空格
 *
 * @param str 带处理的字符串变量
 * @return string
 */
function toTrim(str) {
	return toRightTrim(toLeftTrim(str));
}

/**
 * 以下是判断一个变量是否是某一个种类型的值的函数集合
 *
 * @param val mixed
 * @return boolean
 */

// 是否是整数
function isInteger( val ) {
	var pattern = /^-?\d+$/;

	return pattern.test( val );
}

// 是否是由英文字母的小写或者整数组成的字符串 
function isLowerORisInteger( val ) {
	var pattern = /^[a-z0-9]+$/;
	
	return pattern.test( val );
}


// 是否是一个负整数
function isNegative( val ) {
	if ( isInteger( val ) && val < 0 )
		return true;

	return false;
}

// 是否是非0正整数
function isPositive( val ) {
	if ( isInteger( val ) && val > 0 )
		return true;

	return false;
}

// 是否是浮点数
function isFloat( val ) {
	var pattern = /^(-?\d+)(\.\d+)?$/;

	return pattern.test( val );
}

// 是否是非0正浮点数
function isPositiveFloat( val ) {
	var pattern = /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;

	return pattern.test( val );
}

// 是否是负浮点数
function isNegativeFloat( val ) {
	var pattern = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;

	return pattern.test( val );
}

// 是否是由26个英文字母组成的字符串
function isLetter( val ) {
	var pattern = /^[A-Za-z]+$/;

	return pattern.test( val );
}

// 是否是由26个英文字母的大写组成的字符串
function isUpper( val ) {
	var pattern = /^[A-Z]+$/;

	return pattern.test( val );
}

// 是否是由26个英文字母的小写组成的字符串 
function isLower( val ) {
	var pattern = /^[a-z]+$/;

	return pattern.test( val );
}


// 是否是由数字和26个英文字母组成的字符串 
function isChar( val ) {
	var pattern = /^[A-Za-z0-9]+$/;

	return pattern.test( val );
}

// 是否是由数字、26个英文字母或者下划线组成的字符串
function isUserChar( val ) {
	var pattern = /^\w+$/;

	return pattern.test( val );
}

// 是否是由数字、26个英文字母或者下划线组成的字符串，并且第一个字符非数字或下画线
function isUserID( str, len ) {
	if ( typeof str == 'number' )
		return false;

	if ( typeof len == 'number' && len > 4 && str.length < len )
		return false;

	var pattern = /^[A-Za-z]+\w+$/;
	return pattern.test( str );
}

// 是否是email
function isEmail( str ) {
	var pattern = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;

	return pattern.test( str );
}

/**
 * 校验网站URL,必须包含：://
 *
 * @param str - 被校验的字符串
 * @return boolean 
 */
function isURL( str ) {
	var pattern = /^[a-zA-z]+:\/\/(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/;

	return pattern.test( str );
}
/**
 * 校验网站URL ,不含：：//
 *
 * @param str - 被校验的字符串
 * @return boolean 
 */
function isURL2( str ) {
	var pattern = /^[a-zA-z]+\.(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/;

	return pattern.test( str );
}

/**
 * 校验邮政编码
 *
 * @param str - 被校验的字符串
 * @return boolean 
 */
function isPostCode( str ) {
	var pattern = /[1-9]\d{5}(?!\d)/;

	return pattern.test( str );
}

/**
 * 校验电话号码,传真号码
 *
 * @param str - 被校验的字符串
 * @return boolean 
 */
function isTel( str ) {
	if ( str.indexOf( ',' ) > 0 ) {
		var begin = str.substring( 0, str.indexOf( ',' ) );
		var end = str.substring( str.indexOf( ',' ) + 1 );
		if ( !isTel( end ) ) {
			return false;
		}

		str = begin;
	}

	var pattern = /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; 
	return pattern.test( str );
}

/**
 * 校验字符串是否为中文
 *
 * @param str - 被校验的字符串
 * @return boolean 
 */
function isChinese( str ) {
	var pattern = /^[u4e00-u9fa5]{0,}$/;

	pattern.test( str );
}

/**
 * 校验字符串是否为英文
 *
 * @param str - 被校验的字符串
 * @return boolean 
 */
function isEnglish( str ) {
	var pattern = /^[u4e00-u9fa5]{0,}$/;
	if ( !pattern.test( str ) ) {
		return true;
	} else {
		return false;
	}
}

/**
 * 检查字符串是否包含特殊字符
 */
function isSpecialChar(str){
	var pattern = /^[a-zA-Z\d\u4e00-\u9fa5]+$/;
	if(!pattern.test(str)){
		return true;
	}else{
		return false;
	}
}
/**
 * 从上传文件的路径中提取文件名
 *
 * @param path - 上传文件的路径
 * @return bool
 */
function getUploadFileName(path) {
	var fileName = "";
	var len = path.length;
	if (len <= 0) {
		return "";
	}
	var start = path.lastIndexOf("/");
	if (start >= 0) {
		fileName = path.substring(start + 1);
	}
	var start2 = path.lastIndexOf("\\");
	if (start2 >= 0) {
		fileName = path.substring(start2 + 1);
	}
	return fileName;
}

var checkOk = new Array();
checkOk[0] = "12288";
checkOk[1] = "8364";

function isOkChar(ch) {

	for (j = 0; j < checkOk.length; j++) {
		if (ch == checkOk[j]) {
			return true;
		}
	}
	return false;
}

/**
 * 检测一个字符串中是否包含中文字符
 *
 * @param str - 字符串
 * @return bool
 */
function checkChineseChar(str) {
	var flag = false;
	for (i = 0; i < str.length; i++) {
		var car = str.charCodeAt( i );
		if ( car > 256 && !isOkChar( car ) ) {
			flag = true;
			break;
		}
	}
	return flag;
}

/**
 * 限制一个文本输入框或区域的最大字符数限制
 * onkeydown="textLimitCheck(this, messageCount,3000)"
 * onkeyup="textLimitCheck(this, messageCount,3000)"
 * onmousedown="textLimitCheck(this, messageCount,3000)"
 * onmouseup="textLimitCheck(this, messageCount,3000)"
 *
 * @param thisArea 输入框对象
 * @param showArea 显示输入字符数的输入框对象
 * @param maxLength 允许的最大长度
 */
function textLimitCheck( thisArea, showArea, maxLength ) {
	if ( thisArea.value.length > maxLength ) {
		alert( maxLength + ' characters limit. \r Excessive data will be truncated.' );
		thisArea.value = thisArea.value.substring( 0, maxLength - 1 );
		thisArea.focus();
	}

	showArea.value = thisArea.value.length;
}

/**
 * 限制一个输入区域的最大字节数
 * thisArea 显示字节数的输入Form对象
 * showArea 具体用户输入信息的Form对象
 * maxLength 限制的长度
 */
function textLimit( thisArea, showArea, maxLength ) {
	textLimitCheck( thisArea, showArea, maxLength );
}

/**
 * 选中所有复选框
 *
 * @param checkboxName 复选框名即input标签的name属性
 * @param bool 表示是否选中
 */
function chooseBoxArray( checkboxName, bool ) {
	for ( var i = 0; i < document.getElementsByName( checkboxName ).length; i++ ) {
		if( document.getElementsByName( checkboxName )[i].type == "checkbox" ) {
			document.getElementsByName( checkboxName )[i].checked = bool;
		}
	}

	return false;
}

/**
 * 检测是否至少选中了一个复选框
 *
 * @param checkboxName 复选框名即input标签的name属性
 * @return boolean
 */
function isBoxArrayChecked( checkboxName ) {
	var tmp = false;
	for (var i = 0; i < document.getElementsByName(checkboxName).length; i++) {
		if( document.getElementsByName(checkboxName)[i].type == "checkbox" ){
			tmp = document.getElementsByName(checkboxName)[i].checked;
			if( tmp )
				return tmp;
		}		
	}
	return tmp;
}

/*
 * 新打开一个网页，显示URL的内容
 *
 * @param url 打开的地址
 * @param width  宽度
 * @param height 长度
 * @return void
 */
function openWin( url, width, height ) {
	if ( isBlank( width ) )
		width = "640";

	if ( isBlank( height ) )
		height = "400";

	var newwin = window.open( url, 'NewWindow', 'left=100,top=100,toolbar=yes,resizable=yes,scrollbars=yes,status=1,width=' + width + ',height=' + height );
	if ( !newwin.creator ) {
		window.creator = self;
	}

	if ( !newwin.opener ) {
		newwin.opener = self;
	}

	return newwin;
}

/**
 * 控制层的显示和隐藏
 *
 * @param layer string 层的名称
 * @param mode boolean
 */
function ctrlLayer( layer, mode ) {
	var obj = document.getElementById( layer );

	if ( mode ) {
		obj.style.display = "block";
	} else {
		obj.style.display = "none";
	}
}

/**
 * 弹出一个提示窗口后跳转到一个页面
 *
 * @param uri 将要跳转的页面地址
 * @param msg 提示信息
 */
function alertForward( uri, msg ) {
	if ( isBlank( uri ) || isBlank( msg ) )
		return false;

	if ( window.confirm( msg ) )
		window.location.href = uri;
}

/**
 * 提交页面上的一个表单
 *
 * @param formName 表单的name属性值
 * @param action 表单发送的地址
 * @param msg 提示信息
 * @param checkFunc 检测这个表单完整性的函数
 */
function sendForm( formName, action, msg, checkFunc ) {
	if ( isFunction( checkFunc ) && !checkFunc() ) {
		return ;
	}

	if ( isNotBlank ( action ) ) {
		document.forms[formName].action = action;
	}

	if ( isNotBlank( msg ) ) {
		if ( window.confirm( msg ) )
			document.forms[formName].submit();
	} else {
		document.forms[formName].submit();
	}

}

/**
 * 将当前的信息添加到收藏夹，兼容IE和firefox
 *
 * @param title string 添加到收藏夹中本条标签的名字
 * @param url string 收藏的地址
 */
function addBookMark( title, url ) {
	if ( window.sidebar ) {
		window.sidebar.addPanel( title, url, "" );
	} else if ( window.external ) { 
		window.external.AddFavorite( url, title );
	} else {
		return true;
	}
}

/**
 * 页面上跳出显示提示信息的框
 *
 * @param str
 */
function sysout( str ) {
	window.alert( str );
}

/**
 * 检测密码是否正确 
 * 密码必须大于4个字符
 * @param String 待检查的密码
 * @return boolean
 */
function isPassword( ss ) {
	if ( ss === '' || ss.length < 4 ) {
		return false;
	}

	var digits = "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&'()*,-./:;<=>?@[\]^_`{|}~";
	var i = 0;
	var sLength = ss.length;

	while ( i < sLength ) { 
		var c = ss.charAt( i );
		if ( digits.indexOf( c ) == -1 ) {
			return false;
		}

		i += 1;
	}
	
	return true;
}

/*
 * 检测一个字符串是否是一个标签
 * @return boolean
 */
function isSymbol( str ) {
	if ( str.indexOf( '>' ) >= 0 || str.indexOf( '<' ) >= 0 ) {
		return false;
	}
		
	return true;
}

/**
 * 调整浏览器的状态显示，如果有框架存在则在最顶端的页面显示
 *
 * @param txt 显示的内容 string
 */
function displayStatus( txt ){   // 设置状态栏显示的内容
	if( txt == null || txt == undefined || txt == "" )
		return ;

	var win = window;
	if ( win.parent ) {
		win = win.parent;
	}

	win.status = txt;
}
/**
 * 调节图片的长度和宽度做限制,自定义高宽
 * 长度和宽度哪个超出就限制哪个，如果都不超出则原尺寸
 * img src="image" onload="setImgWH(this.src,this,imgW,imgH)"
 * @param theURL  - img 地址
 * @param sImage  - img object
 * @param imgW  - 限制宽度
 * @param imgH  - 限制高度
 */
function setImgWH(theURL, sImage, imgW, imgH) {
	var imgObj;
	imgObj = new Image();
	imgObj.src = theURL;
	if ((imgObj.width != 0) && (imgObj.height != 0)) {
		if (imgObj.width >= imgW || imgObj.height >= imgH) {
			var iHeight = imgObj.height * imgW / imgObj.width;
			if (iHeight <= imgH) {
				sImage.width = imgW;
				sImage.height = iHeight;
			} else {
				var iWidth = imgObj.width * imgH / imgObj.height;
				sImage.width = iWidth;
				sImage.height = imgH;
			}
		} else {
			sImage.width = imgObj.width;
			sImage.height = imgObj.height;
		}
	} else {
		sImage.width = imgW;
		sImage.height = imgH;
	}
}
// 作者签名和电子邮件
var _AUTHOR = "SkyObscure.姜枫渔火";
var _EMAIL  = "jqr_sky@163.com";

// 用于标志是否已经导入这个JS文件
var COMMON_INCLUDED = true;


/*
 * 第一位是否是英文字母
 */
function isFirstEnglish(val) {
	val = val.substring(0,1);
	var pattern = /^[A-Za-z]+$/;
	return pattern.test( val );
}

/*
 *验证字符串的长度范围,忽略空格
 *@param str - 被验证的字符串
 *@param minLength - 最小长度
 *@param maxLength - 最大长度
 *@return boolean - true在许可的范围内
 */
function isLength( str, minLength, maxLength ) {
	if (!isBlank(str)) {
		var tmp = toTrim(str);
		if (tmp.length > maxLength || tmp.length < minLength) {
			return false;
		} else {
			return true;
		}
	}
	return false;
}

/* 判断是否为连续一样的字符串 **/
function sameChar(str) {
	var firstStr = str.substring(0,1);
	var nextStr;
	for (var i=1;i<str.length;i++){
		nextStr = str.substring(i,i+1);
		if (firstStr != nextStr) {
			return false;;
		}
	}
	return true;
}
　
/*
*ajax get异步提交功能
*@param submintUrl 请求
*@param PostCallBace 回调函数
*/
	function AjaxGetsubmint(PostCallBace,submintUrl){
	displayStatus("正在提交......");								 
	createXmlHttp();							 
	xmlHttp.onreadystatechange = PostCallBace;			       
	xmlHttp.open("get","/account/homeIndex.html",true);	  		
	xmlHttp.send(null);			    
	}
　

/**
 * 检测是否至少选中了一个复选框
 */
function isChecked(checkboxName) {
	var tmp = false;
	var boxs = document.getElementsByName(checkboxName);
	for (var i = 0; i < boxs.length; i++) {
		if (boxs[i].type == "checkbox" && boxs[i].checked) {
			tmp = true;
			break;
		}
	} 
	return tmp;
}　


//浏览器版本提示
function version() {
	var IE = (document.all) ? 1: 0;
	if (!IE) {
		var needalert = GetCookie("version");
		if (needalert != "1") {
			alert("中国海商网温馨提示：\n\n        您使用的是Netspace、Firefox或者其它非IE浏览器，可能会导致无法使用搜索的部分功能。\n\n建议您使用IE6.0或以上的版本。");
			SetCookie("version", "1", null, "/");
		}
	}
}

//获得Cookie解码后的值
function GetCookieVal(offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
		endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

//获得Cookie的原始值
function GetCookie(name) {
	//alert("xxxx")
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
		return GetCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return null;
}

//设定Cookie值
function SetCookie(name, value) {
	var expdate = new Date();
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	if(expires!=null) expdate.setTime(expdate.getTime() + ( expires * 1000 ));
	document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))
		+((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "; domain=.hisupplier.com" : ("; domain=" + domain))
		+((secure == true) ? "; secure" : "");
}
