﻿$(function () {
    (function ($) {
        if ($.browser.mozilla) {
            $.fn.disableTextSelect = function () {
                return this.each(function () {
                    $(this).css({
                        'MozUserSelect': 'none'
                    });
                });
            };
            $.fn.enableTextSelect = function () {
                return this.each(function () {
                    $(this).css({
                        'MozUserSelect': ''
                    });
                });
            };
        } else if ($.browser.msie) {
            $.fn.disableTextSelect = function () {
                return this.each(function () {
                    $(this).bind('selectstart.disableTextSelect', function () {
                        return false;
                    });
                });
            };
            $.fn.enableTextSelect = function () {
                return this.each(function () {
                    $(this).unbind('selectstart.disableTextSelect');
                });
            };
        } else {
            $.fn.disableTextSelect = function () {
                return this.each(function () {
                });
            };
            $.fn.enableTextSelect = function () {
                return this.each(function () {
                });
            };
        }
    })(jQuery);
});


if (!Array.indexOf) {
    Array.prototype.indexOf = function (obj) {
        for (var i = 0; i < this.length; i++) {
            if (this[i] == obj) {
                return i;
            }
        }
    }
}
if (!Array.firstContains) {
    Array.prototype.firstContainsSrc = function (obj) {
        for (var i = 0; i < this.length; i++) {
            //console.log(obj + " : " + this[i]);
            if (obj.indexOf(this[i].replace("../","")) > -1) {
                return i;
            }
        }
    }
}




var Rb = {
    ScrollerDom: function () {
        return ($('.ThumbScroller').get(0));
    },
    ScrollerJq: function () {
        return ($('.ThumbScroller'));
    },
    HasTouch: function () {
        return ('ontouchstart' in window);
    },
    LastChange: 0,
    TotalChange: 0,
    IsTap: function () {
        return (Math.abs(Rb.TotalChange) < 4);
    },
    MouseDown: function (event) {
        if (event.which == 1) { //left click
            Rb.StartThumbTrack(event);
        }
    },
    StartThumbTrack: function (event) {
        event.preventDefault();
        Rb.ScrollerDom().lastMousePosition = null;
        Rb.TotalChange = 0;
        if (Rb.HasTouch()) {
            $(document).unbind('touchmove', Rb.ThumbMove).bind('touchmove', Rb.ThumbMove);
        }
        else {
            $(document).unbind('mousemove', Rb.ThumbMove).bind('mousemove', Rb.ThumbMove);
        }
    },
    ThumbMove: function (event) {
        event.preventDefault();
        var atX = null;
        if (Rb.HasTouch() && !!event.originalEvent.touches) {
            atX = event.originalEvent.touches[0].pageX;
        }
        else {
            atX = event.pageX;
        }
        if (Rb.ScrollerDom().lastMousePosition != null) {
            var change = atX - Rb.ScrollerDom().lastMousePosition;
            Rb.ScrollThumbs(change);
        }
        Rb.ScrollerDom().lastMousePosition = atX;
    },
    EndThumbTrack: function (event) {
        $(document)
            .unbind('mousemove', Rb.ThumbMove)
            .unbind('touchmove', Rb.ThumbMove);

        if (!Rb.IsTap()) {
            //console.log(Rb.GetNewLeft(Rb.LastChange * 20));
            Rb.ScrollerJq().stop(true, false).animate({ left: Rb.GetNewLeft(Rb.LastChange * 20) }, 3000, 'easeOutQuart');
        }
        Rb.TotalChange = 0;
    },
    EndThumbTap: function (event) {
        if (Rb.IsTap() && (event.which == 1 || Rb.HasTouch())) { //left click tap
            if ($(this).attr('data-fullsrc') != "") {
                event.preventDefault();
                Rb.ShowImage($(this).attr('data-fullsrc'));
            }
            else if ($(this).attr('data-projecturl') != "") {
                window.location.href = $(this).attr('data-projecturl');
            }
        }
    },
    ScrollThumbs: function (change) {
        Rb.ScrollerJq().stop(true, false).css('left', Rb.GetNewLeft(change) + 'px');
        Rb.LastChange = change;
        Rb.TotalChange += change;
    },
    GetNewLeft: function (change) {
        var newLeft = Rb.ScrollerJq().position().left + change;
        newLeft = Math.max($('#ThumbScrollerWrapper').width() - Rb.ScrollerJq().width(), Math.min(0, newLeft));
        return (newLeft);
    },
    FocusThumb: function (event) {

    },
    BindHandlers: function () {
        $('#ThumbScrollerWrapper').disableTextSelect();

        if (Rb.HasTouch()) {
            Rb.ScrollerJq()
                .bind('touchstart', Rb.StartThumbTrack);

            $(document)
                .bind('touchend', Rb.EndThumbTrack);

            Rb.ScrollerJq().find("img")
                .bind('touchend', Rb.EndThumbTap);

            $("#FeaturedThumbs img")
                .bind('touchend', Rb.EndThumbTap);
        }
        else {
            Rb.ScrollerJq()
                .bind('mousedown', Rb.MouseDown)
                .bind('click', Rb.FocusThumb)
                ;

            $(document)
                .bind('mouseup', Rb.EndThumbTrack);

            Rb.ScrollerJq().find("img")
                .bind('mouseup', Rb.EndThumbTap);

            $("#FeaturedThumbs img")
                .bind('mouseup', Rb.EndThumbTap);
        }

        $('#DetailsScroll,#SearchScroll,#BioScroll,#NewsNavScroll,#NewsTextScroll,#StoryTextScroll,#PlacesNav2').tinyscrollbar();

        $('.DetailsLink').click(function () { Rb.SwitchToDetails('DetailsWrapper'); })
        $('.LinksLink').click(function () { Rb.SwitchToDetails('LinksWrapper'); })
        $('.PlansLink').click(function () {
            Rb.SwitchToDetails('PlansWrapper');
            if ($('#PlansScroll img').length == 0) {
                Rb.ShowPlan(Rb.Plans[0]);
            }
        })
        $('.VideosLink').click(function () {
            Rb.SwitchToDetails('VideosWrapper',
                function () {
                    $('#VideosScroll').stop(true, false).empty();

                    var src = Rb.Videos[0];

                    $('#VideosScroll')
                        .append("<video src='" + src + "' width='720' height='396' controls autoplay></video>")
                        .find('video')
                        .mediaelementplayer({
                            defaultVideoWidth: 720,
                            defaultVideoHeight: 396,
                            videoWidth: -1,
                            videoHeight: -1,
                            audioWidth: 600,
                            audioHeight: 30,
                            loop: true,
                            enableAutosize: true,
                            features: ['playpause', 'progress', 'current', 'duration', 'tracks', 'volume', 'fullscreen'],
                            pluginPath: '/js/mediaelement/'
                        });
                }
            );

        })

		if(Rb.HasTouch()){
			$('#VideosBacking').bind("touchstart", function () { Rb.SwitchToDetails('VideosWrapper'); });
			$('.PlacesLink').bind("touchstart", function () { Rb.SwitchToDetails('PlacesNav'); })
			$('#PlansBacking').bind("touchstart", function () { Rb.SwitchToDetails('PlansWrapper'); });
			$('#ImagesBacking').bind("touchstart", function () { Rb.SwitchToDetails('ImagesWrapper'); });
			$('#DetailsBacking').bind("touchstart", function () { Rb.SwitchToDetails('DetailsWrapper'); });
	
			$('form, #ContentsWrapper').bind("touchstart", function (e) {
				if ((e.target === $('form').get(0) || e.target === $('#ContentsWrapper').get(0)) && Rb.VisibleWrappers().length > 0) {
					Rb.SwitchToDetails('');
				}
			});
	
			$('#FeaturedThumbs, #ThumbScrollerWrapper').bind("touchstart", function () { if ($('#PlacesNav').is(":visible")) { Rb.SwitchToDetails('PlacesNav'); } })
		
		}
		else{
			$('#VideosBacking').click(function () { Rb.SwitchToDetails('VideosWrapper'); });
			$('.PlacesLink').click(function () { Rb.SwitchToDetails('PlacesNav'); })
			$('#PlansBacking').click(function () { Rb.SwitchToDetails('PlansWrapper'); });
			$('#ImagesBacking').click(function () { Rb.SwitchToDetails('ImagesWrapper'); });
			$('#DetailsBacking').click(function () { Rb.SwitchToDetails('DetailsWrapper'); });
	
			$('form, #ContentsWrapper').click(function (e) {
				if ((e.target === $('form').get(0) || e.target === $('#ContentsWrapper').get(0)) && Rb.VisibleWrappers().length > 0) {
					Rb.SwitchToDetails('');
				}
			});
	
			$('#FeaturedThumbs, #ThumbScrollerWrapper').click(function () { if ($('#PlacesNav').is(":visible")) { Rb.SwitchToDetails('PlacesNav'); } })
		}
		
        $('.MainSearch').focus(function () { $(this).select(); });
		
		$('#ImagesScroll').hover(
			function(){},
			function(){ $('#ImagesArrow').delay(100).hide(0); }
		);
		
		$('#ImagesScroll').bind("mousemove",
		function(src){
			$('#ImagesArrow').clearQueue().show(0).css('top', ($('#ImagesScroll img').height() / 2 - 50) + 'px');
			
			var pageX = src.pageX || src.originalEvent.touches[0].pageX;
			var x = pageX - $('#ImagesScroll img').offset().left;
			var imageWidth = $('#ImagesScroll img').width();
			
			if (x > imageWidth / 2) {
				$('#ImagesArrow').addClass('ArrowNext').css('left', ($('#ImagesScroll img').width() - 22) + 'px');
				$('#ImagesArrow').removeClass('ArrowBack');
			}
			else {
				$('#ImagesArrow').addClass('ArrowBack').css('left', '0');
				$('#ImagesArrow').removeClass('ArrowNext');
			}
			
			if (Rb.HasTouch()) {
				$('#ImagesArrow').delay(250).fadeOut(250);
			}
		});
		
		$('#ImagesArrow').click(function(){
			if($(this).hasClass('ArrowNext')){ Rb.ShowNextImage(); }
			else{ Rb.ShowPreviousImage(); }
		});
		
		$('#ImagesArrow').hover(
			function(){ $('#ImagesArrow').clearQueue(); },
			function(){ $('#ImagesArrow').delay(100).hide(0); }
		);
		
		$('#PlansScroll').hover(
			function(){},
			function(){ $('#PlansArrow').delay(100).hide(0); }
		);
		
		$('#PlansScroll').bind("mousemove",
		function(src){
			$('#PlansArrow').clearQueue().show(0).css('top', ($('#PlansScroll img').height() / 2 - 50) + 'px');
			var x = src.pageX - $('#PlansScroll img').offset().left;
			var imageWidth = $('#PlansScroll img').width();
			
			if (x > imageWidth / 2) {
				$('#PlansArrow').addClass('ArrowNext').css('left', ($('#PlansScroll img').width() - 22) + 'px');
				$('#PlansArrow').removeClass('ArrowBack');
			}
			else {
				$('#PlansArrow').addClass('ArrowBack').css('left', '0');
				$('#PlansArrow').removeClass('ArrowNext');
			}
			
			if (Rb.HasTouch()) {
				$('#PlansArrow').delay(250).fadeOut(250);
			}
		});
		
		$('#PlansArrow').click(function(){
			if($(this).hasClass('ArrowNext')){	Rb.ShowNextPlan();	}
			else{ Rb.ShowPreviousPlan(); }
		});
		
		$('#PlansArrow').hover(
			function(){ $('#PlansArrow').clearQueue(); },
			function(){ $('#PlansArrow').delay(100).hide(0); }
		);
    },
    ShowPlan: function (src) {
        Rb.FadeIn($('#PlansWrapper'));
		var nextVisible = $('#PlansArrow').hasClass('ArrowNext');
		$('#PlansArrow').removeClass('ArrowNext');
		
        $('#PlansScroll').html("<img src='" + src + "'/>");
		
		if(Rb.HasTouch()){
			$('#PlansScroll img').bind("touchstart", Rb.NextPlanClick).bind("load", 
			function(){ if(nextVisible) { $('#PlansArrow').addClass('ArrowNext').css('left', ($('#PlansScroll img').width() - 22) + 'px'); }});
		}
		else{
			$('#PlansScroll img').click(Rb.NextPlanClick).bind("load", 
			function(){ if(nextVisible) { $('#PlansArrow').addClass('ArrowNext').css('left', ($('#PlansScroll img').width() - 22) + 'px'); }});
		}
    },
    NextPlanClick: function (src) {
        src.stopPropagation();
        var x = src.pageX - $('#PlansScroll img').offset().left;
        if (x > $('#PlansScroll img').width() / 2) {
            Rb.ShowNextPlan();
        }
        else {
            Rb.ShowPreviousPlan();
        }
    },
	ShowNextPlan: function(){
        var currentSrc = $('#PlansScroll img').attr('src');
		var index = (Rb.Plans.firstContainsSrc(currentSrc) + 1) % Rb.Plans.length;
		Rb.ShowPlan(Rb.Plans[index]);
	},
	ShowPreviousPlan: function(){
        var currentSrc = $('#PlansScroll img').attr('src');
		var index = (Rb.Plans.firstContainsSrc(currentSrc) - 1) % Rb.Plans.length;
		if (index < 0) {
			index += Rb.Plans.length;
		}
		Rb.ShowPlan(Rb.Plans[index]);
	},
    ShowImage: function (src) {
        if ($('#ImagesWrapper').is(':hidden')) {
            Rb.SwitchToDetails('ImagesWrapper');
        }
		var nextVisible = $('#ImagesArrow').hasClass('ArrowNext');
		$('#ImagesArrow').removeClass('ArrowNext');
		
		$('#ImagesScroll').html("<img src='" + src + "'/>");
		
		if(Rb.HasTouch()){
			$('#ImagesScroll img').bind("touchstart", Rb.NextImageClick).bind("load", 
			function(){ if(nextVisible) { $('#ImagesArrow').addClass('ArrowNext').css('left', ($('#ImagesScroll img').width() - 22) + 'px'); }});
		}
		else{
			$('#ImagesScroll img').click(Rb.NextImageClick).bind("load", 
			function(){ if(nextVisible) { $('#ImagesArrow').addClass('ArrowNext').css('left', ($('#ImagesScroll img').width() - 22) + 'px'); }});
		}
    },
    NextImageClick: function (src) {
        src.stopPropagation();
		var pageX = src.pageX || src.originalEvent.touches[0].pageX;
        var x = pageX - $('#ImagesScroll img').offset().left;
        if (x > $('#ImagesScroll img').width() / 2) {
            Rb.ShowNextImage();
        }
        else {
            Rb.ShowPreviousImage();
        }        
    },
	ShowNextImage: function(){
        var currentSrc = $('#ImagesScroll img').attr('src');
		var index = (Rb.Images.firstContainsSrc(currentSrc) + 1) % Rb.Images.length;
		Rb.ShowImage(Rb.Images[index]);
	},
	ShowPreviousImage: function(){
        var currentSrc = $('#ImagesScroll img').attr('src');
		var index = (Rb.Images.firstContainsSrc(currentSrc) - 1) % Rb.Images.length;
		if (index < 0) {
			index += Rb.Images.length;
		}
		Rb.ShowImage(Rb.Images[index]);
	},
    VisibleWrappers:function(){
        return($('#DetailsWrapper, #VideosWrapper, #LinksWrapper, #PlansWrapper, #PlacesNav, #ImagesWrapper')
                        .filter(function (index) { return $(this).css("display") != "none"; }));
    },
    SwitchToDetails: function (id, callback) {
        var visible = Rb.VisibleWrappers();

        if (visible.length > 0) {
            visible
            .stop(true, false)
            .animate({ opacity: 0 }, 400, 'swing',
                function () {
                    visible.hide();
                    if (visible.attr('id') != id) {
                        if (id != "VideosScroll") {
                            $('#VideosScroll').empty();
                        }
                        Rb.FadeIn($('#' + id));
                        if (callback) {
                            callback();
                        }
                    }
                }
            );
        }
        else {
            Rb.FadeIn($('#' + id));
            if (callback) {
                callback();
            }
        }
    },
    FadeIn: function (jq) {
        if (jq === undefined || jq.length === 0) {
            return;
        }

        if (jq.attr('id') == "DetailsWrapper") {
            $('#DetailsWrapper').show(0);
            $('#DetailsScroll').tinyscrollbar_update();
            $('#DetailsWrapper').hide(0);
        }

        $(jq).fadeTo(400, 1);
    },
    Plans: [],
    Videos: [],
    Images: [],
    Places: [],
    PlacesActiveType: "",
    ShowPlaces: function (placeType) {
        $("#PlacesNav2 li").hide();
        $("#PlacesNav2 li." + placeType).show(0);
        $("#PlacesNav2").fadeTo(400, .90);
		setTimeout(function(){ $("#PlacesNav2").tinyscrollbar_update() }, 50);
    },
    People: [],
    Resized: function () {
        var top = Math.max(0, ($(document).height() - $('#Wrapper').height()) / 2);
        $('#Wrapper').clearQueue().css('top', top + "px");
    }
};




$(function () {
    //console.log("touch:" + Rb.HasTouch());

    Rb.BindHandlers();

    if ($.browser.msie) {
        $('#ThumbScrollerWrapper').css('position', 'relative');
    }
	
	Rb.Resized();
	
	window.onresize = Rb.Resized;
});








