// String extensions ===========================================================
String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "");
}

String.prototype.format = function() {
	return this.replace('<', '&lt;').replace(' ', '&nbsp;&nbsp;').replace('\n', '<br \/>\n');
}

String.prototype.escapeForXML = function() {
	return this.replace('&', '&amp;').replace('"', '&quot;').replace('<', '&lt;').replace('>', '&gt;');
}

String.prototype.escapeForDisplay = function() {
	return this.replace('<', '&lt;');
}
String.prototype.IsEmail = function()
{
	var myReg = /[\u4e00-\u9fa5]/;
	if(!myReg.test(this)){
		myReg = /^[_a-zA-Z][_a-zA-Z0-9]*@[_a-z0-9]+\.[a-zA-Z]{2,5}(\.[a-zA-Z]{2,3})?$/;
		if (myReg.test(this)) return true;
	}else{
		myReg = /^[_a-zA-Z\u4e00-\u9fa5][_a-zA-Z0-9\u4e00-\u9fa5]*@[_a-zA-Z0-9\u4e00-\u9fa5]+(\.[a-zA-Z\u4e00-\u9fa5]+)*$/;
		if (myReg.test(this)) return true;
	}
	return false;
}

String.prototype.len = function() {
	var data = this.toString();
	var len = 0;
	for(var i = 0; i < data.length; i++) {
		var c = data.charCodeAt(i);
		if (c > 0x80)
			len += 2;
		else 
			len += 1;
	}
	return len;
}

String.prototype.sylen = function() {
	var data = this.toString();
	var sylen = 0;
	for(var i = 0; i < data.length; i++) {
		var c = data.charCodeAt(i);
		if (c > 0x80)
			sylen += 3;
		else
			sylen += 1;
	}
	return sylen;
}

String.prototype.IsNumber = function()
{
	var myReg = /^-?[0-9]+$/;
	if(!myReg.test(this)) return false;
	ActRd=parseInt(this)
	return true;
}

String.prototype.IsFloat = function()
{
	var myReg = /^-?[0-9.]+$/;
	if(!myReg.test(this)) return false;
	var pos=this.indexOf('.')
	if(pos==-1) return false;
	if(pos!=this.lastIndexOf('.')) return false;
	if(pos==0 || (pos+1)==this.length) return false;
	ActRd=parseFloat(this)
	return true;
}
String.prototype.brief = function(length) {
	var len = 0;
	var buf = '';
	for(var i = 0; i < this.length; i++) {
		var c = this.charCodeAt(i);
		if (c > 0x80)
			len += 2;
		else 
			len += 1;
		if (len <= length)
			buf += this.charAt(i);
		else
			return buf;
	}
	return buf;
}

if (!Array.prototype.contains) {
	Array.prototype.contains = function(item) {
		for ( var i = 0 ; i < this.length ; i++ ) {
			if ( this[i] == item ) 
				return true;
		}
		return false;
	};
}

if (!Array.prototype.remove) {
	Array.prototype.remove = function(dx) {
    	if( isNaN(dx) || dx > this.length )
        	return false;
		for( var i=0,n=0; i<this.length; i++ )
			if( i != dx )
		this[n++]=this[i];
		this.length-=1;
   };
}

if (!Array.prototype.removeItem) {
	Array.prototype.removeItem = function(item) {
    	for ( var i = 0 ; i < this.length ; i++ ) {
        	if ( this[i] == item ) {
            	this.remove(i);
	            break;
    	     }
    	}
	};
}

/* This function is used to set cookies */
function setCookie(name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}

/* This function is used to get cookies */
function getCookie(name) {
	var prefix = name + "=" 
	var start = document.cookie.indexOf(prefix) 

	if (start==-1) {
		return null;
	}
	
	var end = document.cookie.indexOf(";", start+prefix.length) 
	if (end==-1) {
		end=document.cookie.length;
	}

	var value=document.cookie.substring(start+prefix.length, end) 
	return unescape(value);
}

/* This function is used to delete cookies */
function deleteCookie(name,path,domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

function cookiesDisabled() {
	var result=true;
  	// some browser versions support this - use it if possible
  	if (navigator.cookiesEnabled)
    	return false;
  
  	// else try to set and read a cookie
  	document.cookie = "testcookie=yes;";
  	var cookieSet = document.cookie;
  	if (cookieSet.indexOf("testcookie=yes") > -1) {
    	result=false;
  	}
  	document.cookie = "testcookie=;expires=;";
 	return result;
}

function $pi(str) {
	return parseInt(str);
}

var mozilla = (navigator.userAgent.toLowerCase().indexOf("msie") == -1);

function escape_utf8(data) {

	if (data == '' || data == null){
		return '';
	}
	data = data.toString();
	var buffer = '';
	for(var i=0; i<data.length; i++){
		var c = data.charCodeAt(i);
		var bs = new Array();

		if (c > 0x10000){
			// 4 bytes
			bs[0] = 0xF0 | ((c & 0x1C0000) >>> 18);
			bs[1] = 0x80 | ((c & 0x3F000) >>> 12);
			bs[2] = 0x80 | ((c & 0xFC0) >>> 6);
			bs[3] = 0x80 | (c & 0x3F);

		}else if (c > 0x800){
			// 3 bytes
			bs[0] = 0xE0 | ((c & 0xF000) >>> 12);
			bs[1] = 0x80 | ((c & 0xFC0) >>> 6);
			bs[2] = 0x80 | (c & 0x3F);

		}else if (c > 0x80){
			// 2 bytes
			bs[0] = 0xC0 | ((c & 0x7C0) >>> 6);
			bs[1] = 0x80 | (c & 0x3F);

		}else{
			// 1 byte
			bs[0] = c;
		}

		for(var j=0; j<bs.length; j++){
			var b = bs[j];
			var hex = nibble_to_hex((b & 0xF0) >>> 4) + nibble_to_hex(b & 0x0F);
			buffer += '%'+hex;
		}
	}

	return buffer;
}

function nibble_to_hex(nibble){
	var chars = '0123456789ABCDEF';
	return chars.charAt(nibble);
}

//传递的参数用来取消参数记忆
function clearSubmit(form) {
    previous = form.action;
    if (previous.indexOf("?") != -1) {
        form.action = previous + "&clear=true";
    } else {
        form.action = previous + "?clear=true";
    }
    form.submit();
    form.action = previous;
}

function clearGoto(url) {
    if (url.indexOf("?") != -1) {
        window.location.replace(url + "&clear=true");
    } else {
        window.location.replace(url + "?clear=true");
    }
}

function selectOption(id, value) {  //下拉框的选中
	
	if (value == '') return;
	var select = $(id);
	if (select) {
		for (var i = 0; i < select.options.length; i++) {
			if (select.options[i].value == value) {
				select.options[i].selected = true;
				return;
			}
		}
	}
}

function checkStrLength(valueStr,minlen,maxlen,objName){
	var strlen=valueStr.sylen();
	if(strlen<minlen||strlen>maxlen){
		alert(objName+"的长度不在"+minlen+"-"+maxlen+"的范围内，请确认");
		return false;
	}
	return true;
}

function startMarquee(h, speed, delay, sid) {
	var t = null;
	var p = false;
	var o = $(sid);
	o.innerHTML += o.innerHTML;
	o.onmouseover = function() {p = true}
	o.onmouseout = function() {p = false}
	o.scrollTop = 0;
	function start() {
	    t = setInterval(scrolling, speed);
	    if(!p) {
			o.scrollTop += 2;
		}
	}
	function scrolling() {
	    if(p) return;
		if(o.scrollTop % h != 0) {
	        o.scrollTop += 2;
	        if(o.scrollTop >= o.scrollHeight/2) o.scrollTop = 0;
	    } else {
	        clearInterval(t);
	        setTimeout(start, delay);
	    }
	}
	setTimeout(start, delay);
}


/**  
 * 身份证15位编码规则：dddddd yymmdd xx p   
 * dddddd：地区码   
 * yymmdd: 出生年月日   
 * xx: 顺序类编码，无法确定   
 * p: 性别，奇数为男，偶数为女  
 * <p />  
 * 身份证18位编码规则：dddddd yyyymmdd xxx y   
 * dddddd：地区码   
 * yyyymmdd: 出生年月日   
 * xxx:顺序类编码，无法确定，奇数为男，偶数为女   
 * y: 校验码，该位数值可通过前17位计算获得  
 * <p />  
 * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]  
 * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]   
 * 校验位计算公式：Y_P = mod( ∑(Ai×Wi),11 )   
 * i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置  
 *   
 */  
  
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加权因子   
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值.10代表X   
function IdCardValidate(idCard) {   
    idCard = trim(idCard.replace(/ /g, ""));   
    if (idCard.length == 15) {   
        return isValidityBrithBy15IdCard(idCard);   
    } else if (idCard.length == 18) {   
        var a_idCard = idCard.split("");// 得到身份证数组   
        if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){   
            return true;   
        }else {   
            return false;   
        }   
    } else {   
        return false;   
    }   
}   
/**  
 * 判断身份证号码为18位时最后的验证位是否正确  
 * @param a_idCard 身份证号码数组  
 * @return  
 */  
function isTrueValidateCodeBy18IdCard(a_idCard) {   
    var sum = 0; // 声明加权求和变量   
    if (a_idCard[17].toLowerCase() == 'x') {   
        a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作   
    }   
    for ( var i = 0; i < 17; i++) {   
        sum += Wi[i] * a_idCard[i];// 加权求和   
    }   
    valCodePosition = sum % 11;// 得到验证码所位置   
    if (a_idCard[17] == ValideCode[valCodePosition]) {   
        return true;   
    } else {   
        return false;   
    }   
}  
 /**  
  * 验证18位数身份证号码中的生日是否是有效生日  
  * @param idCard 18位书身份证字符串  
  * @return  
  */  
function isValidityBrithBy18IdCard(idCard18){   
    var year =  idCard18.substring(6,10);   
    var month = idCard18.substring(10,12);   
    var day = idCard18.substring(12,14);   
    var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
    // 这里用getFullYear()获取年份，避免千年虫问题   
    if(temp_date.getFullYear()!=parseFloat(year)   
          ||temp_date.getMonth()!=parseFloat(month)-1   
          ||temp_date.getDate()!=parseFloat(day)){   
            return false;   
    }else{   
        return true;   
    }   
}   
  /**  
   * 验证15位数身份证号码中的生日是否是有效生日  
   * @param idCard15 15位书身份证字符串  
   * @return  
   */  
  function isValidityBrithBy15IdCard(idCard15){   
      var year =  idCard15.substring(6,8);   
      var month = idCard15.substring(8,10);   
      var day = idCard15.substring(10,12);   
      var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
      // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法   
      if(temp_date.getYear()!=parseFloat(year)   
              ||temp_date.getMonth()!=parseFloat(month)-1   
              ||temp_date.getDate()!=parseFloat(day)){   
                return false;   
        }else{   
            return true;   
        }   
  }   
//去掉字符串头尾空格   
function trim(str) {   
    return str.replace(/(^\s*)|(\s*$)/g, "");   
}  

