// function remove right and right sides spaces of given string
// Created By: Naeem Charolia
// Created On: 02/14/2007
function Trim(value) {
    return value.replace(/^\s*|\s*$/g, "");
}

// function remove right side spaces of given string
// Created By: Naeem Charolia
// Created On: 02/14/2007
function RightTrim(value) {
    var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}

// function remove left side spaces of given string
// Created By: Naeem Charolia
// Created On: 02/14/2007
function LeftTrim(value) 
{
    var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}

// function validate whether a given value is valid number
// Created By: Naeem Charolia
// Created On: 02/14/2007
function IsNumeric(value) 
{
    return !isNaN(value);
}

// function validate whether a given value is valid number
//      and also validate the empty box
// Created By: Naeem Charolia
// Created On: 02/14/2007
function IsNumeric(value, canBeEmpty) 
{
    if (!canBeEmpty && Trim(value) == '')
        return false;
    
    return !isNaN(value);
}


// function validates the given emailAddress
// Created By: Naeem Charolia
// Created On: 02/14/2007
function IsEmail(emailAddress, canBeEmpty) {
    
    if (emailAddress == '' && canBeEmpty) {
        return true;
    }
    else {
        
        if (Trim(emailAddress).indexOf(' ') > 0) {
            return false;
        }
        if (emailAddress.indexOf('@') > 0) {
            emailAddress = emailAddress.substring(emailAddress.indexOf('@')+1);
            
            if (emailAddress.indexOf('@') > -1 || emailAddress.indexOf('.') <= 0) {
                return false;
            } 
            else 
            {
                emailAddress = emailAddress.substring(emailAddress.indexOf('.')+1);
                
                if (emailAddress.length == 0)
                    return false;
                else
                    return true;
            }
        }
        else 
        {
            return false;
        }
    }
    
    return true;
}

// function validates the given dateString is a valid date
// Created By: Naeem Charolia
// Created On: 03/15/2007
// Parameter: 01/01/2007
function IsDate(dateString) {
    var datePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = dateString.match(datePattern); // is the format ok?
    
    if (matchArray == null) {
        //alert("Please enter your birth date as dd/mm/yyyy. Your current selection reads: " + dateString);
        return false;
    }
    
    var day = matchArray[1]; // p@rse date into variables
    var month = matchArray[3];
    var year = matchArray[5];
    
    if (month < 1 || month > 12) { // check month range
        //alert("Month must be between 1 and 12.");
        return false;
    }
    if (day < 1 || day > 31) {
        //alert("Day must be between 1 and 31.");
        return false;
    }
    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
        //alert("Month "+month+" doesn`t have 31 days!");
        return false;
    }
    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            //alert("February " + year + " doesn`t have " + day + " days!");
            return false;
        }
    }
    
    return true;
}

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;
}

