// This bam.js extension wraps around functionality of Flash Linescore
(function() {
	bam.imports(bam.validation, bam.url);
	bam.linescore = function(evtStr) {
		var _linescore = null;		
		function formatGID(gid) {
			return gid.replace(/\//g,"_").replace(/-/g,"_");	
		}
		this.LinescoreFLV = "baseLinescore.swf";
		this.Width= 550;
		this.Height= 400;
		this.Background= "#ffffff";
		this.version = 6;
		this.RefreshFrequency= 30;
		this.Scale = true;
		this.DefaultGID = "";
		this.BaseURL = "";
		this.sbRules = "";
		this.CurrentDate = ""; //YYYYMMDD
		//Initializes flash component and data
		this.Init= function(mid) {			
			var _flvId = "flv_" + mid;
			var _loc = bam.url.Location(location);
			var _gid = _loc.getParam("gid")||this.DefaultGID;
			if(typeof(mid) == "string") {					
				var fo = new FlashObject(this.LinescoreFLV+"?v="+this.version, _flvId, this.Width, this.Height, "9", this.Background);					
				//Set Flash Variables
				if(typeof(this.Scale) == "boolean" && (!this.Scale)){fo.addParam("scale", "noscale");}								
				fo.addParam("salign", "tl");
				fo.addParam("wmode", "transparent");
				fo.addParam("allowScriptAccess", "always");				
				//Initial load event
				fo.addVariable("initialCallback", evtStr);
				//If GID is in the query string
				if(!bam.validation.isEmpty(_gid)){fo.addVariable("gid", formatGID(_gid));}
				//Passing Current Date
				if(!bam.validation.isEmpty(this.CurrentDate)){fo.addVariable("currentDate", this.CurrentDate);}
				//If refresh frequency
				if(bam.validation.isNumeric(this.RefreshFrequency)){fo.addVariable("linescore_refresh_frequency", String(this.RefreshFrequency));}
				//Base Url to point to a different server (no http://)
				if(!bam.validation.isEmpty(this.BaseURL)) {
					fo.addVariable("base_url", this.BaseURL);	
				}				
				if(bam.validation.isEmpty(this.sbRules)) {
					fo.addVariable("sbRules", "/flash/scoreboard/y2009/sb_rules.xml");	
				} else {
					fo.addVariable("sbRules", this.sbRules);
				}				
				//Write to div
				fo.write(mid);
				_linescore = $("#" + _flvId)[0];
			}
		};
		
		//Loads a game data
		this.LoadGame= function(gid, evtStr) {
			try{
				if(!!_linescore){
					if(typeof(gid) == "string" && !!_linescore.loadGame) {
					_linescore.loadGame(formatGID(gid), evtStr);
						// debugging:
						//if (typeof console!="undefined"){ console.log("_linescore.loadNewGame(" + formatGID(gid) + ", " + evtStr+")"); }
					
					} else {
						//throw new Error("Error: GameId was not supplied");
						//if (typeof console!="undefined"){ console.log("Error: GameId was not supplied"); }
					}
				}
			}catch(err){
				//if(typeof console!="undefined"){console.log("loadGame Error:" + err)}
			}
		};
		
		
		//Performs a single request
		this.RetrieveData = function(fields, evtStr) {		
			try{		
				if(!!_linescore){			
					var _list = [];
					switch(true) {										
						case (fields instanceof Array):
							_list = fields;
							break;
						default:
							if(typeof(fields)=="string"){
								_list.push(fields);
							}
					}
					//_linescore.fetch(_list, evtStr);	//Old way
					_linescore.singleRequest(_list, evtStr);
				}
			}catch(err){
				//if(typeof console!="undefined"){console.log("singleRequest Error:" + err)}
			}
		};
		//Sets periodic request
		this.UpdateRequest= function(fields, evtStr) {
			try{	
				if(!!_linescore){		
					var _list = [];
					switch(true) {										
						case (fields instanceof Array):
							_list = fields;
							break;
						default:
							if(typeof(fields)=="string"){
								_list.push(fields);
							}
					}
					//_linescore.updateRequest(_list, evtStr); //Old way
					_linescore.pollingRequest(_list, evtStr);
				}
			}catch(err){
				//if(typeof console!="undefined"){console.log("pollingRequest Error:" + err)}
			}
		};
	}
})();

