//function returns years difference between date2(mm2,dd2,yyyy2) -- current date, and date 1 (mm1,dd1,yyyy1)--  birth date   
function getAgefromDOB(mm1,dd1,yyyy1,mm2,dd2,yyyy2){
   var mm_1 = Number(mm1);
   var dd_1 = Number(dd1);
   var year_1 = Number(yyyy1);
   var mm_2 = Number(mm2);
   var dd_2 = Number(dd2);
   var year_2 = Number(yyyy2);
   var age = year_2 - year_1;
   if (mm_2 < mm_1)
       age = age -1;
   else if (mm_2 == mm_1){
         if(dd_2 < dd_1)
            age = age -1;
	   }
	   //alert(age)
        return age;
		}
		
//function returns years difference between date1(mm1,dd1,yyyy1), and date2(mm2,dd2,yyyy2); returns negative number if date1 is less then date2.		
function yearsDiff(mm1,dd1,yyyy1,mm2,dd2,yyyy2){
   var mm_1 = Number(mm1);
   var dd_1 = Number(dd1);
   var year_1 = Number(yyyy1);
   var mm_2 = Number(mm2);
   var dd_2 = Number(dd2);
   var year_2 = Number(yyyy2);
   var years_diff = year_1 - year_2;
   
   if(years_diff >=0){
      if (mm_1 < mm_2) years_diff = years_diff -1;
      else if (mm_1 == mm_2){
         if(dd_1 < dd_2) years_diff = years_diff -1;
          }
	   }
	 else {
	   if (mm1 >  mm2) years_diff = years_diff + 1;
	   else if (mm_1 == mm_2){
	      if (dd1 > dd2) years_diff = years_diff + 1;
	   }
	 }  
        return years_diff;
 }	
		
		
//function returns months difference between date1(mm1,dd1,yyyy2) and date 2(mm2,dd2,yyyy2); return negative number if date1 is less then date2 

function monthsDiff(mm1,dd1,yyyy1,mm2,dd2,yyyy2) {
   var mm_1 = Number(mm1);
   var dd_1 = Number(dd1);
   var year_1 = Number(yyyy1);
   var mm_2 = Number(mm2);
   var dd_2 = Number(dd2);
   var year_2 = Number(yyyy2);
   mm_to_yyyy = (year_1-year_2)*12;
   if (mm_to_yyyy != 0) {
      if (mm_1 >= mm_2) months_diff = mm_to_yyyy +(mm_1 - mm_2);
	   else months_diff = mm_to_yyyy - (mm_2 - mm_1);
	    if ( mm_to_yyyy > 0 && dd_1 < dd_2) months_diff = months_diff -1;
		else if (mm_to_yyyy < 0 && dd_1 > dd_2) months_diff = months_diff +1;
   }
   else {
        months_diff = mm_1 - mm_2;
        if (months_diff > 0 && dd_1 < dd_2) months_diff = months_diff -1;
		else if (months_diff < 0 && dd_1 > dd_2) months_diff = months_diff +1;
   }
   return months_diff;
 }
	
//function returns days difference between date 1 and date 2: date string format is mm/dd/yyyy
 function datesDaysDiff_Str(date1,date2) {
        var date_1_MM = Number(date1.substring(0,2))-1;
	  	var date_1_DD = Number(date1.substring(3,5));
	  	var date_1_YY = Number(date1.substring(6,10));
		var date_object_1 = new Date(date_1_YY, date_1_MM, date_1_DD);
		var date_2_MM = Number(date2.substring(0,2))-1;
		var date_2_DD = Number(date2.substring(3,5));
	  	var date_2_YY = Number(date2.substring(6,10));	
		var date_object_2 = new Date(date_2_YY, date_2_MM, date_2_DD);
		var oneDay = 1000 * 60 * 60 * 24;
		var days_diff = Math.round((date_object_1.getTime()- date_object_2.getTime())/oneDay);
        
        return days_diff;
 }
 function datesDaysDiff(mm1,dd1,yy1,mm2,dd2,yy2) {
        var date_1_MM = Number(mm1)-1;
	  	var date_1_DD = Number(dd1);
	  	var date_1_YY = Number(yy1);
		var date_object_1 = new Date(date_1_YY, date_1_MM, date_1_DD);
		var date_2_MM = Number(mm2)-1;
		var date_2_DD = Number(dd2);
	  	var date_2_YY = Number(yy2);	
		var date_object_2 = new Date(date_2_YY, date_2_MM, date_2_DD);
		var oneDay = 1000 * 60 * 60 * 24;
		var days_diff = Math.round((date_object_1.getTime()- date_object_2.getTime())/oneDay);
         
        return days_diff;
 }
/*function checks date format*/
  function dateFormat(date_str) {
        
    if (date_str.length >10 && date_str.length < 8)
       return false;
	var f_pos = date_str.indexOf("/");
	var sub_str = date_str.substring(f_pos+1,date_str.length); 
    var s_pos = sub_str.indexOf("/");
	
	if (f_pos == 0) return false;
    if (s_pos == 0) return false;
	
	var dtMM = date_str.substring(0,f_pos); 
    var dtDD = sub_str.substring(0,s_pos); 
    var dtYYYY = sub_str.substring(s_pos+1,sub_str.length); 
	
	if (dtMM.length > 2 || isNaN(dtMM)) return false;
	if (dtDD.length > 2 ||isNaN(dtDD)) return false;
	if (dtYYYY.length !=4 || isNaN(dtYYYY)) return false;
	if (!checkDayMonthYear(dtMM,dtDD,dtYYYY)) return false;
	return true
  }
/* function returns data part found in date string mm/dd/yyyy to m,d,yyyy -- has to be used with well formatted data strings*/
    function convertDtStr(date_str,date_part){
	   var f_pos = date_str.indexOf("/");
	   var sub_str = date_str.substring(f_pos+1,date_str.length); 
       var s_pos = sub_str.indexOf("/");
	   var dtMM = date_str.substring(0,f_pos);
       var dtDD = sub_str.substring(0,s_pos);
       var dtYYYY = sub_str.substring(s_pos+1,sub_str.length);
	   if (date_part == 'mm') return dtMM;
	   if (date_part == 'dd') return dtDD;
	   if (date_part == 'yy') return dtYYYY;
 }
/* function checks day-month-year combination*/

  function checkDayMonthYear(month,day,year) {
   if (Number(month) > 12 || Number(month) < 1) return false; 
   if (Number(year) < 1) return false;
   if (Number(day) > setMonthRange(year,month) || Number(day) < 1) return false;
   
   return true  
  }
  
 // function returns the max amount of days in the month for any particular year 
  function setMonthRange(year,month){
		 var max_days;
		   if (month==1||month==3||month==5||month==7||
		       month==8||month==10||month==12)
		       max_days = 31;
		   else if (month==4||month==6||month==9||month==11)
		        max_days = 30;
			else {
			   if (year % 4 > 0) max_days = 28;
			      else if (year % 100 == 0 && year % 400 >0) max_days = 28;
		          else max_days = 29;
				 }
			   return max_days;
			 } 
			 
			 
	//function fix the date format (m/d/yy; mm/d/y, etc; by adding 0 to match the date mask mm/dd/yyyy, returns date string; function does not fix the date string if there are less than 2 '/' delimiters

	
	function convertDateFormat(dateStr) {
	  if (dateStr.indexOf('/') == 0)
	     return dateStr;
	  else {
	    
	    dateStrArr = dateStr.split('/');
		 if (dateStrArr.length < 3)
		    return dateStr;
			else {
			 var mm = dateStrArr[0];
			 if (mm.length < 2) mm = "0" + mm;
			 var dd = dateStrArr[1];
			 if (dd.length < 2) dd = "0" + dd;
			 var yyyy = dateStrArr[2];
			 if (yyyy.length == 1) yyyy = '200' + yyyy;
			 if (yyyy.length == 2) yyyy = '20' + yyyy;
			 var fixedStr =  mm + '/' + dd + '/' + yyyy;
			 return fixedStr;
			}
	      }
	}
//function takes date string 'mm/dd/yyyy', or 'm/d/yyyy' and returns JS date object
	function createDate(dateStr){
	 dt =  convertDateFormat(dateStr);
	 if (!dateFormat(dt)) return null;
	 else {
	     dtMM = Number(dt.substring(0,2));
		 dtMM = dtMM - 1;
	  	 dtDD = Number(dt.substring(3,5));
	  	 dtYY = Number(dt.substring(6,10));
		 return new Date(dtYY, dtMM, dtDD);
	 }
	}
