/**
 * Changes/tweaks related to the layour/appearance of the blog
 * Author: Seanver
 * November 2011
 */

// Status variables
var spamCheck = false;


/**
 * Centers any element on the screen
 */

function centerElement(element) {
    var windowWidth   = document.documentElement.clientWidth;  
    var windowHeight  = document.documentElement.clientHeight;  
    var elementHeight = $(element).height();  
    var elementWidth  = $(element).width();
    $(element).css ({
        "top": windowHeight/2-elementHeight/2,  
        "left": windowWidth/2-elementWidth/2   
    });
}

/**
 * Append a div that will darken the background and overlap over the bog
 */ 
function freezeDarkenBackground() {
    var background = $("<div id='dark_background' class='background_freezed'></div>").appendTo("body");
    background.fadeIn("slow");
    return background;
}

/**
 * Close the contact form: delete the background layer and the contact form and allow scrolling again
 */

function closeContactForm(background, contact) {
    $(background).fadeOut("fast", function() {
        $(background).remove();      
    });
    $(contact).fadeOut("fast", function() {
        $(contact).remove();
    });
    $("body").css("overflow", "visible");
}

/**
 * Load the contact form, retrieved via AJAX and appends it to the background (or in its default any other DOM element)
 */ 
function loadContactForm() {
    spamCheck = false;
    var formAddress = '/../additional/contact_form.html';
    var contactForm = $("<div id='contact_form_overlay'></div>").appendTo("body");
    $.ajax({
        url : formAddress,
        cache: false,
        success: function(data) {
            contactForm.html(data);
        }
    });
    // Center form
    centerElement(contactForm);
    // Block scrolling up and down
    $("body").css("overflow", "hidden");
    return contactForm;
}

function animateMenus(selector) {
    // First disable the default CSS behavior
    $(selector).removeClass("second_menu_item");    
    // Add transitions
    $(selector).hover(function() {
        // If already a menu being shown, do not transition but hide it immediatly
        $(this).parent().children("li").children("ul").hide();
        // Fade menu in
        $(this).children("ul").fadeIn("slow");   
    }, function() {
        $(this).children("ul").fadeOut("fast");
    });
}

/**
 * Creates the contact form and sets up the related events
 */ 
function setUpContactForm() {
    var back = freezeDarkenBackground();
    var contact = loadContactForm(back);
    var spamLink = "spam_check_link"; // id of link to check spam
    // Spam check binds
    $(document).click(function(event) {
        if ($(event.target).attr('id') == spamLink) {
            checkSpam();
        }
    });
    // Escape button closes form
    $(document).keyup(function(data) {
        if (data.keyCode == 27) {
            closeContactForm(back, contact);
        }
    });
    // Close button
    $(document).click(function(event) {
        var target = $(event.target).attr("id");
        if (target == "close_contact_form" || target == "dark_background") {
            closeContactForm(back, contact);
        }
    });
    // Submit function, capture the event and do the appropriate actions
    $(document).submit(function(event) {
            if($(event.target).attr("id") == "contact_form") {
                contactFormResult("Sending...");
                $.post('/../additional/process_contact_form.php',
                      $(event.target).serialize(),
                      function(data) {
                        if (data ==  "Spam ckeck not passed") {
                            contactFormResult("Error: spam check not passed");
                        } else if (data == "Message sent") {
                            closeContactForm(back, contact);
                        } else {
                            contactFormResult(data);
                        }
                      });
                return false;   
            }
    });
}

// Change the text of the contact form result
function contactFormResult(result) {
    var resultP = $("#contact_form_result");
    $(resultP).text(result);
}

/**
 * Handles AJAX query to check SPAM
 */
function checkSpam() {
    var address = "/../additional/spam_check.php";
    var spamInput = $("#spamcheck");
    var spamLink = $("#spam_check_link");
    var spamTD = $("#spamTD");
    var spamTR = $("#spamTR");
    var text    = $(spamInput).val();
    var loadingMessage = $("#contact_loading");
    
    $(loadingMessage).css("display", "inline");
    $.get(address, {'spam': text}, function(data) {
        if (data == "RIGHT") {
            $(spamInput).css("display", "none");
            $(spamLink).remove();
            $(spamTR).html("<span class='spam_right'>✔ Spam check correct!</span>");
            spamCheck = true;
        } else {
            $(spamLink).text("Wrong. Check again?");
        }
        $(loadingMessage).css("display", "none");
    });
}


$(document).ready(function() {
    // Animated menus
    var menuElements = $("#topbar ul li");
    animateMenus(menuElements);
    // Contact form
    $("#contact_link").click(function(event) {
        event.preventDefault();
        setUpContactForm();
    });
})
