
var QuickHit = {};
QuickHit.Utility = {};
QuickHit.Captcha = {};
QuickHit.Tracking = {};
QuickHit.Lobby = {};
QuickHit.Lobby.LobbyCard = {};
QuickHit.Objectives = {};
QuickHit.Objectives.Popup = {};
QuickHit.Notifications = {};
QuickHit.CDN = {
    swfPath: "",
    csspath: "",
    jsPath: "",
    gamePath: ""
};
$(document).ready(function() {
    $('body').ajaxComplete(function(e, xhr, options) {
        if (xhr.status == 401) {
            window.location.reload(true);
        }
    });

	$.blockUI.defaults.overlayCSS.cursor = "default";
	$.blockUI.defaults.overlayCSS.opacity = 0.8;
	$.blockUI.defaults.css.top = '280px';
	$.blockUI.defaults.message = null;
    $.blockUI.defaults.fadeIn = 0;
    $.blockUI.defaults.fadeOut = 0;

	QuickHit.Utility.detectBrowsers();
	
	//Opens all <a href="" rel="external"></a> in a new window.
    $("a[rel='external']").live("click", function() {
        window.open($(this).attr('href'));
        return false;
    });

    //If not in Facebook iframe, delete Facebook Cookie!
    if (top == self && $(window).attr("name") != "iframe_canvas") {
	    if (QuickHit.Utility.readCookie("QUICKHIT-FACEBOOK")) {
            QuickHit.Utility.deleteCookie("QUICKHIT-FACEBOOK");
            window.location.reload();
        }
    };

    //Navigation
    $("li.parent", "#main-menu-left").add("li.parent", "#main-menu-right").unbind("hover").hover(function() {
  		var tab = $(this);
        tab.siblings().removeClass("hover");
        tab.addClass("hover");
    }, function() {
        var tab = $(this);
        tab.removeClass("hover");
    });

    //Notifications
    $(".notification").live("click", function() {
        var source = $(this);
        QuickHit.Notifications.createNotification(source.text(), source.attr("title"), source, "left", false);
    });

    //Tabs hover state.
    $("ul.quicktabs_tabs li, ul.tabs li").hover(function() {
    	$(this).addClass("hover");
    }, function() {
        $(this).removeClass("hover");
    });

    $("#login").live("click", function() {
        if ($("#login-modal-box:visible").length || $("#login-box").length) {
            $("#color-area").unblock();
            $("#login-modal-box").hide();
			$("#registration-area form input").removeAttr("disabled");
        } else {
            var button = $("#login");
            $("#color-area").block({message:null});
            var top = button.offset().top + button.height() + 3;
            var left = button.offset().left + button.width() - $("#login-modal-box").width() + 8;
            $("#login-modal-box").css({ left: left, top: top }).show();
			$("#registration-area form input").attr("disabled","disabled");
            $("#j_username").focus();
        }
        return false;
    });
    $("#login-box .close, #forgot-password-box .close, #link-account .close").live("click", function() {
        window.location = "/";
        return false;
    });

    $("#recaptcha_reload").live("click", QuickHit.Captcha.reload);
    $(".recaptcha_only_if_image, .recaptcha_only_if_audio", "#recaptcha-area").live("click", QuickHit.Captcha.switchType);
    $(".recaptcha_help", "#recaptcha-area").live("click", QuickHit.Captcha.help);

	// Search Support JS
	$("#qhSearch").click(function() {
		$(this).attr("value","");
	});
	$("#qh-search-submit").click(function() {
		$("#search-form").submit();
	});
});

QuickHit.Captcha.reload = function() {
    Recaptcha.reload();
    return false;
};

QuickHit.Captcha.switchType = function() {
    if ($(this).hasClass("recaptcha_only_if_image")) {
        Recaptcha.switch_type("audio");
    } else {
        Recaptcha.switch_type("image");
    }
    return false;
};

QuickHit.Captcha.help = function() {
    Recaptcha.showhelp();
    return false;
};

QuickHit.Utility.detectBrowsers = function() {
	var checkBrowser = $.browser.name;
	var checkVersion = $.browser.versionNumber;
	var alertInfo = "";
	var showAlert = false;
	if (checkBrowser == 'firefox' && checkVersion < 3.5) {
		alertInfo = "You're running and old version of <span>" + checkBrowser + "</span>!  <a href='http://www.mozilla.com/en-US/firefox/' target='_blank'>Click Here</a> to download the latest version.";
		showAlert = true;
	}
	else if (checkBrowser == 'msie' && checkVersion < 7) {
		alertInfo = "You're running and old version of <span>" + checkBrowser + "</span>!  <a href='http://www.microsoft.com/windows/internet-explorer/worldwide-sites.aspx' target='_blank'>Click Here</a> to download the latest version.";
		showAlert = true;
	}
	else if (checkBrowser == 'safari' && checkVersion < 5) {
		alertInfo = "You're running and old version of <span>" + checkBrowser + "</span>!  <a href='http://www.apple.com/safari/' target='_blank'>Click Here</a> to download the latest version.";
		showAlert = true;
	}
/*	else if (checkBrowser == 'opera') {
		alertInfo = "We're sorry, but we don't support <span>" + checkBrowser + "</span> at this time.  Please use another browser for best results on our site.  See this <a href='http://support.quickhit.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=14' target='_blank'>Support Article</a> for more information!";
		showAlert = true;
	}
*/
	var browserAlert = "<div id='browser-alert'><div class='message-area'><div class='message-top'></div><div class='message-body'><div class='message-icon'></div><div class='message-content'>" + alertInfo + "</div></div><div class='message-bottom'></div></div>";

	if (showAlert && $("body").hasClass("logged-in") && ($("body").attr("id") != "page-gameRequest")) {
		$("body").prepend(browserAlert);
	}	
};

QuickHit.Utility.createCookie = function(name, value, msec) {
	var expires = "";
	if (msec) {
        var date = new Date();
        date.setTime(date.getTime() + msec);
		expires = ";expires=" + date.toGMTString();
    }
	document.cookie = name + "=" + value + expires + "; path=/";
};

QuickHit.Utility.readCookie = function(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0) === ' ') {
            c = c.substring(1, c.length);
        }
		if (c.indexOf(nameEQ) === 0) {
            return c.substring(nameEQ.length, c.length);
        }
	}
	return null;
};

QuickHit.Utility.deleteCookie = function(name) {
	QuickHit.Utility.createCookie(name, "", -1);
};

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
};

QuickHit.Utility.updateRating = function(newRatingValue) {
    var text = String(Math.max(0, newRatingValue));
    $(".title", "#team-rating").text("Team Rating: " + text);
};

QuickHit.Utility.updateQuickCash = function(newQCValue) {
    var text = String(Math.max(0, newQCValue));
    var output = QuickHit.Utility.addCommas(text);
    $("#currency-qc .currency").text(output);
};

QuickHit.Utility.updateCoachingPoints = function(newCPValue) {
    var text = String(Math.max(0, newCPValue));
    var output = QuickHit.Utility.addCommas(text);
    $("#currency-cp .currency").text(output);
};

QuickHit.Utility.addCommas = function(nStr) {
	nStr += '';
	var x = nStr.split('.');
	var x1 = x[0];
	var x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
};

QuickHit.Utility.refreshAds = function() {
    var rid = QuickHit.Utility.readCookie("QUICKHIT-RID");
    rid = rid == null ? "" : "&rid="+rid;
    $(".ad-728-90").empty().append($('<'+'iframe width="728" height="90" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" bordercolor="#000000" src="http://oasc10002.247realmedia.com/RealMedia/ads/adstream_sx.ads/'+QuickHit.adSitepage+'/'+Math.floor(Math.random()*1000)+'@Top1?LOGGEDIN'+rid+'"></'+'iframe>'));
    $(".ad-160-600").empty().append($('<'+'iframe width="160" height="600" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" bordercolor="#000000" src="http://oasc10002.247realmedia.com/RealMedia/ads/adstream_sx.ads/'+QuickHit.adSitepage+'/'+Math.floor(Math.random()*1000)+'@Right1?LOGGEDIN'+rid+'"></'+'iframe>'));
};

QuickHit.Utility.installFlashPrompt = function(e) {
    if (!e.success) {
        $("#page").block({message: null});
        var prompt = $('<div id="install-flash"><a rel="external" href="http://get.adobe.com/flashplayer"></a></div>');
        $("#page").append(prompt);
    }
};

QuickHit.Utility.browseTo = function(dest, id) {
    var path = "";
    var coachName = QuickHit.CoachCard.coachName;

	switch(dest) {
        case "editTeam":
            path = "/coach/" + coachName + "/teamDetails";
            break;
        case "playNow":
            path = "/campaign";
            break;
        case "playSingle":
            path = "/play/single";
            break;
        case "playMulti":
            path = "/game/lobby/multi";
            break;
        case "train":
            path = "/game/roster/train";
            break;
        case "depth":
            path = "/game/roster/depth";
            break;
        case "recentGames":
            path = "/game/recent";
            break;
        case "coach":
            path = "/coach/" + id;
            break;
        case "buyPlayers":
            path = "/store/freeagents";
            break;
        case "buyPlays":
            path = "/store/plays";
            break;
        case "playBook":
            path = "/team/playbook";
            break;
        case "leaderBoards":
            path = "/game/rankings";
            break;
        case "friendsPage":
        case "/user/invite":
			if (QuickHit.Utility.readCookie("QUICKHIT-FACEBOOK")) {
				QuickHit.Facebook.invitePopup();
                return;
			} else {
				path = "/user/invite";
			}
            break;
        case "reportAvatar":
            var matches = window.location.pathname.match(/\/coach\/(\w+)/);
            var reportee = "";
            if (matches.length == 2) {
                reportee = matches[1];
            }
            path = "mailto:support@quickhit.com?subject=" + coachName + " reporting the improper avatar of " + reportee;
            break;
        case "bank":
			path = "/store/cp";
            break;
        default:
            path = dest;
            break;
	}
	window.location = path;
};

QuickHit.Tracking.Track = function(path) {
    if (typeof(window['pageTracker']) != "undefined" && path != null && path != undefined && path.length) {
        pageTracker._trackPageview(path);
    }
};

QuickHit.Lobby.LobbyCard.init = function() {
	$(".card-tab a", ".card-tabs").live("click", function() {
		var card = $(this).parents(".coach-card:first");
        $(this).parent().siblings().children("a").removeClass("selected");
		$(this).addClass("selected");
		var tab = $(this).parent().attr('class').replace("card-tab", "").trim();
		if (tab == "mvps" && $(".card-" + tab + ".empty", card).length) {
            $.ajax({
                url: "/team/getMVPs?teamId="  + card.attr("id"),
				dataType: "json",
				success: function(data, status) {
					if (data !== null) {
                        var mvps = $(".card-" + tab, card);
						mvps.removeClass("empty");
                        for(var i in data.mvps) {
							var mvp = mvps.find(".mvp-" + i);
                            mvp.children(".position").text(data.mvps[i].positionShort);
                            mvp.children(".jersey-number").text("#" + data.mvps[i].number);
							mvp.children("img").attr("src", "http://cdn.quickhit.com/update1/assets/player_faces/PNG_43x31/" + data.mvps[i].filePath).attr("alt", data.mvps[i].lastName);
							mvp.children(".name").text(data.mvps[i].lastName);
							mvp.children(".level").text("LV " + data.mvps[i].level);
                            if (!card.hasClass("ai")) {
                                mvp.children(".fp").text(Math.floor(data.mvps[i].averageAdjustedFantasyPointsPerGame * 10) / 10);
                            }
						}
						QuickHit.Lobby.LobbyCard.displayTab(card, tab);
					}
				}
            });
		} else if (tab == "stats" && $(".card-" + tab + ".empty", card).length) {
			$.ajax({
                url: "/team/getStats?teamId="  + card.attr("id"),
                dataType: "json",
                success: function(data, status) {
                    if (data !== null) {
                        var stats = $(".card-" + tab, card);
                        stats.removeClass("empty");
						stats.children(".team-pass").text(parseFloat(data.averagePassingYardsPerGame).toFixed(1));
						stats.children(".team-rush").text(parseFloat(data.averageRushingYardsPerGame).toFixed(1));
                        stats.children(".team-d-pass").text(parseFloat(data.averagePassingYardsPerGameAllowed).toFixed(1));
                        stats.children(".team-d-rush").text(parseFloat(data.averageRushingYardsPerGameAllowed).toFixed(1));
						stats.children(".team-fp").text(parseFloat(data.averageAdjustedFantasyPointsPerGame).toFixed(1));
                        QuickHit.Lobby.LobbyCard.displayTab(card, tab);
                    }
                }
            });
		} else {
			QuickHit.Lobby.LobbyCard.displayTab(card, tab);
		}
		return false;
    });
};

QuickHit.Lobby.LobbyCard.displayTab = function(card, tab) {
	$(".card-view", card).hide();
    $(".card-" + tab, card).show();
};

QuickHit.Notifications.activeNotification = false;
QuickHit.Notifications.createNotification = function(title, body, target, alignment, queue) {
    var className = "notification-" + String(target.text().match(/[\w'",\.\s]+/)).replace("'", "").replace("\"", "").replace(" ", "-").replace(/[\\n]+/, "").replace(/[\\r]+/, "");
    if ((!QuickHit.Notifications.activeNotification || !queue) && !$("." + className).length) {
        QuickHit.Notifications.activeNotification = true;
        var nTitle = $('<div/>', { id: "notification-title" }).text(title);
        var nBody = $('<div/>', { id: "notification-body" }).text(body);
        var content = $('<div/>', { id: "notification-content" }).append(nTitle).append(nBody);
        var close = $('<a/>', { id: "notification-close", click: function() { $(this).parent().remove(); } }).attr("href", "#").text("Close");
        var icon = $('<div/>', { id: "notification-icon" }).addClass(alignment);
        var container = $('<div/>', { id: "notification" }).addClass(className);
        container.append(content).append(close).append(icon).appendTo("body");

        var left;
        var top = target.offset().top - container.height();
        if (alignment == "left") {
            left = target.offset().left;
        } else if (alignment == "right") {
            left = target.offset().left + target.width() - container.width();
        } else {
            left = target.offset().left + (target.width() / 2) - (container.width() / 2);
        }

        container.css({ top: top, left: left }).fadeIn(300);
        setTimeout(function() { container.fadeOut(300, function() { $(this).remove(); QuickHit.Notifications.activeNotification = false; }); }, 8000);
    } else if (queue) {
        setTimeout(function() { QuickHit.Notifications.createNotification(title, body, target, alignment, queue); }, 1000);
    }
};

QuickHit.LogoChooser = function() {
    var chooser = $("#logo-chooser");
    var confirm = $("#logo-chooser-confirm");
    var done = $("#logo-chooser-done");
    var tos = $("#tos");

    var logoSelected = false;
    var logoSelectedName = "";
    var tosChecked = false;

    chooser.find(".logos a").live("click", function() {
        var button = $(this);
        button.addClass("selected").siblings().removeClass("selected");
        logoSelected = button.children("span").text();
        logoSelectedName = button.attr("title");
        $("#logo-chooser-chosen").attr("class", button.attr("class")).removeClass("selected");
        updateConfirmButtonStatus();
        return false;
    });
    tos.change(function() {
        if ($(this).is(":checked")) {
            tosChecked = true;
        } else {
            tosChecked = false;
        }
        updateConfirmButtonStatus();
    });
    confirm.live("click", function() {
        if (confirm.hasClass("active")) {
            confirm.removeClass("active");
            $.ajax({
                url: "/team/addLogo",
                data: {
                    logoId: logoSelected
                },
                dataType: "json",
                success: function(data) {
                    $("#choose-logo, #choose-logo-message").hide();
                    $("span", "#logo-congrats-message ").text(logoSelectedName);
                    $("#logo-congrats, #logo-congrats-message").show();
                },
                error: function(data) {
                    alert("There was a problem saving your chosen logo.");
                }
            });
        }
        return false;
    });
    done.live("click", function() {
        $.ajax({
            url: "/team/equipLogo",
            data: {
                equip: $("#logo-equip").is(":checked"),
                logoId: logoSelected
            },
            dataType: "json",
            success: function(data) {
                chooser.remove();
                window.location = data.redirectTo;
            },
            error: function(data) {
                alert("There was a problem equipping your chosen logo.");
            }
        });
    });

    var show = function() {
        chooser.css({ left: $(window).width() / 2 - chooser.width() / 2 });
        if (!navigator.userAgent.match(/MSIE 7/)) {
            $("body").block({ message: null });
        }
        $.ajax({
            url: "/team/getLogos",
            data: {
                type: "NFL"
            },
            dataType: "json",
            success: function(data) {
                chooser.find(".logos").append(data.content);
                chooser.show();
            }
        });
    };

    var updateConfirmButtonStatus = function() {
        if (logoSelected && tosChecked) {
            confirm.addClass("active");
        } else {
            confirm.removeClass("active");
        }
    };

    return {
        show: show  
    };
}();

QuickHit.Objectives.Popup.Show = function() {
	$("body").block({ message: null });
	$("#objectiveWindow a#close").click(function() {
		QuickHit.Objectives.Popup.Hide();
	});
    $("#objectiveWindow a#action").click(function() {
		QuickHit.Objectives.Popup.Hide();
	});
};

QuickHit.Objectives.Popup.Hide = function() {
	$("#objectiveWindow").remove();
	$("body").unblock({ message: null });
};

QuickHit.Brag = (function() {
    var inFacebook = false;

    var _share = function(message, title, description, mediaImage, mediaUrl, environment, baseURL) {
        if(environment == 'FB') {
            if (baseURL != null)
            {
                mediaUrl = baseURL + "?redir=" + mediaUrl; // need to redirect from the main facebook app url.
            }
            var event = function() {
                QuickHit.Facebook.publish(message, title, description, mediaImage, mediaUrl);
            };
            //if (typeof(window["FB"]) != "undefined")
            if (QuickHit.Facebook.initialized) {
                event();
            } else {
                QuickHit.Facebook.addQueuedEvent(event);
            }
        } else {
            // dont' need it yet. alr
            //var divContainer = $("<div/>").attr("id", "bragContainer");
            //$("body").append(divContainer);
            popupGigyaShare(message, title, description, mediaImage, mediaUrl, null); // "bragContainer" as last arg.
            //divContainer.css({ "marginLeft": -(divContainer.width() / 2) });
        }
    };

    return {
        share: _share
    };
}());

QuickHit.Play = (function() {
    var opponentInfoTimeout = null;

    var getOpponentInfo = function() {
        var opponent = $(this);
        var url = opponent.attr("href");
        var teamId = opponent.siblings(".team-id").val();
		var coachName = opponent.attr("class");
        var gameMode = $(".game-mode-name").val();
        var opponentInfo = $(".team-" + teamId + "-" + gameMode);
        /*
		opponentInfoTimeout = setTimeout(function() {
			if (opponentInfo.length) {
				_applyOpponentInfoStyle(opponent, opponentInfo);
			} else {
				$.ajax({
					url: url,
					dataType: "json",
					success: function(data) {
						$(".opponent-info").hide();
						opponentInfo = $(data.html);
						$("body").append(opponentInfo.hide());
						_applyOpponentInfoStyle(opponent, opponentInfo);
					}
				});
			}
		}, 250); // decreased from 750 - already too slow to popup.
		*/
    };

    var _applyOpponentInfoStyle = function(opponent, opponentInfo) {
        var left = opponent.offset().left + opponent.width();
        var top = opponent.offset().top - 80;
        opponentInfo.css({ left: left, top: top });
        opponentInfo.show();
    };

    var applyFilter = function() {
        var filter = $(this);
        var url = filter.attr("href");
        if (url) {
            $.ajax({
                url: url,
                dataType: "json",
                success: function(data) {
                    var content = filter.parents(".content-wrapper");
                    content.replaceWith(data.html);
                    init();
                }
            });
        }
        return false;
    };

    var init = function() {
        $(".coach a", "#mode-challengers").hover(getOpponentInfo, function() {
			$(".opponent-info").each(function() {
				$(this).hide();
			});
            clearTimeout(opponentInfoTimeout);
            $(".opponent-info").hide();
        }).click( function() {
			var coachLink = $(this).attr("class");
			if (coachLink) {
				$(window.location).attr('href', ('/coach/' + coachLink));
			}
			return false;
        });
		$(".play-small", "#mode-challengers").click(function() {
			$(".opponent-info").each(function() {
				$(this).hide();
			});
            clearTimeout(opponentInfoTimeout);
            $(".opponent-info").hide();
		});
    };

    $(".mode-filter-link").live("click", applyFilter);
    init();
}());

QuickHit.Utility.refreshPage = (function() {
    var refreshPopup = "<div id='objectiveWindow' class='bankPop'><a class='refreshMessage' href='"+ window.location.pathname + "'>Please click to continue.</a></div>";
    if (!$("#objectiveWindow").length) {
        $("#content-area").append(refreshPopup);
    }
});
