(function($){
    $.fn.clearDefault = function(){
        return this.each(function(){
            var default_value = $(this).val();
            $(this).bind('focus', function(){
                if ($(this).val() == default_value) { $(this).val(""); }
            });
            $(this).bind('blur', function(){
                if ($(this).val() === "") { $(this).val(default_value); }
            });
        });
    };
})(jQuery);

$(function() {
    $('input.clear_default').clearDefault();

    // skip browser bar on mobile
    /mobile/i.test(navigator.userAgent) && !location.hash && setTimeout(function () {
        if (!pageYOffset) window.scrollTo(0, 1);
    }, 1000);

    var reset_stars = function() {
        var selected = $('input[type=radio]:checked', '.ratings .star').parent();
        $('.star', '.ratings').removeClass('active_star');

        for(var i = 0; i < selected.index(); i++) {
            $('.star:eq('+i+')', '.ratings').addClass('active_star');
        }

        var stars = selected.index() == 1 ? 'star' : 'stars';
        $('.rating_label', '.ratings').html(selected.index() + ' ' + stars);
    };

    // ratings stars
    $('.star', '.ratings').hover(function() {
        $('.star', '.ratings').removeClass('active_star');

        for(var i = 0; i < $(this).index(); i++) {
            $('.star:eq('+i+')', '.ratings').addClass('active_star');
        }

        var stars = $(this).index() == 1 ? 'star' : 'stars';
        $('.rating_label', '.ratings').html($(this).index() + ' ' + stars);
    }, function() {
        reset_stars();
    });

    $('.star', '.ratings').click(function() {
        $('input', this).attr('checked', true);
        $(this).parents('form').submit();
    });

    reset_stars();

    // store locator
    var localSearch = new GlocalSearch();

    // geo location
    if(navigator.geolocation && /mobile/i.test(navigator.userAgent)) {
        $('#sl_postcode', '.cta').hide();
        $('button', '.cta').css({ display: 'block', float: 'none', margin: '0 auto', width: 100 });
    } 

    function usePointFromPostcode(postcode) {
        localSearch.setSearchCompleteCallback(null, function() {
            if (localSearch.results[0]) {
                var resultLat = localSearch.results[0].lat;
                var resultLng = localSearch.results[0].lng;
                var point = new GLatLng(resultLat,resultLng);
                $('#sl_lat').val(resultLat);
                $('#sl_lng').val(resultLng);
            } else {
                alert("Postcode not found!");
            }
        });

        localSearch.execute(postcode.replace(' ', '') + ", UK");
    }

    function check_coords() {
        setInterval(function() {
            if($('#sl_lat').val() !== '' && $('#sl_lng').val() !== '') {
                $('#store_locator').submit();
            }
        }, 500);
    }

    $('#store_locator').submit(function() {
        if($('#sl_postcode').val() === '') {
            alert('Please enter your postcode.');
            return false;
        }

        if($('#sl_lat').val() !== '' && $('#sl_lng').val() !== '') {
            return true;
        }

        if(navigator.geolocation && /mobile/i.test(navigator.userAgent)) {
            navigator.geolocation.getCurrentPosition(function(position) {
                $('#sl_lng', '.cta').val(position.coords.longitude);
                $('#sl_lat', '.cta').val(position.coords.latitude);
            }); 
        } else {
            usePointFromPostcode($('#sl_postcode').val());
        }

        check_coords();
        return false;
    });

    if($('.headlines').length > 0) {
        rotate = function() {
            $('ul', '.headlines').stop().animate({ left: '-=' + 650 }, function() {
                $('li:last', '.headlines').after($('li:first', '.headlines'));
                $(this).css({ left: 0 });
            });
        };

        setInterval(rotate, 10000);
    }

    if($('.slider').length > 0) {
        slide_to = function(index) {
            $('.active_slide').removeClass('active_slide');
            $('.slide:eq('+index+')').addClass('active_slide');
            $('.slide_container').stop().animate({ left: -1 * (index * $('.slide').outerWidth(true)) }, function() {
                refresh_indicators();
                init_nav();
            });
        };

        refresh_indicators = function() {
            var current_index = $('.active_slide').index();
            $('.active_indicator', '.slider_nav').removeClass('active_indicator');
            $('.indicator:eq('+current_index+')', '.slider_nav').addClass('active_indicator');
        };

        init_nav = function() {
            $('a', '.slider_nav').unbind('click').bind('click', false);

            $('a.prev').one('click', function() {
                var current_index = $('.active_slide').index();
                var next_index = (current_index == 0) ? ($('.slide').length - 1) : (current_index - 1);
                slide_to(next_index);
                return false;
            });

            $('a.next').one('click', function() {
                var current_index = $('.active_slide').index();
                var next_index = (current_index + 1 == $('.slide').length) ? 0 : (current_index + 1);
                slide_to(next_index);
                return false;
            });

            $('a', '.indicator').one('click', function() {
                slide_to($(this).parent().index());
                return false;
            });
        };

        init_nav();
    }

    $('a.colorbox').click(function() {
        $.colorbox({
            href: $(this).attr('href'),
            width: '600px'
        });

        return false;
    });

    $('a.cb_youtube').colorbox({iframe:true, innerWidth:600, innerHeight:368});
});

