/**
 * ALL JAVASCRIPT NEEDS TO BE IN SEPARATE NAMESPACES
 * forumbase namespace
 */
var common_content_filter = '#content>*:not(div.configlet),dl.portalMessage.error,dl.portalMessage.info';

var forumbase = {
    agendaFilterSubmit: function() {
        jq.ajax({
            url: 'agenda-overzicht-bare',
            type: 'GET',
            asynchronous: true,
            data: jq('.gf-AgendaFilter form').serialize(),
            complete: function(request) {
                if (request.status == 200) {
                    jq('#content').html(request.responseText);
                    forumbase.agendaFilterNrOfPerfs();
                }
            }
        });
    }, // end of agendaFilterSubmit

    agendaFilter: function() {
        jq(".gf-filter input").hide();
        jq('.gf-filter label').css('cursor', 'pointer');
        jq('#_filter_wanneer_widget_datepicker').datepicker($.datepicker.regional.nl);

        jq('label[for="_filter_wanneer_widget_datepicker"]').click(function() {
            jq('#_filter_wanneer_widget_datepicker').show()
            jq('#_filter_wanneer_widget_datepicker').datepicker('show');
        });

        jq('#_filter_wanneer_widget_datepicker').change(function() {
            forumbase.agendaFilterSubmit();
            jq('#_filter_wanneer_widget_datepicker').val('');
        });

        jq('.gf-filter label').click( function(event) {
            var input = jq(this).parents('li').find('input');
            var filter = jq(this).parents('ul');

            input.attr('checked', true);

            // remove all 'selected' classes
            filter.find('label').removeClass('selected');

            // hide calender input field, even when widget is shown
            jq('#_filter_wanneer_widget_datepicker').hide();

            // add 'selected' class
            jq(this).addClass('selected');

            // date picker widget has its own submit'
            if (jq(this).attr('for') != '_filter_wanneer_widget_datepicker') {
                forumbase.agendaFilterSubmit();
            }

            // If we filter on "soort activiteit", we also set firstonly (#85)
            var filter_for = jq(this).attr('for');
            var str = '_filter_activiteit_categorie_';
            if ( filter_for.match("^"+str)==str ) { // startsWith in JS
                if ( filter_for != str ) { // not "Alle activiteiten"
                    jq(".gf-filter label[for='_filter_aantal_voorstellingen_eerste']").click();
                }
            }

        });

    }, // end of agendaFilter

    agendaFilterNrOfPerfs: function() {
        /* Switch between all performances / only first performance for each
         * Activiteit/Film (#85)
         * Just a front for the real filter (in the portlet): clicking the
         * links calls the real filter.
         */

        /* Make the parapgraph that contains the filter visible (it's invisible
         * by default to degrade gracefully with JS disabled) */
        jq("p.gf-firstonly-filter-shortcut").show();

        /* Define and set cursor on our links */
        var selector = "a[class~='gf-filter']";
        jq(selector).css('cursor', 'pointer');

        /* Hide the filter in the portlet */
        var filter_ul = jq(".gf-filter label[for='_filter_aantal_voorstellingen_eerste']").parent().parent();
        filter_ul.prev().hide();
        filter_ul.hide();

        /* Pass the click to the correct filter in the portlet */
        jq(selector).click( function(event) {
            if ( jq(this).hasClass("firstonly") ) {
                jq(".gf-filter label[for='_filter_aantal_voorstellingen_eerste']").click();
            }
            else {
                if ( jq(this).hasClass("nofirstonly") ) {
                    jq(".gf-filter label[for='_filter_aantal_voorstellingen_']").click();
                }
            }
        });

    }, // end of agendaFilterNrOfPerfs

    centerImages: function() {
        /* Center images.
         * (http://development.gw20e.com/trac/groningerforum/ticket/128) */
        if(jq(".gf-item-image img").length > 0 ) {
            jq(".gf-item-image img").imgCenter();
        }
        if(jq("p.plonetruegallery > a > img") > 0 ){
            jq("p.plonetruegallery > a > img").imgCenter();
        }
    },

    vandaagUitgelicht: function() {
       jq('#gf-vandaag-uitgelicht-viewlet .gf-vandaagUitgelichtTitle').css('cursor', 'pointer');
       jq('#gf-vandaag-uitgelicht-viewlet .gf-vandaagUitgelichtTitle').click(function(event){
           jq('#gf-vandaag-uitgelicht-viewlet .content').hide();
           jq('#gf-vandaag-uitgelicht-viewlet .gf-vandaagUitgelichtTitle').removeClass('gf-selected');
           jq(this).addClass('gf-selected');
           jq('#' + jq(this).attr('id') + '-content').show();
       });
    }, // end of vandaagUitgelicht

    todayTomorrow: function() {
       jq('#today-tomorrow .title').css('cursor', 'pointer');
       jq('#today-tomorrow .title').click(function(event){
           jq('#today-tomorrow .content').hide();
           jq('#today-tomorrow .title').removeClass('selected');
           jq(this).addClass('selected');
           jq('#' + jq(this).attr('id') + '-content').show();
       });
    }, // end of todayTomorrow

    makeDivsClickable: function() {
        /* Any DIV that has the class "gf-clickable" will be set to redirect to
         * the URL in the first A element inside that DIV. */
        jq("div.gf-clickable").click(function() {
                window.location = jq(this).find("a:first").attr("href");
            });
    }, //end of makeDivsClickable

    highlightWidget: function() {
        jq("#gf-highlight-widget").cycle();
        jq(".gf-highlight-selector .gf-highlight-selection").click(function() {
            var index = 0;
            var classes = jq(this).attr('class').split( ' ' );
            for (var i = 0; i < classes.length; ++i) {
                var klass = classes[i];
                if (klass.match( /^index-/ )) {
                    var index = klass.replace("index-",'');
                    break;
                }
            }
            jq("#gf-highlight-widget").cycle(parseInt(index));
        });
    }, //end of highlightWidget

    clearInputsOnClick: function() {
        jq('#gf-portal-footer-newsletter input[type="text"]').each( function() {
            jq(this).focus( function() {
                this.value=' ';
            });
        });
    }, // end of clearInputsOnClick

    dropShadow: function() {
        jq('#content #gf-highlight-title h1').each( function() {
            var shadowOptions = {left: 0, top: 0, blur: 1, opacity: .5, color: "black", swap: false}
            jq(this).dropShadow(shadowOptions);
        });
    }, // end of dropShadow

    starRating: function() {
        // enable star rating in the form
        jq('#formfield-form-widgets-rate span.label').hide();
        jq('input[name=form.widgets.rate:list]').rating();
    }, // end of starRating

    readOnlyStarRating: function() {

        // replace the simple number with a readonly rating
        counter = 0;
        jq('div.commentRate').each(function() {
          counter += 1;
          rate = jq(this);
          rate_string = rate.children('span').text();
          uid = counter;

          iRate = 0;
          maxRate = 5; // max number of stars..
          iRate = parseInt(rate_string) - 1;

          html = "";
          input_tpl = '<input name="rate-' + uid + '" type="radio" class="star" disabled="disabled" '
          for (i=0;i<maxRate;i++) {
            if (i == iRate) {
              html += input_tpl + '"checked="checked"/>';
            }
            else {
              html += input_tpl + '/>';
            }
          }

          html += '<span class="gf-waardering">' + rate_string + '</span>';
          rate.html(html);
      });
      jq('input.star').rating(); // kick off the rating plugin

    }, // end of readOnlyStarRating

    cleanupCommenting: function() {
        form_errors = jq('div#commenting').find('div.error');
        if (!form_errors.length) {
            jq('#commenting').hide();
        }
        jq('div.commentBody').addClass('gf-commentBody');
        jq('div.commentBody').removeClass('commentBody');

        jq('#gf-write-comment').click(function(e){
            e.preventDefault();
            jq('#commenting').toggle('slow');
        });

    }, // end of cleanupCommenting

    tvScreens: function() {
        var background = jq("#tvscreen #background");
        if (background) {
            background.cycle({speed:1000, timeout:10000});

            // Reload the screen every 30 minutes
            setInterval(function() {
                $.ajax({
                    url: window.location.pathname,
                    success: function(data, textStatus){
                        var jqdata = $(data);
                        $('#background').html(jqdata.find('#background').html());
                        $('#list').html(jqdata.find('#list').html());

                        // Restart the background slideshow,
                        // otherwise new images will never be used
                        background.cycle('stop');
                        background.cycle('resume');

                        // alternative, very simple:
                        //window.location.pathname = window.location.pathname;
                    }
                });
            }, 1800000);
        }
    }, //end of tvScreens

    updateClock: function () {
        var clock = jq("#clock");
        if (clock) {
            // Update the clock every minute
            setInterval(function() {
                var currentTime = new Date();
                var currentHours = currentTime.getHours();
                var currentMinutes = currentTime.getMinutes();

                // Pad the minutes and seconds with leading zeros, if required
                currentMinutes = (currentMinutes < 10 ? "0" : "") + currentMinutes;

                // Convert an hours component of "0" to "12"
                currentHours = (currentHours == 0) ? 12 : currentHours;

                // Update the time display
                clock.html(currentHours + ":" + currentMinutes);
            }, 60000);
        }
    }, // end of updateClock
    forumOverlay: function () {
        //Event-aanmelden overlay preppen
        jq("#content a[href$='@@event-aanmelden']").prepOverlay({
            subtype:'ajax',
            formselector:"form",
            closeselector: "a[href*='@@register'], a[href*='mail_password']",
            filter: common_content_filter
        });

        //Dit zorgt ervoor dat als je op "event-aanmelden klikt" de register knop,
        //en de wachtwoord vergeten link ook in een overlay komen
        jq("#pb_3, #pb_4").bind("onLoad", function(){
            jq(".pb-ajax a[href*='@@register']").prepOverlay({
                subtype:'ajax',
                formselector:'form',
                filter: common_content_filter
            });

            jq(".pb-ajax a[href*='mail_password']").prepOverlay({
                subtype:'ajax',
                formselector:'form',
                filter: common_content_filter
            });
            //Rebind .. it makes new pb div at it goes.
            //Annoying, but this works \/
            jq("[id*=pb]").bind("onLoad", function(){
                forumbase.profileMultiSelect();
                forumbase.datepickerBirthday();
            });

        })

        //register in banners ook in overlay!!
        jq("#banners a[href$='@@register']").prepOverlay({
            subtype:'ajax',
            formselector:'form',
            filter: common_content_filter,
            noform: function () {
                    return 'reload';
            }
        });
        //Any pb (overlay div) can have a multiselect.
        jq("[id*=pb]").bind("onLoad", function(){
            forumbase.profileMultiSelect();
            forumbase.datepickerBirthday();
        });


    },
    datepickerBirthday: function () {
        //Datepicker enable voor birthdate in personal-information
        jq(document.getElementById('form.birthdate')).datepicker({  yearRange: '1900:2011',
                                                                    changeMonth: true,
                                                                    hideIfNoPrevNext: true,
                                                                    changeYear: true});
    },
    profileMultiSelect: function () {
        //Datepicker enable voor birthdate in personal-information
        jq("select[multiple='multiple']").addClass("multiselect");
        jq(".multiselect").multiselect({sortable: false, searchable: false});
    },

    handleDefaultInputs: function () {
        // set default value in input, or remove when clicked..

        jq("input.show_default").each(function () {

            // store default value
            var v = this.value;

            $(this).blur(function ()
            {
                // if input is empty, reset value to default
                if (this.value.length == 0) this.value = v;
            }).focus(function ()
            {
                // when input is focused, clear its contents
                this.value = "";
            });
        });
    }
};

jq(document).ready(function() {
    forumbase.forumOverlay();
    forumbase.agendaFilter();
    forumbase.agendaFilterNrOfPerfs();
    forumbase.vandaagUitgelicht();
    forumbase.todayTomorrow();
    forumbase.makeDivsClickable();
    forumbase.highlightWidget();
    forumbase.clearInputsOnClick();
    forumbase.dropShadow();
    forumbase.starRating();
    forumbase.readOnlyStarRating();
    forumbase.cleanupCommenting();
    forumbase.tvScreens();
    forumbase.updateClock();
    forumbase.centerImages();
    forumbase.datepickerBirthday();
    forumbase.profileMultiSelect();
    forumbase.handleDefaultInputs();
});

