$(function(){ 

  function sortAB(a, b){
    return (a - b);
  }

  function parseEvents( data ){
    var entries = data.query.results.entry,
        epoch = +new Date(),
        order = [],
        key   = {}
    ;

    for(var i=0, l=entries.length; i< l; i++){
      var entry = entries[i],
          content = entry.content.content;

      // Time  ///////////////////////////////////////////////////////////////////

        if( content.indexOf('When: ')> -1 ){
          entry.when = content.substr( content.indexOf('When: ')+6,  content.indexOf('<br />')-6 );       
          entry.date = entry.when.match(/(([a-zA-Z]{3} ){2})[0-9]+, [0-9]{4}/)[0];
          var dateLen = entry.date.length;
          entry.start = entry.when.substr( dateLen+1, entry.when.indexOf(' to ')-dateLen-1 );
          var startAt = entry.when.indexOf(' to ')+4,
              endAt = entry.when.indexOf('\n')-1
          ;
          entry.end = entry.when.substr( startAt, endAt-startAt );
          var startMatch = entry.start.match(/[0-9]+/g);
          entry.hourStart = (entry.start.match(/[0-9]+/g)[0]) || entry.start.match(/[0-9]+/g) || 0;
          entry.minuteStart = entry.start.match(/[0-9]+/g)[1] || '00';
          entry.meridianStart = (entry.start.match(/[a-zA-Z]{2}/g)[0]).toUpperCase();
          entry.hourEnd = entry.end.match(/[0-9]+/g)[0];         
          entry.minuteEnd = entry.end.match(/[0-9]+/g)[1] || '00';
          entry.meridianEnd = (entry.end.match(/[a-zA-Z]{2}/g)[0]).toUpperCase();
          entry.timeZone = (entry.when.substr(endAt+2)).toUpperCase();    
          if( entry.minuteStart.length === 1 ){ entry.minuteStart = '0' + entry.minuteStart; }
          if( entry.minuteEnd.length === 1 ){ entry.minuteEnd = '0' + entry.minuteEnd; }
          if( entry.hourStart.length === 1 ){ entry.hourStart = '0' + entry.hourStart; }
          if( entry.hourEnd.length === 1 ){ entry.hourEnd = '0' + entry.hourEnd; }    
          entry.epochStart = new Date( entry.date.replace(',','') +' '+entry.hourStart+':'+entry.minuteStart +' '+entry.meridianStart );
          entry.epochEnd = new Date( entry.date.replace(',','') +' '+entry.hourEnd+':'+entry.minuteEnd +' '+entry.meridianEnd );

          entry.dateTimeDisplay = entry.epochStart.format("dddd mmmm dS, yyyy h:MM tt");
        }        

      // Cost //////////////////////////////////////////////////////////////////
        entry.cost = "Free";

      // Venue /////////////////////////////////////////////////////////////////
        startAt = content.indexOf('Where: ')+7;
        entry.where = content.substr( startAt, content.indexOf('Event Status')-startAt-7 );        
        entry.map = null;
        if( entry.where.toUpperCase().indexOf( "BOCOUP" )> -1 ){
          entry.map = 'http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=bocoup&sll=37.0625,-95.677068&sspn=37.735377,79.013672&ie=UTF8&hq=bocoup&hnear=&ll=42.352962,-71.049271&spn=0.068885,0.154324&z=13&iwloc=A';
        }
        if( entry.where.toUpperCase().indexOf( "MAPS.GOOGLE.COM" )> -1 ){
          entry.map = entry.where;
        }      

      // Description ///////////////////////////////////////////////////////////
        startAt = content.indexOf('Description: ')+13;
        entry.description = content.substr( startAt, 1024 );

      // Signup Link ///////////////////////////////////////////////////////////
        //entry.signuplink = $(entry.description).find('.signuphere');
        startAt = entry.description.lastIndexOf('href=')+6;
        var chomp = entry.description.substr( startAt )
            entry.signuplink = chomp.substr( 0, chomp.indexOf('" ') ) // fix this to work with ' & "
        ;        

      // Template //////////////////////////////////////////////////////////////
  // normalize
        entry.title = entry.title.content;
        if( (+entry.epochStart)> epoch && typeof entry.title == 'string' ){
          var thisEpoch = ( +entry.epochStart );
          order[order.length] = thisEpoch;
          key[''+thisEpoch] = entry;
        }else{
        }
        

        
    }
    order.sort(sortAB);  
    for( i=0, l=order.length;i< l; i++){
      $( '#eventTemplate' ).tmpl( key[order[i]] ).appendTo( '#upcomingEvents' );
    }  
  
  }
     
  $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fbocoup.com_6264aoekhoakcluc29d4qqmbn8%2540group.calendar.google.com%2Fpublic%2Fbasic'%20and%20itemPath%3D'feed.entry'&format=json&diagnostics=true&callback=?", function( data ){
      parseEvents( data );
  });
  
});

