
//------------------------------------------------------------- Date Section ------------------------------------------------------------//
function getLastDateOfMonth(tmonth,tyear,thai) {
	if (thai!=null && thai.toUpperCase()=="T") {
		tyear-=543;
	} 
    if ((tmonth==1) || (tmonth==3) || (tmonth==5) || (tmonth==7) || 
		(tmonth==8) || (tmonth==10) || (tmonth==12)) {
		tday=31
	} else if ((tmonth==4)||(tmonth==6)||(tmonth==9)||(tmonth==11)) {
	    tday=30
	} else if ((((tyear % 100)==0) && ((tyear % 400)==0)) || (((tyear % 100)!=0) && ((tyear % 4)==0))) {
		tday = 29
	} else {
		tday = 28;
	}
   return tday;
}

function ltrim(str) {
	if (str!=null && str.length>0) {
       while (str.substring(0,1)==" ") {
		   str=str.substring(1,str.length); 
       }
	}
	return str;
}

function rtrim(str) {
	if (str!=null && str.length>0) {
       while (str.substring(str.length-1,str.length)==" ") {
		   str=str.substring(0,str.length-1); 
       }
	}
	return str;
}

function trim(str) {
   str=ltrim(str);
   str=rtrim(str);
   return str;
}

//****************************************************************************************
//   for use in formatDate function
//
function isNblank(c) {
	if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
	return true;
}

function y2k(number) 
{ 
	return (number < 1000) ? number + 1900 : number; 
}

function isNumeric(s) {
	if (s == null) { return flase;}
	for(var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if ( !isNblank(c) ) {
		if ((c < '0') || (c > '9') ) 
			return false;
		}
	}
	return true;
}

function isBE(year) 
{ 
 	if (year > 2473 && year < 2572) 
		return  true;
	else return false;
}

// Parameter myDate is String.
//           sep (separator) is String.
//           lang T = Thai , E = English
// Day, Month Must have 2 characters.
// Return true , If it is a correct date.
function isValidDate (myDate,sep) 
{   	
	if (myDate.length == 8) {
   	var date  = myDate.substring(0,2);
   	var month = myDate.substring(2,4);
   	var year;
		if (isBE(myDate.substring(4,8))) {
   		year  = myDate.substring(4,8) -543;
		} else {
   		year  = myDate.substring(4,8);
		}
   	var test = new Date(year,month-1,date);
		if (year == y2k(test.getYear()) && (month-1 == test.getMonth()) && (date == test.getDate())) {
     		return true;
   	}	else {
     		return false;
   	}
	} else if (myDate.length == 10) {
   	if (myDate.substring(2,3) == sep && myDate.substring(5,6) == sep) {
     	var date  = myDate.substring(0,2);
     	var month = myDate.substring(3,5);
     	var year;
		if (isBE(myDate.substring(6,10))) {
   		year  = myDate.substring(6,10) -543;
		} else {
   		year  = myDate.substring(6,10);
		}
     	var test = new Date(year,month-1,date);

     	if (year == y2k(test.getYear()) && (month-1 == test.getMonth()) && (date == test.getDate())) {
       	return true;
     	}	else {
       	return false;
     	}
    } else {
	   	return false;
    }
	} else {
   	return false;
 	}
}

function strMonths(monthNo,lang) 
{ 
	var strMonthsEng = new Array();
		 strMonthsEng[0]  = "January";
	 	 strMonthsEng[1]  = "February";
		 strMonthsEng[2]  = "March";
		 strMonthsEng[3]  = "April";
		 strMonthsEng[4]  = "May";
		 strMonthsEng[5]  = "June";
		 strMonthsEng[6]  = "July";
		 strMonthsEng[7]  = "August";
		 strMonthsEng[8]  = "September";
		 strMonthsEng[9]  = "October";
		 strMonthsEng[10] = "November";
		 strMonthsEng[11] = "December";
	var strMonthsTh = new Array();
		 strMonthsTh[0]  = "??????";
	 	 strMonthsTh[1]  = "??????????";
		 strMonthsTh[2]  = "??????";
		 strMonthsTh[3]  = "??????";
		 strMonthsTh[4]  = "???????";
		 strMonthsTh[5]  = "???????";
		 strMonthsTh[6]  = "???????";
		 strMonthsTh[7]  = "??????";
		 strMonthsTh[8]  = "???????";
		 strMonthsTh[9]  = "??????";
		 strMonthsTh[10] = "?????????";
		 strMonthsTh[11] = "???????";
	var retMonth = "";
	if (lang == "T") {
		retMonth = strMonthsTh[monthNo];
	} else if (lang == "E") {
				retMonth = strMonthsEng[monthNo];
			 }
	return retMonth; 
}

//**************************************************************************************
//        Name: formatDate
//              
// Description: Formats a date using a format string. 
//              d or dd represents the day of the month (eg 1 or 01)
//              m or mm represents the month as a number (eg 1 or 01)
//              mmm or mmmm represents the month as a string (eg Jan or January)
//              yy or yyyy represents the year (eg 99 or 1999)
//              w or ww represents the day of the week (eg Mon or Monday)
//              example: formatDate(myDate, "mm/dd/yy") might look like 01/01/2000
//  Parameters: strDate - required - the date string to display (Format dd/mm/yyyy)
//          	 strFormatString - required - a format string
//	    			 lang - required - Thai or English Language
//              
//**************************************************************************************
function formatDate(strDate, strFormatString, lang) {
 var strDayEng = new Array();
	 strDayEng[0]  = "Sunday";
	 strDayEng[1]  = "Monday";
	 strDayEng[2]  = "Tuesday";
	 strDayEng[3]  = "Wednesday";
	 strDayEng[4]  = "Thursday";
	 strDayEng[5]  = "Friday";
	 strDayEng[6]  = "Saturday";
 var strDayTh = new Array();
	 strDayTh[0]  = "??????????";
	 strDayTh[1]  = "?????????";
	 strDayTh[2]  = "????????";
	 strDayTh[3]  = "??????";
	 strDayTh[4]  = "???????????";
	 strDayTh[5]  = "????????";
	 strDayTh[6]  = "????????";
 var strDyTh = new Array();
	 strDyTh[0]  = "??.";
	 strDyTh[1]  = "?.";
	 strDyTh[2]  = "?.";
	 strDyTh[3]  = "?.";
	 strDyTh[4]  = "??.";
	 strDyTh[5]  = "?.";
	 strDyTh[6]  = "?.";
 var strMnTh = new Array();
	 strMnTh[0]  = "?.?.";
 	 strMnTh[1]  = "?.?.";
	 strMnTh[2]  = "??.?.";
	 strMnTh[3]  = "??.?.";
	 strMnTh[4]  = "?.?.";
	 strMnTh[5]  = "??.?.";
	 strMnTh[6]  = "?.?.";
	 strMnTh[7]  = "?.?.";
	 strMnTh[8]  = "?.?.";
	 strMnTh[9]  = "?.?.";
	 strMnTh[10] = "?.?.";
	 strMnTh[11] = "?.?.";

 var year;
 var strFullDate;
 if (strDate.length == 8) {
     if (!isNumeric(strDate.substring(4))){
	return "";
     }
     if (isBE(strDate.substring(4))) {
	 year = strDate.substring(4) - 543;
     } else year = strDate.substring(4);
     if (!isValidDate(strDate.substring(0,4)+year,"")){
	return "";
     }
     strFullDate = new Date(year,strDate.substring(2,4) - 1,strDate.substring(0,2));
} else if (strDate.length == 10) {
     if (!isNumeric(strDate.substring(6,10))){
	return "";
     }
     if (isBE(strDate.substring(6,10))) {
	 year = strDate.substring(6,10) - 543;
     } else year = strDate.substring(6,10);
     if (!isValidDate(strDate.substring(0,6)+year,strDate.substring(2,3))){
	return "";
     }
     strFullDate = new Date(year,strDate.substring(3,5) - 1,strDate.substring(0,2));
  } else {return "";}
 var strValue_d    = strFullDate.getDate();
 var strValue_dd   = (strValue_d < 10) ? '0' + strValue_d : strValue_d;
 var strValue_m    = strFullDate.getMonth() + 1;
 var strValue_mm   = (strValue_m < 10) ? '0' + strValue_m : strValue_m;
 var strValue_mmmm = "";
 var strValue_mmm  = "";
 var strValue_yyyy = strFullDate.getFullYear();
 if (lang == "T") {
 	strValue_yyyy = strValue_yyyy + 543;
 }
 strValue_yyyy = strValue_yyyy + "";
 var strValue_yy   = strValue_yyyy.substr(2,6);
 var strValue_ww	 = "";
 var strValue_w	 = "";

 if (lang == "T") {
 	strValue_mmmm = strMonths(strFullDate.getMonth(),lang);
 	strValue_mmm  = strMnTh[strFullDate.getMonth()];
 	strValue_ww   = strDayTh[strFullDate.getDay()];
 	strValue_w    = strDyTh[strFullDate.getDay()];
 } else {
	strValue_mmmm = strMonths(strFullDate.getMonth(),lang); 	
	strValue_mmm  = strValue_mmmm.substr(0,3);
	strValue_ww   = strDayEng[strFullDate.getDay()];
 	strValue_w    = strValue_ww.substr(0,3);
 }

 if (strFormatString.indexOf("dd") > -1) {
  strFormatString = strFormatString.replace("dd", "strValue_dd");
 }
 else {
  if (strFormatString.indexOf("d") > -1) {
   strFormatString = strFormatString.replace("d", "strValue_d");
  }
 }

 if (strFormatString.indexOf("mmmm") > -1) {
  strFormatString = strFormatString.replace("mmmm", "strValue_mmmm");
 }
 else {
  if (strFormatString.indexOf("mmm") > -1) {
   strFormatString = strFormatString.replace("mmm", "strValue_mmm");
  }
  else {
   if (strFormatString.indexOf("mm") > -1) {
    strFormatString = strFormatString.replace("mm", "strValue_mm");
   }
   else {
    if (strFormatString.indexOf("m") > -1) {
     strFormatString = strFormatString.replace("m", "strValue_m");
    }
   }
  }
 }

 if (strFormatString.indexOf("yyyy") > -1) {
  strFormatString = strFormatString.replace("yyyy", "strValue_yyyy");
 }
 else {
  if (strFormatString.indexOf("yy") > -1) {
   strFormatString = strFormatString.replace("yy", "strValue_yy");
  }
 }

 if (strFormatString.indexOf("ww") > -1) {
  strFormatString = strFormatString.replace("ww", "strValue_ww");
 }
 else {
  if (strFormatString.indexOf("w") > -1) {
   strFormatString = strFormatString.replace("w", "strValue_w");
  }
 }

 strFormatString = strFormatString.replace("strValue_dd", strValue_dd);
 strFormatString = strFormatString.replace("strValue_d", strValue_d);
 strFormatString = strFormatString.replace("strValue_mmmm", strValue_mmmm);
 strFormatString = strFormatString.replace("strValue_mmm", strValue_mmm);
 strFormatString = strFormatString.replace("strValue_mm", strValue_mm);
 strFormatString = strFormatString.replace("strValue_m", strValue_m);
 strFormatString = strFormatString.replace("strValue_yyyy", strValue_yyyy);
 strFormatString = strFormatString.replace("strValue_yy", strValue_yy);
 strFormatString = strFormatString.replace("strValue_ww", strValue_ww);
 strFormatString = strFormatString.replace("strValue_w", strValue_w);

 return strFormatString;
}

function checkNull(val,rep) {
	if (val==null)	{
       val=rep;
	} else {
	   val=trim(val);
  	   if (val.length==0)	{
           val=rep;
	   }
	} 
	return val;
}

function formatDate2Date(str,format,lang) {
   startDay=format.indexOf("d");
   startMonth=format.indexOf("m");
   startYear=format.indexOf("y");

   var data = new Array(3);
   for (i=0;i<3;i++)  {
	     data[i]="";
   }
   var pointer=0;

   for (i=0;i<str.length;i++) {
		 ch=str.substring(i,i+1);
		 if (isNumeric(ch)) {
            data[pointer]+=ch;
		 } else {
			 pointer++;
		 }
   }

   if (startDay<startMonth && startDay<startYear) {
	   day=data[0];
   } else if ((startDay<startMonth || startDay<startYear) && (startDay>startMonth || startDay>startYear)) {
	   day=data[1]; 
   } else if (startDay>startMonth && startDay>startYear) {
	   day=data[2];
   } else {
	   day=""; 
   }

   if (startMonth<startDay && startMonth<startYear) {
	   month=data[0];
   } else if ((startMonth<startDay || startMonth<startYear) && (startMonth>startDay || startMonth>startYear)) {
	   month=data[1]; 
   } else if (startMonth>startDay && startDay>startYear) {
	   month=data[2];
   } else {
	   month=""; 
   }

   if (startYear<startDay && startYear<startMonth) {
	   year=data[0];
   } else if ((startYear<startDay || startYear<startMonth) && (startYear>startDay || startYear>startMonth)) {
	   year=data[1]; 
   } else if (startYear>startDay && startYear>startMonth) {
	   year=data[2];
   } else {
	   year=""; 
   }

   if (day!=null && day.length==1) {
      day="0"+day;
   }
   if (month!=null && month.length==1) {
      month="0"+month;
   }
   if (year!=null && year.length<4 && year.length>0) {
      if (lang=="T") {
		  year="25"+year; 
      } else {
		  temp="19"+year;
		  if (parseInt(temp)<1980) {
			  year="20"+year;
		  } else {
			  year="19"+year;
		  }
	  }
   }

   return day+month+year;
}

function DateBox(name , values , format , lang , param) {  
   name=checkNull(name,"date");
   format=checkNull(format,"dd/mm/yyyy");
   values=checkNull(values,"");
   lang=checkNull(lang,"E");
   param=checkNull(param,"");
   tmp = '<input type="text" name="' + name + '" size="10' + '" value="' + values + '"';
   tmp+=' maxlength="8" object="DateBox" dateFormat="' + format + '" '  + param;
   tmp+=' onfocus="javascript:this.value=formatDate2Date(this.value,\''+format+'\',\''+lang+'\');" ';
   tmp+=' onblur="javascript:this.value=formatDate(this.value,\'' + format + '\',\''+lang+'\');" ';
   tmp+=">";
   document.writeln(tmp);
}


function calendarBox(name , values , format , lang , param) {  
   name=checkNull(name,"date");
   format=checkNull(format,"dd/mm/yyyy");
   values=checkNull(values,"");
   lang=checkNull(lang,"E");
   param=checkNull(param,"");
   tmp = '<input type="text"  name="' + name + '" size="10' + '" value="' + values + '" lang="'+lang+'" ';
   tmp+=' maxlength="8" object="DateBox" dateFormat="' + format + '" '  + param;
   if (param.toUpperCase().indexOf("FIXED")>=0) {
	   tmp+=" readonly onclick=\"javascript:popUpCalendar(this,this,'"+format+"','"+lang+"');\" ";
   } else {
       tmp+=' onfocus="javascript:this.value=formatDate2Date(this.value,\''+format+'\',\''+lang+'\');" ';
       tmp+=' onblur="javascript:this.value=formatDate(this.value,\'' + format + '\',\''+lang+'\');" ';
   }
   tmp+=">&nbsp;";
   if (param.toUpperCase().indexOf("DISABLED")<0) {
      tmp+="<a href=\"javascript:popUpCalendar(document.forms[0]."+name;
      tmp+=",document.forms[0]."+name+",'"+format+"','"+lang+"');\">";
   }
   tmp+="<img src='../../jsscript/images/cal.gif' border=0>";
   if (param.toUpperCase().indexOf(" disabled ")<0) {
       tmp+="</a>";
   }
   document.writeln(tmp);
}

function verifyDate(obj) {
	pass=true;
   data=formatDate2Date(obj.value,obj.dateFormat,obj.lang);
   if (data.length>=8) {
      day=data.substring(0,2);
      month=data.substring(2,4);
      year=data.substring(4,8);
      lastDay=getLastDateOfMonth(month,year,obj.lang);
	  if ((day>lastDay || day<1) || (month<1 || month>12)) {
		  pass=false;
		 alert(date_error[0]);
	  }
   } else {
	   pass=false;
	   alert(date_error[0]);
   }
   return pass;
}
