/*require CscCalendar.js TineZone.js*/
	function calTotal(opn){
		var opn2 = opn , tz_pn = opn2.tz_pn , tz_wk = opn2.tz_wk , tz_bk = opn2.tz_bk ,
			work_time = opn2.work_time , holiday_time =opn2.holiday_time ,
			hour_break_after =opn2.hour_break_after , is_break =opn2.is_break ,
			start_time = opn2.start_time , end_time = opn2.end_time , transport_fee = opn2.transport_fee;
		if( !tz_pn || !tz_wk || !tz_bk || !start_time || !end_time || !transport_fee){
			return;
		}
		var start_w = tz_wk.getBeginZone() , end_w = tz_wk.getEndingZone();
		if(start_w.equalsDateTime(end_w)){
			notCalTransport(transport_fee)
			work_time.value="0.00";
			holiday_time.value="0.00";
			return;
		}
		var start_p = tz_pn.getBeginZone(),end_p = tz_pn.getEndingZone();
		var start_b = tz_bk.getBeginZone(),end_b = tz_bk.getEndingZone();
		if(!start_w || !start_p || !start_b || !end_w || !end_p || !end_b){
			return;
		}
		var hr_ot = new CscTime();
		var hr_bf_break =0.00,hr_break=start_b.getDiffTime(end_b);
		if(tz_pn.timeInTimeZone(start_w)){ //�������OT�����Ἱ�������
			if(end_w.afterDateTime(end_p)){//����ش��OT������ѧἹ�������
				hr_ot.setCscTime();
				if(!tz_pn.isType("T") ){
					hr_bf_break=start_w.getDiffTime(end_w);
					hr_ot.setCscTime(hr_bf_break);
					if(is_break || is_break==""){
						/* ����͡���ͧ�ҡ  subHoruBreakAfter �社ѡ��������
						 if(tz_wk.intersectTimeZone(tz_bk) && (is_break=="0" || is_break=="")){
						 */
							//hr_ot.decTime(hr_break); /*��ѡ��������ѧ�ѡ�ѡ��͹���ͷ� */
							/* ���ѹ������ �ѡ��� ��Ҥ������ǧ�ѡ */
							hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
						//}
					}
					holiday_time.value=hr_ot.getHHMM();
					calTransport(transport_fee,start_w,end_w)
					work_time.value="0.00";
				}else{
					hr_bf_break=end_p.getDiffTime(end_w);
					hr_ot.setCscTime(hr_bf_break);
					if(hour_break_after){
						/* ���ѹ������ �ѡ��� ��Ҥ������ǧ�ѡ */
						hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
					}
					start_time.value = end_p.getHHMM();
					work_time.value = hr_ot.getHHMM();
					calTransport(transport_fee,start_w,end_w);
					holiday_time.value="0.00";
				}
			}else{		
				if(!tz_pn.isType("T")){
					hr_bf_break=start_w.getDiffTime(end_w);
					hr_ot.setCscTime(hr_bf_break);
					if(is_break || is_break==""){
						if(tz_wk.intersectTimeZone(tz_bk) && (is_break=="0" || is_break=="")){
							//hr_ot.decTime(hr_break);  /*��ѡ��������ѧ�ѡ�ѡ��͹���ͷ� */
							/* ���ѹ������ �ѡ��� ��Ҥ������ǧ�ѡ */
							hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
						}
					}
					holiday_time.value=hr_ot.getHHMM();
					calTransport(transport_fee,start_w,end_w)
					work_time.value="0.00";
				}else{
					notCalTransport(transport_fee)
					holiday_time.value="0.00";
					work_time.value="0.00";
				}
			}
		}else{
			if(tz_wk.timeInTimeZone(start_p)){
				if(end_w.afterDateTime(end_p)){
					hr_ot.setCscTime();
					if(!tz_pn.isType("T")){
						hr_bf_break=start_w.getDiffTime(end_w);
						hr_ot.setCscTime(hr_bf_break);
						if(is_break || is_break==""){
							if(tz_wk.intersectTimeZone(tz_bk) && (is_break=="0" || is_break=="")){
								//hr_ot.decTime(hr_break); /*��ѡ��������ѧ�ѡ�ѡ��͹���ͷ� */
								/* ���ѹ������ �ѡ��� ��Ҥ������ǧ�ѡ */
								hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
							}
						}
						holiday_time.value=hr_ot.getHHMM();
						calTransport(transport_fee,start_w,end_w)
						work_time.value="0.00";
					}else{
						/*hr_bf_break=start_w.getDiffTime(start_p);
						hr_ot.setCscTime(hr_bf_break);

						hr_bf_break=end_p.getDiffTime(end_w);
						hr_ot.incTime(hr_bf_break);
						if(hour_break_after){*/
							//hr_ot.decTime(hour_break_after);  /*��ѡ��������ѧ�ѡ�ѡ��͹���ͷ� */
							/* ���ѹ������ �ѡ��� ��Ҥ������ǧ�ѡ */
							/*hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
						}*/
						notCalTransport(transport_fee)
						work_time.value ="0.00";
						holiday_time.value="0.00";
					}
				}else{
					hr_ot.setCscTime();
					if(!tz_pn.isType("T")){
						hr_bf_break=start_w.getDiffTime(end_w);
						hr_ot.setCscTime(hr_bf_break);
						if(is_break || is_break==""){
							if(tz_wk.intersectTimeZone(tz_bk) && (is_break=="0" || is_break=="")){
								//hr_ot.decTime(hr_break); /*��ѡ��������ѧ�ѡ�ѡ��͹���ͷ� */
								/* ���ѹ������ �ѡ��� ��Ҥ������ǧ�ѡ */
								hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
							}
						}
						holiday_time.value=hr_ot.getHHMM();
						calTransport(transport_fee,start_w,end_w)
						work_time.value="0.00";
					}else{
						hr_bf_break=start_w.getDiffTime(start_p);
						hr_ot.setCscTime(hr_bf_break);
						end_time.value = start_p.getHHMM();
						work_time.value =hr_ot.getHHMM();
						calTransport(transport_fee,start_w,end_w)
						holiday_time.value="0.00";
					}
				}
			}else{
				hr_ot.setCscTime();
				if(!tz_pn.isType("T")){
					hr_bf_break=start_w.getDiffTime(end_w);
					hr_ot.setCscTime(hr_bf_break);
					if(is_break || is_break==""){
						if(tz_wk.intersectTimeZone(tz_bk) && (is_break=="0" || is_break=="")){
							//hr_ot.decTime(hr_break);  /*��ѡ��������ѧ�ѡ�ѡ��͹���ͷ� */
							/* ���ѹ������ �ѡ��� ��Ҥ������ǧ�ѡ */
							hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
						}
					}
					holiday_time.value=hr_ot.getHHMM();
					calTransport(transport_fee,start_w,end_w)
					work_time.value="0.00";
				}else{
					hr_bf_break=start_w.getDiffTime(end_w);
					hr_ot.setCscTime(hr_bf_break);
					if(hour_break_after){
						hr_ot = subHoruBreakAfter(is_break, tz_pn.getBeginZone(), tz_pn.getEndingZone(), tz_wk.getBeginZone(), tz_wk.getEndingZone(), hour_break_after, hr_ot, tz_pn.getType(), hr_break);
					}
					calTransport(transport_fee,start_w,end_w)
					work_time.value =hr_ot.getHHMM();
					holiday_time.value="0.00";
				}
			}
		}
	}

	function subHoruBreakAfter(is_break, start_p, end_p, start_wk, end_wk, hour_break_after, hr_ot, daytype, brk_hour){
		var end_wk_time = new CscCalendar(end_p.getDDMMYYYYHHMMSS()) ;	/* set end of workshif include mini break */
		end_wk_time.incTime(hour_break_after);	/* set actual end of work */
		var brk = 0;

		if(daytype == "T"){	/* deduct only T */
			if(start_wk.beforeEqualsDateTime(end_p) && end_wk.afterEqualsDateTime(end_wk_time)){
				brk = hour_break_after;
			}else if(start_wk.afterDateTime(end_p) && start_wk.beforeDateTime(end_wk_time) && end_wk.afterDateTime(end_wk_time)){
				brk = end_wk_time.getDiffTime(start_wk);
			}else if(start_wk.beforeEqualsDate(end_p) && end_wk.afterDateTime(end_p) && end_wk.beforeEqualsDateTime(end_wk_time)){
				brk = end_wk.getDiffTime(end_p);
			}else if(start_wk.afterDateTime(end_p) && end_wk.beforeDateTime(end_wk_time)){
				brk = end_wk.getDiffTime(start_wk);
			}

			if(hr_ot.getHHMM() >= brk){
				hr_ot.decTime(brk);
			}else if(hr_ot.getHHMM() < brk) {
				hr_ot.setHours(0);
				hr_ot.setMinutes(0);
				hr_ot.setSeconds(0);
			}
		}else {			/* ������� �ѹ��ش ����Թ 4 ��. ����ѡ�ѡ 1 ��. */
			if(hr_ot.getHHMM() >= 4){
				if(is_break != "1"){
					hr_ot.decTime(brk_hour);
				}
			}
		}

		return hr_ot;
	}

	function calTransport(transport_fee,start_w,end_w){
		var main_time = new CscCalendar(start_w.getDDMMYYYY()+" 21.00");
		if(!end_w.afterEqualsDateTime(main_time)){
			transport_fee.readOnly = true ;
			transport_fee.value = "0.00";
		}else{
			transport_fee.readOnly = false ;
		}
	}

	function notCalTransport(transport_fee){
		transport_fee.readOnly = true ;
		transport_fee.value = "0.00";
	}