/*
* Copyright (C) 2008 Soft Ventures, Inc. All rights reserved.
*/
var xhr = false;
var hours = 0.0;
var total = 0.0;
var rate = 0.0;
var startdate = "";
var starttime = "";
var enddate = "";
var endtime = "";
var additionalfee = 0.00;
var feerate = "";
var fee = 0.0;

window.onload = initall;

function initall(){
	if(document.getElementById("timeslotmode").value == "Yes"){
		getSlots();
	}
	calcTotal();
}

function calcTotal() {

	if(document.getElementById("enable_paypal").value == 'No'){
		return false;
	}
	if(document.getElementById("resource").value == 0){
		hideTotal();
		return true;
	}
	startdate = document.getElementById("startdate").value;
	starttime = document.getElementById("starttime").value;
	if(document.getElementById("enddate") == null) {
		enddate = startdate;
	} else {
		enddate = document.getElementById("enddate").value;
	}
	endtime = document.getElementById("endtime").value;
	additionalfee = document.getElementById("additionalfee").value;
	feerate = document.getElementById("feerate").value;
	
	rate = parseFloat(aryRates[document.getElementById("resource").value]);

	// -------------------------------------------------------------------
	// start date/time = end date/time -> do nothing
	// -------------------------------------------------------------------
	if(startdate == enddate && starttime == endtime){
		hideTotal();
		return true;

	}
	
	// -------------------------------------------------------------------
	// start date = end date -> single day just calc based on times
	// -------------------------------------------------------------------
	if(startdate == enddate){
		//alert("startdate == enddate");
		var startdecimal = 0;
		var enddeciaml = 0;
		
		starttemp = starttime.split(":", 2);
		if(starttemp[1] == "30"){
			startdecimal = parseInt(starttemp[0]) + 0.5;
		} else {
			startdecimal = parseInt(starttemp[0]);
		}
		endtemp = endtime.split(":", 2);
		if(endtemp[1] == "30"){
			enddecimal = parseInt(endtemp[0]) + 0.5;
		} else {
			enddecimal = parseInt(endtemp[0]);
		}
		
		hours = enddecimal - startdecimal;
		if(hours <0){
			document.getElementById("res_hours").innerHTML = "err";	
			document.getElementById("res_total").innerHTML = "";
			document.getElementById("res_fee").innerHTML = "";
			document.getElementById("res_grand_total").innerHTML = "err";
			return true;
		}

		total = hours * rate;			
		
		showTotal();
	
	} else {
	
		begintemp = startdate.split("-",3);
		endtemp = enddate.split("-",3);
		var begingdate = new Date(begintemp[0], (begintemp[1]-1), begintemp[2]);
		var endingdate = new Date(endtemp[0], (endtemp[1]-1), endtemp[2]);
		var one_day=1000*60*60*24;
	
	
		//Calculate difference btw the two dates, and convert to days
		diffdays = Math.ceil((endingdate-begingdate)/(one_day));
	
	
		// -------------------------------------------------------------------
		// start and end on consecutive dates -> calc as start days hours + end days hours
		// -------------------------------------------------------------------
		if(diffdays == 1){
			//alert("diffdays == 1");	
			//alert(getStartDayHours());
			//alert(getEndDayHours());
			hours = getStartDayHours() + getEndDayHours();
			if(hours <0){
				document.getElementById("res_hours").innerHTML = "err";	
				document.getElementById("res_total").innerHTML = "";
				document.getElementById("res_fee").innerHTML = "";
				document.getElementById("res_grand_total").innerHTML = "err";
				return true;
			}
	
			total = hours * rate;			
		}
		
		// -------------------------------------------------------------------
		// start and end date > 1 day apart -> start day + end day + days between
		// -------------------------------------------------------------------
		if(diffdays > 1){
			
			// how many hours in a day
			var hoursperday = parseInt(document.getElementById("endhour").value)+1 - parseInt(document.getElementById("starthour").value);
			
			hours = ((diffdays-1)*hoursperday)+getStartDayHours() + getEndDayHours();
			
			if(hours <0){
				document.getElementById("res_hours").innerHTML = "err";	
				document.getElementById("res_total").innerHTML = "err";
				document.getElementById("res_fee").innerHTML = "err";

				document.getElementById("res_grand_total").innerHTML = "err";
				return true;
			}
	
			total = hours * rate;			
		}
		
		if(diffdays < 1){
			document.getElementById("res_hours").innerHTML = "err";	
			document.getElementById("res_total").innerHTML = "err";
			document.getElementById("res_fee").innerHTML = "err";
			document.getElementById("res_grand_total").innerHTML = "err";
			return true;
		}
		
	
	}
	
	showTotal();

}


function showTotal() {

	document.getElementById("calcResults").style.visibility = "visible";
	document.getElementById("res_rate").innerHTML = aryRates[document.getElementById("resource").value].toFixed(2);
	document.getElementById("res_hours").innerHTML = hours.toFixed(1);
	document.getElementById("res_total").innerHTML = total.toFixed(2);
	if(feerate == "Fixed"){
		fee = parseFloat(additionalfee);
	} else if(feerate == "Percent") {
		fee = (total * parseFloat(additionalfee)/100);
	}
	if(fee > 0){
		document.getElementById("res_fee").innerHTML = fee.toFixed(2);
	}
	document.getElementById("res_grand_total").innerHTML = (total + fee).toFixed(2);
	document.getElementById("grand_total").value = (total + fee).toFixed(2);

	document.getElementById("calcResults").style.height = "115px";
	document.getElementById("calcResults").style.display = "block";
	
}


function hideTotal(){
	document.getElementById("calcResults").style.visibility = "hidden";
	document.getElementById("calcResults").style.height = "1px";
	document.getElementById("calcResults").style.display = "none";
}

function getStartDayHours(){
	var timestartdecimal = 0.0;
	var timestart = starttime.split(":", 2);
	if(timestart[1] == "30"){
		timestartdecimal = parseInt(timestart[0]) + 0.5;
	} else {
		timestartdecimal = parseInt(timestart[0]);
	}

	var timerangeend = document.getElementById("endhour").value;

	return parseInt(timerangeend)+1 - timestartdecimal;
}

function getEndDayHours(){
	var timeenddecimal = 0.0;
	var timeend = endtime.split(":", 2);
	if(timeend[1] == "30"){
		timeenddecimal = parseInt(timeend[0]) + 0.5;
	} else {
		timeenddecimal = parseInt(timeend[0]);
	}

	var timerangestart = document.getElementById("starthour").value;

	return  timeenddecimal - parseInt(timerangestart);
}



function getSlots(){

	document.getElementById("slots").innerHTML = document.getElementById("wait_text").value;
	document.getElementById("slots").style.visibility = "visible";

	if(document.getElementById("resource").value == "0"){
		document.getElementById("slots").style.visibility = "hidden";
		return false;
	}

	document.getElementById("enddate").value = document.getElementById("startdate").value;

	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr) {
		xhr.onreadystatechange = showSlots;
		var data = "startdate=" + document.getElementById("startdate").value;
		data = data + "&res=" + document.getElementById("resource").value;
		data = data + "&browser=" + BrowserDetect.browser;
		//alert(data);
		xhr.open("GET", "./index.php?option=com_rsbook_pro&page=ajax&format=raw&" + data, true);
		xhr.send('');
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
	}
	return true;
}
	
	
	
function showSlots() {	
		
	if (xhr.readyState == 4) {
		document.getElementById("slots").style.visibility = "visible";
	
		if (xhr.status == 200) {		
			var outMsg = xhr.responseText;
		} 
		else {
			var outMsg = "There was a problem with the request " + xhr.status;
		}

		document.getElementById("slots").innerHTML = outMsg;
		set_starttime();
	}
	return true;
}


function set_starttime(){
	
	var start = document.getElementById("timeslots").value;
	var temp = new Array();
	temp = start.split(',');
	
	document.getElementById("starttime").value = temp[0];
	document.getElementById("endtime").value = temp[1];

	calcTotal();
	return true;
}

function getTomorrow(){
	var tomorrow = new Date();
	tomorrow.setDate(tomorrow.getDate()+1);
	var tomstr = '' + tomorrow.getFullYear() + "-" + (tomorrow.getMonth()+1) + "-" +tomorrow.getDate();
	//alert(tomstr);
	return(tomstr);
}

function getNextAllowedDate(){
	var nextDate = new Date();
	var ok = false;
	var disabledWeekDays = '<?php echo $disableDays?>';
	while(ok==false){
		nextDate.setDate(nextDate.getDate()+1);
		if(disabledWeekDays.indexOf(nextDate.getDay())<0){
			ok=true;
		}
	}
	var tomstr = '' + nextDate.getFullYear() + "-" + (nextDate.getMonth()+1) + "-" +nextDate.getDate();
	//alert(tomstr);
	return(tomstr);
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function doCancel(){
	if(document.getElementById("cancellation_id").value == ""){
		alert(document.getElementById("cancellation_id").title);
		return false;
	}

	document.getElementById("cancel_results").innerHTML = document.getElementById("wait_text").value;
	document.getElementById("cancel_results").style.visibility = "visible";

	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr) {
		xhr.onreadystatechange = showCancel_Results;
		var data = "cancellation_id=" + document.getElementById("cancellation_id").value;
		// need local date/time as yyyy-mm-dd-hh-mm
		var currentTime = new Date();
		data = data + "&userDateTime=" + currentTime.getFullYear() + "-" + (currentTime.getMonth() + 1) + "-" + currentTime.getDate();
		data = data + " " + currentTime.getHours() + ":" + currentTime.getMinutes() + ":00";
		data = data + "&browser=" + BrowserDetect.browser;
		//alert(data);
		xhr.open("GET", "./index.php?option=com_rsbook_pro&page=ajax_cancel&format=raw&" + data, true);
		xhr.send('');
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
	}
	return true;
}

function showCancel_Results(){
	if (xhr.readyState == 4) {
		document.getElementById("cancel_results").style.visibility = "visible";
	
		if (xhr.status == 200) {		
			var outMsg = xhr.responseText;
		} 
		else {
			var outMsg = "There was a problem with the request " + xhr.status;
		}

		document.getElementById("cancel_results").innerHTML = outMsg;
	}
	return true;
}

	

