﻿/*

	Validate Javascript Module
	(c) Copyright 2010 - Widget Inc.

	Version: 1.2
	
	Requires: common.js
	
*/

/********/

var number_type = {
	integer: 0,
	decimal: 1,
	currency: 2,
	card_number: 3
}// number_type;

/********/

function numeric_only (sender, type) {
	var key = window.event.keyCode;
	if (!type) type = number_type.integer;
	if ((key == 8) || (key == 9) || (key == 189)) return true;
	if ((key == 37) || (key == 39)) return true;
	if ((key == 32) && (type == number_type.card_number) && (sender.value.last_char () != space)) return true;
	if ((key == 46) && (type != (number_type.integer || number_type.card_number)) && (sender.value.indexOf (".") == -1)) return true; // legal decimal point
	if ((key >= 48) && (key <= 57)) {
		if (type != number_type.currency) return true;
		if (sender.value.indexOf (".") == -1) return true;
		if (sender.value.length - sender.value.indexOf (".") < 3) return true;
	}// if;
	return false;
}// numeric_only;

/********/

function validate_discount (sender, percent_radio) {
	if (percent_radio.checked) return numeric_only (sender, number_type.decimal);
	return numeric_only (sender, number_type.currency);
}/* validate_discount */

/********/

function item_list (fields) {
	var text = blank;
	for (var x = 0; x < fields.length; x++) {
		if (text != blank) text += "\n";
		text += fields [x];
	}// for;
	return text;
}// item_list;

/********/

function show_empty_fields (fields) {
	switch (fields.length) {
		case 1: alert (fields [0] + " is a required field."); break;
		default: alert ("The following are required fields:\n\n" + item_list (fields));
	}// switch;
	return false;
}// show_empty_fields;

/********/

function show_minimum_fields (fields) {
	alert ("Please supply one of the following:\n\n" + item_list (fields));
	return false;
}// show_minimum_fields;

/********/

function check_required_fields (active_form) {
	var field_list = new Array;
	for (var i = 0; i < active_form.children.length; i++) {
		var field = active_form.children [i];
		var active_value = field_value (field);
		var required_text = field.getAttribute ("required");
		if (active_form.children [i].hasChildNodes ()) field_list = field_list.concat (check_required_fields (field));
		if (isundefined (required_text)) continue;
		if (((active_value == blank) || (active_value == 0)) && (field_list.indexof (required_text) == -1)) field_list.push (required_text);
	}// for;
	return field_list;
}/* check_required_fields */

/********/

function validate_required_fields (active_form) {
	var field_list;
	if (isundefined (active_form)) active_form = document.body;
	field_list = check_required_fields (active_form);
	if (field_list.length == 0) return true;
	return show_empty_fields (field_list);
}// validate_required_fields;

/********/

function validate_form (active_form) {
	return validate_required_fields (active_form);
}// validate_form;

/********/

function dependent_field_complete (text, checkbox /* paramarray dependent_fields */) {
	for (var i = 2; i < arguments.length; i++) {
		if ((checkbox) && (arguments [i].value == blank)) {
			alert (text);
			return false;
		}// if;
	}// next;
	return true;
}// dependent_field_complete;

/********/

function required_fields_complete () {
	return validate_form (form ());
}// required_fields_complete;

/********/

function minimum_fields_complete () {
	var field_list = null;
	for (var i = 0; i < arguments.length; i++) {
		if (field_value (arguments [i]) != blank) return true;
		if (isundefined (field_list)) field_list = new Array;
		field_list.push (arguments [i].getAttribute ("minimum"));
	}// for;
	return show_minimum_fields (field_list);
}// minimum_fields_complete;

/******** For use with widget.forms.phone_field ********/

function validate_phone_number (prefix, friendly_name) {
	var field_list = new Array;
	for (var active_form = 0; active_form < document.forms.length; active_form++) {
		for (var active_element = 0; active_element < document.forms [active_form].elements.length; active_element++) {
			var active_field = document.forms [active_form].elements [active_element];
			if (attribute ("datafield", active_field).indexof (lowercase (prefix.trim ())) != 0) continue;
			if ((field_value (active_field) != blank) && (field_value (active_field) != 0)) field_list.push (active_field);
		}// for
	}// for;
	if ((field_list.length == 0) || (field_list.length == 2)) return true;
	if (field_list [0].getAttribute ("datafield").indexof ("phone_number") == -1) return true;
	alert (friendly_name + space + "requires a phone type");
	return false;
}// validate_phone_number;

/********/

function valid_email_address (address) {
	var valid_address = true;
	if (address.instances ("@") > 1) valid_address = false;
	if ((address.indexOf ("@") < 1) || (address.indexOf ("@") > address.length - 2)) valid_address = false;
	if (!valid_address) {
		alert (address + " is not a valid email address");
		return false;
	}// if;
	return true;
}// valid_email_address;

/********/

function validate_email (first_address, second_address) {
	if (first_address.trim ().toLowerCase () == second_address.trim ().toLowerCase ()) return true;
	alert ("Email addresses do not match!\nPlease try again.");
	return false;
}// validate_email;

/********/
