/**
 * common js
 */

//界面输入域非空的处理办法
/**
1,标志<font color=red>*</font>
2，在head中增加：<script type="text/javascript" src="/common/js/Common.js"></script>
3，在form上增加：onsubmit="return notNullCheck(this);"
4，在输入域中增加：alertName="用户姓名" notnull="true"
*/
function notNullCheck(frm)
{ // uses the onBlur handler of form elements to check value 
	var statusT= '';
	var notnull ="";
	var thevalue ="";
	var alertName = "";
	//alert("1");
	for(var index= 0; index < frm.elements.length; index++)
	{
		var el= frm.elements[index];
		if(!el.type) continue;
		if(el.type != 'hidden' && el.name && el.notnull)
		{     //alert("2");
			   notnull = el.notnull;//alert("notnull="+notnull);
			   thevalue = el.value;//alert("thevalue="+thevalue);
			   alertName = fieldname(el);//alert("alertName="+alertName);
			   
		     if(notnull=="true"){
		     	   if(thevalue==""){
		     	   	  statusT = statusT +"'"+ alertName +"'、";
		     	   }
		    }
		}
	}
//	alert("3");
  if(statusT!=""){
  	statusT = statusT +"不能为空！"
  	alert(statusT);
  	return false;}
  else{return true;}
	
}
function fieldname(fld)
{ // get the field label text or name
	var alertName = "";
	try{alertName = fld.alertName;}catch(E){}
	return fld.alertName;
}

/** Gobal bCancel; */
var bCancel = false;
var DATE_DELIMITER = "-";
var DB_INT_LENGTH = 64; //Database Length.defalut64
var MAX_INTEGER = Math.pow(2, DB_INT_LENGTH - 1) - 1;
var MIN_INTEGER = -Math.pow(2, DB_INT_LENGTH - 1);
var MAX_SMALLINT = Math.pow(2, DB_INT_LENGTH / 4 - 1) - 1;
var MIN_SMALLINT = -Math.pow(2, DB_INT_LENGTH / 4 - 1);
var VERBOSE = false;
var FIELD_SEPARATOR = "_FIELD_SEPARATOR_";
var GROUP_SEPARATOR = "_GROUP_SEPARATOR_";
function setDateDelimiter(delimiter) {
    DATE_DELIMITER = delimiter;
}
function setDBIntLength(len) {
    DB_INT_LENGTH = len;
    MAX_INTEGER = Math.pow(2, DB_INT_LENGTH - 1) - 1;
    MIN_INTEGER = -Math.pow(2, DB_INT_LENGTH - 1);
    MAX_SMALLINT = Math.pow(2, DB_INT_LENGTH / 4 - 1) - 1;
    MIN_SMALLINT = -Math.pow(2, DB_INT_LENGTH / 4 - 1);
}
function setVerbose(verbose) {
    VERBOSE = verbose;
}
function isVerbose() {
    return VERBOSE;
}
function log(value) {
    if (isVerbose()) {
        window.status = value;
    }
}
function isNetscape() {
    if (navigator.appName == "Netscape") {
        return true;
    } else {
        return false;
    }
}
function getElementOrder(field) {
    var i = 0;
    var order = 0;
    var elements = document.getElementsByName(field.name);
    var elementsCount = elements.length;
    for (i = 0; i < elementsCount; i++) {
        order++;
        if (elements[i] == field) {
            break;
        }
    }
    return order;
}

function isFirstElement(field) {
    var elements = document.getElementsByName(field.name);
    if (elements[0] == field) {
        return true;
    } else {
        return false;
    }
}
function getElementCount(fieldName) {
    var count = 0;
    count = document.getElementsByName(fieldName).length;
    return count;
}
function getByteLength(value) {
    var str;
    var count = 0;
    var valueCount = value.length;
    for (var i = 0; i < valueCount; i++) {
        str = escape(value.charAt(i));
        if (str.length == 6) {
            count = count + 2;
        } else {
            count = count + 1;
        }
    }
    return count;
}
function getTableElements(tableId) {
    var i = 0;
    var elements = new Array();
    var tempElements = null;
    var tbody;
    var index = 0;
    var tbodies = document.getElementById(tableId).tBodies;
    var tbodiesCount = tbodies.length;
    var tempElementsCount = 0;
    for (i = 0; i < tbodiesCount; i++) {
        tbody = tbodies.item(i);
        tempElements = tbody.getElementsByTagName("INPUT");
        tempElementsCount = tempElements.length;
        for (var j = 0; j < tempElementsCount; j++) {
            elements[index++] = tempElements[j];
        }
        tempElements = tbody.getElementsByTagName("SELECT");
        tempElementsCount = tempElements.length;
        for (var j = 0; j < tempElementsCount; j++) {
            elements[index++] = tempElements[j];
        }
        tempElements = tbody.getElementsByTagName("TEXTAREA");
        tempElementsCount = tempElements.length;
        for (var j = 0; j < tempElementsCount; j++) {
            elements[index++] = tempElements[j];
        }
    }
    return elements;
}
function leftTrim(value) {
    var re = /^\s*/;
    if (value == null) {
        return null;
    }
    return value.replace(re, "");
}
function rightTrim(value) {
    var re = /\s*$/;
    if (value == null) {
        return null;
    }
    return value.replace(re, "");
}
function trim(value) {
    return leftTrim(rightTrim(value));
}
function regExpTest(resource, re) {
    var result = false;
    if (resource == null || resource == "") {
        return false;
    }
    if (resource == re.exec(resource)) {
        result = true;
    }
    return result;
}
function replace(str, strFind, strReplaceWith) {
    var strReturn;
    var re = new RegExp(strFind, "g");
    if (str == null) {
        return null;
    }
    strReturn = str.replace(re, strReplaceWith);
    return strReturn;
}
function isEmptyField(field) {
    if (field.value == null || trim(field.value) == "") {
        return true;
    }
    return false;
}
function formatNumberToString(strValue) {
    strValue = trim(strValue);
    strValue = replace(strValue, ",", "");
    return strValue;
}
function formatNumberToDouble(strValue) {
    var dblValue = 0;
    strValue = formatNumberToString(strValue);
    dblValue = parseFloat(strValue);
    if (isNaN(dblValue)) {
        dblValue = 0;
    }
    return dblValue;
}
function fixNumber(cellStr) {
    if (parseFloat(cellStr) == 0) {
        return "0";
    }
    if (cellStr.indexOf(".") == -1) {
        return cellStr;
    }
    var x = parseFloat(cellStr);
    x += (parseFloat(cellStr) < 0) ? -5e-9 : 5e-9;

	// Chop the string to 4 decimal places.
    cellStr = "" + x;
    cellStr = cellStr.substring(0, 5 + cellStr.indexOf("."));

	// Remove trailing zeros beyond the decimal point.
    cellStrArr = cellStr.split("");
    for (k = cellStrArr.length - 1; k > 0 && cellStrArr[k] == "0"; --k) {
        cellStrArr[k] = "X";
    }
    cellStr = "";
    for (k = 0; k < cellStrArr.length && cellStrArr[k] != "X"; ++k) {
        cellStr += cellStrArr[k];
    }
    return cellStr;
}
function setFocus(field) {
    try {
        field.focus();
    }
    catch (E) {
    }
}
function showMessage(message) {
    alert(message);
}
function boundCheckBox(controlField, checkBoxField) {
    var count = 0;
    try {
        count = checkBoxField.length;
    }
    catch (E) {
    }
    if (isNaN(count)) {
	    if(checkBoxField.className!="readonlyCheckBox"){
        checkBoxField.checked = controlField.checked;
        }
    } else {
        for (var i = 0; i < count; i++) {
        	if(checkBoxField[i].className!="readonlyCheckBox"){
            checkBoxField[i].checked = controlField.checked;
        }
    }
}
}
function getElementIndexInForm(form, field) {
    var intElementIndex = -1;
    var elementsCount = form.elements.length;
    for (var i = 0; i < elementsCount; i++) {
        if (form.elements[i] == field) {
            intElementIndex = i;
            break;
        }
    }
    return intElementIndex;
}
function setSelect(field) {
    if (field.type != "hidden") {
        try {
            field.select();
        }
        catch (E) {
        }
    }
}
function isIE6() {
    if (navigator.appVersion.indexOf("MSIE 6") > -1) {
        return true;
    } else {
        return false;
    }
}

function isIE7() {
    if (navigator.appVersion.indexOf("MSIE 7") > -1) {
        return true;
    } else {
        return false;
    }
}

function bindField(source, target) {
    target.value = source.value;
}
function newString(str, times) {
    var value = "";
    for (var i = 0; i < times; i++) {
        value += str;
    }
    return value;
}
function printExcept(obj) {
    obj.style.display = "none";
    window.print();
    obj.style.display = "";
}
function postAction(form, action, target) {
    var oldTarget = form.target;
    if (target != null) {
        form.target = target;
    }
    form.action = action;
    form.submit();
    if (target != null) {
        form.target = oldTarget;
    }
    return true;
}
function postActionWithConfirm(form, action, message, target) {
    if (confirm(message)) {
        var oldTarget = form.target;
        if (target != null) {
            form.target = target;
        }
        form.action = action;
        form.submit();
        if (target != null) {
            form.target = oldTarget;
        }
        return true;
    } else {
        return false;
    }
}
function setFormDisabled(form) {
    if (form == null) {
        form = fm;
    }
    var element;
    for (var i = 0; i < form.elements.length; i++) {
        element = form.elements[i];
        if (element.type == "hidden") {
            continue;
        }
        if (element.name.indexOf("buttonControl") == 0) {
            continue;
        }
        if (element.name == "buttonSubmit") {
            element.style.display = "none";
            continue;
        }
        element.disabled = true;
    }
}
function getFirstElementValue(fieldName) {
    var field;
    if (getElementCount(fieldName) > 1) {
        field = document.getElementsByName(fieldName);
    } else {
        field = document.getElementsByName(fieldName)[0];
    }
    return field.value;
}
function openWindow(urlString, windowName, optionString) {
    var newWindow = window.open(urlString, windowName, optionString);
    try {
        newWindow.focus();
    }
    catch (E) {
    }
    return newWindow;
}
function exportResultDataToExcel(table) {
    var oXL;
    try {
        oXL = GetObject("", "Excel.Application");
    }
    catch (E) {
        try {
            oXL = new ActiveXObject("Excel.Application");
        }
        catch (E2) {
            showMessage("Please confirm:\n1.Microsoft Excel has been installed.\n2.Internet Options=>Security=>Setting \"Enable unsafe ActiveX\"");
            return;
        }
    }
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var Lenr = 1;
    var maxColumn = 0;
    for (var i = 0; i < Lenr; i++) {
        var Lenc = table.tHead.rows(i).cells.length;
        for (j = 0; j < Lenc; j++) {
            if (maxColumn < j) {
                maxColumn = j;
            }
            oSheet.Columns(j + 1).EntireColumn.NumberFormatLocal = "@";
            oSheet.Cells(i + 1, j + 1).value = table.tHead.rows(i).cells(j).innerText;
        }
    }
    Lenr = table.tBodies(0).rows.length;
    for (var i = 0; i < Lenr; i++) {
        var Lenc = table.tBodies(0).rows(i).cells.length;
        var j = 0;
        var value = table.tBodies(0).rows(i).cells(j).innerText;
        var pos = value.indexOf(" ");
        if (pos > -1) {
            value = trim(value.substring(pos));
        }
        oSheet.Cells(i + 2, j + 1).value = value;
        for (j = 1; j < Lenc; j++) {
            oSheet.Cells(i + 2, j + 1).value = table.tBodies(0).rows(i).cells(j).innerText;
        }
    }
    for (var i = 0; i < maxColumn; i++) {
        oSheet.Columns(i + 1).EntireColumn.AutoFit;
    }
    oXL.Visible = true;
}
function setSameElementValue(field) {
    if (getElementCount(field.name) > 1) {
        var fields = document.getElementsByName(field.name);
        for (var i = 0; i < fields.length; i++) {
            fields[i].value = field.value;
        }
    }
}
function readCookie(name) {
    var cookieValue = "";
    var search = name + "=";
    if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = document.cookie.indexOf(";", offset);
            if (end == -1) {
                end = document.cookie.length;
            }
            cookieValue = unescape(document.cookie.substring(offset, end));
        }
    }
    return cookieValue;
}
function writeCookie(name, value, hours) {
    var expire = "";
    if (hours != null) {
        expire = new Date((new Date()).getTime() + hours * 3600000);
        expire = ";  expires=" + expire.toGMTString();
    }
    document.cookie = name + "=" + escape(value) + expire;
}
/**
* Cross-browser XMLHttpRequest instantiation.
*/
if (typeof XMLHttpRequest == "undefined") {
    XMLHttpRequest = function () {
        var msxmls = ["MSXML3", "MSXML2", "Microsoft"];
        for (var i = 0; i < msxmls.length; i++) {
            try {
                return new ActiveXObject(msxmls[i] + ".XMLHTTP");
            }
            catch (e) {
            }
        }
        throw new Error("No XML component installed!");
    };
}
function createXMLHttpRequest() {
    try {
    // Attempt to create it "the Mozilla way" 
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        }
    // Guess not - now the IE way
        if (window.ActiveXObject) {
            return new ActiveXObject(getXMLPrefix() + ".XmlHttp");
        }
    }
    catch (ex) {
    }
    return false;
} 


//a xml http request variable.
var xmlRequest;
/**
 * request server mode sync
 */
function syncRequest(url) {
    xmlRequest = createXMLHttpRequest();
    xmlRequest.onreadystatechange = processStateChange;
    try {
        xmlRequest.open("POST", url, false);
    }
    catch (e) {
        alert(e);
    }
    xmlRequest.send(null);
}
function processStateChange() {
    if (xmlRequest.readyState == 4) { // Complete
        if (xmlRequest.status == 200) { // OK response
        } else {
            alert("Problem: " + xmlRequest.statusText);
        }
    }
}

/** ----------------------------------------------------------------------------
 * Function:     getMpcPageIndex
 * Description:  Calls this function to find the index of one Mpc-Page, 
 *               who include the fieldNode          
 * Arguments:    DOM Node  
 * Returns:      index number
 *-----------------------------------------------------------------------------
 */
function getMpcPageIndex(fieldNode){    
  // to find the childNode of "oMPC" who include inputNode
  var tempNode = fieldNode ;
	while(tempNode.parentNode.id!="oMPC"){	    
	    tempNode = tempNode.parentNode ;
	}
	// get the index of that childNode 
	var layerArray = oMPC.childNodes ;	
	var mpcPageindex ; 
	for(var i = 0 ; i < layerArray.length ; i++){
	    if(layerArray[i].id == tempNode.id){
	        mpcPageindex = i+1 ;    
	    }
	}
	
	return mpcPageindex ;
}

/** ----------------------------------------------------------------------------
 * Function:     locateMpcPage
 * Description:  Calls this function in order to display the specify Mpc-page                         
 * Arguments:    index of the Mpc-page 
 * Returns:      none
 *-----------------------------------------------------------------------------
 */
function locateMpcPage(mpcPageIndex){    
    oMPC.selectedIndex= mpcPageIndex ;	
    oMPC.DoPropChange("selectedIndex") ;
}

/**
 * unformat number
 * example:123,222.23 ==> 123322.23
 * @since 2006-09-01
 */
function unformatNumber(value){
  var retValue = replace(value, ",", "");
  return retValue;
}

/**
 * format number
 * example:123222.23 ==> 123,322.23
 * @since 2006-09-01
 */
function formatNumber(value){
  value  =  value+"";
  var pos = value.indexOf('.');
  if(pos>-1){
    var firstValue=value.substring(0,pos);
    var lastValue=value.substring(pos+1);
    var  re=/(-?\d+)(\d{3})/
    while(re.test(firstValue)){
      firstValue=firstValue.replace(re,"$1,$2")
    }
    re=/(\d{3})(\d+)/
    while(re.test(lastValue)){
      lastValue=lastValue.replace(re,"$1,$2")
    }
    value = firstValue + "." + lastValue;
  }else{
    var  re=/(-?\d+)(\d{3})/
    while(re.test(value)){
      value=value.replace(re,"$1,$2")
    }
  }
  return  value;
}

/**
 * get multi-line field object.
 * @param statement: fm.ClassCode[]
 * @param elementOrder: 3
 * @return: The third ClassCode field object of this page form.
 * @since 2006-09-01
 */
function getElementObjectByOrder(statement, elementOrder) {
  var object = null;
  if(statement.indexOf("[]")==-1){
    try{
      object = eval(statement);
    }catch (E) { 
      object = statement;
    }
  }else{
    var startPos = statement.indexOf("[");
    var endPos = statement.indexOf("]");
    if(startPos==endPos-1){
      statement = statement.substring(0,startPos+1) + elementOrder + statement.substring(endPos);
    }
    try{
      object = eval(statement);
    }catch (E) { 
      object = statement;
    }
  }
  return object;
}
function upperCaseFirstChar(str){
  if(str == null || str.length < 1 ){
   return str;  
  }
  var convertStr = str.substring(0,1).toUpperCase()+str.substring(1);        
  return convertStr ;    
}

function lowerCaseFirstChar(str){
  if(str == null || str.length < 1 ){
   return str;  
  }
  var convertStr = str.substring(0,1).toLowerCase()+str.substring(1);        
  return convertStr ;    
}

function getElementByTagName(object,elementName,tagName){ 
  var tempField = object.getElementsByTagName(tagName); 
  for (var i = 0; i <tempField.length; i++) {
    if(tempField[i].name == elementName){      
      return tempField[i]; 
    }
  } 
  return null;
}  
