function getElementPosition(elementId) {
    var ua = navigator.userAgent.toLowerCase();
    var isOpera = (ua.indexOf('opera') != -1);
    var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
    var el = document.getElementById(elementId);

    if (el.parentNode === null || el.style.display == 'none') {
        return false;
    }

    var parent = null;
    var pos = [];
    var box;

    if (el.getBoundingClientRect)    //IE
    {
        box = el.getBoundingClientRect();
        var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
        var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
        return { x: box.left + scrollLeft, y: box.top + scrollTop };
    }
    else if (document.getBoxObjectFor)    // gecko    
    {
        box = document.getBoxObjectFor(el);
        var borderLeft = (el.style.borderLeftWidth) ? parseInt(el.style.borderLeftWidth) : 0;
        var borderTop = (el.style.borderTopWidth) ? parseInt(el.style.borderTopWidth) : 0;
        pos = [box.x - borderLeft, box.y - borderTop];
    }
    else    // safari & opera    
    {
        pos = [el.offsetLeft, el.offsetTop];
        parent = el.offsetParent;

        if (parent != el) {
            while (parent) {
                pos[0] += parent.offsetLeft;
                pos[1] += parent.offsetTop;
                parent = parent.offsetParent;
            }
        }

        if (ua.indexOf('opera') != -1 || (ua.indexOf('safari') != -1 && el.style.position == 'absolute')) {
            pos[0] -= document.body.offsetLeft;
            pos[1] -= document.body.offsetTop;
        }
    }

    if (el.parentNode) {
        parent = el.parentNode;
    }
    else {
        parent = null;
    }

    while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { // account for any scrolled ancestors
        pos[0] -= parent.scrollLeft;
        pos[1] -= parent.scrollTop;

        if (parent.parentNode) {
            parent = parent.parentNode;
        }
        else {
            parent = null;
        }
    }

    return { x: pos[0], y: pos[1] };
}

function scrollToObj(objId) {
    var pos = window.getElementPos(objId);
    if (pos != undefined && pos != null) {
        window.scroll(pos.x, pos.y);
    }
}

//==========================================// 
//Trim() , Ltrim() , RTrim() 
//==========================================//
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

String.prototype.ltrim = function() {
    return this.replace(/(^\s*)/g, "");
}

String.prototype.rtrim = function() {
    return this.replace(/(\s*$)/g, "");
}


function isStrongPassword(pwd) {
    // Macth condition: Input string must contain at least one lower letter, one upper letter and one number.
    // Other match option: ^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
    // Above option test the char of at end of input string whether in "@#$%^&+=". This option is stronger than current.
    var reg = /^.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/;
    return reg.test(pwd);
}

function charCounter(field, counterField, maxLength) {
    if (field.value.length > maxLength)
        field.value = field.value.substring(0, maxLength);
    else
        counterField.value = field.value.length;
}

function wordCounter(field, textField, maxLength) {
    var string1 = " ";
    //Count the number of words in the description field
    if (field.value != "undefined" && field.value != "null" && field.value != null)
        string1 = field.value
    textfield.value = counter(string1);
}

function counter(str) {
    var count = 0
    var flag = 0;
    str = trim(str);
    if (str.length > 0)
        count = 1;

    //take into consideration of non-space whitespace
    var pattern = /\s+/gi;
    var result = str.match(pattern);
    if (result != null) {
        count = result.length + 1;
    }
    return count;
}

/* Check ip address (IP4) */
function verifyIP(ip) {
    if (ip.indexOf("*") >= 0) {
        var reg = /^(\d+|\*)\.(\d+|\*)\.(\d+|\*)\.(\d+|\*)$/;
        if (reg.test(ip)) {
            var ig = ip.split(".");
            if ((!isNaN(parseInt(ig[0])) && ig[0] > 255) ||
					(!isNaN(parseInt(ig[1])) && ig[1] > 255) ||
					(!isNaN(parseInt(ig[2])) && ig[2] > 255) ||
					(!isNaN(parseInt(ig[3])) && ig[3] > 255))
                return false;
            else
                return true;
        }
    }
    else {
        var reg = /^(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))$/;
        return reg.test(ip);
    }

    //if (reg.test(ip))
    //	return RegExp.$1*Math.pow(255,3) + RegExp.$2*Math.pow(255,2) + RegExp.$3*255 + RegExp.$4*1;
    //else
    //	return false;
}

/* Get html control by name and tagname */
function getElementsByNameTag(name, tagname) {
    var objArray, m, elements, objName;
    objArray = new Array();
    m = 0;
    elements = document.getElementsByTagName(tagname);
    for (i = 0; i < elements.length; i++) {
        obj = elements[i];
        objName = obj.name.toLowerCase();
        if (objName.indexOf(name.toLowerCase()) >= 0) {
            objArray[m] = obj;
            m++;
        }
    }
    return objArray;
}

/* Get html control by id and tagname */
function getElementsByIdTag(id, tagname) {
    var objArray, m, elements, objId;
    objArray = new Array();
    m = 0;
    elements = document.getElementsByTagName(tagname);
    for (i = 0; i < elements.length; i++) {
        obj = elements[i];
        objId = obj.id;
        if (objId.indexOf(id.toLowerCase()) >= 0) {
            objArray[m] = obj;
            m++;
        }
    }
    return objArray;
}

function checkRelativePath(path) {
    var reg;
    reg = /^(\/)+(\d|\w|\-|\/)*$/;
    return reg.test(path);
}

function checkPhysicalPath(path) {
    var reg;
    reg = /^(([a-zA-Z]\:){1})(\\)?((\d|\w|\-)+(\\)?)*$/;
    return reg.test(path);
}

function checkRelativeFilePath(filepath) {
    var reg;
    reg = /^((\/)?(\d|\w|\-|\/)+(\.)?)*(\d|\w|\-)+$/;
    return reg.test(filepath);
}

function checkPhysicalFilePath(filepath) {
    var reg;
    reg = /^(([a-zA-Z]\:){1})((\\)?(\d|\w|\-|\\)+(\.)?)*(\d|\w|\-)+$/;
    return reg.test(filepath);
}

function isValidFileName(filename) {
    var reg, flag;
    reg = /^(\d|\w|\_|\-)+$/;
    flag = reg.test(filename);
    if (!flag) {
        alert('The file(or folder) name can only contain numbers, letters, -, and _. Please remove other characters, including any space.');
        return false;
    }
    else return true;
}

function newUniqueId() {
    return Math.floor(Math.random() * 10000000) + (new Date()).getTime() % 1000000000;
}

function rand(num) {
    return Math.round(Math.random() * num);
}

//function getElementsByNameA(name) {
//    var objArray, obj, objName;
//    objArray = new Array();
//    m = 0;
//    for (n = 0; n < document.all.length; n++) {
//        for (i = 0; i < document.all.length; i++) {
//            obj = document.all[i];
//            objName = obj.name.toLowerCase();
//            if (objName.indexOf(name.toLowerCase()) >= 0) {
//                objArray[m] = obj;
//                m++;
//            }
//        }
//    }
//    return objArray;
//}

function getElementByName(name, formid) {
    var objArray, obj, objName;
    objArray = new Array();
    m = 0;
    if (formid != null && formid.length != 0 && document.forms[formid] != undefined && document.forms[formid] != null) {
        for (i = 0; i < document.forms[formid].elements.length; i++) {
            obj = document.forms[formid].elements[i];
            objName = obj.name.toLowerCase();
            if (objName.indexOf(name.toLowerCase()) >= 0) {
                return obj;
            }
        }
    }
    else {
        for (i = 0; i < document.all.length; i++) {
            obj = document.all[i];
            if (obj.name == undefined) continue;
            objName = obj.name.toLowerCase();
            if (objName.indexOf(name.toLowerCase()) >= 0) {
                return obj;
            }
        }
    }
    return objArray;
}

function getElementsByNameA(name, formid) {
    var objArray, obj, objName;
    objArray = new Array();
    m = 0;
    if (formid != null && formid.length != 0 && document.forms[formid] != undefined && document.forms[formid] != null) {
        for (i = 0; i < document.forms[formid].elements.length; i++) {
            obj = document.forms[formid].elements[i];
            objName = obj.name.toLowerCase();
            if (objName.indexOf(name.toLowerCase()) >= 0) {
                objArray[m] = obj;
                m++;
            }
        }
    }
    else {
        for (i = 0; i < document.all.length; i++) {
            obj = document.all[i];
            if (obj.name == undefined) continue;
            objName = obj.name.toLowerCase();
            if (objName.indexOf(name.toLowerCase()) >= 0) {
                objArray[m] = obj;
                m++;
            }
        }
    }
    return objArray;
}

function getElementByIdA(id) {
    var objArray, obj;
    obj = null;
    objArray = getElementsById(id);
    if (objArray != undefined && objArray != null && objArray.length > 0)
        obj = objArray[0];
    return obj;
}

function getElementsById(id) {
    var objArray, m, objId;
    objArray = new Array();
    m = 0;
    for (i = 0; i < document.all.length; i++) {
        obj = document.all[i];
        objId = obj.id;
        if (objId.indexOf(id.toLowerCase()) >= 0) {
            objArray[m] = obj;
            m++;
        }
    }
    return objArray;
}

function getElementsById(id, formid) {
    var objArray, m, objId;
    objArray = new Array();
    m = 0;
    if (formid != null && formid.length != 0 && document.forms[formid] != undefined && document.forms[formid] != null) {
        for (i = 0; i < document.forms[formid].elements.length; i++) {
            obj = document.forms[formid].elements[i];
            objId = obj.id;
            if (objId.indexOf(id.toLowerCase()) >= 0) {
                objArray[m] = obj;
                m++;
            }
        }
    }
    else {
        for (i = 0; i < document.all.length; i++) {
            obj = document.all[i];
            objId = obj.id;
            if (objId.indexOf(id.toLowerCase()) >= 0) {
                objArray[m] = obj;
                m++;
            }
        }
    }
    return objArray;
}

function matchFileExtGroup(filepath, extensionGroup) {
    if (filepath.length <= 0) return true;
    var i;
    for (i = 0; i < extensionGroup.length; i++) {
        if (matchFileExt(trim(filepath), trim(extensionGroup[i]))) {
            return true;
        }
    }
    return false;
}

function isValidUploadFile(filepath) {
    var extFilter;
    extFilter = new Array();
    extFilter[0] = ".vb";
    extFilter[1] = ".asp";
    extFilter[2] = ".aspx";
    extFilter[3] = ".config";
    //extFilter[4] = ".xls"
    //extFilter[5] = ".cvs"

    if (filepath.length <= 0) return true;
    var i;
    for (i = 0; i < extFilter.length; i++) {
        if (matchFileExt(filepath, extFilter[i])) {
            return false;
        }
    }
    return true;
}

function matchFileExt(filepath, extension) {
    if (extension.length <= 0) return false;
    extension = trim(extension);
    if (extension.substring(0, 1) != ".") extension = "." + extension;
    if (filepath.length < extension.length) return false;
    if (filepath.substring(filepath.length - extension.length).toLowerCase() == extension)
        return true;
    else
        return false;
}

function trimEnd(str, trimString) {
    var iPos, Result;
    if (str.length <= 0)
        return "";
    else if (trimString.length <= 0)
        return str;
    else if (str.length < trimString.length)
        return str;

    Result = "";
    try {
        iPos = str.lastIndexOf(trimString);
        Result = str.substring(0, iPos);
    }
    catch (e) { }
    return Result;
}

function trimStart(str, trimString) {
    var iLen, Result;
    if (str.length <= 0)
        return "";
    else if (trimString.length <= 0)
        return str;
    else if (str.length < trimString.length)
        return str;

    Result = "";
    try {
        iLen = trimString.length;
        Result = str.substring(iLen, str.length - iLen);
    }
    catch (e) { }
    return Result;
}

//Fuctions to mimmick ltrim(,  rtrim(, and trim(...
//==================================================================
//ltrim(string) : Returns a copy of a string without leading spaces.
//==================================================================
function ltrim(str)
/*
PURPOSE: Remove leading blanks from our string.
IN: str - the string we want to ltrim(
*/
{
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(0)) != -1) {
        // We have a string with leading blank(s)...
        var j = 0, i = s.length;
        // Iterate from the far left of string until we
        // don't have any more whitespace...
        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
            j++;
        // Get the substring from the first non-whitespace
        // character to the end of the string...
        s = s.substring(j, i);
    }
    return s;
}

//==================================================================
//rtrim(string) : Returns a copy of a string without trailing spaces.
//=================================================================//=
function rtrim(str)
/*
PURPOSE: Remove trailing blanks from our string.
IN: str - the string we want to rtrim(
*/
{
    // We don't want to trip JUST spaces, but also tabs,
    // line feeds, etc.  Add anything else you want to
    // "trim" here in Whitespace
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(s.length - 1)) != -1) {
        // We have a string with trailing blank(s)...
        var i = s.length - 1;       // Get length of string
        // Iterate from the far right of string until we
        // don't have any more whitespace...
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
            i--;
        // Get the substring from the front of the string to
        // where the last non-whitespace character is...
        s = s.substring(0, i + 1);
    }
    return s;
}


//=============================================================
//trim(string) : Returns a copy of a string without leading or trailing spaces
//=============================================================
function trim(str)
/*
PURPOSE: Remove trailing and leading blanks from our string.
IN: str - the string we want to trim(

RETVAL: A trim(med string!
*/
{
    return rtrim(ltrim(str));
}


/* SOURCE FILE: date.js */
var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x){return(x<0||x>9?"":"0")+x}
function isDate(val,format){var date=getDateFromFormat(val,format);if(date==0){return false;}return true;}
function compareDates(date1,dateformat1,date2,dateformat2){var d1=getDateFromFormat(date1,dateformat1);var d2=getDateFromFormat(date2,dateformat2);if(d1==0 || d2==0){return -1;}else if(d1 > d2){return 1;}return 0;}
function formatDate(date,format){format=format+"";var result="";var i_format=0;var c="";var token="";var y=date.getYear()+"";var M=date.getMonth()+1;var d=date.getDate();var E=date.getDay();var H=date.getHours();var m=date.getMinutes();var s=date.getSeconds();var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;var value=new Object();if(y.length < 4){y=""+(y-0+1900);}value["y"]=""+y;value["yyyy"]=y;value["yy"]=y.substring(2,4);value["M"]=M;value["MM"]=LZ(M);value["MMM"]=MONTH_NAMES[M-1];value["NNN"]=MONTH_NAMES[M+11];value["d"]=d;value["dd"]=LZ(d);value["E"]=DAY_NAMES[E+7];value["EE"]=DAY_NAMES[E];value["H"]=H;value["HH"]=LZ(H);if(H==0){value["h"]=12;}else if(H>12){value["h"]=H-12;}else{value["h"]=H;}value["hh"]=LZ(value["h"]);if(H>11){value["K"]=H-12;}else{value["K"]=H;}value["k"]=H+1;value["KK"]=LZ(value["K"]);value["kk"]=LZ(value["k"]);if(H > 11){value["a"]="PM";}else{value["a"]="AM";}value["m"]=m;value["mm"]=LZ(m);value["s"]=s;value["ss"]=LZ(s);while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(value[token] != null){result=result + value[token];}else{result=result + token;}}return result;}
function _isInteger(val){var digits="1234567890";for(var i=0;i < val.length;i++){if(digits.indexOf(val.charAt(i))==-1){return false;}}return true;}
function _getInt(str,i,minlength,maxlength){for(var x=maxlength;x>=minlength;x--){var token=str.substring(i,i+x);if(token.length < minlength){return null;}if(_isInteger(token)){return token;}}return null;}
function getDateFromFormat(val,format){val=val+"";format=format+"";var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var now=new Date();var year=now.getYear();var month=now.getMonth()+1;var date=1;var hh=now.getHours();var mm=now.getMinutes();var ss=now.getSeconds();var ampm="";while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(token=="yyyy" || token=="yy" || token=="y"){if(token=="yyyy"){x=4;y=4;}if(token=="yy"){x=2;y=2;}if(token=="y"){x=2;y=4;}year=_getInt(val,i_val,x,y);if(year==null){return 0;}i_val += year.length;if(year.length==2){if(year > 70){year=1900+(year-0);}else{year=2000+(year-0);}}}else if(token=="MMM"||token=="NNN"){month=0;for(var i=0;i<MONTH_NAMES.length;i++){var month_name=MONTH_NAMES[i];if(val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()){if(token=="MMM"||(token=="NNN"&&i>11)){month=i+1;if(month>12){month -= 12;}i_val += month_name.length;break;}}}if((month < 1)||(month>12)){return 0;}}else if(token=="EE"||token=="E"){for(var i=0;i<DAY_NAMES.length;i++){var day_name=DAY_NAMES[i];if(val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()){i_val += day_name.length;break;}}}else if(token=="MM"||token=="M"){month=_getInt(val,i_val,token.length,2);if(month==null||(month<1)||(month>12)){return 0;}i_val+=month.length;}else if(token=="dd"||token=="d"){date=_getInt(val,i_val,token.length,2);if(date==null||(date<1)||(date>31)){return 0;}i_val+=date.length;}else if(token=="hh"||token=="h"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>12)){return 0;}i_val+=hh.length;}else if(token=="HH"||token=="H"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>23)){return 0;}i_val+=hh.length;}else if(token=="KK"||token=="K"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>11)){return 0;}i_val+=hh.length;}else if(token=="kk"||token=="k"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>24)){return 0;}i_val+=hh.length;hh--;}else if(token=="mm"||token=="m"){mm=_getInt(val,i_val,token.length,2);if(mm==null||(mm<0)||(mm>59)){return 0;}i_val+=mm.length;}else if(token=="ss"||token=="s"){ss=_getInt(val,i_val,token.length,2);if(ss==null||(ss<0)||(ss>59)){return 0;}i_val+=ss.length;}else if(token=="a"){if(val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="AM";}else if(val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="PM";}else{return 0;}i_val+=2;}else{if(val.substring(i_val,i_val+token.length)!=token){return 0;}else{i_val+=token.length;}}}if(i_val != val.length){return 0;}if(month==2){if( ((year%4==0)&&(year%100 != 0) ) ||(year%400==0) ){if(date > 29){return 0;}}else{if(date > 28){return 0;}}}if((month==4)||(month==6)||(month==9)||(month==11)){if(date > 30){return 0;}}if(hh<12 && ampm=="PM"){hh=hh-0+12;}else if(hh>11 && ampm=="AM"){hh-=12;}var newdate=new Date(year,month-1,date,hh,mm,ss);return newdate.getTime();}
function parseDate(val){var preferEuro=(arguments.length==2)?arguments[1]:false;generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');var d=null;for(var i=0;i<checkList.length;i++){var l=window[checkList[i]];for(var j=0;j<l.length;j++){d=getDateFromFormat(val,l[j]);if(d!=0){return new Date(d);}}}return null;}


function checkDate(datestr) {
    var flag = true;
    getdate = datestr;  //fob(datestr).value; 
    if (getdate.search(/^[0-9]{4}-(0[1-9]|[1-9]|1[1-2])-((0[1-9]|[1-9])|1[0-9]|2[0-9]|3[0-1])$/) == -1)
        flag = false;
    else {
        var year = getdate.substr(0, getdate.indexOf('-'))
        var transition_month = getdate.substr(0, getdate.lastIndexOf('-'));
        var month = transition_month.substr(transition_month.lastIndexOf('-') + 1, transition_month.length);
        if (month.indexOf('0') == 0)
            month = month.substr(1, month.length);
        var day = getdate.substr(getdate.lastIndexOf('-') + 1, getdate.length);
        if (day.indexOf('0') == 0)
            day = day.substr(1, day.length);
        flag = true;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && (day > 30))
        flag = false;
    if (month == 2) {
        if (LeapYear(year))
            if (day > 29 || day < 1) flag = false;
        else if (day > 28 || day < 1) flag = false;
    }
    else
        flag = true;

    if (!flag) {
        //alert("Please enter a valid date."); 
        return flag;
    }
}

function verifyDate(year, month, day) {
    var regex = new RegExp(/S/);
    if (regex.test(day) && regex.test(month) && regex.test(year)) {
        var regExp = new RegExp(/d/);
        if (!regExp.test(day) || !regExp.test(month) || !regExp.test(year))
            return ("The date fields contains non-number.");
        var tempDateValue = year + "/" + month + "/" + day;
        if (tempDateValue.length < 6 || tempDateValue.length > 10)
            return ("The length of date fields is invalid.");
        var tempDate = new Date(tempDateValue);
        if (isNaN(tempDate))
            return ("The scope of date fields is invalid.");
        if (parseInt(year) > 1900 && parseInt(year) < 2500 && ((tempDate.getUTCFullYear
()).toString() == year) && (tempDate.getMonth() == parseInt(month) - 1) && (tempDate.getDate()
== parseInt(day)))
            return ("The date fields is OK.");
        else
            return ("The date fields is invalid.");
    }
}

function acceptInteger(textField) {
    var e = 0;
    var w = 0;
    var quantity;
    if (textField.value != "") {
        quantity = parseInt(textField.value);
        if (quantity != 0 && !isNaN(parseInt(textField.value))) {
            textField.value = quantity;
        }
        else {
            alert("Please enter a valid number.");
            textField.value = "";
            textField.focus();
        }
    }
    /* other way */
    //textField.value = textField.value.replace(/[^\d]/g,'');		
}

function isInteger(num) {
    if (num == null || num.length == 0 || isNaN(num))
        return false;
    var reg = new RegExp("^(\\-|\\+)?(\\d)+$");
    return reg.test(num);
}

function isFloat(num) {
    var reg = new RegExp("^(-?\\d+)(\\.\\d+)?$");
    var flag;
    flag = reg.test(num);
    return flag;
}

function getInteger(str) {
    return str.replace(/[^\d]/g, '');
}

function acceptFloat(textField) {
    //var pattern = "^(-?\\d+)(\\.\\d+)?$"
    var reg = new RegExp("^(-?\\d+)(\\.\\d+)?$");
    var flag, i, str1, quantity;
    flag = reg.test(textField.value);
    if (!flag) {
        if (textField.value.indexOf(".") > 0) {
            str1 = textField.value;
            while (str1.indexOf(".") < str1.lastIndexOf(".")) {
                i = str1.lastIndexOf(".");
                str1 = str1.substr(0, i)
            }
            str1 = str1.replace(/[^\d^\.]/g, "");
            textField.value = str1;
        }
        else if (textField.value != "") {
            quantity = parseInt(textField.value);
            if (quantity != 0 && !isNaN(parseInt(textField.value))) {
                textField.value = quantity;
            }
            else {
                alert("Please enter a valid number.");
                textField.value = "";
                textField.focus();
            }
        }
    }
}

/*
function VerifyEmail(email)
{
var flag;
var pattern = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
//var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
flag = pattern.test(email);
if (flag)
{
//alert("Your email address is correct!");
return true;
}
else
　{
//alert("Please try again!");
return false;
}
}
*/

function VerifyEmail(email) {
    invalidChars = " /:,;"
    if (email == "") {	// cannot be empty
        //alert("Please enter your email address.");
        return false
    }
    for (i = 0; i < invalidChars.length; i++) {	// does it contain any invalid characters?
        badChar = invalidChars.charAt(i)
        if (email.indexOf(badChar, 0) > -1) {
            return false
        }
    }
    atPos = email.indexOf("@", 1)	// there must be one "@" symbol
    if (atPos == -1) {
        return false
    }
    if (email.indexOf("@", atPos + 1) != -1) {	// and only one "@" symbol
        return false
    }
    periodPos = email.indexOf(".", atPos)
    if (periodPos == -1) {			// and at least one "." after the "@"
        return false
    }
    if (periodPos + 3 > email.length) { // must be at least 2 characters after the "."
        return false
    }
    return true
}

function getTagId(tName) {
    tName = tName.replace(/(^[\s　]*)|([\s　]*$)/g, "");
    var tagid = 0;
    for (var ti = 0; ti < tName.length; ti++) {
        tagid += tName.charCodeAt(ti);
    }
    return tagid;
}

function urlEncode(str) {
    var i, temp, p, q;
    var result = "";
    str = str.replace(/(^[\s　]*)|([\s　]*$)/g, "");
    for (i = 0; i < str.length; i++) {
        temp = str.charCodeAt(i);
        if (temp >= 0x4e00) {
            execScript("ascCode=hex(asc(\"" + str.charAt(i) + "\"))", "vbscript");
            result += ascCode.replace(/(.{2})/g, "%$1");
        }
        else {
            result += escape(str.charAt(i));
        }
    }
    return result;
}

/*****************************************************************************/
// Function: validateForm(thisform)                                          
// Descript: This function performs form validation for required fields. 	 
// The required fields are indicated by the hidden field "_required". 
// The value is a list of the field ids plus the question number, 
// separated by comma. Note that here we use field ids so that we can 
// group fields have the different names but the same ids, for example,
// a group of checkboxes.
// Note: 1) The required fields don't allow using the runat and id properites.
//       2) For email field, its name must includes those words such as 'email' or 'e_mail' or 'e-mail' words.
//       3) For retype email field, its name must includes those words such as 'email' or 'e_mail' or 'e-mail' and 're-type' or 'retype'.
//       4) For captcha code field, its name must includes the word "captcha".
/*****************************************************************************/
function validateForm(thisform) {
    if (thisform._required != null) {
        if (trim(thisform._required.value).length != "") {
            var fieldnames = thisform._required.value.split(",");
            var errormsg = "The form can not be submitted. Please complete all required information.";
            var emailObj, fieldObj;
            for (m = 0; m < fieldnames.length; m++) {
                fieldname = trim(fieldnames[m]);
                //fieldObj = thisform.elements[fieldname];
                fieldObj = findElementByName(fieldname);
                if (fieldObj == undefined || fieldObj == null) {
                    alert("The required fields are defined incorrectly.");
                    return false;
                }
                if (fieldObj.length === undefined) {
                    if (trim(fieldObj.value).length == "") {
                        alert(errormsg);
                        fieldObj.focus();
                        return false;
                    }
                    fieldname = fieldname.toLowerCase();
                    if ((fieldname.indexOf("re-type") < 0 && fieldname.indexOf("retype") < 0 && fieldname.indexOf("confirm") < 0) &&
                        (fieldname.indexOf("email") > -1 || fieldname.indexOf("e-mail") > -1 || fieldname.indexOf("e_mail") > -1)) {
                        emailObj = fieldObj;
                        if (!verifyEmail(trim(fieldObj.value))) {
                            alert("Please enter a valid email address.");
                            fieldObj.focus();
                            return false;
                        }
                    }
                    //alert(fieldObj.name);
                    if ((fieldname.indexOf("re-type") > -1 || fieldname.indexOf("retype") > -1 || fieldname.indexOf("confirm") > -1) &&
                        (fieldname.indexOf("email") > -1 || fieldname.indexOf("e-mail") > -1 || fieldname.indexOf("e_mail") > -1)) {
                        //alert(fieldObj.value + "\n" + emailObj.value);
                        if (!verifyEmail(trim(fieldObj.value))) {
                            alert("Please enter a valid email address.");
                            fieldObj.focus();
                            return false;
                        }
                        else if (trim(fieldObj.value).toLowerCase() != trim(emailObj.value).toLowerCase()) {
                            alert("Your email address is not confirmed by the 2nd entry.");
                            fieldObj.focus();
                            return false;
                        }
                    }
                }
                else {
                    thischecked = -1
                    for (i = 0; i < fieldObj.length; i++) {
                        if (fieldObj[i].checked || (fieldObj[i].selected && fieldObj[i].value.length != "")) {
                            thischecked = i;
                        }
                    }
                    if (thischecked == -1) {
                        alert(errormsg);
                        return false;
                        fieldObj[0].focus;
                    }

                }
            }
        }
        return true;
    }
    return true;
}
//########################### validateForm END #########/////////////////////


function lockTextBox(name, status) {
    var x;
    x = document.getElementById(name);
    if (x != null) {
        if (status) x.value = "";
        x.disabled = status;
    }
}


function jumpForm(elementID) {
    if (elementID.length > 0)
        document.getElementById(elementID).focus();
    return;
}


//######### lockAll #########/////////////////////
//This function will disable all the fields except 
//the unlockfield and the fields for the submit button and ASP.NET field. 
//All disabled field will be cleared of any data.
//unlockfield: the field that will remain unlocked.
function lockAll(thisform, unlockfield) {
    var fieldname;
    for (n = 0; n < thisform.elements.length; n++) {
        fieldname = thisform.elements[n].name;
        if (fieldname != unlockfield && fieldname != "Button1" && fieldname != "__VIEWSTATE") {
            clearField(thisform.elements[n]);
            thisform.elements[n].disabled = true;
        }
    }
}
//######### lockAll #########/////////////////////


//######### unLockAll #########/////////////////////
//This function will unlock (enable) all the fields except 
//the lockfield and the fields for text next to a check box. 
//lockfield: the field that will remain locked.
function unLockAll(thisform, lockfield) {
    var fieldname;
    for (n = 0; n < thisform.elements.length; n++) {
        fieldname = thisform.elements[n].name;
        if (fieldname != lockfield) {
            thisform.elements[n].disabled = false;
        }
    }
}
//######### unLockAll #########/////////////////////


//######### lockSelected #########/////////////////////
//This function will change the "disabled" status of the field. 
//theform: form object
//fieldprefixstr: a list of field name prefixes separated by comma. 
//Note that "field_1" will match "field1_1", "field_11", "field_123", etc.
//lockstatus: "lock" - disable the fields; "unlock" - enable the fields.
function lockSelected(thisform, fieldprefixstr, lockstatus) {
    var fieldprefixarr = fieldprefixstr.split(",");
    for (m = 0; m < fieldprefixarr.length; m++) {
        fieldprefix = trim(fieldprefixarr[m]);
        for (n = 0; n < thisform.elements.length; n++) {
            fieldname = thisform.elements[n].name;
            if (fieldname.indexOf(fieldprefix) == 0) {
                if (lockstatus == "lock") {
                    clearField(thisform.elements[n]);
                    thisform.elements[n].disabled = true;
                }
                if (lockstatus == "unlock") {
                    if (fieldname.indexOf("othertext") == -1) {
                        thisform.elements[n].disabled = false;
                    }
                }
            }
        }
    }
}
//######### lockSelected #########/////////////////////


//######### clearSelected #########/////////////////////
//Will clear the value of multiple fields. 
//fieldprefixstr: a list of field prefixes that will be cleared
//excludefield: field to be excluded from clearing.
function clearSelected(thisform, fieldprefixstr, excludefield) {
    var fieldprefixarr = fieldprefixstr.split(",");
    for (m = 0; m < fieldprefixarr.length; m++) {
        fieldprefix = trim(fieldprefixarr[m]);
        for (n = 0; n < thisform.elements.length; n++) {
            fieldname = thisform.elements[n].name;
            if (fieldname.indexOf(fieldprefix) == 0 && fieldname != excludefield) {
                clearField(thisform.elements[n]);
                if (fieldname.indexOf("othertext") != -1) {
                    thisform.elements[n].disabled = true;
                }
            }
        }
    }
}


//######### clearField #########/////////////////////
function clearField(thisfield) {
    if (thisfield.type == "text") {
        thisfield.value = "";
    }
    if (thisfield.type == "textarea") {
        thisfield.value = "";
    }
    if (thisfield.type == "checkbox") {
        thisfield.checked = false;
    }
    if (thisfield.type == "radio") {
        thisfield.checked = false;
    }
}


function updateSize(fld_From, fld_To) {
    var from_elm = document.getElementById(fld_From);
    if (from_elm) {
        var to_elm = document.getElementById(fld_To);
        if (to_elm) to_elm.value = from_elm.value.length
    }
}

/******************************************************************************/
/* Search all elements by name (partial match) in whole page                    */
/******************************************************************************/
function getAllElementsByName(name) {

    var elements = new Array();

    if (document.all) {
        for (var index = 0; index < document.all.length; index++) {
            if (document.all.item(index).name != undefined && document.all.item(index).name.toLowerCase().indexOf(name.toLowerCase()) >= 0) {
                elements.push(document.all.item(index));
            }
        }
    }
    else {
        var allElements = document.getElementsByTagName("body")[0].getElementsByTagName("*");
        for (var i = 0; i < allElements.length; i++) {
            if (allElements[i] != null && allElements[i].name != undefined && allElements[i].name.toLowerCase().indexOf(name.toLowerCase()) >= 0) {
                elements.push(allElements[i]);
            }
        }
    }

    return elements;
}

function findElementByName(name) {
    var objs = getAllElementsByName(name)
    if (objs.length > 0) return objs[0];
    else return null;
}

/******************************************************************************/
/* Search all elements by id (partial match) in whole page                    */
/******************************************************************************/
function getAllElementsById(id) {

    var elements = new Array();

    if (document.all) {
        for (var index = 0; index < document.all.length; index++) {
            if (document.all.item(index).id != undefined && document.all.item(index).id.toLowerCase().indexOf(id.toLowerCase()) >= 0) {
                elements.push(document.all.item(index));
            }
        }
    }
    else {
        var allElements = document.getElementsByTagName("body")[0].getElementsByTagName("*");
        for (var i = 0; i < allElements.length; i++) {
            if (allElements[i] != null && allElements[i].id != undefined && allElements[i].id.toLowerCase().indexOf(id.toLowerCase()) >= 0) {
                elements.push(allElements[i]);
            }
        }
    }

    return elements;
}


function findElementById(id) {
    var objs = getAllElementsById(id)
    if (objs.length > 0) return objs[0];
    else return null;
}


function checkTextboxLength(obj, maxlength) {
    var textObj = document.getElementById(obj);
    var len = textObj.value.length;
    if (len > maxlength) {
        textObj.value = textObj.value.substring(0, maxlength);
    }
}

function removeArray(array, attachId) {
    var f = false;
    for (var i = 0, n = 0; i < array.length; i++) {
        if (array[i] != attachId) {
            array[n++] = array[i]
        } else
            f = true;
    }
    if (f == true)
        array.length -= 1;
}

function findArray(array, value) {
    var f = false;
    for (var i = 0, n = 0; i < array.length; i++) {
        if (array[i] == value) {
            f = true;
            break;
        }
    }
    return f;
}

Array.prototype.remove = function(obj) {
    return removeArray(this, obj);
};

Array.prototype.find = function(obj) {
    return findArray(this, obj);
};

function openBrWindow(theURL, winName, features) { //v2.0
    window.open(theURL, winName, features);
}

function openWinCenter(u, w, h, winName) {
    var l = (screen.width - w) / 2;
    var t = (screen.height - h) / 2;
    var s = 'width=' + w + ', height=' + h + ', top=' + t + ', left=' + l;
    s += ', toolbar=no, scrollbars=no, menubar=no, location=no, resizable=no';
    MM_openBrWindow(u, winName, s);
}

// browser  type  
var browserType = {
    IE: !!(window.attachEvent && !window.opera),
    Opera: !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
};

function isSelectCheckbox(chkcontainer) {
    var chkboxList, ischeck = false;
    chkboxList = document.getElementById(chkcontainer).getElementsByTagName("INPUT");

    if (chkboxList != undefined && chkboxList != null && chkboxList.length > 0) {
        for (i = 0; i < chkboxList.length; i++) {
            if (chkboxList[i].type == "checkbox") {
                if (chkboxList[i].checked) {
                    ischeck = true;
                    break;
                }
            }
        }
    }

    return ischeck;
}

/******GET QueryString ******/
function queryString(str) {
    var name, value, i;
    var num = str.indexOf("?")
    str = str.substr(num + 1);
    var arrtmp = str.split("&");
    for (i = 0; i < arrtmp.length; i++) {
        num = arrtmp[i].indexOf("=");
        if (num > 0) {
            name = arrtmp[i].substring(0, num);
            value = arrtmp[i].substr(num + 1);
            this[name] = value;
        }
    }
}

function getDateTimeNow() {
    var datetimeNow = new Date();
    var aDay = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
    var aMonth = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
    var fullYear = datetimeNow.getFullYear();
    var month = aMonth[datetimeNow.getMonth()];
    var day = aDay[datetimeNow.getDay()];
    var date = datetimeNow.getDate();

    return day + ", " + month + " " + date + ", " + fullYear;
}

//Check is Integer
function isNumber(oNum) {

    if (!oNum) return false;

    var strP = /^\d+(\.\d+)?$/;

    if (!strP.test(oNum)) return false;

    try {
        if (parseFloat(oNum) != oNum)
            return false;
    }

    catch (ex) {
        return false;
    }
    return true;
}

//Check is Integer above zero
function isNumberAboveZero(oNum) {

    if (isNumber(oNum)) {
        return parseFloat(oNum) > 0;
    }

    return false;
}

//Control keyboard input. Let quentity field only can input integer.
function regInput(obj, reg, Event) {
    var srcElem = event.srcElement;
    var oSel = document.selection.createRange()
    var srcRange = srcElem.createTextRange()
    oSel.setEndPoint("StartToStart", srcRange)
    var num = oSel.text + Event;
    event.returnValue = reg.test(num)
}


//Check Is blank
function CheckForm(obj) {
    if (obj.length == 0) {
        return false;
    }
    return true;
}

function f_KeyPress(obj,e) {
    var key = window.event ? e.keyCode : e.which;
    return regInput(obj, /^[1-9]{1}[\d]*$/, String.fromCharCode(key))
}
function f_Onpaste(obj,e) {

    return regInput(obj, /^[1-9]{1}[\d]*$/, window.clipboardData.getData('Text'))
}
function f_Ondrop(obj,e) {

    return regInput(obj, /^[1-9]{1}[\d]*$/, event.dataTransfer.getData('Text'))
}


/*****************************************************************************/
/* The functioon panel_FireDefaultButton just be used for the controls       */
/* which have the onkeypress event.                                          */
/* Usage: onkeypress="javascript:return panel_FireDefaultButton(event,       */
/*            'Submit_Button')">                                             */
/*****************************************************************************/
function panel_FireDefaultButton(event, target) {
    if (event.keyCode == 13 && !(event.srcElement && (event.srcElement.tagName.toLowerCase() == "textarea"))) {
        var defaultButton = document.getElementById(target);
        if (defaultButton && typeof (defaultButton.click) != "undefined") {
            defaultButton.click();
            event.cancelBubble = true;
            if (event.stopPropagation) event.stopPropagation();
            return false;
        }
    }
    return true;

}


function verifyEmail(email) {
    invalidChars = " /:,;"
    if (email == "") {	// cannot be empty
        //alert("Please enter your email address.");
        return false
    }
    for (i = 0; i < invalidChars.length; i++) {	// does it contain any invalid characters?
        badChar = invalidChars.charAt(i)
        if (email.indexOf(badChar, 0) > -1) {
            return false
        }
    }
    atPos = email.indexOf("@", 1)	// there must be one "@" symbol
    if (atPos == -1) {
        return false
    }
    if (email.indexOf("@", atPos + 1) != -1) {	// and only one "@" symbol
        return false
    }
    periodPos = email.indexOf(".", atPos)
    if (periodPos == -1) {			// and at least one "." after the "@"
        return false
    }
    if (periodPos + 3 > email.length) { // must be at least 2 characters after the "."
        return false
    }
    return true
}

/*
* function:cancel  Bubble
*/
function stopBubble(e){
    if(e && e.stopPropagation){
        //w3c
        e.stopPropagation();
    }else{
        //IE 
        window.event.cancelBubble = true;
    }
}


function SiteSearchClick(sender)
{
     //    var localurl = window.location.href.toLocaleLowerCase(); ;
     //    var desurl = "/shopping/promo.aspx";

     //    if(localurl.indexOf(desurl) ==-1)
     //    {
     //        desurl = "/shopping/products.aspx";
    //    }
    var desurl = "/shopping/products.aspx";
    
    var objTxtSearch = document.forms["amtform"].q;
    if (objTxtSearch != null) 
    {
        if (objTxtSearch.value != "" && objTxtSearch.className == "MainSearchInput2") {
            desurl = desurl + "?key=" + document.forms["amtform"].q.value;
            window.location.href = desurl;
        }
       
    }
    return false;
    //stopBubble(sender);           
}

/*******************************************************************************************************/
/* Usage: Add <div id="divUserEditContent" onkeypress="return fire_UserSubmitButton(event,this);">     */
/*     at the beginning of the area which will trigger the default ENTER event. Add </div> at the end  */
/*     of the area which will trigger the default ENTER event.                                         */
/*******************************************************************************************************/
function fire_UserSubmitButton(event, obj) {
    var objList = obj.getElementsByTagName("input");
    if (objList != null) {
        var counts = objList.length;
        var objSubmit;
        for (var i = 0; i < counts; i++) {
            if (objList[i].type == "submit") {
                return panel_FireDefaultButton(event, objList[i].id);
                break;
            }
        }
    }
    return true;
}

