
// whitespace characters
var whitespace = " \t\n\r";


// Check whether string s is empty.
function isEmpty(s) {
	return ((s == null) || (s.length == 0))
}

// Returns true if string s is empty or
// whitespace characters only.
function isWhitespace (s) {

	var i;

    // Is s empty?
    if (isEmpty(s)) return true;

    // Search through string's characters one by one
    // until we find a non-whitespace character.
    // When we do, return false; if we don't, return true.
    for (i = 0; i < s.length; i++) {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

// WORKAROUND FUNCTION FOR NAVIGATOR 2.0.2 COMPATIBILITY.
//
// The below function *should* be unnecessary.  In general,
// avoid using it.  Use the standard method indexOf instead.
//
// However, because of an apparent bug in indexOf on
// Navigator 2.0.2, the below loop does not work as the
// body of stripInitialWhitespace:
//
// while ((i < s.length) && (whitespace.indexOf(s.charAt(i)) != -1))
//   i++;
//
// ... so we provide this workaround function charInString
// instead.
//
// charInString (CHARACTER c, STRING s)
//
// Returns true if single character c (actually a string)
// is contained within string s.
function charInString (c, s) {
	for (i = 0; i < s.length; i++) {
		if (s.charAt(i) == c) return true;
    }
    return false
}



// Removes initial (leading) whitespace characters from s.
// Global variable whitespace (see above)
// defines which characters are considered whitespace.
function stripInitialWhitespace (s) {
	var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;

    return s.substring (i, s.length);
}

function checkEmail(src)

{

 if (src==null || src=='')

   return true;

 else

 {

  var regex = /^[a-z0-9A-Z\_\.\-]{1,}[\@@]{1}[a-z0-9A-Z\_\.\-]*[a-z0-9A-Z]{1}[\.]{1}[a-zA-Z]{2,6}$/;

  return !(src.match(regex)==null);

 }

}

//return true if length of s is < textAreaLength
function isValidTextArea(input) {
	var textAreaLength = 2000;
	var s = input.value;
	return (s.length <= textAreaLength);
}

function isCorrectForm() {
	var form = document.forms["fillForm"];
	var lang = form.elements["currentCodeLang"].value;

	var errorMsg = "";
    var errorNb = 0;

	var lastName = stripInitialWhitespace(form.elements["LastName"].value);
	var firstName = stripInitialWhitespace(form.elements["FirstName"].value);
    var email = stripInitialWhitespace(form.elements["Email"].value);
	var confEmail = stripInitialWhitespace(form.elements["ConfEmail"].value);
	var phone = stripInitialWhitespace(form.elements["Telephone"].value);
	var remarks = form.Remarks;
	var conditions = form.ConditionsGenerales;

    if (isWhitespace(lastName)) {
		if (lang == 'fr') {
			errorMsg+="  - Le champ 'Nom' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Last name' must be filled\n";
		}
       errorNb++;
     }

	if (isWhitespace(firstName)) {
		if (lang == 'fr') {
			errorMsg+="  - Le champ 'Prénom' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'First name' must be filled\n";
		}
       errorNb++;
     }

	if (lastName == firstName) {
		if (lang == 'fr') {
			errorMsg+="  - Les champs 'Nom' et 'Prénom' sont identiques\n";
		} else {
			errorMsg+="  - The fields 'Last name' and 'First name' are identical\n";
		}
		errorNb++;
	 }

	if (isWhitespace(email)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'E-mail' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'E-mail' must be filled\n";
		}
		errorNb++;
	}

	if (isWhitespace(confEmail)) {
		if (lang == 'fr') {
			errorMsg+="  - Le champ 'Confirmation E-mail' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Confirm your E-mail' must be filled\n";
		}
		errorNb++;
	}

	if (! checkEmail(email)) {
		if (lang == 'fr') {
			errorMsg+="  - Le champ 'E-mail' n'est pas une adresse correcte\n";
		} else {
			errorMsg+="  - The field 'E-mail' is not a correct address\n";
		}
		errorNb++;
	} else {
		if (email != confEmail) {
			if (lang == 'fr') {
				errorMsg+="  - Le champ 'Confirmation E-mail' n'est pas correct\n";
			} else {
				errorMsg+="  - The field 'Confirm your E-mail' is not correct\n";
			}
			errorNb++;
		}
	}

	if (isWhitespace(phone)) {
		if (lang == 'fr') {
			errorMsg+="  - Le champ 'Téléphone' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Phone' must be filled\n";
		}
		errorNb++;
	}

	if (! isValidTextArea(remarks)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Commentaires' ne doit pas excéder 2000 caractères\n";
		} else {
			errorMsg+="  - The field 'Comments' must contain a text less than 2000 characters\n";
		}
		errorNb++;
	}

	if (! jcap2()) {
		if (lang == 'fr') {
			errorMsg+="  - Le champ 'Mot à recopier' est incorrect\n";
		} else {
			errorMsg+="  - The field 'Word to enter' is not correct\n";
		}
		errorNb++;
	}

        if (! conditions.checked) {
                if (lang == 'fr') {
                        errorMsg+="  - Vous devez accepter les conditions générales\n";
                } else {
                        errorMsg+="  - You must accept Silverpeas agreement\n";
                }
                errorNb++;
        }


	switch (errorNb) {
		case 0 :
			result = true;
			break;
        case 1 :
			if (lang == 'fr') {
				errorMsg = "Ce formulaire contient 1 erreur : \n" + errorMsg;
			} else {
				errorMsg = "This form contains 1 error : \n" + errorMsg;
			}
            window.alert(errorMsg);
            result = false;
            break;
        default :
			if (lang == 'fr') {
				errorMsg = "Ce formulaire contient " + errorNb + " erreurs :\n" + errorMsg;
			} else {
				errorMsg = "This form contains " + errorNb + " errors :\n" + errorMsg;
			}
            window.alert(errorMsg);
            result = false;
            break;
    }
	return result;
}

function submitForm() {
	if (isCorrectForm()) {
		sendFormData();
    }
}

function sendFormData() {
	var form = document.forms["fillForm"];
	var lang = form.elements["currentCodeLang"].value;
	var sendRequest = false;
	var servicesOption = form.elements["servicesOption"].value;
	var selectedServices = "";
	if (servicesOption != "") {
		// Services wish selected
		var maxServicesCount = parseInt(servicesOption);
		var services = form.elements["services"];
		var servicesCount = 0;
		var i;
		for (i = 0; i < services.length; i++) {
			if (services[i].checked) {
				if (selectedServices != "") {
					selectedServices += ";";
				}
				selectedServices += services[i].value;
				servicesCount++;
			}
		}

		if (servicesCount == 0) {
			if (lang == "fr") {
				alert("Sélectionnez au moins un service.");
			} else {
				alert("Select at least one service.");
			}
		} else if (maxServicesCount > 0) {
			// Limited number of services
			if (servicesCount > maxServicesCount) {
				if (lang == "fr") {
					alert("" + servicesCount + " services sélectionnés pour un souhait de "
						+ maxServicesCount + " services !");
				} else {
					alert("" + servicesCount + " selected services for an option of "
						+ maxServicesCount + " services !");
				}
			} else if (servicesCount < maxServicesCount) {
				var availableServicesCount = maxServicesCount - servicesCount;
				if (availableServicesCount == 1) {
					if (lang == "fr") {
						sendRequest = confirm("Encore 1 service disponible. Poursuivre la demande ainsi ?");
					} else {
						sendRequest = confirm("Still 1 available service. Proceed like this?");
					}
				} else {
					if (lang == "fr") {
						sendRequest = confirm("Encore " + availableServicesCount
							+ " services disponibles. Poursuivre la demande ainsi ?");
					} else {
						sendRequest = confirm("Still " + availableServicesCount
							+ " available services. Proceed like this?");
					}
				}
			} else {
				sendRequest = true;
			}
		} else {
			sendRequest = true;
		}
	} else {
		// No services wishes selected
		if (lang == "fr") {
			alert("Sélectionnez un souhait de services.");
		} else {
			alert("Please select a services option.");
		}
	}

	if (sendRequest) {
		$("#buttonLine").hide();
		$("#submitLine").show();
		$.get(
				webContext+"/proxies/SaasManager.jsp",
			{
				action: "accessRequest",
				lang: lang,
	            conditionsAgreement: form.elements["ConditionsGenerales"].checked,
	            lastName: form.elements["LastName"].value,
	            firstName: form.elements["FirstName"].value,
	            email: form.elements["Email"].value,
	            phone: form.elements["Telephone"].value,
	            company: form.elements["Company"].value,
	            companyWebSite: form.elements["CompanyWebSite"].value,
	            remarks: form.elements["Remarks"].value,
	            usersCount: form.elements["NbUser"].value,
	            services: selectedServices,
				ieFix: new Date().getTime()
			},
			function(data) {
				if (data.indexOf('\n') != -1) {
		                    data = data.substring(0, data.length-1);
				}
				document.forms["accessForm" + data].submit();
			},
			"html"
		);
	}
}

function isCorrectFormDemo(lang) {
	var errorMsg = "";
    var errorNb = 0;

	var lastName = stripInitialWhitespace(document.fillForm.LastName.value);
	var firstName = stripInitialWhitespace(document.fillForm.FirstName.value);
    var email = stripInitialWhitespace(document.fillForm.Email.value);
	var confEmail = stripInitialWhitespace(document.fillForm.ConfEmail.value);
	var phone = stripInitialWhitespace(document.fillForm.Telephone.value);
	var remarks = document.fillForm.Remarks;
	var remarksValue = stripInitialWhitespace(document.fillForm.Remarks.value);
	var prefferedDate = document.fillForm.PrefferedDate;

    if (isWhitespace(lastName)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Nom' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Last name' must be filled\n";
		}
       errorNb++;
     }

	if (isWhitespace(firstName)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Prénom' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'First name' must be filled\n";
		}
       errorNb++;
     }

	if(lastName == firstName) {
		if(lang == 'fr') {
			errorMsg+="  - Les champs 'Nom' et 'Prénom' sont identiques\n";
		} else {
			errorMsg+="  - The fields 'Last name' and 'First name' are identical\n";
		}
		errorNb++;
	 }

	if (isWhitespace(email)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'E-mail' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'E-mail' must be filled\n";
		}
		errorNb++;
	}

	if (isWhitespace(confEmail)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Confirmation E-mail' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Confirm your E-mail' must be filled\n";
		}
		errorNb++;
	}

	if (! checkEmail(email)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'E-mail' n'est pas une adresse correcte\n";
		} else {
			errorMsg+="  - The field 'E-mail' is not a correct address\n";
		}
		errorNb++;
	} else {
		if (email != confEmail) {
			if(lang == 'fr') {
				errorMsg+="  - Le champ 'Confirmation E-mail' n'est pas correct\n";
			} else {
				errorMsg+="  - The field 'Confirm your E-mail' is not correct\n";
			}
			errorNb++;
		}
	}

	if (isWhitespace(phone)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Téléphone' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Phone' must be filled\n";
		}
		errorNb++;
	}

	if (isWhitespace(remarksValue)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Quelques mots sur votre projet' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Few words about your project' must be filled\n";
		}
		errorNb++;
	}

	if (! isValidTextArea(remarks)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Quelques mots sur votre projet' ne doit pas excéder 2000 caractères\n";
		} else {
			errorMsg+="  - The field 'Few words about your project' must contain a text less than 2000 characters\n";
		}
		errorNb++;
	}

	if (! isValidTextArea(prefferedDate)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Préférences de date' ne doit pas excéder 2000 caractères\n";
		} else {
			errorMsg+="  - The field 'Preffered date' must contain a text less than 2000 characters\n";
		}
		errorNb++;
	}

	if(! jcap3()) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Mot à recopier' est incorrect\n";
		} else {
			errorMsg+="  - The field 'Word to enter' is not correct\n";
		}
		errorNb++;
	}

	switch(errorNb)
	{
		case 0 :
			result = true;
			break;
        case 1 :
			if(lang == 'fr') {
				errorMsg = "Ce formulaire contient 1 erreur : \n" + errorMsg;
			} else {
				errorMsg = "This form contains 1 error : \n" + errorMsg;
			}
            window.alert(errorMsg);
            result = false;
            break;
        default :
			if(lang == 'fr') {
				errorMsg = "Ce formulaire contient " + errorNb + " erreurs :\n" + errorMsg;
			} else {
				errorMsg = "This form contains " + errorNb + " errors :\n" + errorMsg;
			}
            window.alert(errorMsg);
            result = false;
            break;
     }
     return result;
}

function sendInfoFormDemo(nbUsage, lang) {
	if (isCorrectFormDemo(lang)) {

		f = "";

		for (i=0; i<nbUsage; i++) {
		  if (document.fillForm.Usage[i].checked)
			  f += document.fillForm.Usage[i].value + ",";
		}

		document.fillForm.ListUsages.value = f;

		document.fillForm.submit();
    }
}

function isCorrectContactForm(lang) {
	var errorMsg = "";
    var errorNb = 0;

	var name = stripInitialWhitespace(document.fillContactForm.username.value);
	var company = stripInitialWhitespace(document.fillContactForm.company.value);
	var phone = stripInitialWhitespace(document.fillContactForm.telephone.value);
    var email = stripInitialWhitespace(document.fillContactForm.email.value);
	var message = document.fillContactForm.message;

    if (isWhitespace(name)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Nom-Prénom' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Last name-First name' must be filled\n";
		}
       errorNb++;
     }

	 if (isWhitespace(company)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Société' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Company' must be filled\n";
		}
       errorNb++;
     }


	if(name == company) {
		if(lang == 'fr') {
			errorMsg+="  - Les champs 'Nom-Prénom' et 'Société' sont identiques\n";
		} else {
			errorMsg+="  - The fields 'Last name-First name' and 'Company' are identical\n";
		}
		errorNb++;
	 }

	if (isWhitespace(phone)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Téléphone' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'Phone' must be filled\n";
		}
		errorNb++;
	}

	if (isWhitespace(email)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'E-mail' doit être renseigné\n";
		} else {
			errorMsg+="  - The field 'E-mail' must be filled\n";
		}
		errorNb++;
	}

	if (! checkEmail(email)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'E-mail' n'est pas une adresse correcte\n";
		} else {
			errorMsg+="  - The field 'E-mail' is not a correct address\n";
		}
		errorNb++;
	}

	if (! isValidTextArea(message)) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Message' ne doit pas excéder 2000 caractères\n";
		} else {
			errorMsg+="  - The field 'Message' must contain a text less than 2000 characters\n";
		}
		errorNb++;
	}

	if(! jcap()) {
		if(lang == 'fr') {
			errorMsg+="  - Le champ 'Mot à recopier' est incorrect\n";
		} else {
			errorMsg+="  - The field 'Word to enter' is not correct\n";
		}
		errorNb++;
	}

	switch(errorNb)
	{
		case 0 :
			result = true;
			break;
        case 1 :
			if(lang == 'fr') {
				errorMsg = "Ce formulaire contient 1 erreur : \n" + errorMsg;
			} else {
				errorMsg = "This form contains 1 error : \n" + errorMsg;
			}
            window.alert(errorMsg);
            result = false;
            break;
        default :
			if(lang == 'fr') {
				errorMsg = "Ce formulaire contient " + errorNb + " erreurs :\n" + errorMsg;
			} else {
				errorMsg = "This form contains " + errorNb + " errors :\n" + errorMsg;
			}
            window.alert(errorMsg);
            result = false;
            break;
     }
     return result;
}

function sendContactForm(lang) {
	if (isCorrectContactForm(lang)) {

		document.fillContactForm.submit();
    }
}


