Cufon.replace('.cufon_text');
Cufon.replace('a.submit_button');
var frontend = {
	opacity_show: {opacity: 1},
	opacity_hide: {opacity: 0},
	opacity_time: 400,
	opacity_time_s: 300,
    validated: true,
    form_id: null,
    timeouts: new Array(),
    search_timeout: null,
    init: function(){
        $('.equal').equalHeights();    
        $('.clickable').fitted();
        $('.clickable_nolink').fitted({'doLink':false});
        $('.clickable_feature').fitted({'class':{'hover' : 'hovered_featured'}});
        $("#search").labelify({
          text: "label"
        });
        if($.browser.msie)
        {   
            frontend.opacity_time = 0;
            frontend.opacity_time_s = 0;
        }
        
        
        frontend.slider();
        frontend.slideshow();
        frontend.slideshow_thumbs();
        frontend.programmes_menu();
        frontend.form_submit();
        frontend.sign_in();
        frontend.newsletter();
        frontend.search();
        
        if($('.resource-colorbox').length > 0)
        {
            $('.resource-colorbox').colorbox({scalePhotos:true,maxWidth:"90%",maxHeight:"90%"});
        }
        
    },
    slider: function(){
        $('div.collapsed div#header_container a#h1_link h1 div').click(function(e){
            e.preventDefault();
            if($('#header').hasClass('open'))
            {
                if($.browser.msie)
                {
                    $('div#search_box').hide();
                    $('ul#navigation').hide();
                    $('#header_container').animate({height: '33px'},400,'linear',function(){
                            $('#header').removeClass('open');            
                            $('div.collapsed h1 div').text('Show navigation');
                            $('div.collapsed h1 div').css('backgroundImage','url(/images/small_arrow_down.png)');
                    });
                }
                else
                {
                    $('div#search_box').animate({opacity:0},frontend.opacity_time_s,'linear',function(){
                        $(this).hide();
                    });
                    $('ul#navigation').animate({opacity:0},frontend.opacity_time_s,'linear',function(){
                        $(this).hide();
                        $('#header_container').animate({height: '33px'},400,'linear',function(){
                            $('#header').removeClass('open');            
                            $('div.collapsed h1 div').text('Show navigation');
                            $('div.collapsed h1 div').css('backgroundImage','url(/images/small_arrow_down.png)');
                        });
                    
                    });
                }
            }
            else
            {
                $('#header_container').animate({height: '87px'},400, 'linear',function(){
                    $('#header').addClass('open');
                    $('div.collapsed h1 div').text('Hide navigation');
                    $('div.collapsed h1 div').css('backgroundImage','url(/images/small_arrow_up.png)');
                    if($.browser.msie)
                    {
                        $('div#search_box').show();
                        $('ul#navigation').show();
                    }
                    else
                    {
                        $('div#search_box').css('opacity',0).show().animate({opacity:1},frontend.opacity_time);
                        $('ul#navigation').css('opacity',0).show().animate({opacity:1},frontend.opacity_time);
                    }
                });
            }
        });
    },
    programmes_menu: function(){
        $('#programmes_menu_link').click(function(e){
            e.preventDefault();
            if($(this).hasClass('programmes_open')){
                $(this).removeClass('programmes_open').addClass('programmes_closed');
                $('#programmes_menu').hide();
            }
            else{
                $(this).removeClass('programmes_closed').addClass('programmes_open');
                $('#programmes_menu').show();
                var box = $('#programmes_menu');
                $(this).mouseover(function(e){
                    clearTimeout(clearTimeout(frontend.timeouts[0]));
                });
                $(this).mouseout(function(e){
                    clearTimeout(clearTimeout(frontend.timeouts[0]));                    
                    frontend.timeouts[0] = setTimeout("$('#programmes_menu_link').removeClass('programmes_open').addClass('programmes_closed');$('#programmes_menu').hide();",1000);
                });                
                box.mouseout(function(e){
                    clearTimeout(clearTimeout(frontend.timeouts[0]));                    
                    frontend.timeouts[0] = setTimeout("$('#programmes_menu_link').removeClass('programmes_open').addClass('programmes_closed');$('#programmes_menu').hide();",1000);
                });
                
                box.mouseover(function(e){
                    clearTimeout(frontend.timeouts[0]);
                });                
            }
        });
        
 /*       $('#programmes_menu ul li a').mouseover(function(e){
            $('#programme_description').text($(this).attr('rel'));
        });
        $('#programmes_menu ul li a').mouseout(function(e){
            $('#programme_description').text('Roll over a programme logo for more information');
        }); */

    },
    form_submit: function(){
        $('.form_error_message').hide();
        $('.success_message_big').hide();
        $('.generic_form').submit(function(e){
            e.preventDefault();
            frontend.form_id = $(this).attr('id');
            frontend.validated = true;
            $('.required', '#'+$(this).attr('id')).each(function(){
                if($(this).val() == '')
                {
                    frontend.validated = false;
                    $('label[for='+$(this).attr('id')+']').addClass('form_error');
                    $(this).addClass('field_error');
                    $('.form_error_message[rel='+frontend.form_id+'] span').html('You have not filled in one or more required fields');
                    $('.form_error_message[rel='+frontend.form_id+']').show();
                }
                else
                {
                    $('label[for='+$(this).attr('id')+']').removeClass('form_error');                
                    $(this).removeClass('field_error');
                }
                if($(this).hasClass('email'))
                {
                    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
                    if(!pattern.test($(this).val()))
                    {
                        frontend.validated = false;
                        $('label[for='+$(this).attr('id')+']').addClass('form_error');
                        $(this).addClass('field_error');
                        $('.form_error_message[rel='+frontend.form_id+'] span').html('You have not entered a valid email address');
                        $('.form_error_message[rel='+frontend.form_id+']').show();
                    }
                    else
                    {
                        $('label[for='+$(this).attr('id')+']').removeClass('form_error');                
                        $(this).removeClass('field_error');
                    }
                    
                }
                
            });
            if(frontend.validated)
            {
               $('.form_error_message[rel='+frontend.form_id+']').hide();
               
               // Check if this is the newsletter signup
               if ($('#newsletter_signup_form').length) {
				  // do something
				  
				  $.getJSON(
		            this.action + "?callback=?",
		            $(this).serialize(),
		            function (data) {
		                if (data.Status === 400) {
		                    $('.form_error_message[rel='+frontend.form_id+'] span').html(data.Message);
		                    $('.form_error_message[rel='+frontend.form_id+']').show();
		                } else { // 200
		                	$('.sub_form[rel='+frontend.form_id+']').remove();
		                    $('.success_message_big[rel='+frontend.form_id+'] span').html(data.Message);
		                    $('.success_message_big[rel='+frontend.form_id+']').show(); 
		                }
		                frontend.sign_in();
		                
		            });
				
				}
				
				else 
				
				{
               
	               $.ajax({url: $(this).attr('action'),
	                       dataType: 'json',
	                       data: $(this).serialize(),
	                       success: function(response){
	                            if(response.error == "true")
	                            {
	                                $('.form_error_message[rel='+frontend.form_id+'] span').html(response.msg);
	                                $('.form_error_message[rel='+frontend.form_id+']').show();                                
	                            }
	                            else
	                            {
	                                $('.sub_form[rel='+frontend.form_id+']').remove();
	                                $('.success_message_big[rel='+frontend.form_id+'] span').html(response.msg);
	                                $('.success_message_big[rel='+frontend.form_id+']').show();                                
	                            }
	                            frontend.sign_in();
	                       
	                       }
	               });           
	            }
            }        
        });
        $('.generic_submit').click(function(e){
            e.preventDefault();
            $('#'+$(this).attr('rel')).submit();
        });
    },
    sign_in: function()
    {
       /* $('a[href=\\/sign-in]').unbind();
        $('a[href=\\/sign-in]').click(function(e){
            e.preventDefault();
            $.fn.colorbox({href:'/auth/getSignInForm',
                           innerWidth: 460,
                           innerHeight: 270,
                           transition: 'none',
                           opacity: 0.90,
                           onComplete: function()
                           {
                            $('#sign_in_close').click(function(e){
                               e.preventDefault();
                               $.fn.colorbox.close(); 
                            });
                            frontend.form_submit();
                           }
            });
        });*/

        $('a.sign-in').unbind();
        $('a.sign-in').click(function(e){
            e.preventDefault();
            $.fn.colorbox({href:'/auth/getSignInForm',
                           innerWidth: 460,
                           innerHeight: 380,
                           transition: 'none',
                           opacity: 0.90,
                           onComplete: function()
                           {
                            Cufon.refresh();
                            $('#sign_in_close').click(function(e){
                               e.preventDefault();
                               $.fn.colorbox.close(); 
                            });
                            frontend.form_submit();
                           }
            });
        });
    
    
    
    },
    newsletter: function()
    {
        $('a.newsletter').click(function(e){
            e.preventDefault();
            $.fn.colorbox({href:'/auth/getNewsletterForm',
                           innerWidth: 460,
                           innerHeight: 380,
                           transition: 'none',
                           opacity: 0.90,
                           onComplete: function()
                           {
                            Cufon.refresh();
                            $('#newsletter_signup_close').click(function(e){
                               e.preventDefault();
                               $.fn.colorbox.close(); 
                            });
                            frontend.form_submit();
                           }
            });
        });
    },    
    login: function(name)
    {
        if($('#FORCE_LOGIN_REFRESH').length > 0)
        {
            window.location.reload(true);
        }
        else
        {
            var html = 'Welcome, <a href="/edit-account">'+name.capitalize()+'</a>';
            var html2 = '<a href="/sign-out">Sign out</a>';
            $('#user_container').html(html);
            $('#sign_in_out').html(html2);     
            $.fn.colorbox.close();
        }
    },
    fadeLink: function(el,fadeTo,fadeFrom)
    {
        el.mouseenter(function(e){
            el.clearQueue();
            $(this).animate({backgroundColor: fadeTo},500);
        });
        el.mouseleave(function(e){
            el.clearQueue();        
            $(this).animate({backgroundColor: fadeFrom},500);
        });
    },
    search: function()
    {
    
        $('#search-button').click(function(e){
            e.preventDefault();
            if($('#search_box_ajax:visible').length > 0)
            {
                $('#search_input input').val('');
                $('#search_box_ajax').hide();
                $(this).removeClass('search-open');
                $('#search_results').html('').hide();            
            }
            else
            {
                $('#search_input input').val('');
                $('#search_box_ajax').show();
                $('#search_input input').focus();
                $(this).addClass('search-open');
            }
        });
        
        $('#search_input a').click(function(e){
            e.preventDefault();
            $('#search_input input').val('');
            $('#search_box_ajax').hide();
            $('#search_results').html('').hide();
            $('h1').show();
            $('.search').removeClass('search-open');
        });
    
        $('#search_input input').keyup(function(e){
            e.preventDefault();
            if($('#search_results:visible').length == 0)
            {
                $('#search_results').html('<div class="ajax-search-loading">Loading</div>').show();
            }
            clearTimeout(frontend.search_timeout);
            if($(this).val() != '')
            {
                frontend.search_timeout = setTimeout("$('#search_results').html('<div class=\"ajax-search-loading\">Loading</div>');$.ajax({url: '/search?query="+$(this).val()+"&app='+current_programme,dataType: 'json',async: 'false',cache: 'false',success: function(response){$('#search_results').html(response.html);$('#search_results div.ajax-search-item:last').addClass('ajax-search-item-last');}});",500);
            }
            else
            {
                $('#search_results').html('').hide();
            }
        });
    },
    slideshow: function(){
        if($('.slide').length > 1)
        {
            $('#slides').cycle({ 
                fx:     'fade',
                speed:  'slow',
                timeout: 0,
                pager:   '#slideshow_nav',
                pagerAnchorBuilder: frontend.pagerFactory,
                after: frontend.onAfter,
                next: '.slideshow_next',
                prev: '.slideshow_prev',
                fit: 1
            });
            $('#slideshow').hover(
		        function() { $('#controls').fadeIn(); },
		        function() { $('#controls').fadeOut(); }
		    );
        }
    },              
    onAfter: function (curr, next, opts) {
    	var thumbsPage = Math.floor(opts.currSlide / 8);
    	$('#slideshow_nav').cycle(thumbsPage);
    },                   
    pagerFactory: function (idx, slide) {
    	return '#slideshow_nav div.image_thumb:eq(' + idx + ') a';         
    }, 
    
    slideshow_thumbs: function(){
    	if($('.thumbnail_cycle_slide').length > 1)
        {
        	 $('#slideshow_nav').cycle({timeout: 0, speed: 500, height: 90, width: 640, next: '.slideshow_nav_cycle_next', prev: '.slideshow_nav_cycle_prev',after: frontend.slideshow_after,fx:'scrollHorz'});
        }
    },
	
	slideshow_after: function(curr, next, opts) {
	    var index = opts.currSlide;
	    
	    var from = (index * 8) + 1;
	    var to = from + 7;
	    if(index == (opts.slideCount - 1))
	    {
	        to = $('#browser_count').val();
	    }        
	    $('.pager_text').text(from+' to '+to);
	    
	    
	    $('.prev')[index == 0 ? 'hide' : 'show']();
	    $('.no_prev')[index == 0 ? 'show' : 'hide']();    
	    $('.next')[index == opts.slideCount - 1 ? 'hide' : 'show']();
	    $('.no_next')[index == opts.slideCount - 1 ? 'show' : 'hide']();

	}
    
}

$(function(){
    frontend.init();
});

String.prototype.capitalize = function(){ //v1.0
    return this.replace(/\w+/g, function(a){
        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
    });
};

