var nowVerify = false;
try {
  if (_sysDate == undefined) {
	var _sysDate = new Date();
  }
} catch (ex) {
	var _sysDate = new Date();
}

try {
  if (_sysDateTime == undefined) {
	var _sysDateTime = new Date();
  }
} catch (ex) {
	var _sysDateTime = new Date();
}

var _oneSec = 1000;
var _oneMin = _oneSec*60;
var _oneHour = _oneMin*60;
var _oneDay = _oneHour*24;

function delay(delayTime) {
	now = new Date();
	endRun = now.getTime()+delayTime;
	i=0;
	do {
		now = new Date();
	} while(now.getTime() < endRun);
}

function doAlert(message,focusObject) {
	if (typeof iAlert == "undefined") {
		focusObject.focus();
		alert(message);
	} else {
		iAlert(message,focusObject);
	}
}

function clearVerify() {
	nowVerify = false;
}

function clearVerifyState() {
	delay(10);
	clearVerify();
	delay(10);
	//setTimeout("clearVerify();", 100);
}

function ShowTime(ShowEl,startTime,status) {
	var el = document.getElementById(ShowEl);
	var usesTime = new Date();
	usesTime++;
	usesTime=usesTime-startTime;

	var xTime = new Date(usesTime);
	var xHour = xTime.getUTCHours();
	var xMin = xTime.getUTCMinutes();
	var xSec = xTime.getUTCSeconds();
	var xMSec = xTime.getUTCMilliseconds();

	xHour = (xHour < 10)?"0"+xHour:xHour;
	xMin = (xMin < 10)?"0"+xMin:xMin;
	xSec = (xSec < 10)?"0"+xSec:xSec;
	//xMSec = (xMSec < 100)?"0"+xMSec:xMSec;


	el.innerHTML = xHour+":"+xMin+":"+xSec;//+"'"+(xMSec+"'").substring(0,2);
}

function stopWatch(showEl) {
	this.StartTime = null;
	this.timer = null;
	this.showElement=showEl.id;
	this.showTime = ShowTime;
	this.start = function () {
		this.StartTime = new Date();
		this.StartTime++;
		this.timer=setInterval("ShowTime('"+showEl.id+"',"+this.StartTime+",1 )",1000);
	}

	this.stop = function () {
		if (this.timer != null) clearInterval(this.timer);
		showEl.innerHTML = "00:00:00";
	}
}

function error_format(dateText) {
	return "รูปแบบวันที่ "+dateText+" ไม่ถูกต้อง (วว/ดด/ปปปป)";
}

function error_value(dateText) {
	return "วันที่ "+dateText+" ไม่ถูกต้อง";
}

function strToDate(dateText) {
	var dateEl = dateText.split("/");
	if (dateEl.length == 3 ){
		var vDate = parseInt(dateEl[0],10);
		var vMonth = parseInt(dateEl[1],10)-1;
		var vYear = parseInt(dateEl[2],10);
		if (vYear < 80) vYear = 2500+vYear;
		if (vYear > 2400) vYear = vYear-543;
		var xDate = new Date(vYear,vMonth,vDate);
		return xDate;
	}
	return 0;
}

function strToDatetime(dateText) {
	var dateTimeEl = dateText.split(" ");
	var dateEl = dateTimeEl[0].split("/");
	if (dateTimeEl.length > 1) var timeEl = dateTimeEl[1].split(":");
		else var timeEl = "00:00:00".split(":");

	if ((dateEl.length == 3) && (timeEl.length > 1)){
		var vDate = parseInt(dateEl[0],10);
		var vMonth = parseInt(dateEl[1],10)-1;
		var vYear = parseInt(dateEl[2],10);
		if (vYear < 80) vYear = 2500+vYear;
		if (vYear > 2400) vYear = vYear-543;
		var vHour = parseInt(timeEl[0],10);
		var vMin = parseInt(timeEl[1],10);
		if (timeEl.length > 2) var vSec = parseInt(timeEl[2],10);
			else vSec = 0;
		var xDate = new Date(vYear,vMonth,vDate,vHour,vMin,vSec);
		return xDate;
	}
	return new Date(0);
}

// alert(strToDatetime('22/06/2549 22:33') < (new Date()));

function dateToStr(date) {
	var iDate = date.getDate();
	var iMonth = date.getMonth()+1;
	var vDate = (iDate < 10)?"0"+iDate:iDate+"";
	var vMonth = (iMonth < 10)?"0"+iMonth:iMonth+"";
	var vYear = date.getYear()+543;
	return vDate+"/"+vMonth+"/"+vYear;
}

function timeToHM(xTime) {
	var xHour = xTime.getHours();
	var xMin = xTime.getMinutes();

	xHour = (xHour < 10)?"0"+xHour:xHour;
	xMin = (xMin < 10)?"0"+xMin:xMin;

	return xHour+":"+xMin;
}

function etot(dateStr) {
	var dateTimeEl = dateStr.split(' ');
	var dateEl = dateTimeEl[0].split('/');
	var totDate = "";
	if (dateEl.length == 3 ){
		var vYear = parseInt(dateEl[2],10);
		if (vYear < 2400) vYear = vYear+543;
		totDate = dateEl[0]+"/"+dateEl[1]+"/"+vYear;
		if (dateTimeEl.length > 1 ) {
		  for (var i=1; i< dateTimeEl.length; i++) {
			totDate+=" "+dateTimeEl[i];
		  }
		}
	}
	return totDate;
}

function timeToHMS(xTime) {
	var xHour = xTime.getHours();
	var xMin = xTime.getMinutes();
	var xSec = xTime.getSeconds();

	xHour = (xHour < 10)?"0"+xHour:xHour;
	xMin = (xMin < 10)?"0"+xMin:xMin;
	xSec = (xSec < 10)?"0"+xSec:xSec;

	return xHour+":"+xMin+":"+xSec;
}

function incDateSec(date,i) {
	if (i==undefined) i = 1;
	var xDate = date;
		xDate ++;  // change Date Object to interger
		xDate = xDate+(i*_oneSec);
	return new Date(xDate); // return new Date Object by xDate value
}

function incDateMin(date,i) {
	if (i==undefined) i = 1;
	var xDate = date;
		xDate ++;  // change Date Object to interger
		xDate = xDate+(i*_oneMin);
	return new Date(xDate);
}

function incDateHour(date,i) {
	if (i==undefined) i = 1;
	var xDate = date;
		xDate ++;  // change Date Object to interger
		xDate = xDate+(i*_oneHour);
	return new Date(xDate);
}

function incDate(date,i) {
	if (i==undefined) i = 1;
	var xDate = date;
		xDate ++;  // change Date Object to interger
		xDate = xDate+(i*_oneDay);
	return new Date(xDate);
}

function trimDate(date) {
	var xDate = new Date(date)
	xDate.setHours(0,0,0,0);
	return new Date(xDate);
}
function isAfterSysdate(dateText){
	var xDate = strToDate(dateText);
	//alert (xDate+"\r\r"+sysDate);
	return xDate > _sysDate;
}

function isBeforeSysdate(dateText){
	var xDate = strToDate(dateText);
	//alert (xDate+"\r\r"+sysDate);
	return xDate < _sysDate;
}

function reFormatDate(dateText) {
	var dateEl = dateText.split("/");
	if (dateEl.length == 1 ){ //if 010145
		var vDate = dateText.substring(0,2);
		var vMonth = dateText.substring(2,4);
		var vYear = dateText.substring(4,dateText.length);
		if (vYear.length == 2) vYear = "25"+vYear;
		var retDate = vDate+"/"+vMonth+"/"+vYear;
	} else {
		var iDate = parseInt(dateEl[0],10);
		var iMonth = parseInt(dateEl[1],10);
		var vDate = (iDate < 10)?"0"+iDate:iDate+"";
		var vMonth = (iMonth < 10)?"0"+iMonth:iMonth+"";
		var vYear = dateEl[2];
		if (vYear.length == 2) vYear = "25"+vYear;
		var retDate = vDate+"/"+vMonth+"/"+vYear;
	}
	return retDate;
}

function verifyDateValue(dateText){
	var dateEl = dateText.split("/");
	var iDate = parseInt(dateEl[0],10);
	var iMonth = parseInt(dateEl[1],10);
	var iYear = parseInt(dateEl[2],10)-543;

	var vDate = (iDate < 10)?"0"+iDate:iDate+"";
	var vMonth = (iMonth < 10)?"0"+iMonth:iMonth+"";
	var vYear = iYear+"";

	if (iDate < 29) {
		return true;
	} else if ((iDate < 30)&&((iMonth == 2)&&(iYear%4==0))){
		return true;
	} else if ((iDate < 31)&&("04,06,09,11".indexOf(vMonth) >= 0)) {
		return true;
	} else if ((iDate <= 31)&&("01,03,05,07,08,10,12".indexOf(vMonth) >= 0)){
		return true;
	}  else {return false;}
}

function verifyDate(dateField){
	var x=/(\s+)/g; //all space reg
	dateField.value = (dateField.value).replace(x,"");
	var dateText = dateField.value;
	if (dateText == ""||dateText== undefined) {
		clearVerifyState();
		return true ;
	}

	if (nowVerify) {return; } else {nowVerify = true;}

	var dteREG = /^([1-9]|0[1-9]|[12][0-9]|3[01])\/([1-9]|0[1-9]|1[012])\/(|24|25|26)\d\d$/;
	var dteREGNSP = /^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])(|24|25|26)\d\d$/;

	if (!dteREG.test(dateText)&&!dteREGNSP.test(dateText)){
		doAlert(error_format(dateText),dateField);
		clearVerifyState();
		return false ;
	}

	dateText = reFormatDate(dateText);

	if (!verifyDateValue(dateText)) {
		doAlert(error_value(dateText),dateField);
		clearVerifyState();
		return false ;
	}

	dateField.value = reFormatDate(dateText);

	clearVerifyState();

	return true;
}

function verifyDateAF(dateField,errMessage){
	if (!verifyDate(dateField)) return;
	dateText = dateField.value;
	if (dateText == undefined || dateText == "") {
		return true;
	}
	if (nowVerify) {return; } else {nowVerify = true;}
	if (isAfterSysdate(dateText)) {		if (errMessage == undefined || errMessage == "") {
			doAlert(error_value(dateText)+" (อยู่หลังจากวันที่ปัจจุบัน)",dateField);
		} else {
			errMsg = errMessage.replace('%0',dateField.value);
			doAlert(errMsg,dateField);
		}
	}
	clearVerifyState();
	return true;
}

function verifyDateBF(dateField,errMessage){
	if (!verifyDate(dateField)) return ;
	var dateText = dateField.value;
	if (dateText == undefined || dateText == "") {
		return true;
	}
	if (nowVerify) {return; } else {nowVerify = true;}
	if (isBeforeSysdate(dateText)) {
		if (errMessage == undefined || errMessage == "") {
			doAlert(error_value(dateText)+" (อยู่ก่อนวันที่ปัจจุบัน)",dateField);
		} else {
			errMsg = errMessage.replace('%0',dateField.value);
			doAlert(errMsg,dateField);
		}
		return;
	}
	clearVerifyState();
	return true;
}

function verifyDateBFDate(dateField,checkField,errMessage) {
	if (!verifyDate(dateField)) return;
	var dateText = dateField.value;
	if (dateText == undefined || dateText == "") {
		return true;
	}
	if (nowVerify) {return; } else {nowVerify = true;}
	vDate = strToDate(dateText);
	vDateFrom = strToDate(checkField.value);
	if (vDate < vDateFrom) {
		if (errMessage == undefined || errMessage == "") {
			doAlert(error_value(dateText)+" (อยู่ก่อนวันที่ "+dateToStr(vDateFrom)+")",dateField);
		} else {
			errMsg = errMessage.replace('%0',dateField.value);
			errMsg = errMsg.replace('%1',checkField.value);
			doAlert(errMsg,dateField);
		}
		return;
	}
	clearVerifyState();
	return true;
};

function verifyDateAFDate(dateField,checkField,errMessage) {
	if (!verifyDate(dateField)) return;
	var dateText = dateField.value;
	if (dateText == undefined || dateText == "") {
		return true;
	}
	if (nowVerify) {return; } else {nowVerify = true;}
	vDate = strToDate(dateText);
	vDateFrom = strToDate(checkField.value);

	if (vDate > vDateFrom) {
		if (errMessage == undefined || errMessage == "") {
			doAlert(error_value(dateText)+" (อยู่หลังจากวันที่ "+dateToStr(vDateFrom)+")",dateField);
		} else {
			errMsg = errMessage.replace('%0',dateField.value);
			errMsg = errMsg.replace('%1',checkField.value);
			doAlert(errMsg,dateField);
		}
		return;
	}
	clearVerifyState();
	return true;
};


function verifyDateDsBt(dateField,fromField,endField,errMessage) {
	if (!verifyDate(dateField)) return;
	var dateText = dateField.value;
	if (dateText == undefined || dateText == "") {
		return true;
	}
	if (nowVerify) {return; } else {nowVerify = true;}
	vDate = strToDate(dateText);
	vDateFrom = strToDate(fromField.value);
	vDateEnd = strToDate(endField.value);
	if (vDate >= vDateFrom && vDate <= vDateEnd) {
		if (errMessage == undefined || errMessage == "") {
			doAlert(error_value(dateText)+" (อยู่ระหว่างวันที่ "+dateToStr(vDateFrom)+" และ "+dateToStr(vDateFrom)+")",dateField);
		} else {
			errMsg = errMessage.replace('%0',dateField.value);
			errMsg = errMsg.replace('%1',fromField.value);
			errMsg = errMsg.replace('%2',endField.value);
			doAlert(errMsg,dateField);
		}
		return;
	}
	clearVerifyState();
	return true;
};

function verifyDateEnBt(dateField,fromField,endField,errMessage) {
	if (!verifyDate(dateField)) return;
	var dateText = dateField.value;
	if (dateText == undefined || dateText == "") {
		return true;
	}
	if (nowVerify) {return; } else {nowVerify = true;}
	vDate = strToDate(dateText);
	vDateFrom = strToDate(fromField.value);
	vDateEnd = strToDate(endField.value);
	if (!(vDate >= vDateFrom && vDate <= vDateEnd)) {
		if (errMessage == undefined || errMessage == "") {
			doAlert(error_value(dateText)+" (ไม่อยู่ระหว่างวันที่ "+dateToStr(vDateFrom)+" และ "+dateToStr(vDateEnd)+")",dateField);
		} else {
			errMsg = errMessage.replace('%0',dateField.value);
			errMsg = errMsg.replace('%1',fromField.value);
			errMsg = errMsg.replace('%2',endField.value);
			doAlert(errMsg,dateField);
		}
		return;
	}
	clearVerifyState();
	return true;
};

