﻿jQuery.HomePageCustomisation = {

    incrementArticles: function(e) {

        var articles = e.region.find('.catArticle');

        var hiddenElement = e.region.find('.hiddenPanelField');

        var updateableElement = e.region.find('.categoryWrap');

        var existingValue = hiddenElement[0].value;

        var articleHpc = jQuery.parseHomePageConfig(existingValue);

        e.modifiedContentField[0].value = articleHpc.category;

        updateableElement.addClass('ajax_lock_region');

        articleHpc.paging.size = articleHpc.paging.size + 1;

        hiddenElement.value = jQuery.renderHomePageConfig(articleHpc);

        jQuery.mvc.request(e.additionurl, e.region, "POST", false, e.form.serialize(), e.callback);

    },
    decrementArticles: function(e) {
        var articles = e.region.find('.catArticle');

        if (articles.length > 0) { jQuery(articles[articles.length - 1]).remove(); } else { return; }

        var hiddenElement = e.region.find('.hiddenPanelField');

        var existingValue = hiddenElement[0].value;

        var articleHpc = jQuery.parseHomePageConfig(existingValue);

        if (articleHpc.paging.size > 0) { articleHpc.paging.size = articleHpc.paging.size - 1 }

        hiddenElement[0].value = jQuery.renderHomePageConfig(articleHpc);

        e.form.mvcAjaxForm();
    },
    promoteCategory: function(e) {

        var sibling = e.region.prev('.groupItem');

        if (sibling) { e.region.insertBefore(sibling); }

        e.form.mvcAjaxForm();

    },
    demoteCategory: function(e) {

        var sibling = e.region.next('.groupItem');

        if (sibling) { e.region.insertAfter(sibling); }

        e.form.mvcAjaxForm();

    },
    removeCategory: function(e) {

        e.region.remove();

        e.form.mvcAjaxForm();
    },
    build: function(config) {

        var e = this;

        var homeCfg = {
            form: config.form,
            region: e,
            modifiedContentField: config.modifiedContentField,
            additionurl: config.additionurl,
            callback: config.callback
        }

        try {

            var incrementButton = e.find('.action_add_article')[0];
            jQuery.ArgumentExists(incrementButton, 'unable to find increment button on hompage config element ' + e);
            var decrementButton = e.find('.action_remove_article')[0];
            jQuery.ArgumentExists(decrementButton, 'unable to find decrement button on hompage config element ' + e);
            var promoteCategory = e.find('.action_promote_category')[0];
            jQuery.ArgumentExists(promoteCategory, 'unable to find promote category button on hompage config element ' + e);
            var demoteCategory = e.find('.action_demote_category')[0];
            jQuery.ArgumentExists(demoteCategory, 'unable to find demote category button on hompage config element ' + e);
            var removeCategory = e.find('.action_remove_category')[0];
            jQuery.ArgumentExists(removeCategory, 'unable to find remove category button on hompage config element ' + e);

            jQuery(incrementButton).unbind();
            jQuery.event.add(incrementButton, "click", function(e) { e.preventDefault(); jQuery.HomePageCustomisation.incrementArticles(homeCfg); });
            jQuery(decrementButton).unbind();
            jQuery.event.add(decrementButton, "click", function(e) { e.preventDefault(); jQuery.HomePageCustomisation.decrementArticles(homeCfg); });
            jQuery(promoteCategory).unbind();
            jQuery.event.add(promoteCategory, "click", function(e) { e.preventDefault(); jQuery.HomePageCustomisation.promoteCategory(homeCfg); });
            jQuery(demoteCategory).unbind();
            jQuery.event.add(demoteCategory, "click", function(e) { e.preventDefault(); jQuery.HomePageCustomisation.demoteCategory(homeCfg); });
            jQuery(removeCategory).unbind();
            jQuery.event.add(removeCategory, "click", function(e) { e.preventDefault(); jQuery.HomePageCustomisation.removeCategory(homeCfg); });

        } catch (Error) {
        }

    }
}



jQuery.parseHomePageConfig = function(hpcString) {

    var elements = hpcString.split('@');

    if (elements.length < 2) return;

    var category = elements[0];

    var paging = jQuery.parsePaging(elements[1]);

    return {
        category: category,
        paging: paging
    }

}


jQuery.renderHomePageConfig = function(config) {

    var pagingString = jQuery.renderPaging(config.paging);
    return config.category + '@' + pagingString;

}



jQuery.fn.extend(
	{
		HomePageCustomisation : jQuery.HomePageCustomisation.build
	}
);

