function Genworkplan(){	
	this.str = {};
}

Genworkplan.prototype = jQuery.extend({} , Csc.prototype , {
	add : function(Emp,Stdate,lineno){	
		date = {};
		date[Stdate]=Stdate;
		var strData = this.str[Emp];
		if(strData){
			strData.date[Stdate]=Stdate;
		}else{
			this.str[Emp] ={		
			"empid": Emp,
			"date": date,
			"line" : lineno
			};		
		}
	},
	sentdwr : function(){
		someObject =  this.str;
		//someObject.privateVar =
		jDate =  JSON.stringify(this.str);		
		someObject.callbackFunction = function(dataFromServer) {		
		work_shift =$.parseJSON(dataFromServer);		
		//alert(this);		
		Callbackdwr(work_shift);
		}
		 var callMetaData = { 
			 callback:someObject.callbackFunction, 
			 scope: someObject 
		};
		Trequest_ot_dwr.getWorkShift_boss(jDate, callMetaData);	
	},
	sentdwr_get_time0 : function(){
		someObject =  this.str;
		//someObject.privateVar =
		jDate =  JSON.stringify(this.str);		
		someObject.callbackFunction = function(dataFromServer) {		
		work_shift =$.parseJSON(dataFromServer);		
		//alert(this);		
		Callback_gettime0(work_shift);
		}
		 var callMetaData = { 
			 callback:someObject.callbackFunction, 
			 scope: someObject 
		};
		Trequest_ot_dwr.getWorkShift_boss(jDate, callMetaData);	
	}
});

function callbackFunction(dataFromServer, arg1) {
  // you will now have access to dataFromBrowser2 as arg1
  // callbackArg overrides arg
 }
 
function Callbackdwr(data) {		
	returnData(data);
}

function Callback_gettime0(data){
	set_time0id(data);
}

 function CalculateOT(){
	
 }
 CalculateOT.prototype = jQuery.extend({} , Csc.prototype , {
	 cal_ot : function(op){
		var opn = op , tz_pn = opn.tz_pn , tz_wk = opn.tz_wk , tz_next = opn.tz_next, tz_back = opn.tz_back, time0id = opn.time0id ,
			work_start_time = opn.work_start_time, str_startTime=opn.str_startTime, str_endTime=opn.str_endTime;
		if( !tz_pn || !tz_wk || !tz_next){
			return;
		}
		var start_w = tz_wk.getBeginZone() , end_w = tz_wk.getEndingZone();
		var start_p = tz_pn.getBeginZone() , end_p = tz_pn.getEndingZone();		
		if(!start_w || !start_p || !end_w || !end_p ){
			return;
		}
		var ot_hr = "0.00";
		var hr_diff = this.diffIntersect(tz_pn,tz_wk);
		if(tz_pn.isType("T")){
			if(hr_diff=="0.00"){
				ot_hr = this.cal_time(start_w,end_w,hr_diff); 
			}
		}
		return ot_hr;
	},	
	cal_ot1 : function (op,requestDate){
		var opn = op , tz_pn = opn.tz_pn , tz_wk = opn.tz_wk , emp_every = opn.emp_every ;
		if( !tz_pn || !tz_wk ){
			return;
		}
		var start_w = tz_wk.getBeginZone() , end_w = tz_wk.getEndingZone();
		var start_p = tz_pn.getBeginZone() , end_p = tz_pn.getEndingZone();		
		if(!start_w || !start_p || !end_w || !end_p){
			return;
		}
		var ot_hr = "0.00";
		var hm_ot = {};
		hm_ot["ot1"] = "0.00";
		hm_ot["breakOT1"] = "false";
		if(!tz_pn.isType("T")){
			hm_ot = this.cal_ot_holiday(start_w,end_w,requestDate);
		}
		return hm_ot;
	},	
	cal_time : function (calendar_start,calendar_end,hr_break){
		if( this.isCalendar(calendar_start) && this.isCalendar(calendar_end)){
			try{
				var hr_ot = new CscTime();
				var hr = calendar_start.getDiffTime(calendar_end);
				hr_ot.incTime(hr);
				hr_ot.decTime(hr_break);
				return hr_ot.getHHMM();
			}catch ( err ){
				console.log(err.stack);
			}
		} 
		return "0.00";
	},
	cal_ot_holiday : function(start_w,end_w,requestDate){
		if( this.isCalendar(start_w) && this.isCalendar(end_w)){
			try{
			var ot1 = 0.00;
			var ot_hm = requestDate[start_w.getDDMMYYYY()];
			if(ot_hm != undefined){
				ot1 = ot_hm["ot1"];
			}
			var hm_ot = {};
			hm_ot["breakOT1"] = "false";
			hm_ot["ot1"] = "0.00";

			//var hr_break ="1.00"; //ชั่วโมงเบรค
			var hr = start_w.getDiffTime(end_w);
			var hr_int =parseFloat(hr);
			var hr_ot = new CscTime("0.00");
			var hr_max = 24.00; // ชม.รวมสูงสุด ที่เป็น ot1เท่า
			var hr_begin_break = 5.00; // ชม.รวมที่เริ่มหักเบรค
			if(ot1 < 8.00 && ot_hm != undefined){
				var total_ot = parseFloat(ot1) + parseFloat(hr);
				if(total_ot > hr_begin_break && total_ot <= hr_max && ot_hm["breakOT1"] == "false"){
					hr_ot.setCscTime(hr);
					//hr_ot.decTime(hr_break);
					hm_ot["breakOT1"] = "true";
				}else if(total_ot > hr_begin_break && total_ot >= hr_max && ot_hm["breakOT1"] == "false"){
					hr_ot.setCscTime(parseFloat(hr_max) - parseFloat(ot1));
				//	hr_ot.decTime(hr_break);
					hm_ot["breakOT1"] = "true";
				}else if(total_ot >= hr_max && ot_hm["breakOT1"] == "true"){
					hr_ot.setCscTime(parseFloat(8.00) - parseFloat(ot1));
					hm_ot["breakOT1"] = "true";
				}else{
					hr_ot.incTime(hr);
				}
			}else if(ot1 >= 8.00){
				hm_ot["ot1"] = "0.00";
				hm_ot["breakOT1"] = "true";
				return hm_ot;
			}else if(hr_int>hr_max){
				hr_ot.setCscTime(hr_max);
				//hr_ot.decTime(hr_break);
				hm_ot["breakOT1"] = "true";
			}else if(hr_int>hr_begin_break && hr_int<=hr_max){
				hr_ot.setCscTime(hr);
			//	hr_ot.decTime(hr_break);
				hm_ot["breakOT1"] = "true";
			}else{
				hr_ot.incTime(hr);
			}
				hm_ot["ot1"] = hr_ot.getHHMM();
				return hm_ot;
			}catch ( err ){
				console.log(err.stack);
			}
		}
		return hm_ot;
	},
	diffIntersect : function (tz_1,tz_2){
		if(this.isTimeZone(tz_1) && this.isTimeZone(tz_2)){
			try{
				var hr_its ="0.00";
				var start_date1 = tz_1.getBeginZone() , end_date1 = tz_1.getEndingZone();
				var start_date2 = tz_2.getBeginZone() , end_date2 = tz_2.getEndingZone();
				if(tz_1.timeInTimeZone(start_date2)){
					hr_its = start_date2.getDiffTime(end_date1);
				}
				if(tz_1.timeInTimeZone(end_date2)){
					hr_its = start_date1.getDiffTime(end_date2);
				}
				if(tz_1.timeInTimeZone(start_date2)&&tz_1.timeInTimeZone(end_date2)){
					hr_its = start_date2.getDiffTime(end_date2);
				}
				if(start_date2.beforeEqualsDateTime(start_date1)&&end_date2.afterEqualsDateTime(end_date1)){
					hr_its = start_date1.getDiffTime(end_date1);
				}
				return hr_its;
			}catch ( err ){
				console.log(err.stack);
			}
		}
		return "0.00";
	},	
	chkOT : function(option,msg,Highlight){		
			var line = option.line , tz_pn = option.tz_pn , tz_wk = option.tz_wk , employeeid =option.employeeid , ot = option.ot;
			var chkbox_ot = option.chkbox_ot ;
			var starTime = option.str_startTime;
			var endTime = option.str_endTime;
							
			if(!tz_pn || !tz_wk){
				return;
			}
			var start_date = tz_wk.getBeginZone() ;
			if(tz_pn.isType("T") && ot.value=="0.00"){
				//not_ot.value="True";
				chkbox_ot.checked=true;
				Highlight.setHighlight(chkbox_ot,chkbox_ot);
				msg.addMsg(001,employeeid,start_date,starTime,endTime);
				return false;	
			}else {return true;}		
	},
	isTimeZone : function( tz ){
		return tz instanceof TimeZone;
	},
	isCalendar : function(ca){
		return ca instanceof CscCalendar;
	},
	setData : function(op,emp_ws,chkbox_ot,ot_total,not_re_ot,start_date,start_time,end_date,end_time){
		var opn1 = op;						
		var line = opn1["line"];			
		var employeeid = emp_ws;						
		var chkbox_ot = chkbox_ot;
		var ot = ot_total;
		var not_ot = not_re_ot;					
		var work_start_date = start_date;
		var work_start_time =start_time;
		var work_end_date =end_date;
		var work_end_time =end_time;				
		var start_w = new CscCalendar(work_start_date+" "+work_start_time);
		var end_w = new CscCalendar(work_end_date+" "+work_end_time);
		var start_p = new CscCalendar(opn1["start_date"]+" "+opn1["start_time"]);
		var end_p = new CscCalendar(opn1["end_date"]+" "+opn1["end_time"]);				
		var start_next = new CscCalendar(start_p.getYYYYMMDD()+" "+start_p.getHHMM());
		var end_next = new CscCalendar(end_p.getYYYYMMDD()+" "+end_p.getHHMM());
		var start_b = new CscCalendar(opn1["break_start_date"]+" "+opn1["break_start_time"]);
		var end_b = new CscCalendar(opn1["break_end_date"]+" "+opn1["break_end_time"]);					
		start_next.incDate(1); end_next.incDate(1);				
		var tz_wk =new TimeZone(start_w,end_w), tz_pn = new TimeZone(start_p,end_p), tz_bk = new TimeZone(start_b,end_b) , 
		tz_next = new TimeZone(start_next,end_next);
		ot.value = "0.00"; 
		tz_pn.setType(opn1["day_type"]);
		var str_startTime = (""+start_p.getHHMM());
		var str_endTime = (""+end_p.getHHMM());
		opn1 = {
			"ot" : ot,
			"tz_wk" : tz_wk,
			"tz_pn" : tz_pn,
			"tz_next" : tz_next,																		
			"str_startTime" : str_startTime,
			"str_endTime" : str_endTime,
			"line" : opn1["line"],						
			"emp_every" : opn1["emp_every"],						
			"employeeid" : employeeid,						
			"work_start_time" : work_start_time,
			"work_end_time" : work_end_time,							
			"not_ot" : not_ot,
			"chkbox_ot" : chkbox_ot
		}							
		return opn1;
	},			
	setNotOT : function(tz_main,tz_compare,line,emp_id,not_ot,chkbox,msg,highlight){
		if(this.isTimeZone(tz_main) && this.isTimeZone(tz_compare)){		
				try{
					var hr_diff_2="0.00";
					var not_ot_2 = not_ot;
					var chkbox_ot_2 = chkbox;
					hr_diff_2 = this.diffIntersect(tz_main,tz_compare);
					if(hr_diff_2!="0.00"){
						not_ot_2.value="True";
						chkbox_ot_2.checked=true;
						highlight.setHighlight(chkbox,chkbox_ot_2);
						msg.addMsg("002",emp_id,tz_compare.getBeginZone());
					}
				}catch ( err ){
					console.log(err.stack);
				}			
		}
	}
 });

function Setmsg(language){
	this.__msg001 = "";
	this.__msg002 = "";
	this.__msg003 = "";
	this.__msg004 = "";
	this.__msg005 = "";
	this.__msg006 = "";
	this.__msg007 = "";
	this.__msg008 = "";
	this.lang = language;
}
Setmsg.prototype = jQuery.extend({} , CalculateOT.prototype , {
	addMsg : function (type,employeeid,calendar,starTime,endTime){
		if(this.isCalendar(calendar)){
			with(document.cscform){
				var msg = "";
				if(this.lang=='eng'){
					msg = "Employeeid : "+employeeid+" Date "+calendar.getDDMMYYYY();
				}else{
					msg = "รหัสพนักงาน : "+employeeid+" วันที่ "+calendar.getDDMMYYYY();
				}
				if(type == "001"){
					if(this.lang=='eng'){
						this.__msg001 +=msg+" request ot in working time "+starTime+" - "+endTime+"\n";
					}else{
						this.__msg001 +=msg+" ขอโอทีทับเวลาการทำงาน \nเวลา "+starTime+" - "+endTime+" น. \n";
					}
				}else if(type == "002"){
					if(this.lang=='eng'){
						this.__msg002 +=msg+" Have OT Requisition In The Same Time \n";
					}else{
						this.__msg002 +=msg+" มีการขอโอทีในช่วงเวลาเดียวกัน \n";
					}				
				}else if(type == "003"){
					if(this.lang=='eng'){
						this.__msg003 +=msg+" employee not work plan \n";
					}else{
						this.__msg003 +=msg+" พนักงานไม่มีแผนการทำงาน \n";
					}				
				}else{

				}
			}
		}
	},
	showMsg : function (){
		with(document.cscform){
			var msg001 = this.__msg001;
			var msg002 = this.__msg002;
			var msg003 = this.__msg003;
			var msg1 = "";
			if(this.lang=='eng'){
				msg1 = "Can't OT Requisition Detail:.......... \n";
			}else{
				msg1 = "ไม่สามารถขอโอทีได้ รายละเอียดดังนี้ \n";
			}
			var msg2 = "";
			if(this.lang=='eng'){
				msg2 = "Can't OT Requisition\r \n         **NOTE**   \r \n";
			}else{
				msg2 = "ไม่สามารถขอโอทีได้\r \n                 **หมายเหตุ**  \r \n";
			}		
			if(msg001 !="" || msg002 !="" || msg003 !=""){				
				if(this.lang=='eng'){
					alert(msg1+msg001+msg002+msg003);
				}else{
					alert(msg1+msg001+msg002+msg003);
				}
				return false;
			}
			return true;
		}
	}
});

function Highlight(){
	
}
Highlight.prototype = {
	setNotHighlight : function(chkbox,txt_ot){		
		chkbox.checked=false;			
		td_re_ot = txt_ot.parentNode , tr_re_ot = td_re_ot.parentNode; 
		var unit_td = tr_re_ot.childNodes , styte_td2;
		txt_ot.value = "";
		for(var i=0;i<unit_td.length;i++){
			styte_td2 = unit_td[i];
			styte_td2.className="row-data";
		}
	},				
	setHighlight : function(chkbox,is_ot){			
		 td_ot = is_ot.parentNode , tr_ot = td_ot.parentNode;
		if( is_ot.value == "0.00" ){
			this.Highlightrow(tr_ot);
		}
		if(chkbox.checked==true){
			this.Highlightrow(tr_ot);
		}
	},
	Highlightrow : function(tr){
		tr_ot = tr;
		num_td = tr_ot.childNodes;
		var styte_td;
		for(var i=0;i<num_td.length;i++){
			styte_td = num_td[i];
			styte_td.className="Highlight";
		}
	}		
}