// JavaScript Document
function func_get_args() {
	if (!arguments.callee.caller) {
        try {
            throw new Error('Either you are using this in a browser which does not support the "caller" property or you are calling this from a global context');
            return false;
        } catch(e){
            return false;
        }
    }
    return Array.prototype.slice.call(arguments.callee.caller.arguments);
}

function strstr( haystack, needle, bool ) {
	var pos = 0;
 
    haystack += '';
    pos = haystack.indexOf( needle );
    if( pos == -1 ){
        return false;
    } else{
        if( bool ){
            return haystack.substr( 0, pos );
        } else{
            return haystack.slice( pos );
        }
    }
}

function status(message, classID, className)
{
	var html = "";
	var count = message.length;
	var status;
	if (classID == null) {
		status = $("error");
	} else {
		status = $(classID);
	}
	html = '<p>';
	for (var i = 0; i < count; i++)
	{
		html += message[i];
	}
	html += '</p>';
	status.innerHTML = html;
	if (className == null) {
		status.className = "errorDisplay";
	} else {
		status.className = className;
	}
}

function validateInteger(int, minvalue, maxvalue)
{
	var regex = /^\d+$/;
	var intval;
	var minval;
	var maxval;
	
	var initReg = regex.test(int);
	if (minvalue == null && maxvalue == null) {
		return initReg;	
	} else {
		if (initReg === false) {
			return initReg;
		}
		
		intval = parseInt(int);
		
		if (minvalue == null && maxvalue != null) {
			maxval = parseInt(maxvalue);
			if (intval > maxval) {
				return false;
			}
		} else {
			minval = pareseInt(minvalue);
			if (intval > minval) {
				return false;
			}
		}
	}
}

function validateDouble(double)
{
	var regex = /^[0-9]+((\.[0-9]+)|)$/;
	return regex.test(double)
}

function validateEmail(email)
{
	var regex = /^[a-zA-Z0-9 \._\-]+@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]+$/;
	return regex.test(email);
}

function validateName(name)
{
	var regex = /^[a-zA-Z0-9\. \-\'áäãéëíïóöúÁÄÃÉËÍÏÓÖÚüÜñÑÆæ]+$/;
	return regex.test(name);
}

function validatePhone(phone)
{
	var regex = /^((1|)(\(|-|.| )|)[0-9]{3}(\(|.| |-|)[0-9]{3}(.| |-|)[0-9]{4}$/;
	return regex.test(phone);
}

function validateZip(zip)
{
	var regex = /^[0-9]{5}(-|)([0-9]{4}|)$/;
	return regex.test(zip);
}

function validateRequired(field)
{
	if (field.length === 0) {
		return false;
	}
	return true;
}

function validateDate(date)
{
	var regex = /^(0[1-9]|1[0-2])(\/|\\|-|\.| )(0[1-9]|[12][0-9]|3[01])(\/|\\|-|\.| )[12][0-9][0-9][0-9]$/;
	return regex.test(date);
}

//global form validation script
function validateForm(messageID)
{
	var fields = func_get_args();
	var count = fields.length;
	var fieldName;
	var fieldValue;
	var fieldItem;
	var functionName;
	var regex;
	var validateResult;
	var j = 0;
	var message = new Array();
	var label;
	var origColor;
	var pos;
	//iterate through fields, validate based on validate field on form item
	for (i = 1; i < count; i++) {
		fieldName = fields[i];
		fieldItem = $(fieldName);
		fieldValue = fieldItem.value;
		//alert(fieldName+" "+fieldValue);
		label = $("lbl"+fieldName);
		labelValue = label.innerHTML;
		pos = labelValue.indexOf(":");
		if(pos != -1) {
			labelValue = labelValue.substr(0, pos);
		}
		functionName = fieldItem.getAttribute('validate');
		required = fieldItem.getAttribute('required');
		
		if (required != null) {
			validateResult = validateRequired(fieldValue);
			if (validateResult === false) {
				message[j] = "You left field "+labelValue+" blank.";
				label.style.color = "#990000";
				j++;
				continue;
			} else {
				label.style.color = "#000000";	
			}
			
		}
		
		switch (functionName) {
			
			case "validatePhone":
				validateResult = validatePhone(fieldValue);
				break;
				
			case "validateZip":
				validateResult = validateZip(fieldValue);
				break;
				
			case "validateRequired":
				validateResult = validateRequired(fieldValue);
				break;
				
			case "validateDouble":
				validateResult = validateDouble(fieldValue);
				break;
				
			case "validateEmail":
				validateResult = validateEmail(fieldValue);
				break;
				
			case "validateInteger":
				validateResult = validateInteger(fieldValue);
				break;
			
			default:
				validateResult = true;
		}
		if (validateResult === false) {
			if (functionName == "validateRequired") {
				message[j] = "You left field "+labelValue+" blank.";
			} else {
				message[j] = "You did not enter a valid value for "+labelValue+".";
			}
			message[j] = "You did not enter a valid value for "+labelValue+".";
			label.style.color = "#990000";
			j++;
		} else {
			label.style.color = "#000000";
			message[j] = "";
		}
	}
	if (j > 0) {
		status(message, messageID);
		return false;
	}
	return true;
}

