<search function="racetv">
   <name>Racing TV Coverage</name>
   <description>Displays a current TV listing of auto racing events in US and Canada.
   <table class="helpboxDescTable">
      <tr><td><div class="helpboxDescLabels">Switches:</div></td></tr>
      <tr><td>US (default)</td><td>/us</td></tr>
      <tr><td>Canada</td><td>/canada</td></tr>
      <tr><td>Can-Am</td><td>/can-am or /canam</td></tr>
      <tr><td>Central Timezone</td><td>/central</td></tr>
      <tr><td>Mountain Timezone</td><td>/mountain</td></tr>
      <tr><td>Pacific Timezone</td><td>/pacific</td></tr>
      <tr><td colspan="2"><div class="helpboxDescLabels">Notes:</div></td></tr>
      <tr><td colspan="2">All the timezone switches can be abbreviated.</td></tr>
      <tr><td colspan="2">All times are US Eastern by default.</td></tr>
      <tr><td colspan="2">The /popup switch will open in a popup window.</td></tr>
      <tr><td colspan="2"><div class="helpboxDescLabels">Examples:</div></td></tr>
      <tr><td>racetv</td><td>(US Eastern Schedule)</td></tr>
      <tr><td>racetv /pac</td><td>(US Pacific Schedule)</td></tr>
      <tr><td>racetv /eas</td><td>(US Eastern Schedule)</td></tr>
      <tr><td>racetv /can /cen</td><td>(Canadian Central Schedule)</td></tr>
      <tr><td>racetv /eas /popup</td><td>(US Eastern Schedule in a popup)</td></tr>
   </table>
   </description>
   <link>http://www.geocities.com/racefantv/USTV.htm</link>
   <category>Entertainment</category>
   <script><![CDATA[
   function racetv(q){
   if( q == "?" ){
      qsfind("racetv /function");
      return false;
   }
   //defaults
   var urlstart="http://www.geocities.com/racefantv/USTV.htm";
   var wintitle="US"
   var tzname="Eastern";
   var offset=0;
   var racetvoutfile = DQSDLauncher.AppDataDirectory + '\\racetv.html'; 
   var args = parseArgs(q, "canada,can-am,canam,eastern,central,mountain,pacific");
   
   var fileout=1;     
   //if the fileout switch was used, set the fileout flag to true and remove it from the list of comics to fetch
   if (q.search("/popup") >= 0) {
      fileout=0;
      q = q.replace("/popup", "");
   }
   
   if ( args.switches.length > 0 ){
      for (i=0; i < args.switches.length; i++){
         switch( args.switches[i].name ){
         case "canada": urlstart="http://www.geocities.com/racefantv/CDNTV.htm";wintitle="Canadian";break;
         case "can-am": urlstart="http://www.geocities.com/racefantv/CANAMTV.htm";wintitle="Canadian-American";break;
         case "canam":  urlstart="http://www.geocities.com/racefantv/CANAMTV.htm";wintitle="Canadian-American";break;
         case "eastern":  tzname="Eastern";offset=0;break;
         case "central":  tzname="Central";offset=1;break;
         case "mountain": tzname="Mountain";offset=2;break;
         case "pacific":  tzname="Pacific";offset=3;break;
         }//switch
      }//for
   }//if
        
   // Set an array for the days of the week
   // We add a comma and a space to each for presentation
   // get.day will return 0 through 6 as valid values 
   word_day = new Array(
   "SUNDAY, ",
   "MONDAY, ",
   "TUESDAY, ",
   "WEDNESDAY, ",
   "THURSDAY, ",
   "FRIDAY, ",
   "SATURDAY, ");
   
   // Set an array for the Months of the year
   // We add a space after the month for presentation
   // get.month will return 0 through 11 as valid values 
   word_month = new Array(
   "JANUARY ",
   "FEBRUARY ",
   "MARCH ",
   "APRIL ",
   "MAY ",
   "JUNE ",
   "JULY ",
   "AUGUST ",
   "SEPTEMBER ", 
   "OCTOBER ",
   "NOVEMBER ",
   "DECEMBER ");

   // Set right_now to the current date() value
   right_now = new Date();
   var datestring=word_day[right_now.getDay()]+word_month[right_now.getMonth()]+right_now.getDate();
   var sUrl=urlstart;
   var xmlHttp = new ActiveXObject("Microsoft.XmlHttp");
   xmlHttp.open("GET", urlstart, false);
   xmlHttp.send();
   //get the response content from the remote site
   var sBody = xmlHttp.responseText;

   // Replace the third column width with null so the text will stretch to the end of the table
   var rex = new RegExp ('width="558"', 'g') ;
   sBody = sBody.replace(rex, '') ;

   // Replace the line breaks with returns or the regex wont work
   rex = new RegExp ('\n', 'g') ;
   sBody = sBody.replace(rex, '\r') ;
   
   rex2 = new RegExp ('"', 'g') ;
   sBody = sBody.replace(rex2, '\'') ;
   
   rex = new RegExp( ".*" + datestring + "(.*)", "im" );
   var r = sBody.match( rex )[1];
   //generate an array of the return text
   var sBody_array=r.split("<tr>");

   //walk the data array in search of timestamps to process
   for (var i = 0; i < sBody_array.length; i++) {
      var tsorig=sBody_array[i].match(/(\d?\d:\d\d\w?-\d?\d:\d\d\w?)/);
      // detect if tsorig is null (not matched)
      var tstest=tsorig*1;
      if (tstest != 0) {
         tsmatch_array=tsorig[1].match(/(\d?\d):(\d\d)(\w?)-(\d?\d):(\d\d)\w?/);
         var begh=tsmatch_array[1];
         var begm=tsmatch_array[2];
         var ampm=tsmatch_array[3];
         var endh=tsmatch_array[4];
         var endm=tsmatch_array[5];
         var dayroll="";

         //force the ampm to be a two letter format
         switch( ampm ){
            case "n": ampm="PM";break;
            case "m": ampm="AM";dayroll="<br>(prev day)";break;
            case "A": ampm="AM";break;
            case "P": ampm="PM";break;
         }//switch

         for (var t = 0; t <offset; t++) {
            
            if (begh == 12 && ampm == 'AM') {
               ampm = 'PM';dayroll="<br>(prev day)"
            }else if (begh == 12 && ampm == 'PM') {
               ampm = 'AM';
            }//else
            
            begh--; endh--;
            if (begh==0) {begh=12;}
            if (endh==0) {endh=12;}
         }//for

      sBody_array[i]=sBody_array[i].replace(tsorig[1],ampm+" "+begh+":"+begm+"-"+endh+":"+endm+" "+dayroll);
      }//if tstest
   }//for
  
   var pagebody = "<html><head><style>body {font-family:Verdana;} table {width:100%;border-collapse:collapse;}  td {border:0;margin:0px;padding-left:2px;font-family:verdana;font-size:11px;}</style></head><body>";
   pagebody += "<center><span style=font-weight:bold;color:#900000;>"+wintitle+" Racing TV times ("+tzname+" Timezone)</span></center><table><tr> ";
   pagebody += '<td colspan="3" width="100%" style="border:0;background-color: #ffff33;padding-top: 0.0416667in; padding-bottom: 0.0416667in;" valign="top"><p>';
   pagebody += '<span style="font-weight: bold; font-family:Verdana, sans-serif"><font size="1">'+datestring;
   
   //work around the writefile limit of the amount of data that can be written to a file..
   //for (var i = 0; i < sBody_array.length; i++) {
   //var pagebody=sBody_array.join("<tr>");
   for (var i = 0; i < 120; i++) {
      pagebody += sBody_array[i]+"<tr>\r\n";
   }
   pagebody+='<td colspan=3 style="border:0;">&lt;snip&gt;<br></td></tr></table></body></html>';

   if (fileout == 1) {
      writeFile(racetvoutfile, pagebody);
      openSearchWindow("file://" + racetvoutfile);
   }else{
      myWindow = window.open("", "racetv", 'resizable,scrollbars,width=1000,height=700')
      myWindow.document.write(pagebody)
   }      
} //function
  ]]></script>
</search>


