if (!$.cookie('Upgrade') && $.browser.msie && parseInt(+$.browser.version) < 7) {
    var date = new Date();
    date.setTime(date.getTime() + (3 * 24 * 60 * 60 * 1000));                 
    $.cookie('Upgrade', true, {expires: date});   
    window.location = '/upgrade'      
}

function formattedNow(){
	now = new Date();
	date = now.toLocaleDateString();
	hour = now.getHours() % 12;
	(hour == 0)? hour = 12 : hour = hour;
	minute = now.getMinutes();
	second = now.getSeconds();
	((now.getHours() - 12) > 0) ? ampm = 'PM' : ampm = 'AM';
  return(date + ' ' + hour + ':' + minute + ':' + second + ' ' + ampm);
}

jQuery(function($) {
    
    var $tabs           = $('#tabs'),
        $gallery        = $('#category-gallery'),
        $search         = $('#search'),
        $help           = $('#help'),
        $questions      = $('.help-list').find('a'),
        $answers        = $('.help-list').find('p'),
        $widget         = $('#help-widget'),
        $comment        = $('#comments-header, #init-comment'),
        $submit_comment = $('#comment_submit'),
        $comment_form   = $('#new_comment'),
        $promos         = $('.cn_promo'),
        $close_help     = $widget.find('#close-help'),
        calendarLoaded  = '';

    cambio.remote.init();       
    
    // looks like 'toLocaleString' is formatted differently by each browser, roll our own date string? jquery plugin?
    $('.date-time').html(formattedNow());
    setInterval ("$('.date-time').html(formattedNow())", 50);
   
    // add class for browsers with no :nth-child css support when there's 9 tabs
    if ($('#tab-nav').find('li').length == 9 ) {
        $("#tab-nav").find('li:last').addClass('last');   
    }
    

	if ($tabs.length) { 
	    $tabs.tabs();
	    
	    // load tracking code if the tab is default active
	    $tabs.children('div').eq($tabs.tabs('option', 'selected')).find('img.tracking').each(function(){$(this).attr('src', $(this).attr('data-code'))});

	    
	    
        $tabs.bind('tabsshow', function(event, ui) {


						// load any tracking codes
						$(ui.panel).find('img.tracking').each(function(){$(this).attr('src', $(this).attr('data-code'))});
						
						// fix calendar display
            if ($(ui.panel).hasClass("calendar") && !calendarLoaded) {  
               
               $('.calendar').width(930);

                var calendar_feed_url = $('#calendar-feed').attr('href');

                $.getJSON(calendar_feed_url+"?alt=json-in-script&orderby=starttime&singleevents=true&sortorder=ascending&futureevents=true&callback=?", function(json){

                    var 
                    $loading        = $('#loading-calendar'),
                    $calendar       = $('#calendar'),
                    $calendar_pane  = $("#calendar .scroll-pane"),
                    $table          = $('<table />').attr('id','calendar-feed').attr('cellSpacing',0),
                    html            = '<tr><th>Date</th><th>Time</th><th>Venue</th><th>City/State</th><th></th></tr>';

                    $.each(json.feed.entry,function(i,entry) {

                        var even = (i % 2 === 0) ? 'even' : '',
                            start = (entry['gd$when']) ? entry['gd$when'][0].startTime : "",
                            location = (entry['gd$where']) ? entry['gd$where'][0].valueString : "";   

                        html += '<tr class="'+even+'"><td>'+formatDate(start)+'</td><td>'+formatTime(start)+'</td><td>'+entry.title.$t+'</td><td>'+location+'</td><td><a target="_blank" href="'+entry.content.$t+'">More Info/Tickets &raquo;</a></td></tr>';
                    });

                    $loading.remove();
                    $table.html(html).appendTo($calendar_pane);
                    
                    setTimeout( function(){
                        $tabs.find('.scroll-pane').jScrollPane({showArrows:true,scrollbarWidth:12, scrollbarMargin: 0});
                        $tabs.find('.jScrollPaneContainer').width(930);
                    }, 500);
                    
                    calendarLoaded = true;
                });

            } else {
                setTimeout( function(){
                    $tabs.find('.scroll-pane').jScrollPane({showArrows:true,scrollbarWidth:12, scrollbarMargin: 0});
                    $tabs.find('.jScrollPaneContainer').width(930);
                }, 500);        
            }   
            
            

            
        });  

        setTimeout( function(){
            $tabs.find('.scroll-pane').jScrollPane({showArrows:true,scrollbarWidth:12, scrollbarMargin: 0});
            $tabs.find('.jScrollPaneContainer').width(930);
        }, 500);   
        
        
        var commentPage = $.getUrlVar('page');

	    if (commentPage) {    
	        var index = $tabs.find('.comments').index() - 1;
	        
	        $tabs.tabs('select', index);  
	    
	    }
	             
    }
        
/*
    $search.click(function (e) {
        
        var $this = $(this),
            $search_form = $("form#search-form"),
            $search_input = $search_form.find("#search-term");
            
        e.preventDefault();
        
        $this
            .toggleClass('active')
            .blur();
        $search_form.toggleClass('hidden');
        $search_input.focus();
        
    });*/
    $promos.click(function() {
		window.location = $(this).find('a').attr('href');
		return false; 		
	});
	
	$answers.hide();
    
	$questions.click(function (e) {
		$(this).next('p').slideToggle(200, function() {
			setTimeout( function(){
                $widget.find('.scroll-pane').jScrollPane({showArrows:true,scrollbarWidth:12, scrollbarMargin: 0});
             }, 500 );
		});	
		return false
	});

    
    $help.click(function (e) {
        
        e.preventDefault();
        
        $(this).blur();
        $widget.slideToggle('fast', function() {
            setTimeout( function(){
                $widget.find('.scroll-pane').jScrollPane({showArrows:true,scrollbarWidth:12, scrollbarMargin: 0});
				
             }, 500 );
        });        
    
    });
    
    
    $close_help.click(function(e) {
        e.preventDefault();
        $(this).blur();
        $widget.slideToggle('fast');
		$answers.hide();
    });
    
    if ($comment.length) {
        $comment.click(function(e){
            e.preventDefault();
            var $panel = $("#comments-panel");
            $(this).toggleClass('active');
            $panel.toggleClass('shadow');
            $(this).find('input').focus();
            $comment_form.slideToggle(200);
        }); 
        $('#comment_body').keyup(function() {
            var len = this.value.length;
            if (len >= 255) {
                this.value = this.value.substring(0, 255);
            }
            $('#charLeft').text(255 - len);
        });
        $('#comment_body').change(function() {
            var len = this.value.length;
            if (len >= 255) {
                this.value = this.value.substring(0, 255);
            }
            $('#charLeft').text(255 - len);
        });            
       
        
    }
    
    var $edit = $('#edit-toggle');
    
    $edit.click(function(e) {
        var $menu = $('.drop-menu'); 
        $(this).blur();   
        $(this).toggleClass('open');
        $menu.slideToggle('fast');    
        $("#comment_body").focus();
        return false;
    });    
    
    $('#publication-notice').find('.closer').click(function() {
        $(this).parent().fadeOut(200);
        return false;
    });
                
    
    if ($('#follow-me').length) {  
        
        var twitter_name = $('#follow-me').attr('rel');        

        $.getJSON('http://twitter.com/status/user_timeline/'+twitter_name+'.json?count=10&callback=?', function(data){
          if (data.length) {
            var tweet = data.shift();
            $('#loading').hide();
            $('#follow-me').before('<div class="tweet"><div class="footer">' + relative_time(tweet.created_at) + '</div><p>' + tweet.text.linkify() + '</p></div>');
          }
        });
        
    }
    

    

});

function relative_time(time_value) {
    var values = time_value.split(" ");
    time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
    var parsed_date = Date.parse(time_value);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
    delta = delta + (relative_to.getTimezoneOffset() * 60);

    var r = '';
    if (delta < 60) {
        r = 'a minute ago';
    } else if(delta < 120) {
        r = 'couple of minutes ago';
    } else if(delta < (45*60)) {
        r = (parseInt(delta / 60)).toString() + ' minutes ago';
    } else if(delta < (90*60)) {
        r = 'an hour ago';
    } else if(delta < (24*60*60)) {
        r = '' + (parseInt(delta / 3600)).toString() + ' hours ago';
    } else if(delta < (48*60*60)) {
        r = '1 day ago';
    } else {
        r = (parseInt(delta / 86400)).toString() + ' days ago';
    }

    return r;
}

String.prototype.linkify = function() {
    return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
        return m.link(m);
    });
};

function formatDate(gCalTime) { 
  // text for regex matches
  var remtxt = gCalTime;

  function consume(retxt) {
    var match = remtxt.match(new RegExp('^' + retxt));
    if (match) {
      remtxt = remtxt.substring(match[0].length);
      return match[0];
    }
    return '';
  }

  // minutes of correction between gCalTime and GMT
  var totalCorrMins = 0;

  var year = consume('\\d{4}');
  consume('-?');
  var month = consume('\\d{2}');
  consume('-?');
  var dateMonth = consume('\\d{2}');

  // if only a DATE was matched
  dateString =  parseInt(month, 10) + '/' + parseInt(dateMonth, 10) + '/' + parseInt(year, 10);

  return dateString;
}


function formatTime(gCalTime) { 
  // text for regex matches
  var remtxt = gCalTime;

  function consume(retxt) {
    var match = remtxt.match(new RegExp('^' + retxt));
    if (match) {
      remtxt = remtxt.substring(match[0].length);
      return match[0];
    }
    return '';
  }

  // minutes of correction between gCalTime and GMT
  var totalCorrMins = 0;

  var year = consume('\\d{4}');
  consume('-?');
  var month = consume('\\d{2}');
  consume('-?');
  var dateMonth = consume('\\d{2}');
  var timeOrNot = consume('T');

  // if a DATE-TIME was matched in the regex 
  if (timeOrNot == 'T') {
    var hours = consume('\\d{2}');
    consume(':?');
    var mins = consume('\\d{2}');
    consume('(:\\d{2})?(\\.\\d{3})?');
    var zuluOrNot = consume('Z');

    // if time from server is not already in GMT, calculate offset
    if (zuluOrNot != 'Z') {
      var corrPlusMinus = consume('[\\+\\-]');
      if (corrPlusMinus != '') {
        var corrHours = consume('\\d{2}');
        consume(':?');
        var corrMins = consume('\\d{2}');
        totalCorrMins = (corrPlusMinus=='-' ? 1 : -1) * 
            (Number(corrHours) * 60 + 
	    (corrMins=='' ? 0 : Number(corrMins)));
      }
    } 

    // get time since epoch and apply correction, if necessary
    // relies upon Date object to convert the GMT time to the local
    // timezone
    var originalDateEpoch = Date.UTC(year, month - 1, dateMonth, hours, mins);
    var gmtDateEpoch = originalDateEpoch + totalCorrMins * 1000 * 60;
    var ld = new Date(gmtDateEpoch);

    // date is originally in YYYY-MM-DD format
    // time is originally in a 24-hour format
    // this converts it to MM/DD hh:mm (AM|PM) 
    dateString =  ((ld.getHours()>12)?(ld.getHours()-12):(ld.getHours()===0?12:
	ld.getHours())) + ':' + ((ld.getMinutes()<10)?('0' + 
	ld.getMinutes()):(ld.getMinutes())) + ' ' + 
	((ld.getHours()>=12)?'PM':'AM');
  } else {

    dateString = '';
  }
  return dateString;
}