function DateUtils()
{
	var dateError=new Error(1,"date is not format");
	//***** declare golbal variable  *****************
		/* date object ใช้ในการ get ค่าต่างของวันที่ default จะเป็นของวันที่ปัจจุบีน แต่ถ้าต้องการให้เป้น ของวันที่อื่นที่ไม่ใช่วันที่ปัจจุบัยต้องใช้ method setDateToObjectDate() 
			 ควบคู่ถึงจะได้ค่าต่างๆ ของวันที่อื่น*/
		var initObjDate=new Date(); 
		var arrDateThai=new Array("อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์");
		var arrDateEng=new Array("Sunday","Monthday","Tuesday","Wednesday","Thursday","Friday","Saturday");
		var arrMonthThai=new Array("มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม");
		var arrMonthEng=new Array("January","February","March","April","May","June","July","August","September","October","November","December");

	//***************************************************
	
	//***** method currentDate ********************
	this.currentDate=function currentDate()
	{
		var currentDateObj	=	new Date();
		return	this.completeDate ( currentDateObj.getDate() + "/" + ( currentDateObj.getMonth() + 1 ) + "/" + ( currentDateObj.getYear( ) + 543 ) );
	}
	//***************************************************

	//***** method betweenDate ********************
	this.dateDuration=function scDateDuration(date1,date2)
	{
		 var separator="/";	
		 var objDate1,objDate2;
		 try
		 {
			objDate1=this.getObjectDate(date1);
			objDate2=this.getObjectDate(date2);
			return ((Math.abs(objDate1.getTime()-objDate2.getTime())/1000)/86400);
		 }
		 catch(e)
		 {
			alert("date is not format");
			return -1;//------- error occur return -1
		 }
	}
	
	//***** method compareDate *************
	//skipnull == true --> return true เสมอ ถ้า date1 หรือ 2 เป็น null หรือ length == 0
	this.compareDate = function scCompareDate(date1,sign,date2,skipnull)
	{
		try{
			if(skipnull == null)skipnull = true;
			if(skipnull){
				if(date1 == null || date1=="")return true;
				if(date2 == null || date2=="")return true;
			}else{
				if(date1 == null || date1=="")return false;
				if(date2 == null || date1=="")return false;			
			}
				date1 = this.dateToDb(date1);
				date2 = this.dateToDb(date2);
			if(sign != ">" && sign != ">=" && sign != "<" && sign != "<=" && sign != "==" && sign !="!="){
					alert("scu_compareDate: invalid condition sign");
					return false;
			}
			return eval(date1 + sign + date2);
		}catch(e){
			alert("scu_compareDate: invalid arguments");
		}
	}  

	//********** dateToDisplay ****************
	// 20020101 --> 01/01/2002
	this.dateToDisplay=function scDateToDisplay(date,lang)
	{
		if(lang==null) lang=0;
		if(date.length != 8) return date;
		var day = parseFloat(date.substring(6,8));
		var month =parseFloat(date.substring(4,6));
		var year = parseFloat(date.substring(0,4));
		switch(parseFloat(lang))
		{
			case 0:
				if(year >2400)year-=543;break;
			case 1:
				if(year <=2400)year+=543;break;
			default:
				year=year;break;
		}
		return this.completeDate(day+"/"+ month+"/"+year);
	}     

	//********** dateToDisplayFull ****************
	// 20020101 --> 1 มกราคม 2545
	this.dateToDisplayFull=function scDateToDisplayFull(date,lang)
	{
		if(lang==null) lang=0;
		if(date.length != 8) return date;
		var day = parseFloat(date.substring(6,8));
		var month =parseFloat(date.substring(4,6));
		var year = parseFloat(date.substring(0,4));
		switch(parseFloat(lang))
		{
			case 0:
				if(year >2400)year-=543;break;
			case 1:
				if(year <=2400)year+=543;break;
			default:
				year=year;break;
		}
		return this.completeDate(day+" "+arrMonthThai[parseInt(month)-1]+" "+year);
	}     

	//********* dateToDb *********************
	// 01/01/2002 --> 20020101
	this.dateToDb = function dateToDb(date,lang)
	{
		if(lang == null) lang=0;
		var D1 = new Array()	;
		var separator = '/';
		var rg = new RegExp(separator,"gi")
		date=this.completeDate(date,separator);
		date=date.replace(rg,"");
		if (date=="") return "";
		D1[0] = parseFloat(date.substring(0,2));//date
		D1[1] = parseFloat(date.substring(2,4));//month
		D1[2] = parseFloat(date.substring(4,8));//year
		switch(lang){
			case 0:
				if(D1[2] >2400)D1[2]-=543;break;
			case 1:
				if(D1[2] <=2400)D1[2]+=543;break;
			default:
				D1[2]=D1[2];
				break;
		}

		var day = D1[0].toString();
		var month = D1[1].toString();
		var year = D1[2].toString();
		if(day.length <=1)day = "0" + day;
		if(month.length <= 1)month = "0" + month;
		while(year.length < 4) year = "0" + year;
		if(year.length > 4)year = year.substring(0,4);
		return year + month +day;	
	}                     

	/******* isDateValid *********************************
		string strDate = วันที่ dd/mm/yyyy
	*/
	this.isDateValid=function isDateValid(strDate)
	{
		var D1 = new Array();
		var D2 = new Array();
		var separator="/";
		var rg = new RegExp(separator,"gi");
		strDate=completeDate(strDate,separator).replace(rg,"");
		if (strDate=="") return true;
		if(strDate.length != 8) return false;
		D1[0] =parseFloat(strDate.substring(0,2)); //day
		D1[1] =parseFloat(strDate.substring(2,4))-1;  //month
		//-----นำค่า year ไปเก็บใน array โโย check ว่ามันมีค่ามากกว่า 2400 หรือไม่
		parseFloat(strDate.substring(4,8))>2400 ? D1[2] =parseFloat(strDate.substring(4,8))-543:D1[2] =parseFloat(strDate.substring(4,8));
		var validDate = new Date(D1[2],D1[1],D1[0]);
		D2[0] = validDate.getDate();
		D2[1] = validDate.getMonth();
		D2[2] = validDate.getFullYear();
		strDate = D1.join();
		strDate2 = D2.join();
		if (strDate != strDate2) return false;
		return true;
	}

	this.moreThanCurrentDate=function moreThanCurrentDate(dateValue)
	{
		var objDate=this.getObjectDate(dateValue,"/");
		var date=this.dateToDb(this.completeDate(objDate.getDate()+"/"+objDate.getMonth()+"/"+objDate.getYear()));
		var currentDateObj=new Date();
		var currentDate=this.dateToDb(this.completeDate(currentDateObj.getDate()+"/"+currentDateObj.getMonth()+"/"+
							   currentDateObj.getYear()));
		return date > currentDate;
	}
	
	this.validateDate=function validateDate(dateValue,checkCurrent,alertMsg)
	{
		if (checkCurrent==null) lang=false;
		if (alertMsg==null) alertMsg=true;
		if (!isDateValid(dateValue)) 
		{
			if (alertMsg) alert("กรุณากรอกวันที่ให้ถูกต้อง");
			return false;
		}
		if (checkCurrent)
		{
			if (this.moreThanCurrentDate(dateValue))
			{
				if (alertMsg) alert("กรุณากรอกวันที่ให้น้อยกว่าวันที่ปัจจุบัน");
				return false;
			}
		}
		return true;	
	}
	
	//********** completeData ***************************
	this.completeDate=function completeDate(dateValue,separator)
	{
		var arrDate=new Array();
		if (separator==null) separator="/"
		try
		{
			arrDate=dateValue.split(separator);
			if (arrDate[0].length==1) arrDate[0]="0"+arrDate[0];
			if (arrDate[1].length==1) arrDate[1]="0"+arrDate[1];
			return arrDate[0]+separator+arrDate[1]+separator+arrDate[2];
		}
		catch(e)
		{
			return dateValue;
		}
	}
	
	//******** dateAdd *********************************
	this.dateAdd=function scDateAdd(dateValue,numDateAdd)
	{
		 var myYear;
		 var separator="/";
		 var isBuddha=false;
		 var objDate;
		 var rg = new RegExp(separator,"gi");
		 dateValue=this.completeDate(dateValue,separator);
		 myFullDate=dateValue.replace(rg,"");
		 if (myFullDate.length !=8) return dateValue;
		 if (parseFloat(myFullDate.substring(4,8))>2400) isBuddha=true;
		 objDate=this.getObjectDate(dateValue);
		 objDate.setDate(parseFloat(numDateAdd)+parseFloat(myFullDate.substring(0,2)));
		 myYear=parseFloat(objDate.getYear());
		 if (isBuddha) myYear=myYear+543;
		 return this.completeDate(objDate.getDate()+"/"+(parseFloat(objDate.getMonth())+1)+"/"+myYear);
	}
	
	//**********set ค่าเริ่มต้นของวันที่ในกรณีที่เราต้องการ พวก วัน  หรือ เดื่อน  หรือ ปี  ถ้าไม่เคยเรียกใช้ method นี้จะเอาค่าวันที่ปัจจุบัน**************
	this.setDateToObjectDate=function scSetDateToObjectDate(dateValue)
	{
		if (dateValue==null || dateValue=="") 
			initObjDate=this.getObjectDate();
		else
		{
			if (this.isDateValid(dateValue))
				initObjDate=this.getObjectDate(dateValue);
			else
				initObjDate=this.getObjectDate();
		}
	}

	//********* set ค่า String date "02/05/2546" ให้เป็น date object คืนค่า date object***********
	this.getObjectDate=function scGetObjectDate(dateValue,separator)
   {
		var objDate;
		if (separator==null) separator="/";
		var myDate=new Array();
		if (dateValue==null) return objDate=new Date();
		var rg = new RegExp(separator,"gi");
		dateValue=this.completeDate(dateValue,separator);
		dateValue=dateValue.replace(rg,"");
		if (dateValue.length !=8) return "date is occur error";
		myDate=scSetStringDateToArray(dateValue);
		if (parseFloat(myDate[2])>2400) myDate[2]=parseFloat(myDate[2])-543
		objDate=new Date(parseFloat(myDate[2]),parseFloat(myDate[1])-1,parseFloat(myDate[0]));
		return objDate
   }
	
	//*********** เอาค่าวันที่ 1-31**************
	this.getDay=function scGetDay()
	{	
		return initObjDate.getDate();
	}
	
	//*******เอาค่าวันที่ จันทร์- อาทิตย์  lang=0 ค.ศ. , lang=1 พ.ศ.
	this.getDateOfWeek=function scGetDateOfWeek(lang)
	{
		if (lang==null) lang=1;
		if (parseFloat(lang)==0)
			return arrDateEng[initObjDate.getDay()];
		else
			return arrDateThai[initObjDate.getDay()];
	}

	//****** เอาค่าเดือน 1-12 **************
	this.getMonth=function scGetMonth()
	{	
		return parseFloat(initObjDate.getMonth())+1;
	}
	
	//*******เอาค่าเดือน มกราคม-ธันวามคม  lang=0 ค.ศ. , lang=1 พ.ศ.*************
	this.getFullMonth=function scGetFullMonth(lang)
	{
		if (lang==null) lang=1;
		if (parseFloat(lang)==0)
			return arrMonthEng[initObjDate.getMonth()];
		else
			return arrMonthThai[initObjDate.getMonth()];
	}

	//******คืนค่าปี พ.ศ. หรือ ค.ศ lang =0 ปี ค.ศ. lang=1 ปี พ.ศ. **************
	this.getYear=function scGetYear(lang)
	{	
		if (lang==null) lang=1;
		if (parseFloat(lang)==0)
			return parseFloat(initObjDate.getYear());
		else
			return parseFloat(initObjDate.getYear())+543;
	}
	
	this.getShortDate=function scGetShortDate(lang)
	{
		if (lang==null) lang=1;
		if (parseFloat(lang)==0)
			return this.completeDate(this.getDay()+"/"+this.getMonth()+"/"+this.getYear(0));
		else
			return this.completeDate(this.getDay()+"/"+this.getMonth()+"/"+this.getYear(1));
	}

	this.getFullDate=function scGetFullDate(lang)
	{
		if (lang==null) lang=1;
		if (parseFloat(lang)==0)
			return  this.getDateOfWeek(0)+" "+this.getDay()+" "+this.getFullMonth(0)+" "+this.getYear(0);
		else
			return "วัน "+this.getDateOfWeek(1)+" ที่ " +this.getDay()+" "+this.getFullMonth(1)+" พ.ศ."+this.getYear(1);
	}

	function scSetStringDateToArray(dateValue)
	{
		 var arrReturn=new Array();
		 try
		{
			arrReturn[0]=dateValue.substring(0,2);
			arrReturn[1]=dateValue.substring(2,4);
			arrReturn[2]=dateValue.substring(4,8);
		}
		catch(e)
		{
			return arrReturn;
		}
		return arrReturn;
	}
      
}
//**********************************end Class ScDateUtils*******************************************
