(function() {

// Configuration
var maxAlts = 4;
var maxPics = 7;
var fadeType = 1000;
var fadeInterval = 2000;

var fades = {};
var c = typeof console == 'object' && console && typeof console.log == 'function';

function log() {
    try {
        c && console.log.apply(console, arguments);
    } catch(err) {
    }
}

// Max is exclusive
function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

fadePic = function(pic) {
    var current = fades[pic] || 1;
    var next = (current % maxAlts) + 1;
    //log("Fading %d cur %d next %d", pic, current, next);
    
    var id = '#banner-' + pic + '-';
    var currentElem = $(id + current);
    var nextElem = $(id + next);
    currentElem.fadeOut(fadeType);
    nextElem.fadeIn(fadeType);
    nextElem.css('visibility','');
    
    //log("C %o N %o", currentElem, nextElem);
    
    fades[pic] = next;
};

setInterval(function() {
        fadePic(randomInt(1, maxPics + 1));
}, fadeInterval);

//function setClickEvent(i) { $('#banner-'+i).onclick(function() { fadePic(i); }); }
//for(var i = 1; i <= maxPics; i++) { setClickEvent(i); }

var saveTimeout;
var saveInterval = 3000;
var sureSaveTimeout;
var sureSaveInterval = 10000;
var changed = false;
var requestPending = false;
var submitting = false;
var saveRequest;

var saveUrl = "/save_contact.php";

function saveData(sync) {
    log("Saving data");
    
    if((sync || !requestPending) && changed) {
        $.ajax({
                async: !sync,
                url: saveUrl,
                dataType: "text",
                data: $("#contact_form").serialize(),
                type: "POST",
                success: function(data) { log("Success %o", data); changed = false; },
                complete: function() { log("Request complete"); requestPending = false; }
        });
        requestPending = true;
    }
    
    if(saveTimeout) {
        clearTimeout(saveTimeout);
        saveTimeout = null;
    }
}

function sureSave() {
    sureSaveTimeout = null;
    log("Sure save");
    saveData();
}

function inputChanged() {
    //log("Input changed");
    
    changed = true;
    
    if(saveTimeout) {
        clearTimeout(saveTimeout);
    }
    saveTimeout = setTimeout(saveData, saveInterval);
    
    if(!sureSaveTimeout) {
        sureSaveTimeout = setTimeout(sureSave, sureSaveInterval);
    }
}


onContactFormReady = function() {
    log("Contact form ready");
    
    $("#contact_form input").change(inputChanged).keyup(inputChanged);
    
    function fillForm(data) {
        log("Filling form");
        var form = document.getElementById("contact_form");
        for(var key in data) {
            var element = form[key];
            if(element) {
                element.value = data[key];
            }
        }
    }       
    
    $.post(saveUrl, {"load": 1}, fillForm, "json");
};

beforeUnload = function() {
    log("Before unload");
    
    if(changed && !submitting) {
        saveData(true);
        //return "Palun oota, tellimisvormi andmed pole veel salvestatud";
    }
};

submitContactForm = function() {
    submitting = true;
    
    setTimeout(function() {
        $("#contact_form input[name=f_checkvalue]").val("---check---");
        $("#contact_form").submit();
    }, requestPending ? 800 : 1);
};

})();
