function disableDate(date) {
    var today = new Date();
    return (date.getTime() < today.getTime());
}

function onSubmit(fields) {
    for (i in fields) {
        if (!validate(fields[i])) {
            if (fields[i].id == 'telephone') {
                if (checkEmail('e_mail_address')) {
                    continue;
                }
            }
            if (fields[i].id == 'e_mail_address') {
                if (checkPhone('telephone')) {
                    continue;
                }
            }
            
            try {
                alert(fields[i].error);
                var field = fields[i].id;
                document.getElementById(field).focus();
            } catch (e) {
                //alert(e);
            }
            
            return false;
        }
    }
    return true;
}

validate = function(obj) {
    var valid = false;
    switch (obj.type) {
        case 'string':
            valid = checkEmpty(obj.id);
            break;
        case 'select':
            valid = checkSelect(obj.id);
            break;
        case 'email':
            valid = checkEmail(obj.id);
            break;
        case 'date':
            valid = checkDate(obj.id, obj.fmt);
            if (obj.compareTo) {
                var cmp = compareDate(obj.id, obj.compareTo, obj.fmt);
                valid = (valid && cmp);
            }
            break;
        case 'phone':
            valid = checkPhone(obj.id);
            break;
        case 'integer':
            valid = checkInteger(obj.id);
            break;
    }
    
    return valid;
}

checkEmpty = function(field) {
    if (document.getElementById(field).value != '') {
        return true;
    } else {
        return false;
    }
}

checkInteger = function(field) {
    if (document.getElementById(field).value.match(/^\d+$/)) {
        return true;
    } else {
        return false;
    }
}

checkSelect = function(field) {
    if (document.getElementById(field).selectedIndex > 0) {
        return true;
    } else {
        return false;
    }
}

checkEmail = function(field) {
    if (document.getElementById(field).value.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/)) {
        return true;
    } else {
        return false;
    }
}

checkDate = function(field, fmt) {
    if (parDate(document.getElementById(field).value, fmt)) {
        return true;
    } else {
        return false;
    }
}

compareDate = function(date_1, date_2, fmt) {
    if ((parDate(document.getElementById(date_1).value, fmt) > parDate(document.getElementById(date_2).value, fmt)) || (parDate(document.getElementById(date_1).value, fmt) == parDate(document.getElementById(date_2).value, fmt))) {
        return true;
    } else {
        return false;
    }
}

checkPhone = function(field) {
    if (document.getElementById(field).value.match(/^((([\+]?)([\(]?)([0-9]){2,5}(\))?)+([ ]*)([2-9]){1,3}(([ \.-]?)([0-9]+)([ \.-]?))+){1}$/)) {
        return true;
    } else {
        return false;
    }
}

parDate = function(str, fmt) {
    var y = 0;
	var m = -1;
	var d = 0;
	var a = str.split(/\./);
	var b = fmt.match(/%./g);
	var i = 0, j = 0;
	var hr = 0;
	var min = 0;
	for (i = 0; i < a.length; ++i) {
		if (!a[i])
			continue;
		switch (b[i]) {
		    case "%d":
		    case "%e":
			d = parseInt(a[i], 10);
			break;

		    case "%m":
			m = parseInt(a[i], 10) - 1;
			break;

		    case "%Y":
		    case "%y":
			y = parseInt(a[i], 10);
			(y < 100) && (y += (y > 29) ? 1900 : 2000);
			break;

		    case "%b":
		    case "%B":
			for (j = 0; j < 12; ++j) {
				if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) {
				    m = j; 
				    break; 
                }
			}
			break;

		    case "%H":
		    case "%I":
		    case "%k":
		    case "%l":
			hr = parseInt(a[i], 10);
			break;

		    case "%P":
		    case "%p":
			if (/pm/i.test(a[i]) && hr < 12)
				hr += 12;
			break;

		    case "%M":
			min = parseInt(a[i], 10);
			break;
		}
	}
	if (y != 0 && m != -1 && d != 0) {
		return (new Date(y, m, d, hr, min, 0));
	}
	y = 0; m = -1; d = 0;
	for (i = 0; i < a.length; ++i) {
		if (a[i].search(/[a-zA-Z]+/) != -1) {
			var t = -1;
			for (j = 0; j < 12; ++j) {
				if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; }
			}
			if (t != -1) {
				if (m != -1) {
					d = m+1;
				}
				m = t;
			}
		} else if (parseInt(a[i], 10) <= 12 && m == -1) {
			m = a[i]-1;
		} else if (parseInt(a[i], 10) > 31 && y == 0) {
			y = parseInt(a[i], 10);
			(y < 100) && (y += (y > 29) ? 1900 : 2000);
		} else if (d == 0) {
			d = a[i];
		}
	}
	if (y == 0) {
		var today = new Date();
		y = today.getFullYear();
	}
	if (m != -1 && d != 0) {
		return (new Date(y, m, d, hr, min, 0));
	}
	return false;
};
