String.prototype.trim = function() { return this.replace(/^\s*|\s*$/g, ""); }; function is_valid_email(str) { var regex = /^[a-zäöü0-9]+([_\.\-][a-zäöü0-9]+)*@([a-zäöü0-9]*([\.\-][a-zäöü0-9]{2,})*)+\.[a-zäöü]{2,6}$/i; var rgx = new RegExp(regex); return rgx.exec(str) ? true : false; } function validate(elems) { var errors = new Array(); var options; var selections; var checked; var valid; var err; for(var i in elems) { switch(elems[i][0]) { case "text": if(document.getElementById(elems[i][2]).value.trim().length < elems[i][1]) { errors.push(elems[i][3]); } break; case "email": if(!is_valid_email(document.getElementById(elems[i][1]).value)) { errors.push(elems[i][2]); } break; case "multiple": options = document.getElementById(elems[i][2]).childNodes; selections = 0; for(var j in options) { if(options[j].nodeName == "option" || options[j].nodeName == "OPTION") { if(options[j].selected) { selections ++; } } } if(selections < elems[i][1]) { errors.push(elems[i][3]); } break; case "radio": checked = false; for(var j in elems[i][1]) { if(document.getElementById(elems[i][1][j]).checked == true) { checked = true; } } if(!checked) { errors.push(elems[i][2]); } break; case "chain": valid = 0; for(var j in elems[i][2]) { err = validate(new Array(elems[i][2][j])); if(!err.length) { valid ++; } } if(valid < elems[i][1]) { errors.push(elems[i][3]); } break; } } return errors; } function validate_contact_form() { var elems = new Array(); elems["name"] = new Array("text", 3, "name", "name"); elems["email"] = new Array("email", "email", "email"); elems["subject"] = new Array("text", 3, "subject", "subject"); elems["message"] = new Array("text", 10, "message", "message"); var errors = validate(elems); if(errors.length) { alert("forgot something? please complete the following fields:\n\n" + errors.join("\n")); return false; } else { return true; } }