// usage: log('inside coolFunc',this,arguments);
// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function(){
    // store logs to an array for reference
    log.history = log.history || [];
    log.history.push(arguments);
    if(this.console){
        console.log( Array.prototype.slice.call(arguments) );
    }
};


Array.prototype.unique = function () {
    var a = [];
    var l = this.length;
    for(var i=0; i<l; i++) {
      for(var j=i+1; j<l; j++) {
        // If this[i] is found later in the array
        if (this[i] === this[j])
          j = ++i;
      }
      a.push(this[i]);
    }
    return a;
};
Array.prototype.intersect = function () {
    if (!arguments.length)
      return [];
    var a1 = this;
    var a = a2 = null;
    var n = 0;
    while(n < arguments.length) {
      a = [];
      a2 = arguments[n];
      var l = a1.length;
      var l2 = a2.length;
      for(var i=0; i<l; i++) {
        for(var j=0; j<l2; j++) {
          if (a1[i] === a2[j])
            a.push(a1[i]);
        }
      }
      a1 = a;
      n++;
    }
    return a.unique();
};


(function ($) {
    // custom easing called "custom"
    $.easing.custom = function (x, t, b, c, d) {
    return c * Math.sin(t/d * (Math.PI/2)) + b;
            //return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
    }

    $(function() {
        $(".scrollable").scrollable({easing: 'custom', speed: 2000, circular: true}).autoscroll({ autoplay: true, interval: 8000, autopause: true });
    });

    $.fn.dropdown = function (opts) {
        var timeout;

        opts = $.extend({
            openAnimation: 'slideDown',
            closeAnimation: 'slideUp',
            speed: 500
        }, opts);
        var id = function (a) { return input.attr('id') + (a ? '-' + a : ''); };
        var input = $(this);
        var placeholder = $('<div class="dropdown-placeholder" />').
            attr('id', id('placeholder')).
            text('hover to select ...');
        var ul = $('<ul class="dropdown-list" />').
            attr('id', id('list'));
        input.find('option').each(function () {
            var li = $('<li />').
                attr('data-value', $(this).attr('value')).
                text($(this).text());
            li.click(function () {
                input.val($(this).attr('data-value'));
                $(this).siblings('li').removeClass('selected');
                $(this).addClass('selected');
                hideList(true);
            });
            if (opts.itemClick) {
                li.click(opts.itemClick);
            }
            ul.append(li);
        });

        var hideList = function (immediately) {
            if (immediately === true) {
                $('#' + id('list')).hide();
            } else {
                timeout = setTimeout(
                    function () { $('#' + id('list'))[opts.closeAnimation](opts.speed); },
                    1000);
            }
        };
        var openList = function () {
            clearTimeout(timeout);
            $('#' + id('list'))[opts.openAnimation](opts.speed);
        };

        placeholder.mouseover(openList);
        placeholder.mouseout(hideList);
        ul.mouseover(openList)
        ul.mouseout(hideList);

        input.hide();
        ul.hide();

        input.after(placeholder);
        placeholder.after(ul);
    };

    $.fn.loadmore = function (opts) {
        opts = $.extend({

        }, opts);

        $(this).click(function () {
            var container = $($(this).attr('data-load-more-container'));
            var max_page = parseInt($(this).attr('data-max-page'));

            var href = $(this).attr('href');

            // load results
            $.get(href, function (data) {
                container.append(data);
            });

            var page = href.match(/([?&])page=(\d+)(&|$)/);
            var prefix = page[1];
            var postfix = page[3];
            page = parseInt(page[2]);
            page += 1;
            href = href.replace(/[?&]page=\d+(?:&|$)/, prefix + 'page=' + page + postfix);
            $(this).attr('href', href);
            if (page > max_page) {
                $(this).remove();
            }
            return false;
        });
    };

    $.fn.eventselector = function (opts) {
        var items = $(this).find('.event-selector-item').each(function () {
            var input = $(this).find('input');
            $(this).toggleClass('selected', input.attr('checked'));
            input.closest('label').hide();
        });
        items.click(function () {
            var input = $(this).find('input');
            input.attr('checked', !input.attr('checked'));
            $(this).toggleClass('selected', input.attr('checked'));
        });

        function strip(s) {
            if (s) {
                return s.replace(/^\s*(.*[^\s])\s*$/, "$1");
            }
            return s;
        }

        limitItems = function (patterns) {
            if (patterns) {
                items.each(function () {
                    var hide = false;
                    var keywords = $(this).attr('data-keywords');
                    i = 0;
                    for (; i < patterns.length; i++) {
                        if (!keywords.toLowerCase().match(patterns[i].toLowerCase())) {
                            hide = true;
                            break;
                        }
                    }
                    hide ? $(this).hide() : $(this).show();
                });
            } else {
                items.show();
            }
        }

        var search = $($(this).attr('data-search-input'));
        search.bind('click keyup change focus blur', function () {
            var patterns = strip($(this).val());
            if (patterns) {
                patterns = patterns.split(' ');
                var i = 0;
                var _patterns = [];
                for (; i < patterns.length; i++) {
                    patterns[i] = strip(patterns[i]);
                    if (patterns[i]) {
                        _patterns.push(patterns[i]);
                    }
                }
                patterns = _patterns;
            }
            limitItems(patterns);
        }).keypress(function (e) {;
            if (e.keyCode == 13) {
                return false;
            }
        });
    };

    $(function() {
    
    
        //homepage welcome bar
        //wait function for loading campaign typography
        jQuery.fn.wait = function (MiliSeconds) {
        $(this).animate({ opacity: '+=0' }, MiliSeconds);
        return this;
    	}
    	
		$("#fb-message-container").hide().wait(2000).slideDown(1000);
			$('#close-notify').click(function() {
   			$("#fb-message-container").slideUp(1000);
		});
		
		$(".popup-home").hide().wait(2750).slideDown(1000);
		$(".popup-whatson").hide().wait(2750).slideDown(2500);
		$(".popup-venue").hide().wait(2750).slideDown(1000);
		$(".popup-recommendations").hide().wait(2750).slideDown(2500);
		
		        
        // POST COMMENT FORM
        // hide the div witht the form
        $('#commentForm').hide();

        // click function that shows the form and hides the trigger button
        $("h3#com-trigger").click( function() {
        $("#commentForm").slideDown({ easing: 'easeOutSine', duration:600 });
        });

        // click function that reverses the click function above
        $("#commentForm a:last").click( function() {
        $("#commentForm").slideUp({ easing: 'easeOutSine', duration: 1000 });
        });


        /*Collapse aspect for theatre generator */
		$("#collapse-panel").hide(); 
		$("#searchbox-trigger").click(function(){
			$("#collapse-panel").slideToggle({ easing: 'easeOutSine', duration:600 });
			return false; //Prevent the browser jump to the link anchor
		});


        /* Theatre Generator */
        var keyword_container = $('<div />').hide();
        $('#search-keywords').after(keyword_container);
        $('#search-keywords input').each(function () {
            var li = $(this).closest('li').toggleClass('selected', $(this).attr('checked'));
            var label = $(this).closest('label').remove().appendTo(keyword_container);

            var slug = $(this).val();
            $(this).data('events', KEYWORD_EVENT_MAPPING[slug]);
            li.data('events', KEYWORD_EVENT_MAPPING[slug]);

            li.text(label.text());
            li.data('checkbox', $(this));
        });

        var remapNulledKeywords = function () {
            var selected_events = [];
            keyword_container.find(':checked').each(function () {
                selected_events.push(KEYWORD_EVENT_MAPPING[$(this).val()]);
            });
            if (selected_events.length > 0) {
                $('#search-keywords li').removeClass('null').each(function () {
                    if($(this).data('checkbox').attr('checked')) return;
                    var slug = $(this).data('checkbox').val();
                    var events = KEYWORD_EVENT_MAPPING[slug];
                    var intersection = events.intersect.apply(events, selected_events);
                    if (intersection.length == 0) {
                        $(this).addClass('null');
                    }
                });
            } else {
                $('#search-keywords li').removeClass('null');
            }
        };
        remapNulledKeywords();

        $('#search-keywords li').bind('click', function () {
            if ($(this).hasClass('null')) {
                return false;
            }

            var input = $(this).data('checkbox');
            input.attr('checked', !$(this).hasClass('selected'));
            $(this).toggleClass('selected', input.attr('checked'));

            remapNulledKeywords();
        });

        $('#id_start_date, #id_end_date').datepicker({
            dateFormat: 'dd/mm/yy',
            showAnim: 'slideDown',
            onSelect: function (dateText, inst) {
                var select;
                if (this.id == 'id_start_date') select = 'id_end_date';
                if (this.id == 'id_end_date') select = 'id_start_date';
                var input = $('#' + select);
                if (input.val() == '') {
                    input.val(dateText);
                }
            }
        });

        $('#invite-friends-form #id_date').datepicker({
            dateFormat: 'dd/mm/yy',
            showAnim: 'slideDown',
        });

        $('#id_category').dropdown({
            itemClick: function () {
                $(this).closest('form').submit();
            }
        });

        $('.load-more-button').loadmore();
        $('.event-selector').eventselector();
    });
})(jQuery);



