// JavaScript Document

function isLeapYear(year)
{
   if(((year % 4)==0) && ((year % 100)!=0) || ((year % 400) == 0))
   {
       return true;
   }
   else
   {
       return false;
   }
}

function getMonth(monYear)
{
	var mon = monYear.substring(0, 2);
	return mon;
}

function getYear(monYear)
{
	var year = monYear.substring(2, 7);
	return year;
}

function buildMonYear(mon, year)
{
	var monYear = bufferNum(mon) + ' ' + year;
	return monYear;
}

function returnMonthShortName(month)
{
	switch (month)
	{
		case 1:
			return "Jan";
		case 2:
			return "Feb";
		case 3:
			return "Mar";
		case 4:
			return "Apr";
		case 5:
			return "May";
		case 6:
			return "Jun";
		case 7:
			return "Jul";
		case 8:
			return "Aug";
		case 9:
			return "Sep";
		case 10:
			return "Oct";
		case 11:
			return "Nov";
		case 12:
			return "Dec";
		default:
			return "Jan";
	}
}

function validateDate (year, month, day)
{

  if (month == 2)
  {
    //check if leap year
    if (isLeapYear (year))
    {
       if (day > 29)
       {
          return "FEB29";
       }     
    }
    else
    {
       if (day > 28)
       {
          return "FEB28";
       }
    }
    return true;
  }
  
  if (month == 4 || month == 6 || month == 9 || month == 11)
  {
     if (day > 30)
     {
     	return "MONTH30" 
     }
     return true;
  }
  return true;
}

function travelDateInFuture (year, month, day)
{
   var postDate = "PASTDATE";	
   year++; month++; day++;
   year--; month--; day--;
   
   var thisDate = new Date ();
   
   thisDay = thisDate.getDate();
   thisMonth = thisDate.getMonth() + 1;
   thisYear = thisDate.getFullYear();
   
   if (thisYear > year)
   {
      return postDate;
   }
   else
   {
	  if (thisYear == year)
   	  {
      	 if (thisMonth > month)
     	 { 
         	return postDate;
      	 }
         else if (thisMonth == month)
      	 {  
        	if (thisDay > day)
         	{
            	return postDate;
         	} 
      	 }
      }	
   }
   return true;
}

function totalDays (year, month, day)
{
    year++; month++; day++;  //strange way to cast but it works...
    year--; month--; day--;
    
    var thisDate = new Date ();
    
    thisDay = thisDate.getDate();
    thisMonth = thisDate.getMonth() + 1;
    thisYear = thisDate.getFullYear();

    var totalNumOfDays = 0;
    var travelDays = 0;
    var dayOfYear = 0;
    
    //make sure the given date is valid
    var validDate = validateDate (year, month, day);
    if (validDate != true)
    {
    	return validDate;
    }
    
    //make sure this date is in the future
    var badDate = travelDateInFuture (year, month, day);
    if (badDate == false)
    {
    	return badDate;    
    }

    if (isLeapYear(year))
    {
       retMonthArray = new Array (0,31,60,91,121,152,182,213,244,274,305,335);
    }
    else
    {
       retMonthArray = new Array (0,31,59,90,120,151,181,212,243,273,304,334);
    }
   
    if (isLeapYear(thisYear))
    {
       currMonthArray = new Array (0,31,60,91,121,152,182,213,244,274,305,335);
       MAX_DAYS_IN_CURR_YEAR = 366;
    }
    else
    {
       currMonthArray = new Array (0,31,59,90,120,151,181,212,243,273,304,334);
       MAX_DAYS_IN_CURR_YEAR = 365;
    }

    dayOfYear = currMonthArray[thisMonth];  //this will give us total number of days up to the beginning of the current month
    dayOfYear = dayOfYear + thisDay;        //...and this, to the current day 

    if (thisYear < year)
    {
	    travelDays = retMonthArray[month];
   	    travelDays = travelDays + day;
   	    totalNumOfDays = ((MAX_DAYS_IN_CURR_YEAR - dayOfYear) + travelDays);
    }
    else
    {
        travelDays = currMonthArray[month];
    	travelDays = travelDays + day;
        totalNumOfDays = travelDays - dayOfYear;	
    }
    
    return totalNumOfDays;
}

function DateOrder (depYear, depMonth, depDay, retYear, retMonth, retDay)
{
	var orderError = "InvalidORDER";
    //strange way of casting, but it works best..
    retYear++; retYear--;
    retMonth++; retMonth--;
    retDay++; retDay--;
    
    depYear++; depMonth++; depDay++;
    depYear--; depMonth--; depDay--;
    
    var daysInAdvance;
	var curr_date = new Date();

    curr_day = curr_date.getDate();
    curr_month = curr_date.getMonth() + 1;
    curr_year = curr_date.getFullYear();

    // make sure we have valid departure dates...    
    var badDateOne = validateDate (depYear, depMonth, depDay);
    
    if (badDateOne != true)
    {
    	return badDateOne;
    }
    
    // validate return dates...
    var badDateTwo = validateDate (retYear, retMonth, retDay);
    
    if (badDateTwo != true)
    {
    	return badDateTwo;
    }

    //make sure the travel dates are in the future...
    var postDateOne = travelDateInFuture (depYear, depMonth, depDay);
    if (postDateOne != true)
    {
       return postDateOne;
    }

    var postDateTwo = travelDateInFuture (retYear, retMonth, retDay);  
    if (postDateTwo != true)
    {
       return postDateTwo;
    }

    //make sure return date is after departure date
    if (retYear < depYear)
    {
       return orderError;
    }
    else
    {
       	if (retYear == depYear)
       	{
       		if (retMonth < depMonth)
       		{
    	   		return orderError;
       		}
       		else 
		    {
        	    if (retMonth == depMonth)
           		{
	    	   		if (retDay < depDay)
    	       		{	
    		   			return orderError;
           	   		}
           	   		else if (retDay == depDay)
           	   		{
           	   			return "sameDATE";
           	   		}
           		}		
       		}
       	}	
    }
    return true;
}


function AddDays (num_days) {

	var d = new Date ();
	var TodayDay = d.getDate();
	var TodayMonth =d.getMonth() + 1;
	var TodayYear =d.getFullYear();
	var Month_Array = new Array;
	var ChangeDate = TodayDay + num_days;
	var NewDay = 0;
	var NewMonth = 0;
	var NewYear = 0;
	
	CheckLeap = isLeapYear (TodayYear);
		
	
	
	if (TodayMonth == 2) {
		if (CheckLeap == true) {
			if (ChangeDate > 29) {
				NewDay = ChangeDate - 29;
				NewMonth = 1;
			} else {
				NewDay = ChangeDate;
				NewMonth = 0;
			}
		} else {
				
			if (ChangeDate > 28) {
				NewDay = ChangeDate - 28;
				NewMonth = 1;
			} else {
				NewDay = ChangeDate;
				NewMonth = 0;
			}
				
		}
		
		
	} else if (( TodayMonth == 4)|| ( TodayMonth== 6) || ( TodayMonth== 9) || ( TodayMonth== 11)) {
		if (ChangeDate > 30) {
			NewDay = ChangeDate - 30;
			NewMonth = 1;
			NewYear = 0;
		} else {
			NewDay = ChangeDate;
			NewMonth = 0;
			NewYear = 0;
		}			
	} else if (( TodayMonth == 1) || ( TodayMonth == 3) || ( TodayMonth == 5) || ( TodayMonth == 7) || ( TodayMonth == 8)|| ( TodayMonth== 10)) {
		if (ChangeDate > 31) {
			NewDay = ChangeDate - 31;
			NewMonth = 1;
			NewYear = 0;
		} else {
			NewDay = ChangeDate;
			NewMonth = 0;
			NewYear = 0;
		}
	
	} else if (TodayMonth == 12) {
		if (ChangeDate > 31) {
			NewDay = ChangeDate - 31;
			NewMonth = 1;
			NewYear = 1;
		} else {
			NewDay = ChangeDate;
			NewMonth = 0;
			NewYear = 0;
		}
		
	}
	
	var Date_Array = new Array();
	
	Date_Array[0] = NewDay;
	
	if ((TodayMonth == 12) && (NewMonth == 1)) {
		Date_Array[1] = 1;	
	} else {
		Date_Array[1] = TodayMonth + NewMonth;	
	}
	Date_Array[2] = NewYear;		
	
	//alert ("Day: " + Date_Array[0] + "\nMonth: " + Date_Array[1] + "\nYear: " + Date_Array[2]);
	return Date_Array;
}