var locale = 'en_US';

// Plugins
(function( $ ){
	$.fn.MoreOrLess = function(options) {
		var settings  = {
			moreText: 'View More',
			lessText: 'View Less',
			more_indicator: 'showing_more'
		};
	
		return this.each(function() {
			if (options) {
				$.extend(settings, options);
			}
		
			var _widget = $(this),
				moreBtn = _widget.find('a.more_btn'),
				moreItems = _widget.find('.more_item');
			
			settings.moreText = moreBtn.text();
		
			moreBtn.click(function() {
				if (!moreBtn.hasClass(settings.more_indicator)) {
					moreItems.show();
					moreBtn
						.addClass(settings.more_indicator)
						.text(settings.lessText);
				}
				else {
					moreItems.hide();
					moreBtn
						.removeClass(settings.more_indicator)
						.text(settings.moreText);
				}
				return false;
			});
		});
	};
	
	
	$.fn.Tabify = function(options) {
		var settings  = {
			selectorParent: 'ul.selectors',
			tabParent: '.tab_body',
			activeClassLbl: 'selected'
		};
	
		return this.each(function() {
			if (options) {
				$.extend(settings, options);
			}
			
			var _widget = $(this),
				selectors = _widget.find(settings.selectorParent + ' a');
		
			selectors.click(function() {
				var moi = $(this);
			
				$(settings.selectorParent + ' .' + settings.activeClassLbl)
					.removeClass(settings.activeClassLbl);
			
				moi.addClass(settings.activeClassLbl);
				
				_widget
					.find(settings.tabParent)
					.children()
					.hide();
				
				_widget
					.find(settings.tabParent + ' #' + moi.attr('href'))
					.removeClass('hidden')
					.show();
				
				return false;
			});
		});
	};
	
})(jQuery);

// End Plugins


$(document).ready(function() {	
    if ($('#input_siteName').val().length > 0) {
        locale = $('#input_siteName').val();
    }

    ChangeTab($('ul#selectors li:first'), 0);

    $('a.morelink').live('click', function() {

        var visible = 0;
        var trs = $(this).parent().find('tr.hidden');

        $.each(trs, function() {
            var tr = $(this);

            if (tr.css('display') != 'none') {
                visible = visible + 1;
            }
        });

        if ($.browser.msie && $.browser.version == '8.0') {
            if (visible == 0) {
                trs.css('display', 'table-row');
            }
            else {
                trs.css('display', 'none');
            }

        }
        else {
            if (visible == 0) {
                trs.fadeIn();
            }
            else {
                trs.fadeOut();
            }
        }

        $(this).find('span').toggleClass('hidden');
        return false;
    });
	
	seasonLinkHelper.resetSeasonHref();
	mediaTabs();
	fixPNG();
	stripBorders();
});

$(window).bind('load', function() {
	equalColumns();
	
	$('img')
		.bind("mousedown",function(e){ return false; })
		.bind("contextmenu",function(e){ return false; });
		
	padFooter();
});

function fixPNG() {
	var badBrowser = (/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32");
	
	if (badBrowser) {
		var pngImg = $('#logo a').css('background-image');

		if (pngImg.match(/^url\(["']?(.*\.png([?].*)?)["']?\)$/i)) {
			pngImg = RegExp.$1;

			$('#logo a')
				.attr('writing-mode', 'tb-rl')
				.css('background-image', 'none')
				.css('filter', 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+ pngImg +'",sizingMethod="scale")')
				.css('cursor', 'pointer')
				.parent()
				.css('cursor', 'pointer');
		}				
	}
}

function mediaTabs() {
	var locationPath = window.location.pathname;
	   	locationPath = locationPath.split('/');
	   	locationPath = locationPath.reverse();

	if (locationPath[0] == '001242807632345') {
		$("#videostab").addClass("selected");
		$("#photostab").removeClass("selected");      
	}
}

function padFooter() {
	var windowHeight	= $(window).height(),
		bodyHeight		= $('body').height(),
		footerHeight	= $('#footer-wrapper').outerHeight();

	if (windowHeight > bodyHeight) {
	    $('#footer-wrapper').height(footerHeight + (windowHeight - bodyHeight));
	}
}

function equalColumns() {
	var mainHeight = $('#main-content').outerHeight(),
	    secHeight  = $('#secondary-content').outerHeight();

	if (mainHeight < secHeight) {
	    $('#main-content').height(secHeight);
	}
}

function stripBorders() {
	var mainNav		= $('ul#skin-main-nav li:first-child'),
		footerNav	= $('ul#footer-navigation li:first-child'),
		feedNav		= $('#content-selector li:last-child a');
	
	$.each([mainNav, footerNav, feedNav], function(key, value) { 
		value.css('border', 'none');
	});
}

/* -- Global scripts for raceId on season pages and resetting Season link to next race -- */
/* -- Author: Ryan Mathis -- */

var raceId = getQueryString('raceId');
function getQueryString(str) {
    var url = document.URL;

    if (url.indexOf('?') !== -1) {
        qp = url.split('?');
        for (i = 0; i < qp.length; i++) {
            q = qp[i].split("&");
            for (j = 0; j < q.length; j++) {
                p = q[j].split("=");
                if (p[0] == str) {
                    return p[1];
                }
            }
        }
    }
}

// SIFR
var futura = { src: 'http://racing.redbull.com/flash/futurabdcnbt.swf' };

sIFR.useDomLoaded = false;
sIFR.repaintOnResize = false;

sIFR.activate(futura);

redraw();
function redraw() {
    sIFR.replace(futura, {
        selector: 'div.section-header h3 span, div.trHeader h3 span, #video h3 span, #image-information h3 span, #image #related-content h3 span, #image #comments h3 span, #event-competition h3 span, #article h3 span, #featured-content .featured-article-item h3 a',
        css: [
	'.sIFR-root { background-color: #00183C; color: #FFFFFF; text-transform:uppercase;}',
	'a {color: #ffffff; text-decoration: none;}',
	'a:hover {color:#ffffff; text-decoration: none;}'
	],
        selectable: true,
        fitExactly: true,
        preventWrap: true,
        forceSingleLine: true,
        offsetTop: '1',
        wmode: 'transparent'
    });

    sIFR.replace(futura, {
        selector: 'ul#skin-secondary-nav li',
        css: [
	'.sIFR-root { background-color: #00183C; color: #A39161; text-transform:uppercase;}',
	'a {color: #A39161; text-decoration: none;}',
	'a:hover {color:#E7002C; text-decoration: none;}'
	],
        selectable: true,
        fitExactly: true,
        preventWrap: true,
        forceSingleLine: true,
        wmode: 'transparent'
    });

    sIFR.replace(futura, {
        selector: 'ul#skin-secondary-nav li.On',
        css: [
        '.sIFR-root { background-color: #00183C; color: #E7002C; text-transform:uppercase;}',
        'a { text-decoration:none; color:#E7002C }',
        'a:hover { text-decoration:none; color:#E7002C }'
       ],
        selectable: true,
        fitExactly: true,
        preventWrap: true,
        forceSingleLine: true,
        wmode: 'transparent'
    });
}

function GetHomePage(pageId) {
    var method = 'HomepageWidget/' + pageId;

    Request(method, function(data) {
        $('#standings').prepend(data).find('table')
		            .find('tr:odd')
		            .addClass('odd');
        redraw();
    });
}

function GetDriversWidget(driverId) {
    var method = 'DriverWidget/' + driverId;

    Request(method, function(data) {
        $('.driverStandings').after(data).filter('#drivers').show();
        $('.boxcontent table')
		            .find('tr:odd')
		            .addClass('odd');
        redraw();
    });
}

function GetSponsorWidgetTR(sponsorId) {
    var method = 'SponsorWidgetTR/' + sponsorId;

    Request(method, function(data) {
        $('.SponsorContainer').html(data);
    });
}

function GetSeasonWidget(trackId) {
    var method = 'SeasonWidget/' + trackId;

    Request(method, function(data) {
        $('.trackStandings').html(data).find('.Races:first').show();
        $('.boxcontent table')
		            .find('tr:odd')
		            .addClass('odd');
        redraw();
    });
}

function GetEventWidget(trackId) {
    var method = 'EventWidget/' + trackId;
    
    Request(method, function(data) {
        $('.listing').html(data).find('.events').show();
        redraw();
    });
}

function GetSponsorWidget(sponsorId) {
    var method = 'SponsorWidget/' + sponsorId;

    Request(method, function(data) {
        $('.SponsorContainer').html(data);
    });
}

function GetMediaWidget(year) {
    var method = 'MediaWidget/' + year + '/ToroRosso';

    Request(method, function (data) {
        $('.mediaWidget').html(data);

        $('.media-table')
		            .find('tr:odd')
		            .addClass('odd')
                    .end()
                    .find('tr:even')
                    .addClass('grey');

        $('.mediaWidget .Files')
		            .find('.File:odd')
		            .addClass('odd')
                    .end()
                    .find('.File:even')
                    .addClass('grey');

        $('.mediaWidget .Folder .Title a').click(function () {

            $(this).parents('.Assets:first').find('.Files').hide('slow').end().find('.Title .Icon').html('+'); 

            var files = $(this).parents('.Folder').find('.Files:hidden');

            if (files.length > 0) {
                $(this).parent().find('.Icon').html('-');
                $(files).show('slow');
            }
            else {
                $(this).parent().find('.Icon').html('+');
                $(files).hide('slow');
            }
        });

        redraw();
    });
}

function ChangeYearTab(clickedItem, clickIndex, year) {

    $('.Races > div').hide();

    var hasResults = ($('.' + year).find('.Race table tr td').length > 1);

    $('#seasonTabs li').removeClass('selected').filter(hasResults ? ':first' : ':last').addClass('selected');

    $('.Races').hide().filter('.' + year).show().find(hasResults ? '.Race' : '.Grid').show();

    ChangeTab(clickedItem, clickIndex);
}

function Request(url, callback) {

    baseURL = 'http://racing.redbull.com/';
    reqURL = baseURL + locale + '/' + url;

    $.ajax({
        type: "GET",
        url: reqURL,
        dataType: "jsonp",
        jsonp: "onSuccess",
        success: function(data) {
            callback(data);
        }
    });
}

function ChangeGridTab(clickedItem, clickIndex) {
    if (clickIndex == 0) {
        $('div.Grid').slideUp('slow');
        $('div.Race').slideDown('slow');
    }
    else {
        $('div.Grid').slideDown('slow');
        $('div.Race').slideUp('slow');
    }

    ChangeTab(clickedItem, clickIndex);
}

function ChangeTab(clickedItem, clickedIndex) {

    if (clickedItem.parent().hasClass('selected')) return false;

    clickedItem
		.parent()
		.addClass('selected')
		.siblings()
		.removeClass('selected');

    $('div.boxcontent > div').hide();

    if (clickedIndex == 1) {
        $('div#driversWrap').fadeIn();
    }
    else if (clickedIndex == 2) {
        $('div#constructorWrap').fadeIn();
    }
    else {
        $('div#raceWrap').fadeIn();
    }

    return false;
}

function toggleTab(clickedItem, clickedIndex) {
    if (clickedItem.parent().hasClass('selected')) return false;

    var clickedTab = clickedItem.attr('href');

    clickedItem
		.parent()
		.addClass('selected')
		.siblings()
		.removeClass('selected');

    if (clickedIndex == 1) {
        $('ul#offTrackEvents').hide();
        $('ul#partyEvents').show();
    }
    else {
        $('ul#partyEvents').hide();
        $('ul#offTrackEvents').show();
    }
}


var RBRRequest = {
	get: function(url, callback) {
		var	baseURL = 'http://racing.redbull.com/',
	    	reqURL = baseURL + 'en_INT' + '/' + url;

		$.ajax({
	        type: "GET",
	        url: reqURL,
	        dataType: "jsonp",
	        jsonp: "onSuccess",
	        success: function (data) {
	            callback(data);
	        }
	    });
	}
	
};

var RBRWidgets = {

	globalStandings : function(pageId) {
		var requestMethod = 'HomepageWidget/' + pageId;

		RBRRequest.get(requestMethod, function(data) {
			$('#standings_widget .body').html(data);
			
			RBRWidgets.addTableEvents('#standings_widget .body');
			$('#race_standings, #drivers_standings, #contructor_standings').MoreOrLess();
			$('#standings_widget').Tabify();
		});
	},
	
	raceStandings : function(trackId) {
	    var requestMethod = 'SeasonWidgetRBR/' + trackId;

		RBRRequest.get(requestMethod, function(data) {
			$('#race_standings_body').html(data).find('.Races:first').show();
			
			RBRWidgets.addTableEvents('#race_standings_widget .body');
			$('#race_standings, #grid_standings').MoreOrLess();
			$('#race_standings_widget').Tabify();
		});
	},
	
	driverStandings : function(driverId) {
		var requestMethod = 'DriverWidget/' + driverId;

		RBRRequest.get(requestMethod, function(data) {
			$('#driver_standings_widget .body').html(data);
		});
	},
	
	timeOut : function(raceId) {
		var requestMethod = 'EventWidgetRBR/' + raceId;

		RBRRequest.get(requestMethod, function(data) {
			$('#time_out_body').html(data)
				.find('li:gt(3)')
				.hide();
		});
	},
	
	sponsor : function(sponsorId) {
		var requestMethod = 'SponsorWidget/' + sponsorId;

		RBRRequest.get(requestMethod, function(data) {
			$('div.SponsorContainer').html(data);
		});
	},
	
	addTableEvents: function(selector) {
		$(selector)
			.hide()
	        .find('table')
				.find('tr:odd')
					.addClass('odd')
					.end()
				.find('tr:gt(10)')
				.hide()
				.addClass('more_item')
				.end()
			.end()
			.show();
	}
};

var urlHelper = {
	getQueryString : function(str) {
		var url = document.URL;

	    if (url.indexOf('?') !== -1) {
	        qp = url.split('?');
	        for (i = 0; i < qp.length; i++) {
	            q = qp[i].split("&");
	            for (j = 0; j < q.length; j++) {
	                p = q[j].split("=");
	                if (p[0] == str) {
	                    return p[1];
	                }
	            }
	        }
	    }
	}
};

var seasonLinkHelper = {
	
	setActiveTrack : function() {
		var pageId = "1";
		var current = String(pageId).toLowerCase();
	    var raceId = urlHelper.getQueryString('raceId');
	
	    try { if (raceId) { pageId = raceId; } } catch (err) { pageId = "1"; }
	    $("#season-header .race" + current).addClass("active");
	},
	
	resetSeasonHref : function() {
		var rid = this.getNextRaceID();
	    var season = $("#skin-secondary-nav li:first a");
	    var locale = $("#input_siteName").attr('value');
	
	    $(season).attr('href', rid);
	},
	
	getNextRaceID : function() {
		var c = new Date();
		var ct = c.getTime() - 172800000;

		var races = { 
						//'Sun Mar 13 15:00:00 GMT+0300 2011': '/cs/Satellite/en_INT/Event/021242970475734/?raceId=28',
				        'Sun Mar 27 17:00:00 GMT+0500 2011': '/cs/Satellite/en_INT/Event/Australian-Grand-Prix-021242823504703/?raceId=29',
				        'Sun Apr 10 16:00:00 GMT+0800 2011': '/cs/Satellite/en_INT/Event/Malaysian-Grand-Prix-021242823507475/?raceId=30',
				        'Sun Apr 17 15:00:00 GMT+0800 2011': '/cs/Satellite/en_INT/Event/Chinese-Grand-Prix-021242823505226/?raceId=31',
				        'Sun May 08 15:00:00 GMT+0200 2011': '/cs/Satellite/en_INT/Event/Turkish-Grand-Prix-021242823509660/?raceId=32',
				        'Sun May 22 14:00:00 GMT+0100 2011': '/cs/Satellite/en_INT/Event/Gran-Premio-de-Espa%C3%B1a-021242823507986/?raceId=33',
				        'Sun May 28 14:00:00 GMT+0100 2011': '/cs/Satellite/en_INT/Event/Grand-Prix-de-Monaco-021242823508892/?raceId=34',
				        'Sun Jun 12 13:00:00 GMT-0500 2011': '/cs/Satellite/en_INT/Event/Grand-Prix-du-Canada-021242823768276/?raceId=35',
				        'Sun Jun 26 14:00:00 GMT+0100 2011': '/cs/Satellite/en_INT/Event/Grand-Prix-of-Europe-021242823511190/?raceId=36',
				        'Sun Jul 10 13:00:00 GMT+0000 2011': '/cs/Satellite/en_INT/Event/British-Grand-Prix-021242823515970/?raceId=37',
				        'Sun Jul 24 14:00:00 GMT+0100 2011': '/cs/Satellite/en_INT/Event/Grosser-Preis-von-Deutschland-021242823517298/?raceId=38',
				        'Sun Jul 31 14:00:00 GMT+0100 2011': '/cs/Satellite/en_INT/Event/Magyar-Nagydij-021242823520063/?raceId=39',
				        'Sun Aug 28 14:00:00 GMT+0100 2011': '/cs/Satellite/en_INT/Event/Belgian-Grand-Prix-021242823521693/?raceId=40',
				        'Sun Sep 11 14:00:00 GMT+0100 2011': '/cs/Satellite/en_INT/Event/Gran-Premio-D-Itlia-021242823524299/?raceId=41',
				        'Sun Sep 25 20:00:00 GMT+0800 2011': '/cs/Satellite/en_INT/Event/Singapore-Grand-Prix-021242823525100/?raceId=42',
				        'Sun Oct 09 15:00:00 GMT+0900 2011': '/cs/Satellite/en_INT/Event/Japanese-Grand-Prix-021242823526104/?raceId=43',
				        'Sun Oct 18 15:00:00 GMT+0800 2011': '/cs/Satellite/en_INT/Event/Korean-Grand-Prix-021242823527691/?raceId=44',
				        'Sun Oct 30 12:00:00 GMT+0530 2011': '/cs/Satellite/en_INT/Event/Grand-Prix-of-India-021242975773104/?raceId=45',
				        'Sun Nov 13 17:00:00 GMT+0400 2011': '/cs/Satellite/en_INT/Event/Abu-Dhabi-Grand-Prix-021242823573099/?raceId=46',
				        'Sun Nov 27 14:00:00 GMT-0300 2011': '/cs/Satellite/en_INT/Event/Grande-Premio-do-Brasil-021242823528082/?raceId=47'
		    		};

		for (var key in races) {
		    var n = new Date(key);
		    var nt = n.getTime();

		    if (ct < nt) {
		        return races[key];
		    }
		}

		return races[0];
	}

};

