// Finda JS Library

var debug = false;
var msg_debug = '';
var endArea;

$(document).ready(function(){
    msg_debug += 'document ready\r';
    startWidgets();
    listenerControls();
});

function listenerControls(){
    // Event Search / Browse collapse/expand box
    $('#eventsView a').bind('click', function(e){
        if((this.hash == '#search') && $('#eventSearch').is(":hidden")){
            $('#eventSearch').show('fast');
        } else
        if((this.hash == '#search') && $('#eventSearch').is(":visible")){
            $('#eventSearch').hide('fast');
        }
        if((this.hash == '#browse') && $('#browseEvents').is(":hidden")){
            $('#browseEvents').show('fast');
        } else
        if((this.hash == '#browse') && $('#browseEvents').is(":visible")){
            $('#browseEvents').hide('fast');
        }
    });

    // Explore other regions control
    if ($('#regionConnect').is('div')){
        var exploreSwitch = true;
        $('#regionConnect a').bind('click', function(e){
            var hashItem = this.hash;
            if (hashItem == '#explore'){
                e.preventDefault();
                if($('#regionConnect ol li ol').is(':hidden')){
                    $('#regionConnect ol li ol').css({ display: 'block' });
                    exploreSwitch = false;
                } else
                if ($('#regionConnect ol li ol').is(':visible')){
                    $('#regionConnect ol li ol').css({ display: 'none' });
                }
            }
        });
    }
    // article view options
    if($('#articleOptions').is('div')){
        $('#articleOptions a').bind('click', function(e){
            e.preventDefault();
            var articleOption = this.hash;
            if (articleOption == '#textlarger'){
                var fontSize = $('#storyBody').css('font-size');
                if (fontSize.length == 4) {
                    var nextSize = Number(fontSize.substr(0,2)) + 1;
                } else if (fontSize.length == 3) {
                    var nextSize = Number(fontSize.substr(0,1)) + 1;
                }
                if (9 < nextSize && nextSize < 17) {
                    $('#storyBody').css({
                        'font-size': nextSize
                    });
                }
            }
            if (articleOption == '#textsmaller'){
                var fontSize = $('#storyBody').css('font-size');
                if (fontSize.length == 4) {
                    var nextSize = Number(fontSize.substr(0,2)) - 1;
                } else if (fontSize.length == 3) {
                    var nextSize = Number(fontSize.substr(0,1)) - 1;
                }
                if (9 < nextSize && nextSize < 17) {
                    $('#storyBody').css({
                        'font-size': nextSize
                    });
                }
            }
            if (articleOption == '#print'){
                window.print();
            }
         });
    }

    // TV guide popup
    if ($('#programlist').is('table')){
        $('#programlist a').bind('click',function(e){
            e.preventDefault();
            var w = 480;
            var h = 340;
            var sWidth = screen.availWidth;
            var sHeight = screen.availHeight;
            var leftPos = (sWidth-w)/2;
            var topPos = (sHeight-h)/2;
            topPos = topPos-130;
            window.open(this.href,'', 'menubar=no,location=no,resizable=no,scrollbars=no,status=yes,width=640,height=480,top='+topPos+',left='+leftPos+'');
          });

     }

     // open blog items in a new window
     if($('#blogs').is('div')){
            $('#blogs a').bind('click',function(e){
                e.preventDefault();
                window.open(this.href,'','');
            });
     }

     // add/edit event
     if($('#submitEvent').is('form')){
         var shortChars = 68;
         var longChars = 3000;
         $('#shortCharsLeft').text(shortChars + ' characters left');
         $('#longCharsLeft').text(longChars + ' characters left');

         // Brief overview count
         $('#id_e-short_description').bind('keydown',function(e){
            var count = $(this).val().length;
            var charsLeft = shortChars - count;
            $('#shortCharsLeft').text(charsLeft + ' characters left');
            if (count >= shortChars) alert('You have gone beyond the character limit for this field. The data will be truncated to 68 characters.');
        });

        // Detailed description count
        $('#id_e-long_description').bind('keydown',function(e){
            var count = $(this).val().length;
            var charsLeft = longChars - count;
            $('#longCharsLeft').text(charsLeft + ' characters left');
            if (count >= longChars) alert('You have gone beyond the character limit for this field. The data will be truncated to 3000 characters.');
        });
     }
}


function startWidgets()
{
    // Table sorter for events page
    // if($('table.tablesorter').is('table')){
    // 	$('table')
    // 	.tablesorter({widthFixed: true})
    // 	.tablesorterPager({container: $("#pager")});
    // 	$('table.tablesorter tbody tr').mouseover(function(){
    // 		$(this).css({ backgroundColor:"#DDDDDD" });
    // 	});
    // 	$('table.tablesorter tbody tr').mouseout(function(){
    // 		$(this).css({ backgroundColor:"#ffffff" });
    // 	});
    // 	$('table.tablesorter tbody tr').click(function(e){
    // 		e.preventDefault();
    // 		var urlLink = $(this).find("a")[1].href;
    // 		document.location = urlLink;
    // 	});
    //}
    /*
     * Below is setup in the events-details.html template
    var eventDates = {};
    eventDates['d' + ((new Date(2009, 0, 14)).getTime())] = '1';
    */
    var markEventDates = function($td, thisDate, month, year)
    {
        today = new Date();
        if (eventDates['d' + thisDate.getTime()]) {
            $td
            .addClass('selected')
            .bind('click', function(){
                $td.addClass('selected');
            });
        }
        else {
            $td.bind('click', function(){
                $td.removeClass('selected');
            });
            /*.bind(
                'mouseenter mouseleave blur focus',
                function(){
                    $td.removeClass('table.jcalendar td.dp-hover');
                    $td.removeClass('table.jcalendar td:hover');
                    $td.removeClass('dp-hover');
                    alert('a');
                }
            );*/
        }
    }
    
    if (typeof(calendarWidgetStartDate) == "undefined") calendarWidgetStartDate = '';
    if (typeof(calendarWidgetEndDate) == "undefined") calendarWidgetEndDate = '';

    // Calendar for events view page
    if($('#calendarWidget').is('div')){
        $('#calendarWidget').datePicker({ inline: true, 
                                          closeOnSelect: false, 
                                          selectMultiple: true,
                                          renderCallback: markEventDates,
                                          startDate: calendarWidgetStartDate,
                                          endDate: calendarWidgetEndDate,
                                          hoverClass: false
                                       });
    }
    
    // Calendar for add/edit event
    if($('#when_calendar').is('div')){
        $('#when_calendar').datePicker({
            inline: true,
            createButton:false,
            displayClose:true,
            closeOnSelect:false,
            selectMultiple:true
        });
    }

    // calendar initialise on the event search page
    if($('#eventSearch').is('div')){
        msg_debug += 'calendar started';
        $('#dateFrom').datePicker().trigger('change');
        $('#dateTo').datePicker().trigger('change');
        var today = new Date();
        $('#dateFrom').val(today.getDate() + '/' + (today.getMonth()+1) + '/' + today.getFullYear());
        // select range; adds days to current From date
        $('#range a').bind('click',function(e){
            var dateFrom = $('#dateFrom').val();
            var dateFromArray = dateFrom.split('/');
            var dd = dateFromArray[0]
            var mm = Number(dateFromArray[1]) - 1;
            var yy = dateFromArray[2];
            var fromDate = new Date(yy,mm,dd);
            switch(this.hash){
                case '#1': fromDate.setDate((fromDate.getDate()+7)); break;
                case '#2': fromDate.setDate((fromDate.getDate()+14)); break;
                case '#3': fromDate.setDate((fromDate.getDate()+21)); break;
                case '#4': fromDate.setDate((fromDate.getDate()+28)); break;
                case '#5': fromDate.setDate((fromDate.getDate()+35)); break;
                default: break;
            }
            $('#dateTo').val(fromDate.getDate() + '/' + (fromDate.getMonth()+1) + '/' + fromDate.getFullYear());
        });
    }

    // Google map on event view page
    if($('#mapArea').is('div')){
        msg_debug += 'Google maps started\r';
        var map;
        var testBrowser = GBrowserIsCompatible();
        //console.log(testBrowser);
        if (testBrowser) {
            map = new GMap2(document.getElementById('mapArea'));
            map.setCenter(new GLatLng(-28.326236, 153.403944), 14);
            map.addControl(new GLargeMapControl());
            //default google marker with a regular html info window
            defaultMarker = new GMarker( new GLatLng(-28.326236, 153.403944));
            GEvent.addListener(defaultMarker, 'click', function(){
                defaultMarker.openInfoWindowHtml("<div style='font-family: arial; font-size: .7em;'><strong>I'm a default Google info window with HTML content.</strong></div>");
            });
            map.addOverlay(defaultMarker);
        }
    }

    // Top picks carousel
    if($('.carousel').is('div')){
        msg_debug += 'top picks started\r';
     $(".carousel").jCarouselLite({
        btnNext: "#nextplease",
        btnPrev: "#previous",
        visible: 4,
        scroll: 2
      });
    }

    // What's news widget
    if($('#featureStory').is('div')){
        // number of stories
        var numItems = $('#storyList div').length;
        var itemObj = $('#storyList').children();
        var currentItem = 1;
        var currentLink = 0;
        var playing = true;
        var storyTimer;
        // setup the layers for javascript users
        //$('#storyController').css({ visibility: 'visible' });
        $('#storyList div').css({ position: 'absolute', top: 0, left: 0 });
        itemObj.each(function(num){
            var layerIndex = 100 - num;
            $(itemObj[num]).css({ zIndex: layerIndex });
        });
        for (var x=0; x<numItems; x++){
            $('#storyController a:last-child').before('<a href="#' + itemObj[x].id + '" class="itemLink">' + (x+1) + '</a>');
            var orderItems = '#' + itemObj[x].id;
        }
        $('#storyController a:last-child').after('<a href="#playPause" id="playPause"><img src="../images/btn-pause.gif" alt="play" align="absbottom" /></a>');
        // set the first link selected
        $('#storyController a:nth-child(2)').removeClass('itemLink');
        $('#storyController a:nth-child(2)').addClass('itemLinkSelected');


        function autoFader(event, nextID){
            // check if the fader was called by the timer or link
            if (nextID){
                var selectedDiv = nextID;
            } else {
                event.preventDefault();
                var selectedDiv = (event.target.hash);
                currentItem = Number(selectedDiv.substr(6));
            }
            for (var x=0; x<numItems; x++){
                var hideItem = '#story' + x;
                if (hideItem !== selectedDiv) $(hideItem).fadeOut('slow');
            }
            $(selectedDiv).fadeIn('slow');

            // remove items that were previously selected
            var checkItems = $('#storyController').children();
            for (var x=0; x<checkItems.length; x++){
                var y = x + 1;
                if ($(checkItems[y]).hasClass('itemLinkSelected')){
                    $(checkItems[y]).removeClass('itemLinkSelected');
                    $(checkItems[y]).addClass('itemLink');
                }
            }
            // add the selected class to the button
            currentLink = Number(selectedDiv.substr(6)) + 1;
            $(checkItems[currentLink]).addClass('itemLinkSelected');
            $(checkItems[currentLink]).removeClass('itemLink');
        }
        function callFader(){
            var totalItemsAvail = numItems - 1;
            if (currentItem >= totalItemsAvail){
                currentItem = 0;
            } else {
                currentItem ++;
            }
            var itemtoCall = '#story' + currentItem;
            autoFader(null, itemtoCall);
        }
        function reverseOrder(){
            // what is the current item?
            var currentDisplayed;
            var itemLinks = $('#storyController').children();
            for (var x=0; x<itemLinks.length; x++){
                if ($(itemLinks[x]).hasClass('itemLinkSelected')){
                    currentDisplayed = x;
                }
            }
            var previousItem = currentDisplayed - 1;
            if(previousItem <= 0){
                previousItem = numItems - 1;
            } else {
                previousItem --;
            }
            var itemtoCall = '#story' + previousItem;
            currentItem = previousItem;
            autoFader(null, itemtoCall);
        }
        function stopTimer(){
            clearInterval(storyTimer);
        }
        function startTimer(){
            storyTimer = setInterval(callFader, 8000);
        }
        function pausePlay(){
            if (playing == true){
                stopTimer();
                playing = false;
                $('#playPause img').replaceWith('<img src="../images/btn-play.gif" alt="pause"  />');
            } else {
                startTimer();
                $('#playPause img').replaceWith('<img src="../images/btn-pause.gif" alt="play"  />');
                playing = true;
            }
        }
        // button listener
        $('#storyController a').bind('click', function(e){
            e.preventDefault();
            var clickedItem = this.hash;
            switch(clickedItem){
                case '#playPause' : pausePlay(); break;
                case '#previous' : reverseOrder(); break;
                case '#next' : callFader(); break;
                default: autoFader(e); break;
            }
        });
        startTimer();
    }

    if(debug){ console.log(msg_debug); }
}
