//客户端数据验证相关函数
//验证变量是否为空白的字符串
function IsVacantStr(inVar)
{
if(inVar == null || inVar == "")
return true;
else
return false;
}

function chkdiv(divid){
	var chkid=document.getElementById(divid);
	if(chkid != null){return true; }
	else {return false; }
}

//去除字符串两端的空隔
function trim(inVar)
{
var str;

str = inVar
str = ltrim(str);
str = rtrim(str);
return str;
}

//去除字符串左边的空隔
function ltrim(inVar)
{
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)
{
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;
}

/********************************************************************************************
*函数名: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;
}

function GetAbsLeft(e)
{
  if ( arguments.length != 1 || e == null ) 
  { 
    return null; 
  } 
  var offset = e.offsetLeft;
  while(e = e.offsetParent) 
  { 
    offset += e.offsetLeft;
  }
  return offset;
}

function GetAbsTop(e)
{
  if ( arguments.length != 1 || e == null ) 
  { 
    return null; 
  } 
  var offset = e.offsetTop;
  while(e = e.offsetParent) 
  { 
    offset += e.offsetTop;
  }
  return offset;
}


/********************************************************************************************
*函数名: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 Hashtable()
{
  this.item = {};
}

Hashtable.prototype.push = function(id, item)
{
  this.item[id] = item;
}

function bAjax()
{
  this.Url = "";
  this.Action = "";
  this.Pars = "";
  this.Method = "post";
  this.submit = function(CallBack)
  {
    var p = "_At=" + this.Action + "&_Rd=" + Math.floor(Math.random()*10000000);
    if (this.Pars != "") p += "&" + this.Pars;
    var temp = new Ajax.Request(this.Url,
    { method: this.Method,
      parameters: p ,
      //onLoading: loading,
      onComplete: CallBack
    });
  };

  this.Binding = function(xmlText)
  {
    var doc = new ActiveXObject("Microsoft.XMLDOM");   
    doc.async="false";
    doc.loadXML(xmlText);
    if(doc.ReadyState<=2)
    {
      return null;
    }
    var arr = new Array();
    var rows = doc.getElementsByTagName("RD");
    for (var i=0; i<rows.length; i++)
    {
      var hs = new Hashtable();
      fields = rows[i].getElementsByTagName("Fd");
      for(var j=0; j<fields.length; j++)
      {
        var name = fields[j].getAttribute("fn");
        hs.push(name, fields[j].getElementsByTagName("c")[0].text.replace(/__#x20/g, " "));
      }
      arr[i] = hs.item;
    }
    return arr;
  }
}

function selectallfun(vl)
{
  for(var i=0; true; i++)
  {
    var ctl = eval("document.all.checkbox__ctl" + i + "_checked");
    if (ctl != null)
    {
      ctl.checked = vl;
    }
    else
    {
      break;
    }
  }
}

