/* ------------------------------- Validate Date ----------------------------- */
function parseToDate(dtStr){
    var stringDate;
    dtStr = Trim(dtStr);
    var pos1=dtStr.indexOf(dtCh)
    var pos2=dtStr.indexOf(dtCh,pos1+1)
    var strDay=dtStr.substring(0,pos1)
    var strMonth=dtStr.substring(pos1+1,pos2)
    var strYear=dtStr.substring(pos2+1)
    if(strYear.length == 1){
        strYear="200"+strYear
    }
    if(strYear.length == 2){
        strYear="20"+strYear
    }
    if(strDay.length == 1){
        strDay="0"+strDay
    }
    
    if(strMonth.length == 1){
        strMonth="0"+strMonth
    }
    stringDate = strDay+"/"+strMonth+"/"+strYear;
    return stringDate;
}


function isDate(dtStr){
    minYearCPR = 1900;
    maxYearCPR = 2100;
    dtStr = Trim(dtStr);
    var daysInMonth = DaysArray(12)
    var pos1=dtStr.indexOf(dtCh)
    var pos2=dtStr.indexOf(dtCh,pos1+1)
    var strDay=dtStr.substring(0,pos1)
    var strMonth=dtStr.substring(pos1+1,pos2)
    var strYear=dtStr.substring(pos2+1)
    
    strYr=strYear
    
    if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
        if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
            for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1)
                    strYr=strYr.substring(1)
            }
            month=parseInt(strMonth);
            day=parseInt(strDay);
            year=parseInt(strYr);
            
            if (pos1==-1 || pos2==-1){
                return false
            }
	if (strMonth.length<1 || month<1 || month>12){
            return false
        }
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
            return false
        }
	if (year==0 || year<minYearCPR || year>maxYearCPR){
            return false
	}
        
        if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){                
                return false
	}
    return true
}

function Trim(TRIM_VALUE) {
    if(TRIM_VALUE != null){
        if (TRIM_VALUE.length < 1) {
            return"";
        }  
        TRIM_VALUE = RTrim(TRIM_VALUE);
        TRIM_VALUE = LTrim(TRIM_VALUE);
        if (TRIM_VALUE == "") {
            return "";
        }
        else {
            return TRIM_VALUE;
        }
    } else {
        return "";
    }
    
}

/* ---------------------------- Get Date Object from String ---------------------------- */
function getDateObject(dateString,dateSeperator)
{
	//This function return a date object after accepting 
	//a date string ans dateseparator as arguments
	var curValue=dateString;
	var sepChar=dateSeperator;
	var curPos=0;
	var cDate,cMonth,cYear;

	//extract day portion
	curPos=dateString.indexOf(sepChar);
	cDate=dateString.substring(0,curPos);
	
	//extract month portion				
	endPos=dateString.indexOf(sepChar,curPos+1);			
	cMonth=dateString.substring(curPos+1,endPos);

	//extract year portion				
	curPos=endPos;
	endPos=curPos+5;			
	cYear=curValue.substring(curPos+1,endPos);
	
	//Create Date Object
	dtObject=new Date(cYear,cMonth,cDate);	
	return dtObject;
}

/* ---------------------- Return Current Date in String ----------------------- */
function getTodayDateString(){
    var todayDdate = new Date();
    m = parseInt(todayDdate.getMonth())+1;
    month = "" + m;
    day = "" + todayDdate.getDate();
    year = "" + todayDdate.getYear();
    todayString = formateDateVal(day) + "/" + formateDateVal(month) + "/" + formateDateVal(year);
    return todayString;
}


function formateDateVal(val){
	if(val.length <= 1){
    	val = "0" + val
        	return val;
        }
        return val;        
    }

/* -------------------------------- Char Validations ------------------------------------ */    
function isNum(parm) {
    var numb = '0123456789';
    return isValid(parm,numb);
}

function isLower(parm) {
    var lwr = 'abcdefghijklmnopqrstuvwxyz';
    return isValid(parm,lwr);
}
function isUpper(parm) {
    var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    return isValid(parm,upr);
}
function isAlpha(parm) {
    var lwr = 'abcdefghijklmnopqrstuvwxyz';
    var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    return isValid(parm,lwr+upr);
}
function isAlphanum(parm) {
    var numb = '0123456789';
    var lwr = 'abcdefghijklmnopqrstuvwxyz';
    var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    return isValid(parm,lwr+upr+numb);
}


function isValid(parm,val) {
  if (parm == "") return false;
  for (i=0; i<parm.length; i++) {
    if (val.indexOf(parm.charAt(i),0) == -1) return false;
  }
  return true;
}

//To trim white spaces in right side of a field
function RTrim(VALUE) {
    var w_space = String.fromCharCode(32);
    var v_length = VALUE.length;
    var strTemp = "";
    if (v_length < 0) {
        return"";
    }
    var iTemp = v_length - 1;

    while (iTemp > -1) {
        if (VALUE.charAt(iTemp) == w_space) {
        }
        else {
            strTemp = VALUE.substring(0, iTemp + 1);
            break;
        }
        iTemp = iTemp - 1;
    }
    return strTemp;

}

//To trim white spaces in left side of a field
function LTrim(VALUE) {
    var w_space = String.fromCharCode(32);
    if (v_length < 1) {
        return"";
    }
    var v_length = VALUE.length;
    var strTemp = "";

    var iTemp = 0;

    while (iTemp < v_length) {
        if (VALUE.charAt(iTemp) == w_space) {
        }
        else {
            strTemp = VALUE.substring(iTemp, v_length);
            break;
        }
        iTemp = iTemp + 1;
    }
    return strTemp;
}

/**************************** Validate isNumeric ****************************/
function isNumeric(value){
        for(i=0; i<value.length; i++){
            if(!(value.charAt(i) >= 0 && value.charAt(i) <= 9))
                return false;
        }
        return true;
    }
    
function validateMaintainDates(startDate,endDate){
        var msg = new Array();
        var i =0;
        var isStartDate = false;
        var isEndDate = false;
        var isStartDateNotEmpty =false;
        var isEndDateNotEmpty = false;
        if(startDate != '' && startDate.trim().length != 0){
            startDate = parseToDate(startDate);
            isStartDate = isDate(startDate);
            isStartDateNotEmpty = true;
        }
        if(endDate != '' && endDate.trim().length != 0){
            endDate = parseToDate(endDate);
            isEndDate = isDate(endDate);
            isEndDateNotEmpty = true;
        }
        if(isStartDateNotEmpty && (!isStartDate)){
            showValidationMsg('Start Date is Not Valid');
            return false;
        }
        if(isEndDateNotEmpty && (!isEndDate)){
           showValidationMsg('End Date is Not Valid');
           return false;
        }
        if(isStartDateNotEmpty && isEndDateNotEmpty){
                if(isStartDate){
                    if(isEndDate){
                                if(getDateObject(startDate,"/") < getDateObject(endDate,"/")){                                
                                    // do if need something
                                } else {
                                    showValidationMsg('Start date should less than end date.');
                                    return false;
                                }
                                todayDate = getTodayDateString();
                                todayObj = getDateObject(todayDate,"/");
                                endDateObj = getDateObject(endDate,"/");
                                if(todayObj < endDateObj){
                                    // alert("given date is less than today");
                                } else if(todayObj > endDateObj){
                                    showValidationMsg('End date can not be less than current date.');
                                    return false;
                                } 
                    }
                }
        }
        return true;
}
