/*
 * Trivia Game
 * MVC-style application
 *
 * @author    jferrer
 * @version   0.1
 * @requires  jQuery.js
 * @requires  bam.js
 */
(function(G){var O=window.bam;O.loadSync(O.homePath+"bam.cookies.js");O.loadSync(O.homePath+"bam.datetime.js");var I=G(document),M="OFF";var D=(function(){var W,S={currentGame:"/fantasylookup/json/named.trivia_questions.bam",gameById:"/fantasylookup/json/named.trivia_questions_by_id.bam"},V={Load:{type:"onLoad",handler:function(){G(W).trigger("onLoad",arguments);}},Error:{type:"Error",handler:function(){G(W).trigger("Error",arguments);}}};function R(Z,Y){var X={game_id:Z};if(!!Y){X.ignoreCache=true;}G.ajax({url:S.gameById,dataType:"json",data:X,success:V.Load.handler});}function Q(){G.ajax({url:S.currentGame,dataType:"json",success:V.Load.handler});}W={bind:function(Y,X){G(W).bind(Y,X);},load:function(Y,X){if(!!Y){R(Y,X);}else{Q();}}};var U,T;G.each(V,function(X,Y){U="on"+X;T=function(Z){if(!!Z&&typeof Z==="function"){W.bind(Y.type,Z);}};W[U]=T;});return W;})();var L=(function(){var R=1000,S,Q=function(){var U=this,T;U.elapsed++;for(var V in U.intervals){T=U.intervals[V];if(!!T&&(U.elapsed%V===0)){I.trigger(U.id+"_"+V+"SecondsElapsed");}}if(parseInt(U.duration,10)===parseInt(U.elapsed,10)){U.stop();}};S={duration:0,elapsed:0,intervals:{},reset:function(){var T=this;T.stop();T.elapsed=0;},start:function(){var T=this;T._intervalHandler=setInterval(function(){Q.apply(T,arguments);},R);},stop:function(){var T=this;I.trigger(T.id+"_counterStopped");clearInterval(T._intervalHandler);},getDurationRemaining:function(){var T=this;return T.duration-T.elapsed;},bindElapsedTimeEvent:function(U,V){if(!V||typeof V!=="function"){return ;}var T=this;T.intervals[U]=true;I.bind(T.id+"_"+U+"SecondsElapsed",V);},onSecondElapsed:function(U){var T=this;T.bindElapsedTimeEvent(1,U);},onCounterStopped:function(U){if(!U||typeof U!=="function"){return ;}var T=this;I.bind(T.id+"_counterStopped",U);}};return{create:function(V,U){var T=O.clone(S);T.duration=U;return T;}};})();var J=window.PixelSubmitter=(function(){O.loadSync(O.homePath+"bam.url.js");var R="http://votetracker.mlb.com/trkpxA.gif?",Q="&veripoint2="+Date.parse(new Date());return{submit:function(V,U){var T=G("#"+V).serialize(),W=R+T+Q,S;if(!!U){W+=O.url.buildSearch(U).replace("?","&");}S=new Image();S.src=W;}};})();var N=(function(){var Q;return{displayQuestions:function(V){var U=G('<table cellspacing="0" cellpadding="0" border="0">'),S,R,T;Q=V.length;G.each(V,function(X,W){if(W.answers.indexOf("|")!==-1){T=W.answers.split("|");}else{T=[W.answers];}S=G("<tr>").appendTo(U);if(X%2===0){S.addClass("zebra");}S.append('<td class="questionNumber">'+W.question_num+".</td>").append('<td class="questionText">'+W.question_text+"</td>");R=G('<td class="answer">').appendTo(S);G('<input type="text" disabled="true"/>').data("answers",T).data("questionNumber",W.question_num).appendTo(R);});U.appendTo("#questions");},enable:function(){var R=G("#questions"),S=R.find("input");G("#startScreen").fadeOut("slow",function(){R.fadeTo("slow",1);});S.removeAttr("disabled");S[0].focus();},displayAnswers:function(){var R=G("#questions input").addClass("incorrect"),T,S;R.each(function(){T=G(this).addClass("correct").hide();S=T.data("answers")[0];G('<div class="incorrect"/>').appendTo(T.parent()).html(S).show();T.remove();});},updateCorrectAnswer:function(S){var U=G(S).addClass("correct").hide(),R=G("#questions input"),T=R.index(U)+1;if(T>R.length-1){T=0;}if(R.length>1){R.get(T).focus();}G('<div class="correct"/>').appendTo(U.parent()).html(U.val()).show();U.remove();}};})();var F=(function(){var S;function R(U){var V=parseInt(U/60,10),T=U%60;if(T<10){T="0"+T;}return{minutes:V,seconds:T};}function Q(U){var T=R(U);G("#duration .value").html(T.minutes+":"+T.seconds);}return{start:function(){if(!!S){S.start();}},stop:function(){if(!!S){S.stop();}},onCounterStopped:function(T){S.onCounterStopped(T);},init:function(T){Q(T);S=L.create("triviaClock",T);S.onSecondElapsed(function(){Q(S.getDurationRemaining());});}};})();var P=window.View_StartButton=(function(){var Q=[];function R(){var T,S=Q.length;for(T=0;T<S;T++){if(Q[T]()===false){return false;}}G("#startBtn").unbind("click",R);I.trigger("quizStarted");return false;}return{onBeforeStart:function(S){if(!!S&&typeof S==="function"){Q.push(S);}},gameOver:function(){G("#startBtn").addClass("gameOver");},init:function(){G("#startBtn").bind("click",R);}};})();var A={display:function(Q){G("#quizRules").html(Q);},displayArchive:function(){G("#quizRules").load("/mlb/components/fantasy/trivia/rules_archive.jsp");}};var K={display:function(W,T,Q){var V=(parseInt(T,10)+1),S=(V>1)?" times":" time",U=parseInt(T,10)===0?"Time's up!":"Congratulations!",R=U+" You answered "+T+" out of "+Q+" questions correctly and have been entered into the "+W+" Sweepstakes "+V+S+".";G("#quizMessage").html(R);}};var B={update:function(Q){G("#numCorrect .value").html(Q);}};var H={display:function(U){var Q=G("<select>").change(function(){var V=G(this).val();if(V!=-1){window.location.href=window.location.pathname+"?gameID="+V;}}),T,S,R;Q.append('<option value="-1">Previous Games</option>');G.each(U,function(V,W){S=W.game_id;R=O.datetime.parseISODate(W.start_time);T=G("<option value="+W.game_id+">"+R.toShortDate()+"</option>");T.appendTo(Q);});Q.appendTo("#quizArchiveNav");}};var E={display:function(Q){G("#quizStatus").fadeOut("slow",function(){G("#startScreen").hide();G('<div id="badQuizData"/>').html('You have tried accessing a non-existent game.  Please return to the <a href="/mlb/fantasy/trivia/index.jsp">'+Q+" homepage</a> to access today's game or archived games.").prependTo("#triviaQuiz");});}};var C=window.TriviaQuiz=(function(){var R=0,V=0,Q,W="MLB Trivia";function T(){var a=G(this),Y=a.val().toLowerCase(),Z=a.data("answers"),X=a.data("questionNumber");Z=G.map(Z,function(b){return b.toLowerCase();});if(G.inArray(Y,Z)!==-1){I.trigger("correctAnswer",[a,X]);}}function S(X,Y){V++;B.update(V);N.updateCorrectAnswer(Y);if(V===R){F.stop();}}function U(b){if(!b){throw new Error("TriviaQuiz response missing quizInfo");}var X=G("#"+Q),Y=b.game_id,Z,a;if(!!Y){G('<input type="hidden" name="gameID" value="'+Y+'"/>').appendTo(X);}if(!!b.start_time){Z=O.datetime.DateTime(new Date());a=Z.formatDate("yyyy'/'MM'/'dd HH':'mm':'ss");G('<input type="hidden" name="startTime" value="'+a+'"/>').appendTo(X);}if(!!R){G('<input type="hidden" name="totalSize" value="'+R+'"/>').appendTo(X);}}return{init:function(X){if(!!X&&X.formID){Q=X.formID;}if(!!X&&X.gameName){W=X.gameName;}G("#questions").fadeTo("fast",0);D.onLoad(function(Z,b){var a=b,d,e,c,Y=false;if(!!X&&!!X.gameID){d=a.trivia_questions_by_id.trivia_quiz_info_by_id.queryResults.row;e=a.trivia_questions_by_id.trivia_quiz_questions_by_id.queryResults.row;c=a.trivia_questions_by_id.trivia_games_past.queryResults.row;if(!!d&&!!d.is_active&&d.is_active==="n"){Y=true;}}else{d=a.trivia_questions.trivia_quiz_info.queryResults.row;e=a.trivia_questions.trivia_quiz_questions.queryResults.row;c=a.trivia_questions.trivia_games_past.queryResults.row;if(!!d.is_active&&d.is_active==="n"){Y=true;}}if(!e){E.display(W);}else{G("td.answer input").live("keyup",T);e=O.util.ensureArray(e);c=O.util.ensureArray(c);R=e.length;U(d);I.bind("correctAnswer",S);B.update(V);if(!!Y&&!X.ignoreCache){A.displayArchive();}else{A.display(d.game_rules);}N.displayQuestions(e);H.display(c);F.init(d.allotted_time);F.onCounterStopped(N.displayAnswers);F.onCounterStopped(function(){K.display(W,V,R);P.gameOver();});I.bind("quizStarted",function(){F.start();N.enable();});P.init();}});if(!!X&&!!X.gameID){D.load(X.gameID,X.ignoreCache);}else{D.load();}},saveEntryData:function(a){var Y=G("#"+a).serializeArray(),b=O.datetime.DateTime(new Date()).incrementWeeks(1),X="",Z;G.each(Y,function(c,d){X+=d.name+"="+d.value+"&";if(d.name=="FORM_CODE"){Z=d.value;}});O.cookies.set({name:"trivia_"+Z,value:X,expires:b,path:"/",domain:"mlb.com"});},loadEntryData:function(d){O.loadSync(O.homePath+"bam.cookies.js");var Z=G("#"+d),c=Z.find('input[name="FORM_CODE"]').val(),e=O.cookies.get("trivia_"+c),X,Y,a,b;if(!!e){e=unescape(e);X=e.split("&");G.each(X,function(f,g){Y=g.split("=");a=Y[0];b=Y[1];Z.find('[name="'+a+'"]').val(b);});}}};})();})(jQuery);
