/*
 ****************************************************************
 Copyright (C) 2008-2009 Soft Ventures, Inc. All rights reserved.
 ****************************************************************
 * @package	Resource Booking Pro - RBPro
 * @copyright	Copyright (C) 2008-2009 Soft Ventures, Inc. All rights reserved.
 * @license	GNU/GPL, see http://www.gnu.org/licenses/gpl-2.0.html
 *
 * RBPro is distributed WITHOUT ANY WARRANTY, or implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * This header must not be removed. Additional contributions/changes
 * may be added to this header as long as no information is deleted.
 *
 ************************************************************
 The latest version of RBPro is available to subscribers at:
 http://www.resourcebookingpro.com/
 ************************************************************
 */

var xhr = false;
var xhr2 = false; // need 2 so we can do 2 simultanious ajax calls to get different info
var xhr3 = false; // need 3 so we can do 3 simultanious ajax calls to get different info
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;
var res_id = 0;
var res_rate = 0.00;


function changeCategory(){
	if(document.getElementById("category_id").selectedIndex  == 0){
		if(document.getElementById("datetime1")!=null){ document.getElementById("datetime1").style.display = "none";}
		if(document.getElementById("datetime2")!=null){ document.getElementById("datetime2").style.display = "none";}
		document.getElementById("services_div").style.display = "none";
		document.getElementById("resources").style.display = "none";
		document.getElementById("gad_container").style.display = "none";
		return false;
	}

	if(document.getElementById("mode") != null){
		if(document.getElementById("category_id").value == "0"){
			document.getElementById("table_here").innerHTML = "";
			document.getElementById("table_here").visible = false;
			document.getElementById("table_here").display = "none";	
			return false;
		}
		document.getElementById("table_here").innerHTML = document.getElementById("wait_text").value;

		document.getElementById("gad_container").style.display = "";
		buildTable();
	} else {
		document.getElementById("datetime1").display = "none";	
		document.getElementById("datetime1").style.visibility = "hidden";
		document.getElementById("datetime2").display = "none";	
		document.getElementById("datetime2").style.visibility = "hidden";
	}
	getResources();
	
}

function changeResource(){
	
	if(document.getElementById("resources") == null){
		return false;
	}
	
	if(document.getElementById("resources") != null){
		res_id = document.getElementById("resources").value;
		if(document.getElementById("resources").value == "0"){
			document.getElementById("services").style.display = "none";
			document.getElementById("services").style.visibility = "hidden";
			document.getElementById("services_div").style.display = "none";
			document.getElementById("services_div").style.visibility = "hidden";
			if(document.getElementById("datetime1") != null){
				document.getElementById("datetime1").style.display = "none";
			}
			if(document.getElementById("datetime2") != null){
				document.getElementById("datetime2").style.display = "none";
			}
		} else {
			document.getElementById("datetime1").style.display = "";
			document.getElementById("datetime1").style.visibility = "visible";
			document.getElementById("datetime2").style.display = "";
			document.getElementById("datetime2").style.visibility = "visible";
			//getCalDays();
		}
		// reset in case we are switching from a resource with services to one without
		document.getElementById("endtime_label").innerHTML = "";
		document.getElementById("endtime_select").style.visibility = "visible";
		document.getElementById("endtime_select").style.display = "";
		if(document.getElementById("static_enddate") != null) {
			document.getElementById("static_enddate").innerHTML = "";
		}
		if(document.getElementById("anchor2") != null){
			document.getElementById("anchor2").style.visibility = "visible";
			document.getElementById("anchor2").style.display = "";
		}
		setEndTime();
		
	}

	if(document.getElementById("mode") != null){
		if(document.getElementById("resources").value == "0"){
			document.getElementById("mode").value = "single_day";
		} else {
			document.getElementById("mode").value = "single_resource";
		}
		document.getElementById("table_here").innerHTML = document.getElementById("wait_text").value;
		document.getElementById("gad_container").style.display = "";
		buildTable();
	} else {
		document.getElementById("datetime1").display = "none";	
		document.getElementById("datetime1").style.visibility = "hidden";
		document.getElementById("datetime2").display = "none";	
		document.getElementById("datetime2").style.visibility = "hidden";
		document.getElementById("startdate").value = document.getElementById("wait_text").value;
	}

	getCalDays();
	getServices();
	hideTotal();
	
}


function getSlots(){

	document.getElementById("slots").innerHTML = document.getElementById("wait_text").value;
	document.getElementById("slots").style.visibility = "visible";

	if(document.getElementById("resources") == null){
		document.getElementById("slots").style.visibility = "hidden";
		return false;
	}

	if(document.getElementById("resources").value == "0"){
		document.getElementById("slots").style.visibility = "hidden";
		return false;
	}

	document.getElementById("enddate").value = document.getElementById("startdate").value;
	if(document.getElementById("static_enddate")!=null){document.getElementById("static_enddate").innerHTML = 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("resources").value;
		data = data + "&browser=" + BrowserDetect.browser;
		//alert(data);
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&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 getCalDays(){

	if(document.getElementById("resources") == null){
		return false;
	}
	if(document.getElementById("resources").value == "0"){
		return false;
	}
	document.getElementById("datetime1").style.display = "";
	document.getElementById("datetime2").style.display = "";
	document.getElementById("startdate").value = document.getElementById("wait_text").value;
	document.getElementById("anchor1").style.display = "none";
	
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr) {
		xhr.onreadystatechange = showCalDays;
		var data = "res=" + document.getElementById("resources").value;
		data = data + "&browser=" + BrowserDetect.browser;
		data = data + "&caldays=yes";
		//alert(data);
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax&format=raw&" + data, true);
		xhr.send('');
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
	}
	return true;
}
	
	
	
function showCalDays() {	
		
	if (xhr.readyState == 4) {
	
		if (xhr.status == 200) {		
			var outMsg = xhr.responseText;
		} 
		else {
			var outMsg = "There was a problem with the request " + xhr.status;
		}

		// for dev
		//document.getElementById("cancel_results").innerHTML = outMsg;
		
		eval(outMsg);
		document.getElementById("datetime1").style.display = "";		
		document.getElementById("datetime1").style.visibility = "visible";
		document.getElementById("datetime2").style.display = "";		
		document.getElementById("datetime2").style.visibility = "visible";
		document.getElementById("startdate").value = document.getElementById("select_date_text").value;
		document.getElementById("enddate").value = document.getElementById("select_date_text").value;
		if(document.getElementById("static_enddate")!=null){document.getElementById("static_enddate").innerHTML = "";}
		document.getElementById("anchor1").style.display = "";
	}
	return true;
}


function changeEndDate() {

	document.getElementById("enddate").value = document.getElementById("startdate").value;
	if(document.getElementById("static_enddate")!=null){document.getElementById("static_enddate").innerHTML = document.getElementById("startdate").value;}
	calcTotal();
}

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];
	if(document.getElementById("enable_paypal").value == 'Yes' || document.getElementById("enable_paypal").value == 'Opt'){
		res_id = document.getElementById("resources").value;
		calcTotal();
	}
	return true;
}

function getResources(){

	if(document.getElementById("category_id").value == "0"){
		return false;
	}
	document.getElementById("resources_div").style.display = "";
	document.getElementById("resources_div").innerHTML = document.getElementById("wait_text").value;
	document.getElementById("resources_div").style.visibility = "visible";

	document.getElementById("services").style.display = "none";
	document.getElementById("services").style.visibility = "hidden";
	document.getElementById("services_div").style.display = "none";
	document.getElementById("services_div").style.visibility = "hidden";
	
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr) {
		xhr.onreadystatechange = showResources;
		var data = "cat=" + document.getElementById("category_id").value;
		if(document.getElementById("gridwidth")!=null){
			// gad
			data = data + "&gad=Yes";
		} else {
			data = data + "&gad=No";
		}
		data = data + "&browser=" + BrowserDetect.browser;
		data = data + "&res=yes";
		//alert(data);
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax&format=raw&" + data, true);
		xhr.send('');
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
	}
	return true;
}
	
	
	
function showResources() {	
		
	if (xhr.readyState == 4) {
	
		if (xhr.status == 200) {		
			var outMsg = xhr.responseText;
		} 
		else {
			var outMsg = "There was a problem with the request " + xhr.status;
		}

		document.getElementById("resources_div").innerHTML = outMsg;
		
		if(document.getElementById("resources").options.length==2){
			document.getElementById("resources").options[1].selected=true;
			changeResource();
		}

	}
	changeResource();
	return true;
}



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=" + encodeURIComponent(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);

		// asynchronous
		//xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_cancel&format=raw&" + data, true);
		//xhr.send('');

		// synchronous
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_cancel&format=raw&" + data, false);
		xhr.send(null);

		var outMsg = "";
		outMsg = xhr.responseText;
		document.getElementById("cancel_results").innerHTML = outMsg;
		return(outMsg);
		// synchronous

	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
		// synchronous
		return false;
	}
	return true;
}

function doDelete(){
	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=" + encodeURIComponent(document.getElementById("cancellation_id").value);
		data = data + "&browser=" + BrowserDetect.browser;
		//alert(data);

		// asynchronous
		//xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_cancel&format=raw&" + data, true);
		//xhr.send('');

		// synchronous
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_delete&format=raw&" + data, false);
		xhr.send(null);

		var outMsg = "";
		outMsg = xhr.responseText;
		document.getElementById("cancel_results").innerHTML = outMsg;
		return(outMsg);
		// synchronous

	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
		// synchronous
		return false;
	}
	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;
}

function validateForm(){

	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr) {
		// synchronous
		//xhr.onreadystatechange = showValidation_Results;
		var data = "name=" + encodeURIComponent(document.getElementById("name").value);
		data = data + "&phone=" + encodeURIComponent(document.getElementById("phone").value);
		data = data + "&email=" + encodeURIComponent(document.getElementById("email").value);
		var udf_count = parseInt(document.getElementById("udf_count").value);
		// only send required textboxes
		data = data + "&udf_count=" + udf_count;
		for(i=0; i<udf_count; i++){
			udf_name = "user_field" + i + "_label";
			if(document.getElementById(udf_name)!=null){ data = data + "&" + udf_name + "=" + encodeURIComponent(document.getElementById(udf_name).innerHTML);}		
			udf_name = "user_field" + i + "_value";
			if(document.getElementById(udf_name).type == "checkbox"){
				if(document.getElementById(udf_name).checked){
					if(document.getElementById(udf_name)!=null){ data = data + "&" + udf_name + "=" + 'Checked';}
				} else {
					if(document.getElementById(udf_name)!=null){ data = data + "&" + udf_name + "=" + '';}
				}
			} else {
				if(document.getElementById(udf_name)!=null){ data = data + "&" + udf_name + "=" + encodeURIComponent(document.getElementById(udf_name).value);}		
			}
			udf_name = "user_field" + i + "_is_required";
			if(document.getElementById(udf_name)!=null){ data = data + "&" + udf_name + "=" + encodeURIComponent(document.getElementById(udf_name).value);}
		}
		
		if(document.getElementById("category_id")!=null){
			data = data + "&category_id=" + document.getElementById("category_id").value;
		} else{
			data = data + "&category_id=-1";
		}
		if(document.getElementById("resources")!=null){
			if(document.getElementById("mode")==null){
				// non gad
				data = data + "&resource=" + document.getElementById("resources").value;
			} else {
				//data = data + "&resource=" + document.getElementById("selected_resource_id").value;
				data = data + "&resource=" + document.getElementById("resources").value;
			}
		} else{
			data = data + "&resource=-1";
		}
		data = data + "&startdate=" + document.getElementById("startdate").value;
		data = data + "&starttime=" + document.getElementById("starttime").value;
		data = data + "&enddate=" + document.getElementById("enddate").value;
		data = data + "&endtime=" + document.getElementById("endtime").value;	
		data = data + "&browser=" + BrowserDetect.browser;
		//alert(data);

		// asynchronous
		//xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_validate&format=raw&" + data, true);
		//xhr.send('');

		// synchronous
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_validate&format=raw&" + data, false);
		xhr.send(null);
		
		var outMsg = "";
		outMsg = xhr.responseText;
		document.getElementById("errors").innerHTML = outMsg;
		return(outMsg);
		// synchronous
		
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
		// synchronous
		return false;
	}
	//return true;
}


function getServices(){

	if(document.getElementById("resources") == null){
		return false;
	}
	if(document.getElementById("resources").value == "0"){
		return false;
	}
	
	if (window.XMLHttpRequest) {
		xhr2 = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr2 = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr2) {
		xhr2.onreadystatechange = showServices;
		var data = "res=" + document.getElementById("resources").value;
		data = data + "&browser=" + BrowserDetect.browser;
		data = data + "&serv=yes";
		//alert(data);
		xhr2.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax&format=raw&" + data, true);
		xhr2.send('');
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
	}
	return true;
}
	
	
	
function showServices() {	
		
	if (xhr2.readyState == 4) {
	
		if (xhr2.status == 200) {		
			var outMsg = xhr2.responseText;
		} 
		else {
			var outMsg = "There was a problem with the request " + xhr2.status;
		}

		// for dev
		//document.getElementById("cancel_results").innerHTML = outMsg;

		if(outMsg.indexOf("<select name=")>-1){
			document.getElementById("services").style.display = "";
			document.getElementById("services").style.visibility = "visible";
			document.getElementById("services_div").style.display = "";
			document.getElementById("services_div").style.visibility = "visible";
			document.getElementById("services_div").innerHTML = outMsg;
		} else {
			document.getElementById("services").style.display = "none";
			document.getElementById("services").style.visibility = "hidden";
			document.getElementById("services_div").style.display = "none";
			document.getElementById("services_div").style.visibility = "hidden";
			document.getElementById("services_div").innerHTML = "";
		}

	}
	setDuration();
	calcTotal();

	return true;
}

function changeResourceFE(){

	if(document.getElementById("resources").value == "0"){
		return false;
	}
	
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr) {
		xhr.onreadystatechange = showServicesFE;
		var data = "res=" + document.getElementById("resources").value;
		data = data + "&adminserv=yes";
		//alert(data);
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax&format=raw&" + data, true);
		xhr.send('');
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
	}
	return true;
}
	
	
	
function showServicesFE() {	
		
	if (xhr.readyState == 4) {
	
		if (xhr.status == 200) {		
			var outMsg = xhr.responseText;
		} 
		else {
			var outMsg = "There was a problem with the request " + xhr.status;
		}

		document.getElementById("service").options.length=0;
		if(outMsg.length>2){
			eval(outMsg);
		}
		// dev only
		//document.getElementById("admin_comment").innerHTML = outMsg;
		
	}
	return true;
}

function buildTable(){

	if(document.getElementById("booking_detail")!=null){
		document.getElementById("booking_detail").style.display = "none";
		document.getElementById("booking_detail").style.visibility = "hidden";
	}
	document.getElementById("selected_resource_id").value="-1";
	document.getElementById("startdate").value="";
	if(document.getElementById("enddate")!=null){ document.getElementById("enddate").value="";}
	document.getElementById("starttime").value="";
	document.getElementById("endtime").value="";
	document.getElementById("errors").innerHTML = "";
	
	if (window.XMLHttpRequest) {
		xhr3 = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xhr3 = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xhr3) {
		xhr3.onreadystatechange = showTable;
		var data = "gridstarttime=" + document.getElementById("gridstarttime").value;
		data = data + "&gridendtime=" + document.getElementById("gridendtime").value;
		if(document.getElementById("category_id")!=null){
			data = data + "&category=" + document.getElementById("category_id").value;
		} else{
			data = data + "&category=0";
		}
		if(document.getElementById("resources")!=null){
			data = data + "&mode=" + document.getElementById("mode").value;	
			data = data + "&resource=" + document.getElementById("resources").value;	
		} else {
			data = data + "&mode=single_day";	
			data = data + "&resource=0";	
		}
		data = data + "&grid_date=" + document.getElementById("grid_date").value;	
		data = data + "&grid_days=" + document.getElementById("grid_days").value;	
		data = data + "&gridwidth=" + document.getElementById("gridwidth").value;	
		data = data + "&namewidth=" + document.getElementById("namewidth").value;	
		data = data + "&browser=" + BrowserDetect.browser;
		//alert(data);
	    document.body.style.cursor = "wait";    		
		xhr3.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_gad&format=raw&" + data, true);
		xhr3.send('');
	}
	else {
		alert("Sorry, but I couldn't create an XMLHttpRequest");
	}
	return true;
}
	
	
	
function showTable() {	
		
	if (xhr3.readyState == 4) {
		document.getElementById("table_here").style.visibility = "visible";
		document.getElementById("table_here").style.display = "";
	
		if (xhr3.status == 200) {		
			var outMsg = xhr3.responseText;
		} 
		else {
			var outMsg = "There was a problem with the request " + xhr3.status;
		}

	    document.body.style.cursor = "default";    
		document.getElementById("table_here").innerHTML = outMsg;
	}
	return true;
}

function changeGrid(){

	if(document.getElementById("category_id")!=null){
		if(document.getElementById("category_id").value == "0"){
		document.getElementById("table_here").innerHTML = "";
		document.getElementById("table_here").visible = false;
		document.getElementById("table_here").display = "none";	
			return false;
		}
	}

	document.getElementById("table_here").innerHTML = document.getElementById("wait_text").value;
	
	document.getElementById("gad_container").style.display = "";
	buildTable();
	
}

function changeDate(){

	if(document.getElementById("category_id")!=null){
		if(document.getElementById("category_id").value == "0"){
		document.getElementById("table_here").innerHTML = "";
		document.getElementById("table_here").visible = false;
		document.getElementById("table_here").display = "none";	
			return false;
		}
	}

	//document.getElementById("table_here").innerHTML = document.getElementById("wait_text").value;
	
	document.getElementById("gad_container").style.display = "";
	buildTable();
	
}

function gridPrevious(){
	document.getElementById("grid_date").value = document.getElementById("grid_previous").value;		
	changeDate();
}

function gridNext(){
	document.getElementById("grid_date").value = document.getElementById("grid_next").value;	
	changeDate();
}

function selectFromGrid(selected){
	
	ary_selected = selected.split("|");

	if(document.getElementById("mode").value == "single_day"){
		// must switch to multi-day to get date/time pickers up
		for (i=0; i<document.getElementById("resources").options.length; i++) {
			if (document.getElementById("resources").options[i].value == ary_selected[0]) {
				document.getElementById("resources").selectedIndex = i;
			}
		}
		changeResource();
	}
		
	
	mouseX = parseInt(document.getElementById("MouseX").value);
	table_left = findPos(document.getElementById("table_here"));
	namewidth = parseInt(document.getElementById("namewidth").value);
	starthour = parseInt(document.getElementById("gridstarthour").value);
	ypos = mouseX-table_left-namewidth;
	aryHourPoints = document.getElementById("GridHourPoints").value.split(",");
	selectedHour = 0;
	i=0;
	while(i<aryHourPoints.length && selectedHour==0){
		if(ypos > aryHourPoints[i]){
			if(i==aryHourPoints.length-1){
				// edge of grid	
				selectedHour = i-1+starthour;
			} else if(ypos < aryHourPoints[i+1]){
				selectedHour = i+starthour;
			}
		}
		i++;
	}
	//alert(selectedHour);
	for (i=0; i<document.getElementById("starttime").options.length; i++) {
		if (document.getElementById("starttime").options[i].value == selectedHour.toString()+":00") {
			document.getElementById("starttime").selectedIndex = i;
		}
	}
	for (i=0; i<document.getElementById("endtime_select").options.length; i++) {
		if (document.getElementById("endtime_select").options[i].value == (selectedHour+1).toString()+":00") {
			document.getElementById("endtime_select").selectedIndex = i;
			setEndTime();
		}
	}
	document.getElementById("selected_resource_id").value=ary_selected[0];
	//document.getElementById("selected_resource").innerHTML = unescape(ary_selected[1].replace(/\+/g,  " "));
	document.getElementById("startdate").value=ary_selected[2];
	document.getElementById("enddate").value=ary_selected[2];
	if(document.getElementById("static_enddate")!=null){document.getElementById("static_enddate").innerHTML = ary_selected[2];}
	//document.getElementById("selected_date").innerHTML = unescape(ary_selected[3].replace(/\+/g,  " "));
	setDuration();
	calcTotal();
}

function getMouseX(e) {
  if (IE) { // grab the x-y pos.s if browser is IE
    tempX = event.clientX + document.body.scrollLeft
  } else {  // grab the x-y pos.s if browser is NS
    tempX = e.pageX
  }  
  // catch possible negative values in NS4
  if (tempX < 0){tempX = 0}  
  document.getElementById("MouseX").value = tempX
  return true
}

function findPos(obj) {
	var curleft = curtop = 0;

	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);

	return curleft;
	}
}

function changeUser(){

	document.getElementById("user_fetch").innerHTML = document.getElementById("wait_text").value;

	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 = "id=" + document.getElementById("users").value;
		data = data + "&browser=" + BrowserDetect.browser;
		//alert(data);

		// asynchronous
		//xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_cancel&format=raw&" + data, true);
		//xhr.send('');

		// synchronous
		xhr.open("GET", "./index.php?option=com_rsbook_pro13&page=ajax_fetch&format=raw&" + data, false);
		xhr.send(null);

		var outMsg = "";
		outMsg = xhr.responseText;
		
		// dev only
		//document.getElementById("cancel_results").innerHTML = outMsg;
		
		aryResults = outMsg.split("|");
		document.getElementById("name").value = aryResults[0];
		document.getElementById("email").value = aryResults[1];
		document.getElementById("user_id").value =  document.getElementById("users").value;
		
		
		document.getElementById("user_fetch").innerHTML = "";
		// synchronous
	}
}

function checkAll2( n, fldName, tab ) {
    if (!fldName) {
       fldName = 'cb';
    }
      var f = document.adminForm;
	  switch (tab)
	  {
		case 2: { var c = f.toggle2.checked; break }

		case 3: { var c = f.toggle3.checked; break }
	 
		case 4: { var c = f.toggle4.checked; break }

		case 5: { var c = f.toggle5.checked; break }

		case 6: { var c = f.toggle6.checked; break }

		default: { var c = f.toggle.checked; break }
	  }
      var n2 = 0;
      for (i=0; i < n; i++) {
          cb = eval( 'f.' + fldName + '' + i );
          if (cb) {
              cb.checked = c;
              n2++;
          }
      }
      if (c) {
          document.adminForm.boxchecked.value = n2;
      } else {
          document.adminForm.boxchecked.value = 0;
      }
}

function tableOrdering( order, dir, prefix ) {
	// I am overriding Joomla's function to make it support ordering different tabs in a form
	var form = document.adminForm;
	ctl = prefix+'filter_order';
	ctl2 = prefix+'filter_order_Dir';
	document.adminForm.elements[ctl].value = order;
	document.adminForm.elements[ctl2].value	= dir;

	  switch (prefix)
	  {
		case "req_": { 	document.getElementById("current_tab").value="0"; break }
		case "res_": { 	document.getElementById("current_tab").value="1"; break }
		case "srv_": { 	document.getElementById("current_tab").value="2"; break }
		case "bo_": { 	document.getElementById("current_tab").value="3"; break }
		case "pp_": { 	document.getElementById("current_tab").value="4"; break }
	  }
	submitform();
}

function parse_service_rates(inStr, i, which){
	aryServices = inStr.split(",");
	for (x in aryServices)
	{
		aryTemp = aryServices[x].split(":");
		if(aryTemp[0]==i){
			if(which=="value"){
				return aryTemp[1];
			} else {
				return aryTemp[2];
			}
		}
	}
}	


// paypal
function calcTotal() {

	if(document.getElementById("enable_paypal").value == 'No'){
		hideTotal();
		return false;
	}
/*	if(document.getElementById("resources").selectedIndex == 0){
		hideTotal();
		return true;
	}
*/	
	startdate = document.getElementById("startdate").value;
	if(!isDate(startdate,"yyyy-MM-dd")){
		hideTotal();
		return;
	}
	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[res_id]);
//	rate_unit = aryRateUnits[res_id];
	if(document.getElementById("service_rates") != null 
							   && document.getElementById("services").style.display != "none"
							   && document.getElementById("service_rates").value != ""){
		// get parse service rates
		var selected_id = document.getElementById("service_name").options[document.getElementById("service_name").selectedIndex].value;
		var service_rate = parse_service_rates(document.getElementById("service_rates").value, selected_id, 'value');
		var service_rate_unit = parse_service_rates(document.getElementById("service_rates").value, selected_id, 'unit');
		//alert(selected_id);
		//alert(service_rate);
		//alert(service_rate_unit);
		if(service_rate=="0.00"){
			rate = parseFloat(aryRates[res_id]);
			rate_unit = aryRateUnits[res_id];
			res_rate=aryRates[res_id].toFixed(2);
		} else {
			rate = parseFloat(service_rate);
			rate_unit = service_rate_unit;	
			res_rate=rate;
		}
		
	} else {
		rate = parseFloat(aryRates[res_id]);
		rate_unit = aryRateUnits[res_id];
    	//if(document.getElementById("aryRates") != null){
		    res_rate=aryRates[res_id].toFixed(2);
		//}
	}

    // -------------------------------------------------------------------
	// 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.0;
		var enddecimal = 0.0;
		var startminutes_as_decimal = 0.0
		var endminutes_as_decimal = 0.0
		
		starttemp = starttime.split(":", 2);
		// minutes as decimal
		startminutes_as_decimal = parseInt(starttemp[1])/60;
		startdecimal = parseFloat(starttemp[0]) + startminutes_as_decimal;


		endtemp = endtime.split(":", 2);
		// minutes as decimal
		endminutes_as_decimal = parseInt(endtemp[1])/60;
		enddecimal = parseFloat(endtemp[0]) + endminutes_as_decimal;
		
		hours = enddecimal - startdecimal;
		if(hours <0){
			document.getElementById("res_hours").innerHTML = "err";	
			document.getElementById("res_total").innerHTML = "";
			if(document.getElementById("res_fee") != null) {
				document.getElementById("res_fee").innerHTML = "";
			}
			document.getElementById("res_grand_total").innerHTML = "err";
			return true;
		}

		if(rate_unit == "Hour"){
			total = hours * rate;					
		} else {
			total = 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 = "";
				if(document.getElementById("res_fee") != null) {
					document.getElementById("res_fee").innerHTML = "";
				}
				document.getElementById("res_grand_total").innerHTML = "err";
				return true;
			}
	
			if(rate_unit == "Hour"){
				total = hours * rate;					
			} else {
				total = 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";
				if(document.getElementById("res_fee") != null) {
					document.getElementById("res_fee").innerHTML = "err";
				}

				document.getElementById("res_grand_total").innerHTML = "err";
				return true;
			}
	
			if(rate_unit == "Hour"){
				total = hours * rate;					
			} else {
				total = rate;					
			}
		}
		
		if(diffdays < 1){
			document.getElementById("res_hours").innerHTML = "err";	
			document.getElementById("res_total").innerHTML = "err";
			if(document.getElementById("res_fee") != null) {
				document.getElementById("res_fee").innerHTML = "err";
			}
			document.getElementById("res_grand_total").innerHTML = "err";
			return true;
		}
		
	
	}
	
	showTotal();

}


function showTotal() {

	document.getElementById("calcResults").style.display = "";
	document.getElementById("calcResults").style.visibility = "visible";
	document.getElementById("res_rate").innerHTML = res_rate;
	//document.getElementById("res_rate").innerHTML = aryRates[res_id].toFixed(2);
	if(rate_unit=="Flat"){
		document.getElementById("res_hours_label").innerHTML = document.getElementById("flat_rate_text").value;
		document.getElementById("res_hours").innerHTML = "";
	} else {
		document.getElementById("res_hours_label").innerHTML = document.getElementById("non_flat_rate_text").value;
		document.getElementById("res_hours").innerHTML = hours.toFixed(2);
	}
	
	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){
		if(document.getElementById("res_fee") != null) {
			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(){
	if(document.getElementById("calcResults") != null) {
		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 setDuration(){
	if(document.getElementById("service_durations") == null) {
		return;
	}
	var which_service = document.getElementById("service_name").selectedItem;
	var selected_id = document.getElementById("service_name").options[document.getElementById("service_name").selectedIndex].value;
	var service_duration = parse_service_durations(document.getElementById("service_durations").value, selected_id, 'value');
	if(service_duration == null) {
		return;
	}
	if(service_duration == 0 ){
		document.getElementById("endtime_label").innerHTML = "";
		document.getElementById("endtime_select").style.visibility = "visible";
		document.getElementById("endtime_select").style.display = "";
		if(document.getElementById("static_enddate") != null) {
			document.getElementById("static_enddate").innerHTML = "";
		}
		if(document.getElementById("anchor2") != null){
			document.getElementById("anchor2").style.visibility = "visible";
			document.getElementById("anchor2").style.display = "";
		}
		setEndTime();
		return; // not set
	}
	var service_duration_unit = parse_service_durations(document.getElementById("service_durations").value, selected_id, 'unit');
	//alert(service_duration);
	//alert(service_duration_unit);
	var startdate = document.getElementById("startdate").value;
	var starttime = document.getElementById("starttime").value;
	
	var d1 = Date.parse(startdate + " " + starttime);
	if(d1 != null){
		if(service_duration_unit == "Minute"){
			d1.add({ minute: service_duration });
		} else {
			d1.add({ hour: service_duration });
		}
		var timeformatstring = "";
		if(document.getElementById("timeFormat").value == "12"){
			timeformatstring = "h:mm tt";
		} else {
			timeformatstring = "H:mm";
		}
		document.getElementById("endtime_label").innerHTML = d1.toString(timeformatstring);
		document.getElementById("endtime").value = d1.toString("H:mm");	
		document.getElementById("endtime_select").style.visibility = "hidden";
		document.getElementById("endtime_select").style.display = "none";
		if(document.getElementById("static_enddate") != null) {
			document.getElementById("static_enddate").innerHTML = d1.toString("yyyy-MM-dd");
		}
		document.getElementById("enddate").value = d1.toString("yyyy-MM-dd");
		if(document.getElementById("anchor2") != null){
			document.getElementById("anchor2").style.visibility = "hidden";
			document.getElementById("anchor2").style.display = "none";
		}
	}
	//alert(d1);

}

function parse_service_durations(inStr, i, which){
	aryDurations = inStr.split(",");
	for(x=0; x<aryDurations.length; x++)
	{
		aryTemp = aryDurations[x].split(":");
		if(aryTemp[0]==i){
			if(which=="value"){
				return aryTemp[1];
			} else {
				return aryTemp[2];
			}
		}
	}
}		

function setEndTime(){
	document.getElementById("endtime").value = document.getElementById("endtime_select").value;
}
	
