// JavaScript Document
function dateConcat(id) {
	m = "0"+$F(id+"_month");
	d = "0"+$F(id+"_day");
	$(id).value = $F(id+"_year")+"-"+m.substr(m.length-2,2)+"-"+d.substr(d.length-2,2);
}

function changeDateSelect(id,date) {
	parts = date.split("-");
	$(id+"_year").value = parts[0];
	$(id+"_month").value = parts[1];
	$(id+"_day").value = parts[2];
	dateConcat(id);
}

function makeTabs(clickable) {
	var clickable = clickable;
	var tabIndex = 0;
	$$('.qSectionName').each(
		function(obj) {
			obj.up().hide();
			sectionName = obj.down('.name').innerHTML;

			if (clickable == true) {
				$('formTabs').insert("<a href='javascript:selectTab("+tabIndex+");'><div class='formTab clickable' id='tab"+tabIndex+"'>"+sectionName+"</div></a>");
			} else {
				// no links
				$('formTabs').insert("<div class='formTab' id='tab"+tabIndex+"'>"+sectionName+"</div>");
			}
			
			if (tabIndex > 0) {
				obj.up().insert("<a href='javascript:selectTab("+(tabIndex-1)+",false);'><div class='formTab' style='min-height:0;'>&lt; Previous</div>");
				$('next'+tabIndex).insert("<div class='formTab' style='min-height:0;'>Next &gt;</div>");
			} 
			// placeholder for next button
			obj.up().insert("<a href='javascript:selectTab("+(tabIndex+1)+",true);' id='next"+(tabIndex+1)+"'></a>");
			
			tabIndex++;
		});
	$('formTabs').insert("<div class='clearer'></div>");
	selectTab(0);
}

function selectTab(tabToSelect,doValidate) {
	var doSelect = true;
	if (doValidate) doSelect = validateCurrentTab();
	
	if (doSelect) {
		var tabIndex = 0;
		$$('.qSection').each(
			function(obj) {
				if (tabIndex == tabToSelect) {
					obj.up().show();
					$('tab'+tabIndex).addClassName('tabSelected');
				} else {
					obj.up().hide();
					$('tab'+tabIndex).removeClassName('tabSelected');
				}
				tabIndex++;
			});
		scrollTo(0,0);
	}
}

// this uses "ajax.php" which doesn't require a logged-in user
function ajax(pars,successFunction) {
	new Ajax.Request('ajax.php',
		{
			method:'post'
			,postBody:pars
			,onSuccess: function(transport){
				var response = transport.responseText || "no response text";
				successFunction(response);
			}
			,onFailure: function(){ alert('Something went wrong...') }
		});
}

var usernameMinLength = 4;
function usernameCheck(field) {
	var value = field.value;
	if (value.length < usernameMinLength) {
		field.focus();
		alert("Please choose a username with at least "+usernameMinLength+" characters.");
	} else {
		var field = field;
		ajax('operation=usernameCheck&value='+value,
			function(response){ 
				if (response == "taken") {
					field.focus();
					alert("That username is taken. Please choose a different one.");
				}
			}
		);
	}
}

function postEvent(value) {
	ajax('operation=postEvent&value='+value,
		 function(response){ 
		 	//nothing
		}
	);
}

var passwordMinLength = 4;
function passwordCheck(field) {
	var value = field.value;
	if (value.length < passwordMinLength) {
		field.focus();
		alert("Please choose a password with at least "+passwordMinLength+" characters.");
	}
}

function makeAutoSave(form) {
	var theForm = form;
	form.getInputs().each (
		function(obj) {
			obj.observe('change',
				function(event) {
					theForm.request();
				}
			);
			obj.observe('click',
				function(event) {
					theForm.request();
				}
			);
		}
	
	);
}

function validateForm(f) {
	var validated = true;
	for (i=0; i < f.length && validated; i++) {
		validated = validateElement(f[i]);
	}
	return validated;
}

function validateCurrentTab() {
	var visibleTab = null;
	$$('.qSection').each(
		function(obj) {
			if(obj.up().style.display != "none") visibleTab = obj;
		}
	);
	var validated = true;
	var elements = visibleTab.descendants();
	
	for (var i = 0; i < elements.length && validated; i++) {
		validated = validateElement(elements[i]);
	}
	
	return validated;
}

function validateElement (element) {
	if ((element.type != "hidden" && element.type != "option")
					&& element.title != null && element.title != "") { 
		if (element.type == "text" 
					//|| element.type == "password" 
					|| element.type == "textarea" 
					|| element.type == "select-one"
					|| element.type == "select-multiple"
					|| element.type == "file") {
			if (element.disabled == false && (element.value == "" || element.value == null || element.value == "null")) {
				alert (element.title);
				try { element.focus(); } catch(err) { /*nothing*/ }
				return false;
			}
			if (element.title.indexOf("email") >= 0) {
				atSign = element.value.indexOf("@");
				dot = element.value.lastIndexOf(".");
				len = element.value.length;
				if (atSign <= 0 || atSign > len - 4 || dot <= 0 || dot > len - 2) {
					alert ("Please enter a valid email address");
					element.focus();
					return false;
				}
			}
		}

		else if ( element.type == "radio" 
						|| element.type == "checkbox") {
			var firstOne = element.up('.qInputs').down('input');
			var isFirstOne =  element.id == firstOne.id;
			if (isFirstOne) {
				var oneWasChecked = false;
				var otherOnes = element.up('.qInputs').descendants();
				otherOnes.each(
					function(obj) {
						if (obj.checked) oneWasChecked = true;
					}
				);
								
				if (!oneWasChecked) {
					alert (firstOne.title);
					//f[focusOne].focus();
					return false;
				}
			}
		}
	}
	return true;
}

function addCosts(str) {
	var total = 0;
	var parts = str.split("$");
	for(var i = 1; i < parts.length; i++) {
		var thisPart = parts[i];
		var thisValue = "";
		var decimal = ".";
		for (var j = 0; (j < thisPart.length && ("01234567890"+decimal).indexOf(thisPart.charAt(j)) != -1); j++) {
			if (thisPart.charAt(j) == decimal) decimal = "";
			thisValue += thisPart.charAt(j);
		}

		if (! isNaN(thisValue))	total += Math.round(thisValue*100);
	}
	return total / 100;
}

function extractNumber(element) {
	// extract any numbers in this element
	if (isNaN(element.value)) {
		var newValue = element.value.match(/\d+\.?\d*/);
		// stupid-ass internet explorer requires this workaround
		if (newValue == "null" || newValue == null || isNaN(newValue)) element.value = "";
		else element.value = newValue;
	}
}
