//////////////////////////////////////////////////////////////
// FILE: utility.js                                                           
// VERSION: 20040712_1 
//  
// DESCRIPTION: validate form content
//                                   
// 2003/07/15 created by Rmo Tsai
// 2004/06/06 modified by Rmo Tsai @Kaohsiung 增加 utility_replace()
// 2004/07/05 modified by Rmo Tsai @Kaohsiung 增加 utility_subAreaSwitching()
// 2004/07/12 modified by Rmo Tsai @Kaohsiung 增加 utility_getOrderByNameListInQuery()
// 2006/09/07 modified by Rmo Tsai @Kaohsiung 
//     增加 utility_getRandomChar()
//     增加 utility_getRandomNumeric()
//     增加 utility_getRandomAlphabet()
//     增加 utility_getRandomAlphaNumeric()
// 2009/02/13 modified by Rmo Tsai @Kaohsiung 
//     增加 utility_unCheckRadio()
//////////////////////////////////////////////////////////////


function utility_barCodeFilter(p_inputString) {
    return p_inputString.toLowerCase()
}



// 格式必須為 yy or yyy/mm/dd
function utility_dateRocToWestern(p_inputString) {
    var l_rocYear;
    var l_westernYear;
    var l_yearSeparator;
    var l_dateRoc;
    l_dateRoc = "";
    l_yearSeparator = p_inputString.indexOf("/");
    
    if (!(l_yearSeparator == -1)) {
       l_rocYear = p_inputString.subp_inputStringing(0, l_yearSeparator);     
    } else {
       l_rocYear = p_inputString
    }
    
    if (isNaN(parseInt(l_rocYear)))  {  
        return l_dateRoc;  
    } 
    
    l_westernYear = 1911 + parseInt(l_rocYear);
    
    if (!(l_yearSeparator == -1)) {
        return l_westernYear + "/" + p_inputString.subp_inputStringing(l_yearSeparator + 1, p_inputString.length);
    } else {
        return l_westernYear;
    }
    
}



function utility_isValidDate(p_date) {
     // (\d{1,2}) means 4 or 12
     // (\/|-) means either (/ or -), 4-12 or 4/12 
     // NOTE: we have to escape / (\/)
     // or else pattern matching will interpret it to mean the end instead of the literal "/"
     // \2 use the 2nd placeholder (\/|-) "here"
     // (\d{2}|\d{4}) means 02 or 2002
     var l_datPat = /^(\d{2}|\d{4})(\/|-)(\d{1,2})\2(\d{1,2})$/;
     var l_matchArray = p_date.match(l_datPat);

     if (l_matchArray == null) return false;

     // l_matchArray[0] will be the original entire string, for example, 2002-4-12 or 2002/4/12
     var l_year = l_matchArray[1];        // (\d{2}|\d{4}) - 1st parenthesis set - 02 or 2002
     var l_month = l_matchArray[3];     // (\d{1,2}) - 3rd parenthesis set - 4
     var l_day = l_matchArray[4];         // (\d{1,2}) - 4th parenthesis set - 12
     

     if (l_month < 1 || l_month > 12) return false;
     if (l_day < 1 || l_day > 31) return false;
     if ((l_month == 4 || l_month == 6 || l_month==9 || l_month == 11) && l_day == 31) return false;
     if (l_month == 2) {
          var isleap = (l_year % 4 == 0 && (l_year % 100 != 0 || l_year % 400 == 0));

          if (l_day > 29 || (l_day == 29 && !isleap)) return false;
     }
     return true;
}



function utility_getElementIndex(p_element)
{
   // loop thru document.forms property and exit w/ current element index

   var l_number = -1;
   for (var l_loopCount = 0; l_loopCount < p_element.form.elements.length; l_loopCount++) {
      if (p_element.form.elements[l_loopCount].name == p_element.name) {
        l_number = l_loopCount;  // save element index
        break;
      }
   } return l_number;  // returns current element index
}



function utility_gotoNextElement(p_element, p_event) {
    var l_indexOfNextElement = utility_getElementIndex(p_element);
    var l_theForm = p_element.form;
    if (p_event.keyCode == 13) {
        p_event.keyCode = 0;
        (l_indexOfNextElement == (l_theForm.elements.length - 1)) ? l_indexOfNextElement = 0 : l_indexOfNextElement++;
        //window.status = l_indexOfNextElement;
        l_theForm.elements[l_indexOfNextElement].focus();
    }
}



function utility_isStringEmpty(p_inputString) {
    if (p_inputString.length == 0) {
        return true;
    } else {
        return false;
    }
}



function utility_isItemExist(p_item) {
    if (typeof(p_item) != 'undefined') {
        return true;
    } else {
    	return false;
    }
}



function utility_placeFocus() {
    if (document.forms.length > 0) {
        var l_field = document.forms[0];
        for (l_loopCount = 0; l_loopCount < l_field.length; l_loopCount++) {
            if ((l_field.elements[l_loopCount].type == "text") || (l_field.elements[l_loopCount].type == "textarea") || (l_field.elements[l_loopCount].type.toString().charAt(0) == "s")) {
                document.forms[0].elements[l_loopCount].focus();
                break;
            }
        }
    }
}



function utility_trim(p_inputString) { 
    // this will get rid of leading spaces 
    while (p_inputString.substring(0,1) == ' ') 
        p_inputString = p_inputString.substring(1, p_inputString.length); 

    // this will get rid of trailing spaces 
    while (p_inputString.substring(p_inputString.length-1,p_inputString.length) == ' ') 
        p_inputString = p_inputString.substring(0, p_inputString.length-1); 

    return p_inputString; 
} 



function utility_replace(p_inputString, p_fromString, p_toString){
   //replaces p_fromString with p_toString in p_inputString
   var l_index = p_inputString.indexOf(p_fromString);
   if(l_index == -1) {
   	return p_inputString;  //base case
   }
   else {
       return(p_inputString.substring(0, l_index) + p_toString +
            utility_replace(p_inputString.substring(l_index + p_fromString.length, p_inputString.length), p_fromString, p_toString));
   }
}



function utility_getOrderByString(p_orgOrderByString, p_orderName){
   var l_newSearchOrdersValue;
   var l_accendingKeyword;
   var l_descendingKeyword;
   var l_emptyString = "";
   
   //數字代表欄位的所在位置,則不須加上[]
   if (isNaN(parseInt(p_orderName))) {
       l_accendingKeyword = "[" + p_orderName + "] ASC";
       l_descendingKeyword = "[" + p_orderName + "] DESC";	
   } else {
       l_accendingKeyword = p_orderName + " ASC";
       l_descendingKeyword = p_orderName + " DESC";
   }
   
   
   if (p_orgOrderByString.indexOf(l_descendingKeyword) != -1) {
       l_newSearchOrdersValue = "";
   }
   else if (p_orgOrderByString.indexOf(l_accendingKeyword)!= -1) {
       l_newSearchOrdersValue = utility_replace(p_orgOrderByString, l_accendingKeyword, l_descendingKeyword);
   }
   else {
       l_newSearchOrdersValue = l_accendingKeyword;
   }
   
   return l_newSearchOrdersValue;
}



//控制子區域的開啟或關閉, 必須在 html 中自行定義子區域
// eg: <span name="ordererArea" id="ordererArea" style="display:none">
//     ...
//     </span>
function utility_subAreaSwitching(p_areaName, p_button) { 
    if (p_button.value == "↓") {
        p_button.value = "↑";
        eval("document.all." + p_areaName + ".style.display = 'inline'");
    } else {
        p_button.value = "↓";
        eval("document.all." + p_areaName + ".style.display = 'none'");
    }     
}



function utility_isStringChinese(p_inputString) {
    for (var l_loopCount = 0; l_loopCount < p_inputString.length; l_loopCount++) { 
        if (p_inputString.charCodeAt(l_loopCount) > 127) {
            return true;
        } 
    } 
    return false;
}



function utility_isFileNameChinese(p_fileName) {
    for (var l_loopCount = p_fileName.length; l_loopCount > 0; l_loopCount--) { 
    	if ((p_fileName.charCodeAt(l_loopCount) == 47) || (p_fileName.charCodeAt(l_loopCount) == 92))
    	    return false;
        if (p_fileName.charCodeAt(l_loopCount) > 127) {
            return true;
        } 
    } 
    return false;
}



function utility_getRadioValue(p_radio) { 
    var l_value = null; 
    for(var l_loopCount = 0; l_loopCount < p_radio.length; l_loopCount++) { 
     if(p_radio[l_loopCount].checked) { 
      l_value = p_radio[l_loopCount].value; 
      return l_value; 
     } 
    }          
    return l_value; 
} 



function utility_getOptionCheckLength(p_item) { 
    return (1 * p_item.length || 1);
} 



function utility_getOptionCheckedNumber(p_item) {
    var l_itemLength = utility_getOptionCheckLength(p_item);
    var l_loopCount = 0;
    var l_checkNumber = 0;
    if (l_itemLength > 1) {
        while (l_loopCount < l_itemLength) {
            if (eval("p_item[" + l_loopCount + "].checked")) {
                l_checkNumber++;
            }
            l_loopCount++;
        }
    }
    else {
        if (p_item.checked) {
            l_checkNumber = 1;
        }
    }    
     
    return l_checkNumber;    
}



function utility_getRandomChar(p_LengthOfDigit, p_isLengthFixed, p_sourceString) {
    var l_lengthOfOutputString;
    //取得輸出字串長度
    if (p_isLengthFixed) {
    	l_lengthOfOutputString = p_LengthOfDigit
    } else {
        l_lengthOfOutputString = Math.floor(Math.random()*p_LengthOfDigit) + 1; 
    }
    
    //產生字串
    var l_outputString="";
    var l_digitIndex;
    for (var l_loopCount=1; l_loopCount<=l_lengthOfOutputString;l_loopCount++) {
    	l_digitIndex = Math.floor(Math.random()*p_sourceString.length);
    	l_outputString = l_outputString + p_sourceString.substr(l_digitIndex,1);	
    }
    return l_outputString;
}



function utility_getRandomNumeric(p_LengthOfDigit, p_isLengthFixed) {
    var l_sourceDigit = "0123456789";
    return utility_getRandomChar(p_LengthOfDigit, p_isLengthFixed, l_sourceDigit);
}



function utility_getRandomAlphabet(p_LengthOfDigit, p_isLengthFixed) {
    var l_sourceDigit = "abcdefghijklmnopqrstuvwxyz";
    l_sourceDigit = l_sourceDigit + l_sourceDigit.toUpperCase();
    return utility_getRandomChar(p_LengthOfDigit, p_isLengthFixed, l_sourceDigit);
}



function utility_getRandomAlphaNumeric(p_LengthOfDigit, p_isLengthFixed) {
    var l_sourceDigit = "abcdefghijklmnopqrstuvwxyz";
    l_sourceDigit = l_sourceDigit + l_sourceDigit.toUpperCase();
    l_sourceDigit = l_sourceDigit + "0123456789";
    return utility_getRandomChar(p_LengthOfDigit, p_isLengthFixed, l_sourceDigit);
}

//設定 css style
//USAGE:
//objId    = element id.
//style    = the style to be changed.
//value    = the value assigned to the style.
function utility_setStyle(p_objId, p_style, p_value) {
    p_objId.style[p_style] = p_value;
}



function utility_unCheckRadio(p_item) {
    if (typeof(p_item.length) == 'undefined') {
    	p_item.checked = false;
    } else {
        for (var l_loopCount = 0; l_loopCount < p_item.length; l_loopCount++) {
            p_item[l_loopCount].checked = false;
        }
    }
}