var dtCh= "/";
var currDate = new Date();
var minYear="";
var maxYear="";
var objToSetValue;

//function for hide div
function hideCal()
{
    var obj=document.activeElement;
    var ___divCal = document.getElementById("___divCal");
    var parObj
            
    if(obj.id=="___divCal")
    {
        ___divCal.focus();
        return;
    }
    while(true)
    {
        try{
                parObj = obj.parentElement;
                if(parObj.id==null)
                {
                    ___divCal.style.visibility='hidden'
                    ___divCal.style.display='none'
                    break;
                }
                if(parObj.id=="___divCal")
                {
                    ___divCal.style.visibility='visible';
                    ___divCal.style.display='block';
                    break;
                }
                obj=parObj;
          }
          catch(e)
          {
                ___divCal.style.visibility='hidden';
                ___divCal.style.display='none';
                break;
         }
    }
    window.event.cancelBubble = true
    window.event.returnValue = false
}


function showCalendar(obj)
{
    //alert("showCalendar");
    var mOldDate=obj.value
    var arr=new Array();
    var dd=""
    var mm=""
    var yy=""
    //alert(mOldDate);
    //MM/DD/YYYY
    if(mOldDate.length > 0)
    {
      var errorText = isDate(mOldDate);
      if(errorText.length > 0)
      {
        alert(errorText);
        return false;
      }  
      arr=mOldDate.split("/")
    } 
    try
    {
        if(arr.length >0)
            {
                mm=arr[0];
                dd=arr[1];
                yy=arr[2];
            }
    }
    catch(e)
    {}
    
    var ___divCal = document.getElementById("___divCal");
    objToSetValue=obj;
    obj.parentNode.appendChild(___divCal);
    ___divCal.style.visibility="visible";
    ___divCal.style.display="block";
    ___divCal.focus();
   
    if(dd.length>0)
    {
        createCalendarDate(dd,mm,yy);
    }
    else
    {
        createCalendar();
    }
}

function setHoverClass(td)
{
    td.className="hoverDate";
}
function setNormalClass(td)
{
    td.className="normalDate";
}
  
function populateYears(mYear)//,prevYearCount,nextYearCount)
{
    if(mYear<200)
        mYear = mYear + 1900;

    var obj=document.getElementById("___selYears");
    var cnt=0
    obj.options.length=1;
    cnt=0
    
    for(var i=100;i>0;i--)
    {
        obj.options[obj.options.length-1].text=mYear-i;
        obj.options[obj.options.length-1].value=mYear-i;
        obj.options.length=obj.options.length+1
        cnt=cnt+1
    }
    for(var i=0;i<100;i++)
    {
        obj.options[obj.options.length-1].text=mYear+i;
        obj.options[obj.options.length-1].value=mYear+i;
        obj.options.length=obj.options.length+1
    }
    //selecting the selected value.
    for(var i=0;i<obj.options.length;i++)
    {
      if(obj.options[i].value==mYear)
      {
        obj.selectedIndex=i;
        break;
      }
    }
    
    obj.options.length = obj.options.length-1;
}
        
function getDaysInMonth(mOldDate)
{
    var mDate = mOldDate;
    var thisMonth=mDate.getMonth();
    var retMonth=0;
    
    for (var i=0;i<=31;i++)
    {
        mDate.setDate(mDate.getDate()+1);
	if(mDate.getMonth()!= thisMonth)
        {
            mDate.setDate(mDate.getDate()-1)
 	    retMonth= mDate.getDate()
            return retMonth;
	}
    }
}
function setComboValue(objCmb,mValue)
{
    for(var i=0;i<objCmb.options.length;i++)
    {
        if(objCmb.options[i].value==mValue)
        {
            objCmb.selectedIndex=i
	}
    }
}

function setDateFormate(strDate,Fromtype,Totype,delimiter)
{
    var FormatedDate="";
    var retDate="";
    var arr=new Array();
    var dd=""
    var mm=""
    var yy=""
    if(strDate.length > 0)
      arr=strDate.split(delimiter)
     
    try
    {
	if(arr.length >0)
        {
        //M/DD/yyyy to MM/DD/YYYY
            if((Fromtype.toUpperCase()=="M/D/YYYY") && (Totype.toUpperCase()=="MM/DD/YYYY"))
            {
              mm=arr[0]
              dd=arr[1]
              yy=arr[2]
              if (arr[0].length == 1) 
                  mm="0"+mm;
              if(arr[1].length == 1)
                  dd="0"+dd;
               retDate=mm+"/"+dd+"/"+yy;
            }
      }
    }
    catch(e){}
    return retDate;
}
	
function setCalendarByDate()
{
    var objMonth=document.getElementById("___selMonths").selectedIndex;
    var objYear=document.getElementById("___selYears").value;
    var startDate = new Date();
    startDate = currDate;
    var firstDate = new Date();
    
    firstDate = currDate;
    startDate.setYear(parseInt(objYear))
    startDate.setMonth(parseInt(objMonth))
    firstDate = startDate;
    populateYears(startDate.getYear())
    
    var mMonth = startDate.getMonth();
    var mDate = startDate.getDate();
    var mYear = startDate.getYear();
    var lastDate = getDaysInMonth(firstDate)
    firstDate.setDate(1)
    var mWeekDayStart = firstDate.getDay()+1
    setCalendar(mWeekDayStart,lastDate,mDate)
    setComboValue(document.getElementById("___selYears"),mYear)
}

function createCalendarDate(dd,mm,yy)
{
    var startDate = new Date();
    var firstDate = new Date()
    
    startDate.setDate(1)
    startDate.setYear(yy)
    startDate.setMonth(mm-1)
    startDate.setDate(dd)
    firstDate=startDate;
    //alert("abcd startDate in createcalender = "+startDate);
    populateYears(startDate.getYear())
    var mMonth = startDate.getMonth();
    var mDate = startDate.getDate();
    var mYear = startDate.getYear();
    var lastDate = getDaysInMonth(firstDate)
    // alert(lastDate);
    firstDate.setDate(1)
    var mWeekDayStart = firstDate.getDay()+1
    setCalendar(mWeekDayStart,lastDate,mDate)
    document.getElementById("___selMonths").selectedIndex=mMonth
    setComboValue(document.getElementById("___selYears"),mYear)
}
	

function getMonthNo(mName)
{
    if(mName.toUpperCase()=="JAN")
            return 0;
    else if(mName.toUpperCase()=="FEB")
            return 1;
    else if(mName.toUpperCase()=="MAR")
            return 2;
    else if(mName.toUpperCase()=="APR")
            return 3;
    else if(mName.toUpperCase()=="MAY")
            return 4;
    else if(mName.toUpperCase()=="JUN")
            return 5;
    else if(mName.toUpperCase()=="JUL")
            return 6;
    else if(mName.toUpperCase()=="AUG")
            return 7;
    else if(mName.toUpperCase()=="SEP")
            return 8;
    else if(mName.toUpperCase()=="OCT")
            return 9;
    else if(mName.toUpperCase()=="NOV")
            return 10;
    else if(mName.toUpperCase()=="DEC")
            return 11;
}

function createCalendar()
{
    var strcurrDate=document.getElementById("currDate");
    var mm="";
    var dd="";
    var yy=""; 
    if((strcurrDate != null) && (((strcurrDate.value).length) > 0))
      {
        var arr=new Array();
        arr = (strcurrDate.value).split("/");
        if(arr.length >0)
        {
          mm=arr[0];
          dd=arr[1];
          yy=arr[2];
          this.currDate = new Date();
          currDate.setDate(1);
          currDate.setMonth(parseInt(mm)-1);
          currDate.setDate(parseInt(dd));
          currDate.setYear(yy);
        }
      }
    minYear=parseInt(currDate.getYear())-100;
    maxYear=parseInt(currDate.getYear())+100;
    var startDate = new Date();
    //startDate = currDate;
    var firstDate = new Date()
    populateYears(startDate.getYear())
    var mMonth = startDate.getMonth();
    var mDate = startDate.getDate();
    var mYear = startDate.getYear();
    var lastDate = getDaysInMonth(firstDate)
    firstDate.setDate(1)
    var mWeekDayStart = firstDate.getDay()+1
    setCalendar(mWeekDayStart,lastDate,mDate)
    document.getElementById("___selMonths").selectedIndex=mMonth
    setComboValue(document.getElementById("___selYears"),mYear)
}

function setCalendar(start,cnt,curDate)
{
    var obj = null;
    var label=1;
    for(var i=1;i<=42;i++)
    {
        obj = document.getElementById("___t"+i);
        obj.innerHTML="";
        obj.className="normalDate"
    }
    for(var i=start;i<=cnt+start-1;i++)
    {
        obj = document.getElementById("___t"+i);
        obj.innerHTML=label;
        if(label==curDate)
        {
            obj.className="todaysDate"
        }
	label+=1;
    }
}

function displayCurrantDate()
{
  //for server side date
  var strcurrDate=document.getElementById("currDate");
  var mm="";
  var dd="";
  var yy=""; 
  if((strcurrDate != null) && (((strcurrDate.value).length) > 0))
    {
      var arr=new Array();
      arr = (strcurrDate.value).split("/");
      if(arr.length >0)
      {
        mm=arr[0];
        dd=arr[1];
        yy=arr[2];
        this.currDate = new Date();
        currDate.setDate(1);
        currDate.setMonth(parseInt(mm)-1);
        currDate.setDate(parseInt(dd));
        currDate.setYear(yy);
        
      }
    }
   minYear=parseInt(currDate.getYear())-100;
   maxYear=parseInt(currDate.getYear())+100;
   var EffectiveDate=document.getElementById("EffectiveDate").value;
   if (EffectiveDate.length == 0) 
   {
     //MM/DD/YYYY
     document.getElementById("EffectiveDate").value=setDateFormate(((currDate.getMonth()+1)+'/'+currDate.getDate()+'/'+currDate.getYear()),"M/D/YYYY","MM/DD/YYYY","/");
   }
}

function dateValidationForGTCurrDate(objDate,delimiter)
{
  var InvalidDate=false;
  if (objDate!=null) 
  {
      if ((objDate.value).length > 0) 
      {
        var currDate=new Date();
        var arr=new Array();
        var mm="";
        var dd="";
        var yy="";
        arr=(objDate.value).split(delimiter);
        if (arr.length > 0) 
        {
            mm=arr[0];
            dd=arr[1];
            yy=arr[2];
        }
        if ((parseInt(dd) > currDate.getDate()) || ((parseInt(mm)-1) > currDate.getMonth()) || (parseInt(yy) > currDate.getYear()))
        {
            InvalidDate=true;
        }
          
      }
      
  }
  return InvalidDate;
}

function dateValidationForLSCurrDate(objDate)
{
  if (objDate!=null) 
  {
       if ((objDate.value).length > 0) 
      {
        var currDate= new Date();
        var mm="";
        var dd="";
        var yy="";
        var arr=new Array();
        var currDay =currDate.getDate();
        var currYear=currDate.getFullYear();
        var currMonth=currDate.getMonth()+1;
        arr=(objDate.value).split(dtCh);

        if (arr.length > 0) 
        {
            mm=arr[0];
            dd=arr[1];
            yy=arr[2];
        }
        if (currYear>yy)
        {
            return false;
        }
        else if(currYear==yy)
        {
            if(currMonth>mm)
            {
              return false;
            }
            else if(currMonth==mm)
            {
              if(currDay>dd)
              {
                  return false;
              }
            }
        }
          
      }
     
  }
  return true;
}


//MM/DD/YYY  validation
/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year


function isInteger(s)
{
    var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag)
{
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for(i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year)
{
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) 
{
    for (var i = 1; i <= n; i++)
    {
        this[i] = 31
	if (i==4 || i==6 || i==9 || i==11)
        {
            this[i] = 30
        }
	if (i==2)
        {
            this[i] = 29
        }
   } 
   return this
}

function isDate(dtStr)
{
    var daysInMonth = DaysArray(12)
    var pos1=dtStr.indexOf(dtCh)
    var pos2=dtStr.indexOf(dtCh,pos1+1)
    var strMonth=dtStr.substring(0,pos1)
    var strDay=dtStr.substring(pos1+1,pos2)
    var strYear=dtStr.substring(pos2+1)
    var errorText="";
    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) || (pos1 != 2 || pos2 != 5))
    {
	errorText= errorText + "The date format should be : mm/dd/yyyy";
    }
    else if(dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
    {
        errorText=errorText +"Please enter a valid date"
    }
    else if (strMonth.length<1 || month<1 || month>12)
    {
        errorText=errorText + "Please enter a valid month";
    }
    else if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
    {
        errorText =errorText + "Please enter a valid day"
    }
    else if (strYear.length != 4 || year==0 )
    {
        errorText = errorText + "Please enter a valid 4 digit year";// between "+minYear+" and "+maxYear;
    }
  return errorText;
}

function funValidateDate(objtxtDate)
{
    var dt=document.getElementById(objtxtDate)
    if((trimString(dt.value)).length>0)
    {
        var DateFormatError=isDate(dt.value);
        if (DateFormatError.length>0)
        {
            alert(DateFormatError); 
            dt.focus()
            return false
        }
    }
}

function setDateValue(td)
{
    if(td.innerHTML != "")
    {
        //MM/DD/yyyy
        var ___divCal = document.getElementById("___divCal");
        objToSetValue.value=setDateFormate(((getMonthNo(document.getElementById("___selMonths").value)+1)+'/'+td.innerHTML+'/'+document.getElementById("___selYears").value),"M/D/YYYY","MM/DD/YYYY","/");___divCal.style.visibility='hidden';
        if(objToSetValue.name=='effectiveDate')
        {
            var limitFlag = dateValidationForLSCurrDate(objToSetValue)
            if(limitFlag==false)
            {
                alert("Date can not be prior to Today's Date.");
                objToSetValue.value="";
                return false
            }
        }
    }
}
