﻿
//客户端数据验证相关函数
//验证变量是否为空白的字符串
function IsVacantStr(inVar)
{
if(inVar == null || inVar == "")
return true;
else
return false;
}

//去除字符串两端的空隔
function trim(inVar)
{
if (inVar == null) return ""
var str;

str = inVar
str = ltrim(str);
str = rtrim(str);
return str;
}

//去除字符串左边的空隔
function ltrim(inVar)
{
if (inVar == null) return ""
var i, str, strLength;

str = inVar.toString();
strLength = str.length;
i = 0;
while(i < strLength)
{
if(str.charAt(i) != " ")
break;
i++;
}
return str.substring(i, strLength)
}

//去除字符串右边的空隔
function rtrim(inVar)
{
if (inVar == null) return ""
var i, str, strLength;

str = inVar.toString();
strLength = str.length;
i = strLength - 1;
while(i >= 0)
{
if(str.charAt(i) != " ")
break;
i--;
}
return str.substring(0, i + 1)
}

function parseFn(argFn, argSFn)
{
  var i = argFn.indexOf(".");
  return argFn.substring(0, i) + argSFn + argFn.substring(i)  
}

function settextcolor(content, key, color)
{
  //var k = "/" + key + "/g"
  //return content.replace(key/g, "<font color=\"" + color + "\">" + key + "</font>");
  var res = "";
  var tmp = content.split(key);
  for (var i=0; i<tmp.length-1; i++)
  {
    res += tmp[i] + "<font color=\"" + color + "\">" + key + "</font>";
  }
  res += tmp[i];
  return res;
}


/// <summary>
/// 用HTML代码替换编辑控制符及HTML标记
/// </summary>
/// <param name="text">源文本</param>
/// <returns>处理后的文本</returns>
function Encode(o)
{ 
  if (o == null) return "";
  var text = o;
  text = text.replace(/&/g, "&amp;");
  text = text.replace(/</g, "&lt;");
  text = text.replace(/>/g, "&gt;");
  text = text.replace(/  /g, "&nbsp; ");
  text = text.replace(/\"/g, "&quot;");
  text = text.replace(/\'/g, "&#39;");
  text = text.replace(/\r/g, "");
  text = text.replace(/\n/g, "<BR>");
  return text;
}

/// <summary>
/// 用HTML代码替换编辑控制符及HTML标记
/// </summary>
/// <param name="text">源文本</param>
/// <returns>处理后的文本</returns>
function Dncode(o)
{ 
  if (o == null) return "";
  var text = o;
  text = text.replace(/&amp;&/g, "&");
  text = text.replace(/&lt;/g, "<");
  text = text.replace(/&gt;/g, ">");
  text = text.replace(/&nbsp; /g, "  ");
  text = text.replace(/&quot;/g, "\"");
  text = text.replace(/&#39;/g, "\'");
  text = text.replace(/<BR>/g, "\n");
  return text;
}

/// <summary>
/// 设置Radio控制中当前选定顶
/// </summary>
/// <param name="name">Radio控制名</param>
/// <param name="value">选定顶的值</param>
function SetRadioSelected(name, value)
{
  var radio = $A(name)
  var radioitem = radio.find( function(item){return (item.value == value.toString()); });
  if (radioitem != null)
  {
    radioitem.checked = true;
  }
}

/// <summary>
/// 设置Dropdown控制中当前选定顶
/// </summary>
/// <param name="name">Dropdown控制名</param>
/// <param name="value">选定顶的值</param>
function SetDropdownSelected(name, value)
{
  var nodes = $A(name.getElementsByTagName('option'))
  var node = nodes.find( function(item){return (item.value == value.toString()); });
  if (node != null)
  {
    node.selected = true;
  }
}

/********************************************************************************************
*函数名:validateInput
*功能描述:验证输入的字符串是否符合validatePattern的设置
*参数:
* inputObj Input到的对像
* validatePattern 验证的正则表达式模式
* inputStr 要验证的字符串
*返回值:如果字符串符合validatePattern的设置则返回true，否则返回false。
*********************************************************************************************/
function validateInput(inputObj, validatePattern, inputStr)
{
var docSel = document.selection.createRange()
if (docSel.parentElement().tagName != "INPUT") return false
oSel = docSel.duplicate()
oSel.text = ""
var srcRange = inputObj.createTextRange()
oSel.setEndPoint("StartToStart", srcRange)
var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length)
return validatePattern.test(str)
}



/********************************************************************************************
*函数名:vIsUserName
*功能描述:验证字符串是否符合用户名命名规则
*参数:
* inVar 要验证的字符串
*返回值:如果符合用户名规则则返回true，否则返回false。
*********************************************************************************************/
function vIsUserName(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^[A-Za-z_]{1}[A-Za-z0-9_]{3,15}$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsNotEmpty
*功能描述:验证字符串是否为非空字符串
*参数:
* inVar 要验证的字符串
*返回值:如果字符串为非空则返回true，否则返回false。
*********************************************************************************************/
function vIsNotEmpty(inVar)
{
var Str;

Str = inVar.toString();
if(Str == "")
return false;
else
return true;
}



/********************************************************************************************
'函数名:vIsNotNull
'功能描述:验证字符串是否为非无效字符串
'参数:
' inVar 要验证的字符串
'返回值:如果字符串为非无效的则返回true，否则返回false。
*********************************************************************************************/
function vIsNotNull(inVar)
{
var Str;

Str = inVar.toString();
if(trim(Str) == "")
return false;
else
return true;
}



/********************************************************************************************
*函数名:vIsCoincidentLength
*功能描述:验证字符串是否符合规定的长度范围之内
*参数:
* inVar 要验证的字符串
* minLength 最小字符串
* maxLength 最大字符串
*返回值:如果字符串是符合规定的长度范围之内则返回true，否则返回false。
*********************************************************************************************/
function vIsCoincidentLength(inVar, minLength, maxLength)
{
var Str, StrLength, tempLength;
var returnVal = true;

Str = inVar.toString();
StrLength = Str.length;
if(minLength == "" || minLength == null) minLength = null;
if(maxLength == "" || maxLength == null) maxLength = null;

if(minLength > maxLength && minLength != null && maxLength != null)
{
tempLength = minLength
minLength = maxLength
maxLength = tempLength
}

if(minLength != null && StrLength < minLength)
returnVal = returnVal && false;
if(maxLength != null && StrLength > maxLength)
returnVal = returnVal && false;
return returnVal;
}



/********************************************************************************************
*函数名:String_lengthB
*功能描述:返回字符串所占的字节数
*返回值:字符串所占的字节数。
*********************************************************************************************/
function String_lengthB()
{
var i, strLengthB, strLength, charCode;

strLength = this.length;
strLengthB = 0;
for(i = 0; i < strLength; i++)
{
charCode = this.charCodeAt(i);
if(charCode < 0 || charCode > 255)
strLengthB += 2;
else
strLengthB += 1;
}
return strLengthB;
}
//将String_lengthB添加到String对像的原型
String.prototype.lengthB = String_lengthB;


/********************************************************************************************
*函数名:vIsCoincidentLengthB
*功能描述:验证字符串是否符合规定的长度范围之内,以字节为单位
*参数:
* inVar 要验证的字符串
* minLength 最小字符串
* maxLength 最大字符串
*返回值:如果字符串是符合规定的长度范围之内则返回True，否则返回False。
*********************************************************************************************/
function vIsCoincidentLengthB(inVar, minLength, maxLength)
{
var Str, StrLength, tempLength;
var returnVal = true;

Str = inVar.toString();
StrLength = Str.lengthB();

if(minLength == "" || minLength == null) minLength = null;
if(maxLength == "" || maxLength == null) maxLength = null;

if(minLength > maxLength && minLength != null && maxLength != null)
{
tempLength = minLength
minLength = maxLength
maxLength = tempLength
}

if(minLength != null && StrLength < minLength)
returnVal = returnVal && false;
if(maxLength != null && StrLength > maxLength)
returnVal = returnVal && false;
return returnVal;
}



/********************************************************************************************
*函数名:vIsEmail
*功能描述:验证字符串是否符合Email格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合Email格式则返回true，否则返回false。
*********************************************************************************************/
function vIsEmail(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsNumeric
*功能描述:验证字符串是否符合数字的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合数字格式则返回true，否则返回false。
*********************************************************************************************/
function vIsNumeric(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^-?[0-9]+(\.[0-9]*)?$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsDate
*功能描述:验证字符串是否符合日期的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合日期格式则返回true，否则返回false。
*********************************************************************************************/
function vIsDate(inVar)
{
var returnVal;
if(IsVacantStr(inVar)) return true;
returnVal = !(isNaN(Date.parse(inVar.replace("-", "/"))));
if(!returnVal)
returnVal = !(isNaN(Date.parse(inVar.replace("-", "/") + "/1")));
return returnVal;
}

//以键值对的方式读取查询字符串
//例如【http://localhost/test.htm?first=1&second=2】
function QueryInt(key, defaultvalue)
{
  var t = Number(QueryString(key, defaultvalue));
  if (isNaN(t))
  {
    return defaultvalue;
  }
  return t;
}

function QueryString(key, defaultvalue)
{
  var value = defaultvalue; 
  //获取当前文档的URL,为后面分析它做准备
  var sURL = window.document.URL;
  //URL中是否包含查询字符串
  if (sURL.indexOf("?") > 0)
  {
    //分解URL,第二的元素为完整的查询字符串
    //即arrayParams[1]的值为【first=1&second=2】
    var arrayParams = sURL.split("?");
    //分解查询字符串
    //arrayURLParams[0]的值为【first=1 】
    //arrayURLParams[2]的值为【second=2】
    var arrayURLParams = arrayParams[1].split("&");
    //遍历分解后的键值对
    for (var i = 0; i < arrayURLParams.length; i++)
    {
          //分解一个键值对
      var sParam =  arrayURLParams[i].split("=");
      if ((sParam[0] == key) && (sParam[1] != ""))
      {
          //找到匹配的的键,且值不为空
          value = sParam[1];
          break;
      }
    } 
  }
  return value;
}

/********************************************************************************************
*函数名:vIsAreaNumber
*功能描述:验证字符串是否符合电话区号的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合电话区号的格式则返回true，否则返回false。
*********************************************************************************************/
function vIsAreaNumber(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^0[0-9]{2,3}$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsPhone
*功能描述:验证字符串是否符合电话号码的格式
*参数:
* inVar 要验证的字符串 区号及电话号码
*返回值:如果字符串是符合电话号码的格式则返回true，否则返回false。
*********************************************************************************************/
function vIsPhone(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^((0[0-9]{2,3}[- \._]?)*[0-9]{6,10})$|^([0-9]{10,20})$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsHandset
*功能描述:验证字符串是否符合手机号码的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合手机号码的格式则返回true，否则返回false。
*********************************************************************************************/
function vIsHandset(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^[0-9]{10,20}$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsChinese
*功能描述:验证字符串是否为中文
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是中文则返回true，否则返回false。
*********************************************************************************************/
function vIsChinese(inVar)
{
var i, Str, returnVal, charCode;

Str = inVar;
returnVal = true;
for(i = 0; i < Str.length; i++)
{
charCode = Str.charCodeAt(i)
returnVal = returnVal && (charCode < 0 || charCode > 255);
}
return returnVal;
}



/********************************************************************************************
*函数名:vIsEnglish
*功能描述:验证字符串是否为英文字符
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是英文字符则返回true，否则返回false。
*********************************************************************************************/
function vIsEnglish(inVar)
{
var i, Str, returnVal, charCode;

Str = inVar;
returnVal = true;
for(i = 0; i < Str.length; i++)
{
charCode = Str.charCodeAt(i)
returnVal = returnVal && (charCode >= 0 && charCode <= 255);
}
return returnVal;
}

function Hashtable()
{
  this.item = {};
}

Hashtable.prototype.push = function(id, item)
{
  this.item[id] = item;
}

Hashtable.prototype.Exists = function(id)
{
if(typeof(this.item[id]) == "undefined") return false;
return true;
}


/********************************************************************************************
*函数名:vIsSelect
*功能描述:验证控件是否选定
*参数:
* control 要验证的控件
*返回值:如果控件选定则返回true，否则返回false。
*********************************************************************************************/
function vIsSelect(control)
{
var i;

if(control.tagName == "SELECT")
{
for(i = 0; i < control.options.length; i ++)
if(control.options[i].selected == true && control.options[i].value != "") return true;
}
else// if(control.tagName == "INPUT" && (control.type == "checkbox" || control.type == "radio"))
{
if(typeof(control.length) == "undefined")
return control.checked;
else
for(i = 0; i < control.length; i++)
if(control[i].checked == true) return true;
}
return false;
}



/********************************************************************************************
*函数名:vCompare
*功能描述:对两个数据进行比较
*参数:
* inValidate 要验证的数据
* Operator 比较的类型
* inCompare 进行对比的数据
*返回值:如果比较符合Operator则返回True，否则返回False。
*********************************************************************************************/
function vCompare(inValidate, Operator, inCompare)
{
var CompareResult;

switch(Operator)
{
case "=":
CompareResult = (inValidate == inCompare)?true:false; break;
case "<>":
CompareResult = (inValidate != inCompare)?true:false; break;
case ">":
CompareResult = (inValidate > inCompare)?true:false; break;
case ">=":
CompareResult = (inValidate >= inCompare)?true:false; break;
case "<":
CompareResult = (inValidate < inCompare)?true:false; break;
case "<=":
CompareResult = (inValidate <= inCompare)?true:false; break;
case "VT":
CompareResult = (typeof(inValidate) == typeof(inCompare))?true:false; break;
}

return CompareResult;
}

function parsePageText(url, recordcount, currentpage, pagesize, reHTML, version)
{
  if (recordcount == 0)
  {
    return "";
  }
  var pagecount = Math.ceil(recordcount / pagesize);

  if (!reHTML)
  {
    if (version == "Cn")
    {
      return "当前第" + (currentpage+1) + "页，分" + pagecount + "页，共" + recordcount + "条记录";
    }
    else
    {
      return "Total<font color='red'>" + pagecount + "</font>pages, At<font color='red'>" + (currentpage+1) + "</font>page, Total<font color='red'>" + recordcount + "</font>records" ;
    }
  }

  var val = "", u;

  var lower, upper, len = 10;
  lower = (Math.floor(currentpage / len)) * len;
  upper = lower + len;
  if (upper > pagecount)
  {
    upper = pagecount;
  }

  if (currentpage <= 0)
  {
    val += "<font face=webdings>9</font>";
    val += "<font face=webdings>3</font>";
  }
  else
  {
    u = url.replace(/@pageno/g, "0");
    val += "<a href=\"" + u + "\"><font face=webdings color=#0000FF>9</font></a>";

    u = url.replace(/@pageno/g, (currentpage-1) + "");
    val += "<a href=\"" + u + "\"><font face=webdings color=#0000FF>3</font></a>";
  }

  if (lower > 0)
  {
    u = url.replace(/@pageno/g, (lower-1) + "");
    val += "<a href=\"" + u + "\"><font color=#0000FF>...</font></a>";
  }

  for (var i=lower; i<upper; i++)
  {
    if (i==currentpage)
    {
      val += "<FONT COLOR=#FF0000><B>[" + (i+1) + "]</B></FONT>";
    }
    else
    {
      u = url.replace(/@pageno/g, i + "");
      val += "<a href=\"" + u + "\">[" + (i+1) + "]</a>";
    }
  }

  if (upper < pagecount)
  {
    u = url.replace(/@pageno/g, upper + "");
    val += "<a href=\"" + u + "\"><font color=#0000FF>...</font></a>";
  }

  if (currentpage >= pagecount-1)
  {
    val += "<font face=webdings>4</font>";
    val += "<font face=webdings>:</font>";
  }
  else
  {
    u = url.replace(/@pageno/g, (currentpage+1) + "");
    val += "<a href=\"" + u  + "\"><font face=webdings color=#0000FF>4</font></a>";

    u = url.replace(/@pageno/g, (pagecount-1) + "");
    val += "<a href=\"" + u + "\"><font face=webdings color=#0000FF>:</font></a>";
  }
  return val;
}

function SetCookie(name,value)//两个参数，一个是cookie的名子，一个是值
{
  var Days = 1; //此 cookie 将被保存 1 天
  var exp  = new Date();    //new Date("December 31, 9998");
  exp.setTime(exp.getTime() + Days*24*60*60*1000);
  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function GetCookie(name)//取cookies函数        
{
  var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
  if(arr != null) return unescape(arr[2]); return null;
}
function DelCookie(name)//删除cookie
{
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval=getCookie(name);
  if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}

function setcheckbox(ln)
{
  var ul = $(ln);
  var input = $A(ul.getElementsByTagName('input')); 
  var checkboxs = input.findAll( function(input) 
  {
    return input.type == 'checkbox'
  });
  var checked = $F('selectall');
  checkboxs.each( function(checkbox)
  {
    checkbox.checked = checked;
  });
}

function DeleteData(ln, pName)
{
  var ul = $(ln);
  var input = $A(ul.getElementsByTagName('input')); 
  var checkboxs = input.findAll( function(input) 
  {
    return input.type == 'checkbox' && input.checked == true;
  });
  checkboxs.each( function(checkbox)
  {
    if (!eval(pName + ".DeleteDate(" + checkbox.value+ ")").value)
    {
      alert('删除失败! 可能与之相关的信息存在, 请先清除相关信息再进行此操作.')                                         
    }
  });
  window.location.reload();
}

function GetDropdownSelected(id)
{
  var tag = $(id);
  var item = $A(tag.getElementsByTagName('option')); 
  var selected = item.find( function(opt) 
  {
    return opt.selected == true;
  });
  if (selected != null)
  {
    return selected.value;
  }
  return null;
}

function exit(munitcode)
{
  var ul = left.Exit(munitcode).value;
  window.location.href = ul;
}

function exitPurchaser()
{
  LogOut.PurchaserOut();
  window.location.href="/cn/attend/login.htm";
}
function exitPurchaser_en()
{
  LogOut.PurchaserOut();
  window.location.href="/en/attend/login.htm";
}

function exitUsers()
{
  LogOut.UsersOut();
  window.location.href="/cn/Exhibitor/login.htm";
}
function exitAdmin()
{
  LogOut.AdminOut();
  window.location.href="/index.aspx";
}

function $() 
{ 
  var elements = new Array(); 
  for (var i = 0; i < arguments.length; i++) 
  { 
    var element = arguments[i]; 
    if (typeof element == 'string') 
      element = document.getElementById(element); 
    if (arguments.length == 1) 
      return element; 
    elements.push(element); 
  } 
  return elements; 
}

function KeyTips(obj, tips)
{
  if (obj.value == tips)
  {
    obj.value = "";
  }
}
