// ====================
// support functions
    function microtime() {
        var currTime = new Date().getTime();
        return currTime;
    }

    function getDayName(theDate) {
        var daynames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
        var day = new Date(theDate);
        return daynames[day.getDay()];
    }

     function getDoW(theDate) {
        var day = new Date(theDate);
        return day.getDay();
    }

   function getNextDays(cDays) {
        var today = new Date();
        var seconds = today.getTime();
        var day = '';
        var filterHTML = '';

        for(var i = 0; i < 7; i++) {
            if(i == 0) {
                day  = 'Today';
                dayID = getDayName(seconds + i*86400000);
            } else {
                day = getDayName(seconds + i*86400000);
                dayID = day;
            }
            filterHTML += '<span class="nobr dayFilter" id="f'+dayID+'"><a href="#f'+dayID+'" class="f'+dayID+'">'+day+' ('+cDays[getDoW(seconds + i*86400000)]+')</a></span> ';
        }
        filterHTML += '<span class="nobr dayFilter" id="fWeekend"><a href="#fWeekend" class="fWeekend">Weekend ('+(cDays[0]+cDays[5]+cDays[6])+')</a></span> ';

        $('#dynDayFilter').html(filterHTML);
    }

    function setFilter(filterID, filterLabel ,filterCount) {
/*
        if(filterCount > 0) {
            $('#'+filterID+' a').append(' ('+filterCount+')');
        } else {
            $('#'+filterID+'').remove();
        }
*/
		if(filterCount > 0) {
			return '<span class="nobr eventFilter" id="'+filterID+'"><a href="#'+filterID+'">'+filterLabel+' ('+filterCount+')</a></span> ';
		}

		return '';
    }

    function hideButtons() {
        $('.abAccessible').addClass('bAccessible').removeClass('abAccessible');
        $('.abWheelchair').addClass('bWheelchair').removeClass('abWheelchair');
        $('.bAccessible').hide();
        $('.bAccessible').hide();
        $('.bAccessible').hide();
        $('.bAlsoAsIMAX').hide();
        $('.bAlsoAsIMAX3D').hide();
        $('.bAlsoAsDigital').hide();
        $('.bAlsoAs3D').hide();
        $('.bWheelchair').show();
        $('.timeslisting .fWheelchair').css({backgroundColor:'#f0f0f0'});
        $('div.formats div.text').hide();
    }

    function showButtons() {
        $('.abAccessible').addClass('bAccessible').removeClass('abAccessible');
        $('.abWheelchair').addClass('bWheelchair').removeClass('abWheelchair');
        $('.bAccessible').show();
        $('.bAlsoAsIMAX').show();
        $('.bAlsoAsIMAX3D').show();
        $('.bAlsoAsDigital').show();
        $('.bAlsoAs3D').show();
        $('.bWheelchair').show();
        $('.timeslisting .fWheelchair').css({backgroundColor:'#f0f0f0'});
        $('div.formats div.text').show();
    }

	function filterShowAll() {
        $('.filmdiv').show();
        $('.filmblock').show();
        $('.timeslisting').show();
        $('.dayline').show();
    }

	function filterRegular() {
        filterShowAll();
        $('div.timeslisting.fAccessible').hide();

		$('.fPlusSport').hide();
        $('.fPlusMusic').hide();
        $('.fPlusCulture').hide();
        $('.fPlusGaming').hide();

        showButtons();
	}

    function bAccessibleOn(ctx) {
		$(ctx).addClass('abAccessible').removeClass('bAccessible');
        var filmdiv = $(ctx).parents('.filmdiv');
        $('.fAccessible', filmdiv).filter('div:not(.filmblock)').fadeIn();
    }

    function bAccessibleOff(ctx) {
    	$(ctx).addClass('bAccessible').removeClass('abAccessible');
        var filmdiv = $(ctx).parents('.filmdiv');
        $('.fAccessible', filmdiv).filter('div:not(.filmblock)').fadeOut();
    }

    function bWheelchairOn(ctx) {
		$(ctx).addClass('abWheelchair').removeClass('bWheelchair');
        var filmdiv = $(ctx).parents('.filmdiv');
        $('.timeslisting .fWheelchair', filmdiv).css({backgroundColor:'yellow'});
    }

    function bWheelchairOff(ctx) {
    	$(ctx).addClass('bWheelchair').removeClass('abWheelchair');
        var filmdiv = $(ctx).parents('.filmdiv');
        $('.timeslisting .fWheelchair', filmdiv).css({backgroundColor:'#f0f0f0'});
    }



// ====================
// ** main()
$(document).ready(function() {

    var size            = 0;
    var cAccessible     = 0;
    var cGallery        = 0;
    var cIntermission   = 0;
    var cDigital        = 0;
    var cIMAX           = 0;
    var c3D             = 0;
    var cSeniorScreen   = 0;
    var cKids           = 0;
    var cNewbies        = 0;
    var cBollywood      = 0;
    var cDirectorsChair = 0;
    var cPlusSport      = 0;
    var cPlusMusic      = 0;
    var cPlusCulture    = 0;
    var cPlusGaming     = 0;
    var cMonday         = 0;
    var cTuesday        = 0;
    var cWednesday      = 0;
    var cThursday       = 0;
    var cFriday         = 0;
    var cSaturday       = 0;
    var cSunday         = 0;
    var all             = 0;
    var filterHTML      = ''
    var parentclass;
    var myclass;
    var dayline = $('.dayline');
    dayline.each(function(index) {
        size = 0;
        size = $('div.showingtimes', this).children().size();
        myclass = $(this).attr('class');
        parentclass = $(this).parent('.timeslisting').attr('class');
        if(parentclass.match('fAccessible'))    { cAccessible += size; }
        if(parentclass.match('fGallery'))       { cGallery += size; }
        if(parentclass.match('fIntermission'))  { cIntermission += size; }
        if(parentclass.match('fDigital'))       { cDigital += size; }
        if(parentclass.match('fIMAX'))          { cIMAX += size; }
        if(parentclass.match('f3D'))            { c3D += size; }
        if(parentclass.match('fSeniorScreen'))  { cSeniorScreen += size; }
        if(parentclass.match('fKids'))          { cKids += size; }
        if(parentclass.match('fNewbies'))       { cNewbies += size; }
        if(parentclass.match('fBollywood'))     { cBollywood += size; }
        if(parentclass.match('fDirectorsChair')){ cDirectorsChair += size; }
        if(parentclass.match('fPlusSport'))     { cPlusSport += size; }
        if(parentclass.match('fPlusMusic'))     { cPlusMusic += size; }
        if(parentclass.match('fPlusCulture'))   { cPlusCulture += size; }
        if(parentclass.match('fPlusGaming'))    { cPlusGaming += size; }
        if(myclass.match('fMonday'))        { cMonday += size; }
        if(myclass.match('fTuesday'))       { cTuesday += size; }
        if(myclass.match('fWednesday'))     { cWednesday += size; }
        if(myclass.match('fThursday'))      { cThursday += size; }
        if(myclass.match('fFriday'))        { cFriday += size; }
        if(myclass.match('fSaturday'))      { cSaturday += size; }
        if(myclass.match('fSunday'))        { cSunday += size; }
        all += size;
    });

    // show filter and hide line under tabs
	//before = microtime();
    // count performances for each filter and show count on filter
    $filterHTML  = setFilter('fRegular', 'Standard', (all-cAccessible-cPlusSport-cPlusMusic-cPlusCulture-cPlusGaming));
    $filterHTML += setFilter('fGallery', 'Gallery', cGallery);
    $filterHTML += setFilter('fAccessible', 'Accessible', cAccessible);
    $filterHTML += setFilter('fIntermission', 'Intermission', cIntermission);
    $filterHTML += setFilter('fDigital', 'Digital', cDigital);
    $filterHTML += setFilter('fIMAX', 'IMAX', cIMAX);
    $filterHTML += setFilter('f3D', '3D', c3D);
    $filterHTML += setFilter('fSeniorScreen', 'Senior Screen', cSeniorScreen);
    $filterHTML += setFilter('fKids', 'Kids', cKids);
    $filterHTML += setFilter('fNewbies', 'Newbies', cNewbies);
    $filterHTML += setFilter('fBollywood', 'Bollywood', cBollywood);
    $filterHTML += setFilter('fDirectorsChair', 'Directors Chair', cDirectorsChair);
    $filterHTML += setFilter('fPlusSport', 'Sport', cPlusSport);
    $filterHTML += setFilter('fPlusMusic', 'Music', cPlusMusic);
    $filterHTML += setFilter('fPlusCulture', 'Culture', cPlusCulture);
    $filterHTML += setFilter('fPlusGaming', 'Gaming', cPlusGaming);
    $filterHTML += setFilter('fShowAll', 'Show all', all);
    $('.dynTypeFilter').html('<div>'+$filterHTML+'</div>');
    $('#fRegular a').addClass('active');

    getNextDays([cSunday, cMonday, cTuesday, cWednesday, cThursday, cFriday, cSaturday]);
	//alert(microtime() - before);

    $('.filterline').show();


    // ====================
    // tooltips
    $('.formatinfo').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );

    $('.bAlsoAsIMAX').attr('title','IMAX|IMAX is the ultimate cinema experience - immerse yourself in the action with floor-to-ceiling screens, laser-aligned sound system and IMAX\'s unique auditorium geometry.').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );

    $('.bAlsoAsIMAX3D').attr('title','IMAX3D|Imax is the ultimate cinematic experience - immerse yourself in action so real you\'ll want to reach out and touch it.').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );

    $('.bAlsoAsDigital').attr('title','ODEON Digital|Digital performances offer crystal clear picture quality and superior digital sound.').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );

    $('.bAlsoAs3D').attr('title','3D|Screening in Digital 3-D - a new dimension in cinema.').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );

    $('.bAlsoAsIntermission').attr('title','Intermission|Some longer performances have an intermission, allowing you time to refresh without missing a minute of the action.').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );


    $('.bAccessible').attr('title','Accessible performances|Includes Audio Described and/or Subtitled performances for the hard of hearing.').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );

    $('.bWheelchair').attr('title','Wheelchair accessible performances|Wheelchair accessible screenings are shown highlighted in yellow.  Access to screen is either stair-free or via a lift.').cluetip({
      splitTitle: '|',
      hoverIntent: {
        sensitivity:  3,
        interval:     100,
        timeout:      0
      },
      dropShadow: true}
    );

    // ====================
    // add events -- toggles

    //  Accessible toggle button
    $('.bAccessible').click(function() {
    	if($(this).hasClass('bAccessible')) {
    		bAccessibleOn(this);
    	} else {
    		bAccessibleOff(this);
    	}
    	return false;
    });

	// Wheelchair toggle button
    $('.bWheelchair').click(function() {
    	if($(this).hasClass('bWheelchair')) {
    		bWheelchairOn(this);
    	} else {
    		bWheelchairOff(this);
    	}
    	return false;
    });


    // ====================
    // add events -- clicks

    // scroll to buttons
	$('.bAlsoAsIMAX').click(function() {
		var ref = $('a',this).attr('href').substring(2);
		$.scrollTo('#'+ref,800);
        return false;
	});

	$('.bAlsoAsIMAX3D').click(function() {
		var ref = $('a',this).attr('href').substring(2);
		$.scrollTo('#'+ref,800);
        return false;
	});

	$('.bAlsoAsDigital').click(function() {
		var ref = $('a',this).attr('href').substring(2);
		$.scrollTo('#'+ref,800);
        return false;
	});

	$('.bAlsoAs3D').click(function() {
		var ref = $('a',this).attr('href').substring(2);
		$.scrollTo('#'+ref,800);
        return false;
	});

	$('.bAlsoAsIntermission').click(function() {
		var ref = $('a',this).attr('href').substring(2);
		$.scrollTo('#'+ref,800);
        return false;
	});


    // assign click events to link in filter container
    // onclick: event filter:
    $('.eventFilter a').click(
        function(){
            var ft = $(this).attr('href').substring(1);

            if(ft == 'fRegular') {
            	filterRegular();
            } else {
                hideButtons();
                if(ft == 'fShowAll') {
                    filterShowAll();
                } else {
    				$('.filmdiv').hide();
                    $('.filmblock').show();
                    $('.timeslisting').hide();
                    $('.dayline').show();

                    if(ft == 'fIMAX') {
                        $('.fIMAX').parent('div.filmdiv').show();
                        $('.fIMAX3D').parent('div.filmdiv').show();
        				$('.fIMAX').show();
        				$('.fIMAX3D').show();
                    } else{
                        $('.'+ft).parent('div.filmdiv').show();
        				$('.'+ft).show();
                    }
                }
            }

            $('.nobr a').removeClass('active');
            $('#'+ft+' a').addClass('active');

            return false;
        }
    );
    // onclick: weekday filter
    $('.dayFilter a').click(
        function(){
            var ft = $(this).attr('class');
            if(ft != 'fWeekend') {
                hideButtons();

                $('.timeslisting').hide();
                $('.filmblock').hide();
                $('.dayline').hide();
                $('.filmdiv').show();

                $('.'+ft).show();

                $('.nobr a').removeClass('active');
                $('#'+ft+' a').addClass('active');
            } else {
                hideButtons();

                $('.timeslisting').hide();
                $('.filmblock').hide();
                $('.dayline').hide();
                $('.filmdiv').show();

                $('.fFriday').show();
                $('.fSaturday').show();
                $('.fSunday').show();

                $('.nobr a').removeClass('active');
                $('#fWeekend a').addClass('active');
            }
            return false;
        }
    );
});

