// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function isNumberKey(event, value)
{
	if (isDeleteKey(event)) 
		return true;
		
	var charCode = (event.which) ? event.which : event.keyCode
	if (charCode == 46) {
		if (value.indexOf(".") >= 0)
			return false
		return true
	}
	else if (charCode == 44) {
		// No comma allowed
		return false
	}
	else if (!isDigitKey(event))
		return false;	
	return true;
}

function isArrowKey(c)
{
	return (c >= 37 && c <= 40);
}

function isDeleteKey(event)
{
	// IE6 doesn't fire the event.
	// This is for firefox.
	return (event.charCode == null || event.charCode == 0) && event.keyCode == 46
}

function isDigitKey(event)
{
	var charCode = (event.which) ? event.which : event.keyCode
	if (!isArrowKey(charCode) && !isDeleteKey(event) && charCode > 31 && (charCode < 48 || charCode > 57))
		return false;	
	return true;
}

function isFractionKey(event, value)
{
	var charCode = (event.which) ? event.which : event.keyCode
	
	if (charCode == 46) {
		if (value.indexOf(".") >= 0 ||
		    value.indexOf("/") >= 0 ||
			value.indexOf(" ") >= 0) {
			// No multiple periods, no period after slash, no period after space
			return false
		}
		// Period
		return true
	}
	if (charCode == 32) {
		if (value.length == 0 ||
		    value.indexOf("/") >= 0 ||
			value.indexOf(".") >= 0) {
			return false
		}
		// Space
		return true
	}
	else if (charCode == 47) {
		if (value.length == 0 ||
		    value.indexOf("/") >= 0 || 
			value.indexOf(".") >= 0 ||
			value.indexOf(" ") < 0) {
			// No multiple slashes, no slash after period
			return false
		}
		// Slash
		return true
	}
	else if (charCode > 31 && (charCode < 48 || charCode > 57)) {
		return false;	
	}
	return true;
}

function isHour(elementName, value){
  return withinRange(elementName, "Hour", value, 1, 12);
}

function isMinute(elementName, value){
  return withinRange(elementName, "Minute", value, 0, 59);
}

function check_mobile_times() {
  return is_valid_ymd("begin_time", "Begin Date") &&
         is_valid_ymd("end_time", "End Date") &&
         is_valid_time("begin_time", "Begin Time", false) &&
         is_valid_time("end_time", "End Time", true)
}

function is_valid_date(element_name, printable_name) {
  var year = document.getElementById(element_name + "_time_1i").value
  var month = document.getElementById(element_name + "_time_2i").value
  var day = document.getElementById(element_name + "_time_3i").value
  var dayobj = new Date(year, month-1, day)
  var valid = ((dayobj.getMonth()+1 == month) && (dayobj.getDate() == day) && (dayobj.getFullYear() == year))
  if (!valid) {
    alert("Please enter a valid " + (printable_name == null ? "date" : printable_name) + ".")
    return false
  }
  else {
    return true
  }
}

function is_valid_ymd(element_name, printable_name) {
  var year_element = document.getElementById(element_name + "_year")
  var year = null
  if (year_element == null) {
    var today = new Date
    year = today.getYear()
  }
  else {
    year = year_element.value
  }
  var month = document.getElementById(element_name + "_month").value
  var day = document.getElementById(element_name + "_day").value
  var dayobj = new Date(year, month-1, day)
  var valid = ((dayobj.getMonth()+1 == month) && (dayobj.getDate() == day) && (dayobj.getFullYear() == year))
  if (!valid) {
    alert("Please enter a valid " + (printable_name == null ? "date" : printable_name) + ".")
    return false
  }
  else {
    return true
  }
}

function is_valid_time(element_name, printable_name, null_ok) {
  var hour = document.getElementById(element_name + "_hour").value
  var minute = document.getElementById(element_name + "_minute").value
  var valid = (null_ok && (hour == '') && (minute == '')) || ((hour != '') && (hour >= 1) && (hour <= 12) && (minute != '') && (minute >= 0) && (minute <= 60))
  if (!valid) {
    alert("Please enter a valid " + (printable_name == null ? "time" : printable_name) + ".")
    return false
  }
  else {
    return true
  }
}

function isEmailAddress(a) {
  v = a.value
  if (v != null) {
    v = v.strip()
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
    found = reg.test(v)
    if (found == true) 
      return true
    else {
      alert("'" + v + "'" + " is not an email address. Please try again.")
      return false;
    }
  }
  else {
    return false;
  }
}

function withinRange(elementName, name, value, lower, upper){
  if (value == null) {
    e = document.getElementById(elementName)
    value = e.value;
  }
  if (value != null && value != "" && (value < lower || value > upper)) {
    alert(name + " must be between " + lower + " and " + upper + ".");
    setTimeout(function () {e.focus()}, 50);
    return false;
  }
  return true;
}

function moveFocusTo(event, value, length, elementID)
{
	// Ignore tab and shift
	var charCode = (event.which) ? event.which : event.keyCode
	if ((charCode != 9) && (charCode != 16)&& (value.length == length)) {
		e = document.getElementById(elementID)
		e.focus()
	}
	return true
}

function move_list(prefix, begin_index, end_index)
{
	to = document.getElementById(prefix + begin_index);
	for (i = begin_index; i < end_index; i++) {
		from_id = prefix + (i + 1)
		from = document.getElementById(from_id);
		to.value = from.value;
		to = from;
	}
	from.value = "";
}

function update_date(name) {
  year_element = document.getElementById(name + "_year")
  month_element = document.getElementById(name + "_month")
  day_element = document.getElementById(name + "_day")
  today = new Date()
  year_element.value = today.getFullYear()
  month_element.value = today.getMonth() + 1
  day_element.value = today.getDate()
}

function clear_date(name) {
  year_element = document.getElementById(name + "_year")
  month_element = document.getElementById(name + "_month")
  day_element = document.getElementById(name + "_day")
  year_element.value = ""
  month_element.value = ""
  day_element.value = ""
}

function submitOnEnter(myfield, e)
{
	var keycode;
	if (window.event) 
		keycode = window.event.keyCode;
	else if (e) 
		keycode = e.which;
	else 
		return true;

	if (keycode == 13) {
		if (!is_blank(myfield)) {
	    myfield.form.submit();
		}
		return false;
  }
	else
   	return true;
}

function setSelectionRange(input, selectionStart, selectionEnd) {
	if (input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionStart);
	}
	else if (input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	}
}

function is_blank(input) {
	return (input == null ||
					input.value == null ||
					input.value.strip().length == 0);
}

function check_passwords(form, fieldName1, fieldName2)
{
  var field1 = form[fieldName1];
  var field2 = form[fieldName2];
  
	if ($F(fieldName1) == $F(fieldName2))
	  return true;
  
  field1.clear();
  field2.clear();
  field1.focus();
  alert("The two passwords do not match. Please re-enter both passwords.");
  return false;
}

function update_entry_box(e, default_value)
{
  if (e.value == default_value)
    e.value = '';
  e.select();
  return true;
}

function check_time(time_name)
{
  if (!isHour(time_name + "_hour")) {
    return false;
  }
  if (!isMinute(time_name + "_minute")) {
    return false;
  }
  return true;
}
