//
//  newsletter.js
//  Version 1.0
//  Written by Stefan Habel
//  Last modified: 26.01.2008
//


//
// Returns if the given e-mail address is valid.
//
// \param address   the e-mail address to check for validity
//
window.checkEmailAddress = function ( address )
{
    // check if the given e-mail address is correct
    var user = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
    var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
    var isValidEmail = new RegExp("^" + user + "\@" + domain + "$");
    var isValid = address != "" && (isValidEmail.test(address));
    return isValid;
}


//
// Callback function for the newsletter XML HTTP object.
//
// \param client    the XML HTTP object
// \param targetId  the ID of the content element to display the response text in
//
window.newsletter_OnReadyStateChange = function ( client, targetId )
{
    if (client.readyState == 4) {
        RemoveAllChildren(targetId);
        CreateHtmlNodes(targetId, client.responseText);
    }
}


//
// Validates the newsletter subscription form, sends a newsletter subscription
// request and informs the user of its success.
//
window.subscribeToNewsletter = function ( unused )
{
    var firstNameField = document.getElementById("firstName");
    var surnameField = document.getElementById("surname");
    var companyField = document.getElementById("company");
    var emailField = document.getElementById("email");

    if (!firstNameField || !surnameField || !companyField || !emailField) {
        console.error("Required input fields no found.");
        return;
    }

    var firstName = firstNameField.value;
    var surname = surnameField.value;
    var company = companyField.value;
    var email = emailField.value;

    var option1checked = document.getElementById("itfs").checked;
    var option2checked = document.getElementById("kurzfilmbiennale").checked;
    var option3checked = document.getElementById("wirtschaftsfilmpreis").checked;
    var option4checked = document.getElementById("professional").checked;

    // highlight fields with missing information
    if (firstName != "")
        firstNameField.style.backgroundColor = "white";
    else
        firstNameField.style.backgroundColor = "#ffcccc";
    if (surname != "")
        surnameField.style.backgroundColor = "white";
    else
        surnameField.style.backgroundColor = "#ffcccc";
    if (email != "")
        emailField.style.backgroundColor = "white";
    else
        emailField.style.backgroundColor = "#ffcccc";

    // check if the given e-mail address is correct
    var emailCorrect = email != "" && checkEmailAddress(email);
    if (!emailCorrect)
        emailField.style.backgroundColor = "#ffcccc";

    // alert the user if information is missing
    var errorMessages = [];
    if (firstName == "" || surname == "" || email == "")
        errorMessages.push("füllen Sie die markierten Felder aus");
    if (email != "" && !emailCorrect)
        errorMessages.push("überprüfen Sie die Eingabe Ihrer E-Mail-Adresse");
    if (!option1checked && !option2checked && !option3checked)
        errorMessages.push("wählen Sie wenigstens ein Festival, zu welchem Sie zukünftig Informationen per E-Mail erhalten möchten");

    if (errorMessages.length > 0) {
        var errorMessage = "Bitte ";
        for (var i = 0; i < errorMessages.length; ++i) {
            if (i > 0)
                if (i == errorMessages.length - 1)
                    errorMessage += " und ";
                else
                    errorMessage += ", ";
            errorMessage += errorMessages[i];
        }
        errorMessage += ".";

        alert(errorMessage);

        if (firstName == "")
            firstNameField.focus();
        else if (surname == "")
            surnameField.focus();
        else if (email == "" || !emailCorrect) {
            emailField.focus();
            if (!emailCorrect)
                emailField.select();
        }
        return;
    }

    var option1 = option1checked ? "ITFS" : "";
    var option2 = option2checked ? "Kurzfilmbiennale" : "";
    var option3 = option3checked ? "Wirtschaftsfilmpreis" : "";
    var option4 = option4checked ? "Professional" : "";

    var client = Ajax.CreateXmlHttpObject();
    if (client) {
        client.open("POST", "/tools/newsletter.php", true);
        client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
        client.onreadystatechange = function ()
        {
            newsletter_OnReadyStateChange(client, "subscribeToNewsletter");
        }
        var request = "action=subscribe";
        request += "&page=" + window.page;
        request += "&firstName=" + firstName;
        request += "&surname=" + surname;
        request += "&company=" + company;
        request += "&email=" + email;
        request += "&option1=" + option1;
        request += "&option2=" + option2;
        request += "&option3=" + option3;
        request += "&option4=" + option4;
        client.send(request);
    } else {
        RemoveAllChildren("subscribeToNewsletter");
        CreateHtmlNodes("subscribeToNewsletter", "Die automatisierte Anmeldung zum Newsletter ist leider fehlgeschlagen. Bitte versuchen Sie es später nocheinmal.");
    }
}


//
//
//
window.unsubscribeFromNewsletter = function ( unused )
{
    var emailField = document.getElementById("unsubscribeEmail");

    if (!emailField) {
        console.error("Required input fields no found.");
        return;
    }

    var email = emailField.value;
    if (email != "")
        emailField.style.backgroundColor = "white";
    else {
        emailField.style.backgroundColor = "#ffcccc";
        alert("Bitte geben Sie Ihre E-Mail-Adresse ein.");
        emailField.focus();
        return;
    }

    // check if the given e-mail address is correct
    var emailCorrect = email != "" && checkEmailAddress(email);
    if (!emailCorrect) {
        emailField.style.backgroundColor = "#ffcccc";
        alert("Bitte überprüfen Sie die Eingabe Ihrer E-Mail-Adresse.");
        emailField.focus();
        emailField.select();
        return;
    }

    var client = Ajax.CreateXmlHttpObject();
    if (client) {
        client.open("POST", "/tools/newsletter.php", true);
        client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
        client.onreadystatechange = function ()
        {
            newsletter_OnReadyStateChange(client, "unsubscribeFromNewsletter");
        }
        var request = "action=unsubscribe";
        request += "&page=" + window.page;
        request += "&email=" + email;
        client.send(request);
    } else {
        RemoveAllChildren("unsubscribeFromNewsletter");
        CreateHtmlNodes("unsubscribeFromNewsletter", "Die automatisierte Abmeldung vom Newsletter ist leider fehlgeschlagen. Bitte versuchen Sie es später nocheinmal.");
    }
}

