var favouritesOldOnload = window.onload;

window.onload = function()
{
    if (typeof favouritesOldOnload == 'function')
    {
         favouritesOldOnload();
    }

    window.favouritesInstance = new pasakasFavourites();
    favouritesInstance.init();
}

pasakasFavourites = function ()
{
    this.forms = [];
    this.texts = {};
}

pasakasFavourites.prototype.init = function()
{
    var textsOk = this.loadTexts();
    if (!textsOk)
    {
        return;
    }
    this.loadForms();
    this.assignFormHandlers();

}

pasakasFavourites.prototype.loadForms = function()
{

    this.forms = [];
    var forms = document.getElementsByTagName('form');
    for (var i=0; i<forms.length; i++)
    {
        if (!this.isFaviouritesForm(forms[i]))
        {
            continue;
        }

        var form = forms[i];

        var controlsOk = this.loadFormControls(form);
        if (!controlsOk)
        {
            continue;
        }

        this.forms[this.forms.length] = form;
    }

}

pasakasFavourites.prototype.isFaviouritesForm = function(form)
{
    return (form.className == 'favouritesForm');
}

pasakasFavourites.prototype.loadTexts = function()
{
    var inputs = document.getElementsByTagName('input');
    var inputsFound = false;
    for (var i=0; i<inputs.length; i++)
    {
        if (inputs[i].className != 'favouritesText')
        {
            continue;
        }

        var key = inputs[i].name;
        var text = inputs[i].value;
        this.texts[key] = text;
        inputsFound = true;
    }
    return inputsFound;
}

pasakasFavourites.prototype.assignFormHandlers = function()
{
    var self = this;
    var formOnsubmit = function()
    {
        if (self.isAddForm(this))
        {
            if (window['submitFavouritesWithReload'])
            {
                return true;
            }
            else
            {
                var addResultFunction = function(xmlhttp, form)
                {
                    self.addFormResult(xmlhttp, form);
                }
                Blocks.submitFormAsBlock(this, 'addResult', addResultFunction, this);
                return false; // prevent full page form submit
            }
        }
        else if (self.isRemoveForm(this))
        {
            if (confirm(self.texts.removeConfirmationText))
            {
                if (window['submitFavouritesWithReload'])
                {
                    return true;
                }
                else
                {
                    var removeResultFunction = function(xmlhttp, form)
                    {
                        self.removeFormResult(xmlhttp, form);
                    }
                    Blocks.submitFormAsBlock(this, 'removeResult', removeResultFunction, this);
                    return false; // prevent full page form submit
                }

            }
        }
        return false;
    }

    for (var i=0; i<this.forms.length; i++)
    {
        var form = this.forms[i];
        form.onsubmit = formOnsubmit;
    }
}

pasakasFavourites.prototype.loadFormControls = function(form)
{
    form.submitImage        = this.getSubmitImage(form);
    form.favouriteIdField   = this.getFavouriteIdField(form);
    form.objectIdField      = this.getObjectIdField(form);
    form.taskField          = this.getTaskField(form);

    if (
        (!form.taskField)
        ||
        (!form.submitImage)
        ||
        (!form.objectIdField)
    )
    {
        return false; // required fields not found
    }
    return true;
}

pasakasFavourites.prototype.getSubmitImage = function (form)
{
    return this.getInputByClass(form, 'submitImage');
}

pasakasFavourites.prototype.getFavouriteIdField = function (form)
{
    return this.getInputByClass(form, 'favouriteId');
}

pasakasFavourites.prototype.getObjectIdField = function (form)
{
    return this.getInputByClass(form, 'objectId');
}

pasakasFavourites.prototype.getTaskField = function (form)
{
    return this.getInputByClass(form, 'taskInput');
}

pasakasFavourites.prototype.getInputByClass = function (form, className)
{
    var inputs = form.getElementsByTagName('input');

    for (var i=0; i<inputs.length; i++)
    {
        if (inputs[i].className == className)
        {
            return inputs[i];
        }

    }
    return null;
}

pasakasFavourites.prototype.isAddForm = function(form)
{
    return (form.taskField.value == 'addFavourite');
}

pasakasFavourites.prototype.isRemoveForm = function(form)
{
    return (form.taskField.value == 'removeFavourite');
}

pasakasFavourites.prototype.removeFormResult = function( xmlhttp, form )
{
    var actionOk = (xmlhttp.responseText.length > 0);
    if (!actionOk)
    {
        return false;
    }

    alert ( xmlhttp.responseText );

    form.taskField.value = 'addFavourite';
    form.submitImage.src = '../images/favIconAdd.jpg';
    form.submitImage.alt = this.texts.addText;
    form.submitImage.title = this.texts.addText;

    this.loadFormControls(form)
}

pasakasFavourites.prototype.addFormResult = function( xmlhttp, form )
{

    var actionOk = (xmlhttp.responseText.length > 0);
    if (!actionOk)
    {
        return false;
    }

    alert ( xmlhttp.responseText );

    form.taskField.value = 'removeFavourite';
    form.submitImage.src = '../images/favIconRemove.jpg';
    form.submitImage.alt = this.texts.removeText;
    form.submitImage.title = this.texts.removeText;

    this.loadFormControls(form)
}

