// Common function #############################################################
// Author : Puttipong Utranand.
/* Function summary
# Getter function
- getElementById(elementName) = Get element by id.
- getElementsByName(elementName) = Get element by name (return array)
- getElementValue(elementName) - Get element value
- getElementIntValue(elementName) - Get integer value from text element, return 0 if empty
- getElementChecked(elementName) = Get checked value from element
- getDDListSelectedValue(elementName) = Get selected value of DDList
- getDDListSelectedText(elementName) = Get selected text of DDList
- getDDListSelectedIndex(elementName) = Get selected index of DDList
- getDDListItemCount(elementName) = Get item count of ddList
- getRadioValue(elementName) = Get radio value
- getRadioValueByIdLike(elementNameLike) = Get radio value by id like .. (return arrayList of value)
- getCheckedValueListByIdLike(elementNameLike, delimiter) = create list value of check box separated by delimiter
- getElementLength(elementName) = get length of element by Id
- getInnerHTML(elementName) = return innerHTML of element
- getIntValue(elementName) = return int value, return 0 if empty
- getFloatValue(elementName) = return float value, return 0 if empty

# Setter function
- setDDList(elementName, arrayListValue, arrayListText) = Set DDList by input ArrayList value and name
- setDDListWithMessage(elementName, message, messageValue, arrayListValue, arrayListText) = Set DDList with default message
- setNumberDDListWithMessage(elementName, message, messageValue, numberSize) = Set DDList of number with default message
- resetDDListWithMessage(elementName, message, messageValue) = Reset DDList with default message.
- setElementValue(elementName, value) = Set value to element.
- setDDListSelectedIndex(elementName, index) = Set selected index of DDList
- setDDListSelectedValue(elementName, value) = Set selected value of DDList
- setRadioValue(elementName, value) = Set radio selected value
- setInnerHTML(elementName, value) = Set html value to element
- checkElementById(elementName) = Check element
- uncheckElementById(elementName) = Uncheck element
- setCheckedBoxListByValueList(elementNameLike, listValue, delimiter) = check the checkBox by list of value separated by delimiter
- setPageSession(sessionValue) = set session to page
- setElementImageSrc(elementName, imgSrc) set image source
- setOneClassNameByIdLike(elementNameLike, oldClass, newClass) - Set only one of old className to new class name(Start from id 1)
- setClassName(elementName, className) - set element classname
- setImgProperty(elementName, width, height, alt) - Set image width, height and alternate text 
- setElementPosotionToBrowser(elementName, radio, eleWidth, eleHeight) -  Set element to browser with radio(radio = 2 for center of screen) 
- setElementHREF(elementName, href) - Set HREF to element
//- setElementReadOnly(elementName) - set element to read only
//- setElementWritable(elementName) - set element writable


# Other function
- showElementById(elementName) = show element
- hideElementById(elementName) = hide element
- hideElementByIdLike(elementName, startIndex, endIndex) = Loop and hide elementName from start index 
- hideElementByIdLikeRange(elementName, startIndex, endIndex) =  Hide element (like) from start to end
- hideAndShowElement(elementNameLike, elementShow) = Hide elementLike and show element
- checkFileType(fileName, fileType) = Check file type extension
- trimLeft(sString) = trim left side
- trimRight(sString) = trim right side
- trimAll(sString) = trim left and right
- disableElementById(elementName) = disable element by id
- enableElementById(elementName) = enable element by id
- focusElement(elementName) = focus to element name
// - selectedElement(elementName) = focus and select element value
- selectElement(elementName) = focus and select element value
- setRadioValueByElementIdLike(elementNameLike, startIndex, value) = set all radio element name id like, to given value
- checkShowAndHide(elementNameCheck, elementNameShowHide) = if the elementNameCheck was checked then show elementNameShow either hide the element
- compareElementValue(elementName1, elementName2)= compare value of 2 element, return true if equal
- validateEmail(elementName) - Check email pattern
- isNullOrEmpty(elementName) - Check if element is null or empty
- isEmptyOrZero(elementName) - Check if element is null or empty or zero
- countDownMethod - Count down number and recall function if not finish// Return remaining time
*/

// Get element by id
function getElementById(elementName) {
    return document.getElementById(elementName);
}
// Get element by name
function getElementsByName(elementName){
    return  document.getElementsByName(elementName);
}
// Set value to elementName by arrayList of value and text.
function setDDList(elementName, arrayListValue, arrayListText) {
  
    // Reset size of ddList
    var ele = document.getElementById(elementName);
    ele.options.length = 0;

    // Get size of new ddList
    size=arrayListValue.length;

    // Loop add item 
    for(i=0;i<size;i++) {
        newval = arrayListValue[i];
        newtext = arrayListText[i];

        ele.options[i] = new Option(newtext, newval);
    }
};
// Set value to ddList by arraylist of value and text included text message and value.
function setDDListWithMessage(elementName, message, messageValue, arrayListValue, arrayListText) {
  
    // Reset size of ddList
    var ele = document.getElementById(elementName);
    ele.options.length = 0;

    // Get size of new ddList
    size=arrayListValue.length;

    ele.options[0] = new Option(message, messageValue);
    // Loop add item     
    for(i=0;i<size;i++) {
        newval = arrayListValue[i];
        newtext = arrayListText[i];

        ele.options[i+1] = new Option(newtext, newval);
    }
};
// Set ddlist of number with message
function setNumberDDListWithMessage(elementName, message, messageValue, numberSize) {

    // Reset size of ddList
    var ele = document.getElementById(elementName);
    ele.options.length = 0;

    ele.options[0] = new Option(message, messageValue);
    // Loop add item     
    for(i=1;i<=numberSize;i++) {
        newval = i;
        newtext = i;

        ele.options[i] = new Option(newtext, newval);
    }
};
// Reset ddlist with message
function resetDDListWithMessage(elementName, message, messageValue) {
  
    // Reset size of ddList
    var ele = document.getElementById(elementName);
    ele.options.length = 0;

    ele.options[0] = new Option(message, messageValue);

};
// Set value to text element
function setElementValue(elementName, value){
    document.getElementById(elementName).value = value;
};
// Get value from text element
function getElementValue(elementName) {
    return document.getElementById(elementName).value;
};
// Get integer value from text element, return 0 if empty
function getElementIntValue(elementName) {
    var intVal = document.getElementById(elementName).value;
    if(intVal == ""){
        return 0;
    } else {
        return parseFloat(intVal);
    }
}
// Get checked value of element.
function getElementChecked(elementName){
    return document.getElementById(elementName).checked;
};

// Get selected value from ddlist element
function getDDListSelectedValue(elementName) {
    var ele = document.getElementById(elementName);
    return ele.options[ele.selectedIndex].value;
};
// Get selected value from ddlist element
function getDDListSelectedText(elementName) {
    var ele = document.getElementById(elementName);
    return ele.options[ele.selectedIndex].text;
};
// get index of selected ddlist
function getDDListSelectedIndex(elementName) {
    return document.getElementById(elementName).selectedIndex;
};
// set selected index of ddlist by input index.
function setDDListSelectedIndex(elementName, index){
    document.getElementById(elementName).selectedIndex = index;   
};
// set index to value of ddlist
function setDDListSelectedValue(elementName, value){
    var ele = document.getElementById(elementName);
    var size = ele.options.length
    for (var i = 0 ; i < size ; i++) {
            if(ele.options[i].value == value)
                ele.selectedIndex = i;
    }    
};
// Get selected value from ddlist element
function getDDListItemCount(elementName) {
    return document.getElementById(elementName).options.length;
};
// Get radio value
function getRadioValue(elementName){
    var ele = document.getElementsByName(elementName);
    var size = ele.length;
    
    for (var i = 0 ; i < size ; i++){
        if (ele[i].checked)
            return ele[i].value;
    }
};
// Get radio value by id like .. (return arrayList of value)
function getRadioValueByIdLike(elementNameLike){    
    var myArray = new Array();
    var ele;

    for (i = 0 ; i <= 999 ; i++) {
        ele = document.getElementById(elementNameLike + i);
        
        if (ele != null) {
            myArray[i] = getRadioValue(elementNameLike + i)
        } else {
            break;
        }
    }
    return myArray;
};
function getCheckedValueListByIdLike(elementNameLike, delimiter){
	var myText = "";
	var ele;
    for (i = 0 ; i <= 999 ; i++) {
        ele = document.getElementById(elementNameLike + i);
        
        if (ele != null) {
			if (getElementChecked(elementNameLike + i)) {		
				if (myText == "") {
					myText = ele.value;
				} else {
					myText = myText + delimiter + ele.value;
				}
			}
        } else {
            break;
        }
    }
    return myText;	
};
// Get length of element
function getElementLength(elementName){
    return document.getElementById(elementName).value.length;
};
// Get innerHTML of element
function getInnerHTML(elementName){
    return document.getElementById(elementName).innerHTML;
}
function getIntValue(elementName) {
    if(document.getElementById(elementName).value != "") {
        return parseInt(document.getElementById(elementName).value.replace(/,/g, ''));
    } else {
        return 0;
    }
}
function getFloatValue(elementName) {
    if(document.getElementById(elementName).value != "") {
        return parseFloat(document.getElementById(elementName).value.replace(/,/g, ''));
    } else {
        return 0;
    }
}

// set radio value
function setRadioValue(elementName, value){
    var ele = document.getElementsByName(elementName);
    var size = ele.length;
    
    for (var i = 0 ; i < size ; i++){
        if (ele[i].value == value) {
            ele[i].checked = true;
            break;
        }
    }
};
// set inner html.
function setInnerHTML(elementName, value){
    document.getElementById(elementName).innerHTML = value;
};
// show element
function showElementById(elementName){
    document.getElementById(elementName).style.display = "";
};
// hide element
function hideElementById(elementName){
    document.getElementById(elementName).style.display = "none";
};
// Hide elements until element is null;
function hideElementByIdLike(elementNameLike, startIndex){
    var ele;

    for (i = startIndex ; i <= 999 ; i++) {
        ele = document.getElementById(elementNameLike + i);
        
        if (ele != null) {
            ele.style.display = "none";
        } else {
            break;
        }
    }
}
// Hide element from startIndex to endIndex
function hideElementByIdLikeRange(elementNameLike, startIndex, endIndex){
    var ele;

    for (i = startIndex ; i <= endIndex ; i++) {
        ele = document.getElementById(elementNameLike + i);
        
        if (ele != null) {
            ele.style.display = "none";
        } 
    }

}
// Call hideElementByIdLike with default value then show element
function hideAndShowElement(elementNameLike, elementShow) {
    // Hide
    hideElementByIdLike(elementNameLike,1);
    
    // Show
    showElementById(elementShow);
    
};
// Check file type with file name extension.
function checkFileType(fileName, fileType) {
    // current support file type is image, xml
    
    // Get file extension
    var fileExt = fileName.split(".");
    var checkExt;
    if(fileExt.length > 1) {
        checkExt = fileExt[1];
    } else {
        return false;
    }
        

    // Check in each case
    switch (fileType)
    {
        case "image": { 
            var allowExt = " jpg,jpeg,gif,bmp,JPG,JPEG,GIF,BMP,png,PNG ";
            var check = allowExt.split(checkExt);
            if (check.length > 1)
                return true;
            else
                return false;
                
            break; }
        case "xml": { 
            var allowExt = " xml ";
            var check = allowExt.split(checkExt);
            if (check.length > 1)
                return true;
            else
                return false;

            break; }
        default: { return false; break; }
    }
    
    return true;
};
// Disable element by id
function disableElementById(elementName){
    document.getElementById(elementName).disabled = true;
};
// Enable element by id
function enableElementById(elementName){
    document.getElementById(elementName).disabled = false;
};
// Check element
function checkElementById(elementName){
    document.getElementById(elementName).checked = true;
};
// Uncheck element
function uncheckElementById(elementName){
    document.getElementById(elementName).checked = false;
};
function setCheckedBoxListByValueList(elementNameLike, listValue, delimiter) {
	// Set to array
	var valArr = listValue.split(delimiter);
	
	// loop each array
	var currIndex = 0;
	var i = 0;
	for (i = 0 ; i < valArr.length ; i++) {
		// get current index value
		var currVal = valArr[i];
		//alert("curr > " + currVal);
		
		
		
		// loop in each element name like
		var ele;

		for (j = 0 ; j <= 999 ; j++) {
			ele = document.getElementById(elementNameLike + j);
			
			if (ele != null) {
			
	        //alert("ele > " + ele.value);
				// if value is matched
				if (currVal == ele.value) {
					// Check the element
					//alert('matched!');
					ele.checked = true;
					// increment current index
					currIndex++;
					break;
				}
				
			} else {
				break;
			}
		}
	
	}
	
};
// Set session to page
function setPageSession(sessionValue){
    setInnerHTML("divSessionSetter", sessionValue);
};


// If element name was checked then show another element.
function checkShowAndHide(elementNameCheck, elementNameShowHide) {
    var eleChk = document.getElementById(elementNameCheck);
    var eleShowHide = document.getElementById(elementNameShowHide);
    if(eleChk.checked) {
        eleShowHide.style.display = "";
    } else {
        eleShowHide.style.display = "none";
    }
    
};
function focusElement(elementName){
    document.getElementById(elementName).focus();
};
// Old method
function selectedElement(elementName){
    var ele = document.getElementById(elementName);
    ele.focus();
    ele.select();
};
// select Element textbox
function selectElement(elementName){
    var ele = document.getElementById(elementName);
    ele.focus();
    ele.select();
};
function setRadioValueByElementIdLike(elementNameLike, startIndex, value) {
    var ele;

    for (i = startIndex ; i <= 999 ; i++) {
        ele = document.getElementById(elementNameLike + i);
        
        if (ele != null) {
            // Set radio value
            setRadioValue(elementNameLike + i, value);
        } else {
            break;
        }
    }
};
// Compare 2 value of element
function compareElementValue(elementName1, elementName2){
    if(document.getElementById(elementName1).value == document.getElementById(elementName2).value) {
        return true;
    } else {
        return false;
    }
};




// validate email value
function validateEmail(elementName) {
  var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  var ele = document.getElementById(elementName);
  var re = new RegExp(filter);
  if (ele.value.match(re)) {
    return true;
  } else {
    return false;
  }
};
// Check element is null or empty return false if not null and empty
function isNullOrEmpty(elementName) {
    var ele = document.getElementById(elementName);
    if(ele == null) {return true;}
    if(ele.value.length == 0){return true;}
    return false;
}
// Check if element is null or empty or zero
function isEmptyOrZero(elementName) {
    var ele = document.getElementById(elementName);
    if(ele == null) {return true;}
    if(ele.value.length == 0){return true;}
    if(parseFloat(ele.value) == 0) {return true;}
    return false;
}
// Count down number and recall function if not finish// Return remaining time
function countDownMethod(spanCountNumName, recallFunction, countDownRemain){
    if (spanCountNumName.length > 0) {
        if(countDownRemain == 0) {
            //document.getElementById(spanCountNumName).innerHTML = "CLICK to reload";
            document.getElementById(spanCountNumName).innerHTML = "0";
        } else {
            document.getElementById(spanCountNumName).innerHTML = countDownRemain;
        }
    }
    countDownRemain = countDownRemain - 1;
    setTimeout(recallFunction, 1000);
    
    return countDownRemain;
}

// Web form generated script
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// General function #################################################################
function cantProceedNextStep(message){
    alert("Can not proceed to next step\n"+message);
    history.back(0);
}











