function getRandomInt(min, max) {
	return Math.floor(Math.random() * (max - min + 1)) + min;
}

$(function(){    // banners switcher
	var banner = $('img#page_banner'),
		banners_preview_container = $('.banners_container .preview'),
		banners_preview = banners_preview_container.find('.banner_preview'),
		pointer = banners_preview.find('.pointer'),
		banners_font = $('div.banners_highlight');
		banners_font_left = $('div.banners_highlight #left_h');
		banners_font_right = $('div.banners_highlight #right_h');

	 var first_time = 1;

	banners_preview.click(function(evt){
		banners_preview.removeClass('hover');
		if(evt.button == '0') {clearInterval(rotation); };
		if(!$(this).hasClass('selected')){
				if($.browser.msie && $.browser.msie && parseInt($.browser.version) < 9){
					banners_preview_container.find('.selected .moveable').animate({'top' : '0em',  marginBottom:'0px', paddingBottom:'0px', backgroundPositionY: '40px'}, 150);
					banners_preview_container.find('.selected .moveable').removeClass('ieshadow');
				}else{
					banners_preview_container.find('.selected .moveable').animate({top : '0em', 'boxShadowY':'0'}, 150, function(){$(this).removeClass('shadow')});
				}
		}
		
		var currentBanner = $(this).attr('id');
		
		Banners.state.items[currentBanner] = true;

		if(!$(this).hasClass('selected') || first_time ){
			first_time = 0;
			$.cookie(Banners.type, currentBanner); /// set needed
			banners_preview.removeClass('selected');
			$(this).addClass('selected');
			
			//$('.banner_preview_wrapper', banners_preview).css('background-color', 'transparent');
			//$(this).find('.banner_preview_wrapper').css('background-color', Banners[currentBanner][5].split(',')[0]);
			//$(this).find('.banner_preview_arrow').css('border-bottom', '8px solid ' + Banners[currentBanner][5].split(',')[0]);
			
			banners_preview_container.find('.selected img').before(pointer);
			var decodedURL = $("<div/>").html(Banners[currentBanner][3]).text();
			if( Banners[currentBanner][4] == '' || !FlashDetect.installed ){
				if( $('#flash_wrapper').is(':visible') ){
					// jquery не может анимировать flash. приходится ставить над флешкой блок с белым бекграундом и менять ему opacity,
					//									  а потом его убирать, чтобы флешка не теряла в функциональности.
					$('#flash_fader').show()
						.animate({opacity: 1}, 300, function(){
							$('#flash_wrapper').hide();

							banner.attr({
									style: 'background-image: url("'+ Banners[currentBanner][0] +'")'
									//src: Banners[currentBanner][0],
									//width: Banners[currentBanner][1],
									//height: Banners[currentBanner][2]
								}).parent().attr('href', decodedURL).end().fadeIn(300);
								banners_font_left.attr('style', 'background-color:'+ (Banners[currentBanner][5].split(',')[0] == null ? 'transparent' : Banners[currentBanner][5].split(',')[0]) );
								banners_font_right.attr('style', 'background-color:'+ (Banners[currentBanner][5].split(',')[1] == null ? 'transparent' : Banners[currentBanner][5].split(',')[1]) );
								banners_font.animate({opacity: 1});
						});
				}else{

					banners_font.animate({opacity: 0}, 300, function(){
						banner.attr({
							style: 'background-image: url("'+ Banners[currentBanner][0] +'")'
							//src: Banners[currentBanner][0],
							//width: Banners[currentBanner][1],
							//height: Banners[currentBanner][2]
						}).parent().attr('href', decodedURL).end().fadeIn(300);
						banners_font_left.attr('style', 'background-color:'+ (Banners[currentBanner][5].split(',')[0] == null ? 'transparent' : Banners[currentBanner][5].split(',')[0]) );
						banners_font_right.attr('style', 'background-color:'+ (Banners[currentBanner][5].split(',')[1] == null ? 'transparent' : Banners[currentBanner][5].split(',')[1]) );
						banners_font.animate({opacity: 1});
					});
				}
			}else{
				swfobject.embedSWF(Banners[currentBanner][4], "flash_container", "1000", "300", "9.0.0", "/f/1/global/expressInstall.swf", "", params);
				banners.fadeOut(300, function(){
					banner.hide();
					$('#flash_wrapper').show()
						.mousedown(function(evt){
							if(evt.button == '0') window.location.href = Banners[currentBanner][3];
						});
					$('#flash_fader').animate({opacity: 0}, 500, function(){$('#flash_fader').hide();banner.hide();});    // флешку надо анимировать чуть дольше - браузеру нужно время, чтобы ее инициализировать.
					banner.hide().parent().attr('href', decodedURL);
				});
			}
			
			$.getJSON('/_bshow.html?_id=' + currentBanner);
		}
		if(evt.button != '0') {
			evt.stopPropagation();
		}
	}).hover(
		function(){
			$(this).addClass('hover');
			if(!$(this).hasClass('selected') ){
				if($.browser.msie && $.browser.msie && parseInt($.browser.version) < 9){
					$(this).find('.moveable').addClass('ieshadow');
					$(this).find('.moveable').stop(true, false).animate({'top' : '-0.6em',  marginBottom:'-19px', paddingBottom:'19px', backgroundPositionY: '60px'}, 150);
				}else{
					$(this).find('.moveable').stop(true, false).animate({'top' : '-0.6em',  'boxShadowY':'17px'}, 150, function(){$(this).addClass('shadow')});
				}

			}
		},
		function(){
			$(this).removeClass('hover');
			if(!$(this).hasClass('selected') ){
				if($.browser.msie && $.browser.msie && parseInt($.browser.version) < 9){
					$(this).find('.moveable').animate({'top' : '0em',  marginBottom:'0px', paddingBottom:'0px', backgroundPositionY: '40px'}, 150);
					$(this).find('.moveable').removeClass('ieshadow');
				}else{
					$(this).find('.moveable').animate({top : '0em', 'boxShadowY':'0'}, 150, function(){$(this).removeClass('shadow')});
				}
			}
		}
	);

	if(typeof(initiation) != 'undefined'){
		banner.hide().css({opacity:1});
		$(document).ready(function(){
			$('#flash_fader').animate({opacity: 0}, 700, function(){$('#flash_fader').hide()});
			$('#flash_wrapper').show()
				.mousedown(function(evt){
					if(evt.button == '0') window.location.href = Banners[initiation][3];
				});
			$('#flash_fader').hide();
			banner.parent().attr('href', Banners[initiation][3]);
		});
	}else{
		banner.animate({opacity: 1}, 600);
	}

	$(document).ready(function(){
		$('.banners_container .preview .selected').click();
	
		var i=0,
			q=0,
			banners = $('.banners_container .banner_preview .moveable ');
		$.browser.msie && parseInt($.browser.version) < 9 ? IEAnimateEl() : AnimateEl();
		function AnimateEl(){
			i++;
			$(banners[i-1]).animate({top : '-0.6em', 'boxShadowY':'17px'}, 150, function(){
				$(this).addClass('shadow');
				if(!$(this).parent().hasClass('selected')){
					$(this).animate({top : '0em', 'boxShadowY':'0'}, 150, function(){
						$(this).removeClass('shadow')
						if(i == banners.length){
							i=0;
							if(q==0) AnimateEl(); //вторая волна
							q=1;
						}
					});
				}
			});
			if( i < banners.length ) AnimateEl();
		};
		function IEAnimateEl(){
			$(banners[0]).parent().siblings('.selected').find('.moveable').addClass('ieshadow');
			i++;
			$(banners[i-1]).animate({'top' : '-0.6em',  marginBottom:'-19px', paddingBottom:'19px', backgroundPositionY: '60px'}, 150, function(){
				if(!$(this).parent().hasClass('selected')){
					$(this).animate({'top' : '0em',  marginBottom:'0px', paddingBottom:'0px', backgroundPositionY: '40px'}, 150, function(){
						if(i == banners.length){
							i=0;
							if(q==0) AnimateEl(); //вторая волна
							q=1;
						}
					});
				}
			});
			if( i < banners.length ) AnimateEl();
		}
	});

	var rotator = banners_preview.parent().find('.selected').index();
	
	/**/
	if (Banners.state) {
		Banners.state['getFreeBanners'] = function () {
			var that = this,
				items = that.items,
				result = [];

			for (var i in items) {
				if (!items[i]) {
					result.push(i)
				}
			}

			return result;
		};

		Banners.state['cleareBannersState'] = function () {
			var that = this,
				items = that.items;

			for (var i in items) {
				items[i] = false;
			}
		}
	}
	/**/
	
	if((typeof(requestUri) === 'undefined') || (requestUri == '/')) {
		var rotation = setInterval(function(){
			var aFreeBanners = Banners.state.getFreeBanners();

			if (!aFreeBanners.length) {
				Banners.state.cleareBannersState();
				aFreeBanners = Banners.state.getFreeBanners();
			}

			rotator = getRandomInt(0, aFreeBanners.length - 1);

			if(rotator == banners_preview.length){
				rotator = 0;
			}

			var bannerID = aFreeBanners[rotator];

			banners_preview.filter('#' + bannerID).mouseover().click();
		}, 7000);
	}
	
	$('.home_page_banner a, .credits_banner a, .cards_banner a, .deposits_banner a').click(function(){
		var new_href = $(this).attr('href');
		var selected_banner = 0;

		for(var i in Banners){
			var Banner = Banners[i];
			var current_href = Banner[3];

			if(new_href == current_href){
				selected_banner = i;
			}
		}

		$.getJSON('/_bpress.html?_id=' + selected_banner, function(data){
			window.location = new_href;
		});

		return false;
	});

});




(function($) {
    // boxShadow get hooks
    var div = document.createElement('div'),
        divStyle = div.style,
        support = $.support,
        rWhitespace = /\s/,
        rParenWhitespace = /\)\s/;

    support.boxShadow =
        divStyle.MozBoxShadow     === ''? 'MozBoxShadow'    :
        (divStyle.MsBoxShadow     === ''? 'MsBoxShadow'     :
        (divStyle.WebkitBoxShadow === ''? 'WebkitBoxShadow' :
        (divStyle.OBoxShadow      === ''? 'OBoxShadow'      :
        (divStyle.boxShadow       === ''? 'BoxShadow'       :
        false))));

    div = null;

    // helper function to inject a value into an existing string
    // is there a better way to do this? it seems like a common pattern
    function insert_into(string, value, index) {
        var parts  = string.split(rWhitespace);
        parts[index] = value;
        return parts.join(" ");
    }

    if ( support.boxShadow && support.boxShadow !== "BoxShadow" ) {
        $.cssHooks.boxShadow = {
            get: function( elem, computed, extra ) {
                return $.css(elem, support.boxShadow);
            },
            set: function( elem, value ) {
                elem.style[ support.boxShadow ] = value;
            }
        };

        $.cssHooks.boxShadowColor = {
            get: function ( elem, computed, extra ) {
                return $.css(elem, support.boxShadow).split(rParenWhitespace)[0] + ')';
            },
            set: function( elem, value ) {
                elem.style[ support.boxShadow ] = value + " " + $.css(elem, support.boxShadow).split(rParenWhitespace)[1];
            }
        };

        $.cssHooks.boxShadowBlur = {
            get: function ( elem, computed, extra ) {
                return $.css(elem, support.boxShadow).split(rWhitespace)[5];
            },
            set: function( elem, value ) {
                elem.style[ support.boxShadow ] = insert_into($.css(elem, support.boxShadow), value, 5);
            }
        };

        $.cssHooks.boxShadowSpread = {
            get: function ( elem, computed, extra ) {
                return $.css(elem, support.boxShadow).split(rWhitespace)[6];
            },
            set: function( elem, value ) {
                elem.style[ support.boxShadow ] = insert_into($.css(elem, support.boxShadow), value, 6);
            }
        };

        $.cssHooks.boxShadowX = {
            get: function ( elem, computed, extra ) {
                return $.css(elem, support.boxShadow).split(rWhitespace)[3];
            },
            set: function( elem, value ) {
                elem.style[ support.boxShadow ] = insert_into($.css(elem, support.boxShadow), value, 3);
            }
        };

        $.cssHooks.boxShadowY = {
            get: function ( elem, computed, extra ) {
                return $.css(elem, support.boxShadow).split(rWhitespace)[4];
            },
            set: function( elem, value ) {
                elem.style[ support.boxShadow ] = insert_into($.css(elem, support.boxShadow), value, 4);
            }
        };

        // setup fx hooks
        var fxHooks = "Blur Spread X Y".split(" ");
        $.each(fxHooks, function( i, suffix ) {
            var hook = "boxShadow" + suffix;
            $.fx.step[ hook ] = function( fx ) {
                $.cssHooks[ hook ].set( fx.elem, fx.now + fx.unit );
            };
        });
    }

})(jQuery);

