codice:
function form_behave(control, key, rules){
rules = forms_rulesToArray(rules);
for (var i = 0; i < rules.length; i++)
{
var rule = rules[i].split(/\s*:\s*/);
if (rule.length < 2) continue;
if (!forms_instring(' '+rule[0]+' ', control.name)) continue;
rule[1] = rule[1].split(/\s+/);
switch (rule[1][0])
{
// ----- wordcount -----
case 'wordcount':
var formcontent = control.value;
while(formcontent.indexOf(" ") > 0){
formcontent = formcontent.replace(" "," ");
}
formcontent = formcontent.split(" ");
document.getElementById(rule[1][1]).innerHTML = formcontent.length;
if (rule[1].length >= 5)
if (formcontent.length <= rule[1][2]){
document.getElementById(rule[1][1]).style.color = rule[1][3];
control.className = control.className.replace('overflow','');
control.className = control.className.replace('formErr','');
}else{
document.getElementById(rule[1][1]).style.color = rule[1][4];
if(control.className.indexOf('overflow') != 1){
control.className = control.className + ' overflow formErr';
}
}
break;
// ----- next -----
case 'next':
if (control.value.length == rule[1][1]) smartforms_focusNext(control);
break;
// ----- prev -----
case 'prev':
if (control.value.length == 0 && key == 8) smartforms_focusPrev(control);
break;
}
}
return true;
}
// ----- getElement ------------------------------------------------------------
function formGetSettings(tag, name)
{
var settings = "";
for (var i = 0; i < tag.elements.length; i++){ //for each formsetting hidden tag
if (tag.elements[i].name.substr(0,tag.elements[i].name.length) == name){
settings = settings + tag.elements[i].value;
}
}
return settings;
}
// ----- inString --------------------------------------------------------------
function forms_instring(str, val)
{
return str.indexOf(' '+val+' ') >= 0;
}
// ----- focusNext -------------------------------------------------------------
function smartforms_focusNext(tag)
{
for (var i = 0; i < tag.form.elements.length; i++)
if (tag.form.elements[i] == tag)
for (var j = i+1; j < tag.form.elements.length; j++)
if (forms_instring(smartforms_edit, tag.form.elements[j].type))
{
if (forms_instring(smartforms_type, tag.form.elements[j].type))
smartforms_setSelection(tag.form.elements[j], 0, 0, 'frEnd');
else tag.form.elements[j].focus();
return false;
}
return true;
}
// ----- focusPrev -------------------------------------------------------------
function smartforms_focusPrev(tag)
{
for (var i = 0; i < tag.form.elements.length; i++)
if (tag.form.elements[i] == tag)
for (var j = i-1; j >= 0; j--)
if (forms_instring(smartforms_edit, tag.form.elements[j].type))
{
if (forms_instring(smartforms_type, tag.form.elements[j].type))
smartforms_setSelection(tag.form.elements[j], 0, 0, 'frEnd');
else tag.form.elements[j].focus();
return false;
}
return true;
}
function forms_rulesToArray(rules)
{
rules = rules.replace(/^(\s*)(\S.*)/, "$2");
rules = rules.replace(/(.*\S)(\s*)$/, "$1");
return rules.split(/\s*;\s*/);
}
// ----- Initialize ------------------------------------------------------------
function formActivate(control, rules)
{
rules = forms_rulesToArray(rules);
for (var i = 0; i < rules.length; i++)
{
var rule = rules[i].split(/\s*:\s*/);
if (rule.length < 2) continue;
if (!forms_instring(' '+rule[0]+' ', control.name)) continue;
rule[1] = rule[1].split(/\s+/);
switch (rule[1][0])
{
case 'wordcount':
var formcontent = control.value;
while(formcontent.indexOf(" ") > 0){
formcontent = formcontent.replace(" "," ");
}
formcontent = formcontent.split(" ");
document.getElementById(rule[1][1]).innerHTML = formcontent.length;
if (rule[1].length >= 5)
if (formcontent.length <= rule[1][2]){
document.getElementById(rule[1][1]).style.color = rule[1][3];
control.className = control.className.replace('overflow','');
control.className = control.className.replace('formErr','');
}else{
document.getElementById(rule[1][1]).style.color = rule[1][4];
if(control.className.indexOf('overflow') != 1){
control.className = control.className + ' overflow formErr';
}
}
break;
}
}
return true;
}
// ----- onChange --------------------------------------------------------------
function forms_onchange(e)
{
var ie = navigator.appName == "Microsoft Internet Explorer";
var tag = ie ? window.event.srcElement : e.target;
return true;
}
// ----- onKeypress ------------------------------------------------------------
function forms_onkeypress(e)
{
var ie = navigator.appName == "Microsoft Internet Explorer";
var tag = ie ? window.event.srcElement : e.target;
var key = ie ? window.event.keyCode : e.which;
if (key == 8) //over rise both backspace and enter
return forms_instring(smartforms_type, tag.type);
if (key == 13 && tag.type != 'textarea')
return smartforms_focusNext(tag);
return true;
}
// ----- onKeyup ---------------------------------------------------------------
function forms_onkeyup(e)
{
var ie = navigator.appName == "Microsoft Internet Explorer";
var tag = ie ? window.event.srcElement : e.target;
var key = ie ? window.event.keyCode : e.which;
var settings = formGetSettings(tag.form, 'form_settings');
if (settings !== "") form_behave(tag, key, settings);
}
// ----- Register --------------------------------------------------------------
function initForms()
{
for (var i = 0; i < document.forms.length; i++){
with (document.forms[i]){
settings = formGetSettings(document.forms[i], 'form_settings');
for (var j = 0; j < elements.length; j++)
{
if (settings != "") formActivate(elements[j], settings);
elements[j].onchange = forms_onchange;
elements[j].onkeypress = forms_onkeypress;
elements[j].onkeyup = forms_onkeyup;
}
}
}
}
var modal_msg = "";
var modal = false; // popup error
var err = true; // on page errors
var displayErrorMessage = function(form, field, first) {
var labels = document.getElementsByTagName('label');
var errorMsg = '';
if (field.type=='radio'||field.type=='checkbox'||field.type=='select-one') {
for (var i = 0; i<labels.length; i++) {
if (labels[i].htmlFor==field.name) {
errorMsg = 'Non hai compilato il campo ' + labels[i].innerHTML.replace('*','').replace(':','');
}
}
} else {
for (var i = 0; i<labels.length; i++) {
if (labels[i].htmlFor==field.id) {
if (field.className.indexOf('overflow') != -1){ //a count overflow
errorMsg = 'You have exceeded the allowed number of words for ' + labels[i].innerHTML.replace('*','').replace(':','');
}else{
errorMsg = 'Non hai compilato il campo ' + labels[i].innerHTML.replace('*','').replace(':','');
}
}
}
}
if (modal) {
modal_msg += errorMsg;
}
if (err) {
errorDiv = document.getElementById(field.id + '-err');
if (document.getElementById(field.id + '-err')) {
errorDiv.innerHTML = errorMsg;
}
}
if(first){
field.focus();
}
}
function validateForm(form){
//get all the form fields
var fields = form.elements;
var passedCheck = true;
for (var i=0; i<fields.length; i++) {
if (fields[i].className.indexOf('wordcount') != -1){
if(fields[i].className.indexOf('overflow') != -1){
err == true ? displayErrorMessage(form, fields[i], passedCheck) : null;
passedCheck = false;
}else{
fields[i].className = fields[i].className.replace('formErr','');
errorDiv = document.getElementById(fields[i].id + '-err');
if (errorDiv) {
errorDiv.innerHTML = '';
}
}
}else if (fields[i].className.indexOf('req') != -1) {
// Text, Textarea, File
if (fields[i].type=='text'||fields[i].type=='textarea'||fields[i].type=='file') {
if (fields[i].value=="") {
fields[i].className = fields[i].className + ' formErr';
err == true ? displayErrorMessage(form, fields[i], passedCheck) : null;
passedCheck = false;
} else if(fields[i].className.indexOf('validemail') != -1 ){ //validate email
var dot = fields[i].value.lastIndexOf('.');
var at = fields[i].value.indexOf('@');
if( (dot - at) > 0 && at > 0 ){ //valid
fields[i].className = fields[i].className.replace('formErr','');
errorDiv = document.getElementById(fields[i].id + '-err');
if (errorDiv) {
errorDiv.innerHTML = '';
}
} else {
errorDiv = document.getElementById(fields[i].id + '-err');
if (document.getElementById(fields[i].id + '-err')) {
errorDiv.innerHTML = "Attenzione la mail non è valida";
}
passedCheck = false;
}
} else { //no error
fields[i].className = fields[i].className.replace('formErr','');
errorDiv = document.getElementById(fields[i].id + '-err');
if (errorDiv) {
errorDiv.innerHTML = '';
}
}
}
// Radio
else if (fields[i].type=='radio') {
var radiogroup = el[fields[i].name];
var itemchecked = false;
for(var j = 0 ; j < radiogroup.length ; ++j) {
if(radiogroup[j].checked) {
itemchecked = true;
break;
}
}
if(!itemchecked) {
fields[i].className = fields[i].className + ' formErr';
err == true ? displayErrorMessage(form, fields[i], passedCheck) : null;
passedCheck = false;
} else {
errorDiv = document.getElementById(fields[i].id + '-err');
if (errorDiv) {
errorDiv.innerHTML = '';
}
}
}
// Checkbox
else if (fields[i].type=='checkbox') {
var itemchecked = false;
var elems = document.getElementsByTagName("input");
for(var j=0; j<elems.length; j++) {
if(elems[j].type=='checkbox'&&elems[j].name==fields[i].name) {
if(elems[j].checked) {
itemchecked = true;
break;
}
}
}
if(!itemchecked) {
fields[i].className = fields[i].className + ' formErr';
err == true ? displayErrorMessage(form, fields[i], passedCheck) : null;
passedCheck = false;
} else {
errorDiv = document.getElementById(fields[i].id + '-err');
if (errorDiv) {
errorDiv.innerHTML = '';
}
}
}
// Select-one
else if (fields[i].type=='select-one') {
if (fields[i].selectedIndex==0) {
fields[i].className = fields[i].className + ' formErr';
err == true ? displayErrorMessage(form, fields[i], passedCheck) : null;
passedCheck = false;
} else {
fields[i].className = fields[i].className.replace('formErr','');
errorDiv = document.getElementById(fields[i].id + '-err');
if (errorDiv) {
errorDiv.innerHTML = '';
}
}
}
// Select-multiple
else if (fields[i].type=='select-multiple') {
var optionselected = false;
for(var j=0;j<fields[i].options.length; ++j) {
if (fields[i].options[j].selected) {
optionselected = true;
break;
}
}
if (!optionselected) {
fields[i].className = fields[i].className + ' formErr';
err == true ? displayErrorMessage(form, fields[i], passedCheck) : null;
passedCheck = false;
} else {
fields[i].className = fields[i].className.replace('formErr','');
errorDiv = document.getElementById(fields[i].id + '-err');
if (errorDiv) {
errorDiv.innerHTML = '';
}
}
}
}
}
if(passedCheck == true){
return true;
} else {
if(modal == true){
alert(modal_msg);
}
return false;
}
}
function submitThis(aform){
if(validateForm(aform)){
aform.submit();
}
}
...ripeto, funziona tutto: la mail mi arriva ma è vuota.