var jq14 = jQuery.noConflict(true);

(function( $ ){
	$.fn.classifyLinks = function(options) {  
	 	var settings = {
			'linkSelector'	: 'a',
			'parentSelctor' : 'li'
		};

		return this.each(function() {        
			if (options) { 
				$.extend( settings, options );
			}

			$(this).find(settings.linkSelector).each(function() {
				var link = $(this),
						linkText = link.text().toLowerCase(),
						className = linkText.split(' ').join('_'),
						className = className.split('-').join('_'),
						className = className.split('.').join('_'),
						linkParent = link.closest(settings.parentSelctor);

				linkParent.addClass(className);
			});
		
		});
	};
	
	$.fn.targetBlank = function() {
		return this.each(function() {        
			$(this).attr('target', '_blank');
		});
	};
	
	$.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;
			});
		});
	};
	
})(jq14);

var	PageUtils = {
	activateNav: function(page) {
		$.each($('#skin-main-nav a'), function() {
			if ($(this).text() == page) {
				$(this).addClass('active');
			}
		});
	},

	activateSubNav: function(navSelector, subPage) {
		$(navSelector)
			.find('.' + subPage + ' a')
			.addClass('active');
	}
};

var RBRRequest = {};
RBRRequest.get = function(url, callback) {
	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');
            jq14('#race_standings, #drivers_standings, #contructor_standings').MoreOrLess();
            jq14('#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');
            jq14('#race_standings, #grid_standings').MoreOrLess();
            jq14('#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();
        });
    },

    timeOutShowcar: function () {
        var requestMethod = 'ShowcarEventWidgetRBR/';

        RBRRequest.get(requestMethod, function (data) {
            $('#time_out_body').html(data);
            //.find('li:gt(3)')
            //.hide();
        });
    },

    mediaPage: function (year) {
        var requestMethod = 'MediaWidget/' + year + '/RedBullRacing';

        RBRRequest.get(requestMethod, function (data) {
            $('.mediaWidget').html(data);

            $('.mediaWidget .Folder .Title a').click(function () {

                $('.mediaWidget .Folder').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');
                }
            });
        });
    },

    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 = {
	
	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];
	                }
	            }
	        }
	    }
	},
	
	setActiveTrack : function() {
		var pageId = "1";
		var current = String(pageId).toLowerCase();
	    var raceId = this.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-main-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 18 17:00:00 GMT+1100 2012': '/cs/Satellite/en_INT/Event/Australian-Grand-Prix-021243164077648/?raceId=48',
			'Sun Mar 25 16:00:00 GMT+0800 2012': '/cs/Satellite/en_INT/Event/Malaysian-Grand-Prix-021243164897970/?raceId=49',
			'Sun Apr 15 15:00:00 GMT+0800 2012': '/cs/Satellite/en_INT/Event/Chinese-Grand-Prix-021243164971613/?raceId=50',
			'Sun May 08 15:00:00 GMT+0300 2012': '/cs/Satellite/en_INT/Event/Bahrain-Grand-Prix-021243164974037/?raceId=51',
			'Sun May 13 14:00:00 GMT+0100 2012': '/cs/Satellite/en_INT/Event/Gran-Premio-de-Espa%C3%B1a-021243164985030/?raceId=52',
			'Sun May 27 14:00:00 GMT+0100 2012': '/cs/Satellite/en_INT/Event/Grand-Prix-de-Monaco-021243164988606/?raceId=53',
			'Sun Jun 10 14:00:00 GMT-0500 2012': '/cs/Satellite/en_INT/Event/Grand-Prix-du-Canada-021243164989904/?raceId=54',
			'Sun Jun 24 14:00:00 GMT+0100 2012': '/cs/Satellite/en_INT/Event/Grand-Prix-of-Europe-021243164991115/?raceId=55',
			'Sun Jul 08 13:00:00 GMT+0000 2012': '/cs/Satellite/en_INT/Event/British-Grand-Prix-021243164992015/?raceId=56',
			'Sun Jul 22 14:00:00 GMT+0100 2012': '/cs/Satellite/en_INT/Event/Grosser-Preis-von-Deutschland-021243165011997/?raceId=57',
			'Sun Jul 29 14:00:00 GMT+0100 2012': '/cs/Satellite/en_INT/Event/Magyar-Nagydij-021243165014236/?raceId=58',
			'Sun Sep 02 14:00:00 GMT+0100 2012': '/cs/Satellite/en_INT/Event/Belgian-Grand-Prix-021243165215505/?raceId=59',
			'Sun Sep 09 14:00:00 GMT+0100 2012': '/cs/Satellite/en_INT/Event/Gran-Premio-D-Itlia-021243165216916/?raceId=60',
			'Sun Sep 23 20:00:00 GMT+0800 2012': '/cs/Satellite/en_INT/Event/Singapore-Grand-Prix-021243165218536/?raceId=61',
			'Sun Oct 07 15:00:00 GMT+0900 2012': '/cs/Satellite/en_INT/Event/Japanese-Grand-Prix-021243165015517/?raceId=62',
			'Sun Oct 14 15:00:00 GMT+0800 2012': '/cs/Satellite/en_INT/Event/Korean-Grand-Prix-021243165014136/?raceId=63',
			'Sun Oct 28 15:00:00 GMT+0530 2012': '/cs/Satellite/en_INT/Event/Grand-Prix-of-India-021243165011181/?raceId=64',
			'Sun Nov 04 17:00:00 GMT+0400 2012': '/cs/Satellite/en_INT/Event/Abu-Dhabi-Grand-Prix-021243165009568/?raceId=65',
			'Sun Nov 18 13:00:00 GMT-0600 2012': '/cs/Satellite/en_INT/Event/United-States-Grand-Prix-021243164994540/?raceId=66',
			'Sun Nov 25 14:00:00 GMT-0300 2012': '/cs/Satellite/en_INT/Event/Grande-Premio-do-Brasil-021243164991900/?raceId=67'
		};

		for (var key in races) {
		    var n = new Date(key);
		    var nt = n.getTime();

		    if (ct < nt) {
		        return races[key];
		    }
		}

		return races[0];
	}
};
