   var url='http://www.flyzone.com/base/pro/2008/8/3/G-COL-FLA.jf';   var lines;   var updateLegendTimeout;   var mousePosition;    function doHoverClear(){   doHover(mousePosition); }    function doHover(i){    var tx=findEventsInRange(i-xAxisAmount,i+xAxisAmount);    $('#what').html(tx);   }  var req;  function fetchFile(url){   //req=$.get( url, {}, function(data){ splitFile( data ); });   req=$.ajax({     type:"GET",     url:url,     beforeSend: function(x) {     if(x && x.overrideMimeType) {       x.overrideMimeType("text/plain; charset=x-user-defined");      }    },     success: function(data){ splitFile( data ); }        }); }   function readInt(b,off){   var ans=b[off]<<24;   ans=ans|(b[off+1]<<16);   ans=ans|(b[off+2]<<8);   ans=ans|b[off+3];   return ans; }   function readShort(b,off){   var ans=b[off]<<8;   ans=ans|b[off+1];   return ans; }  function readLine(b){    var ans="";    while(b[pos]>13){       ans+=String.fromCharCode(b[pos]);       pos++;    }    pos++;    return ans; }    function castStringToByteArray(s){    var ans=new Array(s.length);    for (var i=0;i<s.length;i++){       var c=s.charCodeAt(i);       ans[i]=c & 0xff;    }    return ans; }  function timeToPeriod(x){    var p=0;    while (x>periodLengths[p]){      p++;      x-=periodLengths[p];    }    var local=periodLengths[p]-x;    var min=Math.floor(local/60);    var sec=local-(min*60);        var ans="";    if (p==0){       ans+='1st';    } else if (p==1){       ans+='2nd';    } else if (p==2){       ans+='3rd';    } else if (p==3){       ans+='4th';    } else if (p==4){       ans+='1st Over';    } else if (p==5){       ans+='2nd Over';    }    ans+=' ';    ans+=min;    ans+=':';    ans+=sec;    return ans; }  function constructTicks(){    var ans=[];    var count=0;    for (var i=0;i<periodLengths.length;i++){       ans.push([count,''+(i+1)]);       count+=periodLengths[i];    }    return ans; }  function constructCenterLine(){     var count=0;    for (var i=0;i<periodLengths.length;i++){              count+=periodLengths[i];    }    var ans=[];    ans.push([0,0]);    ans.push([count,0]);    return ans;  }  function findEventsInRange(a,b){   var ans="";   var who;   for (var i=0;i<lastEvent;i++){       if (actionTimeAbsolute[i]>=a){          if (actionTimeAbsolute[i]>b){            return ans;          } else {             if (actionPlayerArray[i]>max){                who=homeTeamName[actionPlayerArray[i]-max];             } else {                who=visTeamName[actionPlayerArray[i]];             }             what=actionType[actionTypeArray[i]];             var time=timeToPeriod(actionTimeAbsolute[i]);             ans+=""+what+" by "+who+" at "+time+"<br>";                              }       }   }  }      var pos=0;   var version;   var gameStyle;   var lastPeriod;   var periodLengths;   var lastEvent;   var actionPlayerArray;   var actionTypeArray;   var lastAction;   var actionPointValue;   var actionType;   var shortActionType;   var actionPointValue;   var maxPlayers;   var teamName;   var homeTeamName;   var visTeamName;   var actionTimeDifference;   var actionTimeAbsolute;   var xAxisAmount;   var axes;   var thePlot;   var max;    function splitFile(d){   var b=castStringToByteArray(d);   pos=0;//global ack!    version=readInt(b,pos);   pos+=4;    gameStyle=readInt(b,pos);      pos+=4;    lastPeriod=b[pos];      pos+=1;    periodLengths=new Array(lastPeriod);   for (var i=0;i<lastPeriod;i++){      periodLengths[i]=readShort(b,pos);      pos+=2;   }   lastEvent=readShort(b,pos);   pos+=2;   actionPlayerArray=new Array(lastEvent);   for (var i=0;i<lastEvent;i++){      actionPlayerArray[i]=b[pos];      pos++;   }   actionTypeArray=new Array(lastEvent);   for (var i=0;i<lastEvent;i++){      actionTypeArray[i]=b[pos];      pos++;   }    lastAction=b[pos++];    actionPointValue=new Array(lastAction);    actionType=new Array(lastAction);   for (var i=0;i<lastAction;i++){      actionType[i]=readLine(b);   }   pos++; // get rid of an extra CR;      shortActionType=new Array(lastAction);   for (var i=0;i<lastAction;i++){      shortActionType[i]=readLine(b);   }   pos++; // get rid of an extra CR;      actionPointValue=new Array(lastAction);   for (var i=0;i<lastAction;i++){      actionPointValue[i]=b[pos];      pos++;   }      maxPlayers=readShort(b,pos);   pos+=2;   var teamName=new Array(2);   teamName[0]=readLine(b);   teamName[1]=readLine(b);      max=maxPlayers/2;   visTeamName=new Array(max);   homeTeamName=new Array(max);   playersNames=new Array(maxPlayers);   var t=readLine(b);   t=readLine(b);// extra cr?   var count=0;   while (t.length>0){     visTeamName[count]=t;     playersNames[count]=t;     count++;     t=readLine(b);   }     t=readLine(b);      t=readLine(b);// extra cr?    count=0;   while (t.length>0){     homeTeamName[count]=t;     playersNames[count+max]=t;     count++;     t=readLine(b);   }             var forget=readInt(b,pos);   pos+=4;   actionTimeDifference=new Array(lastEvent);   for (var i=0;i<lastEvent;i++){      actionTimeDifference[i]=b[pos];      pos++;   }      actionTimeAbsolute=new Array(lastEvent);      var scoreDiffList=[];      var scoreDiff=0;   var count=0;      for (var i=0;i<lastEvent;i++){     var action=actionTypeArray[i];     var actionPoints=actionPointValue[action];     var player=actionPlayerArray[i];     if (player<max){        scoreDiff+=actionPoints;     } else {        scoreDiff-=actionPoints;     }           scoreDiffList.push([count,scoreDiff]);     count+=actionTimeDifference[i];     actionTimeAbsolute[i]=count;   }       var perTicks=constructTicks();        var centerLine=constructCenterLine();       thePlot=$.plot($("#placeholder"), [        {             data: centerLine,             label: "",             lines: { show: true, fill: false, lineWidth:4, color: "#000088" }         },                {             data: scoreDiffList,             label: "",             lines: { show: true, fill: false, lineWidth:3, color: "#ff0000" }         } ]     , { grid: { hoverable: true, color: "#ffff33" } , crosshair: { mode:"x" }, colors: ["#d11111", "#1111ee", "#919733"],        xaxis:{ticks: perTicks},legend:{position:"nw", backgroundOpacity:0.2, color:"#000000"} }     );         $("#placeholder").bind("plothover", function (event, pos, item) {        // alert("You clicked at " + pos.x + ", " + pos.y);         // secondary axis coordinates if present are in pos.x2, pos.y2,         // if you need global screen coordinates, they are pos.pageX, pos.pageY                  mousePosition=Math.round(pos.x);                   var left=pos.pageX-120;         if (left<0){            left=0;         }                  $('#dataWindow').css('left',''+left+'px');         //$('#dataWindow').css('top',''+pos.pageY+'px'); 		//if (!updateLegendTimeout)          //   updateLegendTimeout = setTimeout(doHoverClear, 50); 		doHover(mousePosition);         if (item) {           // doHover(item.dataIndex);           //highlight(item.series, item.datapoint);          // alert("You clicked a point!");         }     });     axes=thePlot.getAxes();     xAxisAmount=4*Math.ceil(1/axes.xaxis.scale);  }      var root='http://www.flyzone.com/bball/pro/';   function loadItem(item){    var u="'"+item.link.replace(".html",".df")+"'";    var i=item.link.replace(".html","C3.gif");    //var x='<li><div class="arrow" onclick="fetchFile('+u+')">'+item.title+'</div></li>';     var x='<li><a class="flip" href="#graph" onclick="fetchFile('+u+')">'+item.title+'</a> </li>';     var x1='<li><a class="flip" href="#graph" onclick="fetchFile('+u+')">'+item.title+'<br><img src="'+i+'"></a> </li>'  	$('#games').append(x1); }   function loadDate(date){   var url=root+date+'/probball.rss';   jQuery("#games").html("...loading...");   jQuery.getFeed({        url: url,        success: function(feed) {            jQuery("#games").html("");            for (var i=0;i<feed.items.length;i++){              loadItem(feed.items[i]);            }         },         failure: function (feed){            jQuery("#games").html("No Games Found");         },          error: function (XMLHttpRequest, textStatus, errorThrown){            jQuery("#games").html("No Games Found"); // note this needs a fix to jFeed!         }    });   }  function loadFeed(feed){   }    $('#defaultInlineDatepicker').datepick( {onSelect: function(date) { loadDate(date); },      showOn: 'both', buttonImageOnly: true, buttonImage: 'calendar.gif',dateFormat:'yymmdd'}); 
