var activeNum = 0;

var highlightGallery = {
	elements:'',numElements:'',
	advanceGallery: function(){
		(activeNum == numElements-1)?activeNum = 0:activeNum++;
		highlightGallery.showElement();
	},
	
	reverseGallery: function(){
		(activeNum == 0)?activeNum = numElements-1:activeNum--;
		highlightGallery.showElement();
	},
	
	showElement: function(){
		elements.each(function(i){
			if(i == activeNum){
				$(this).fadeIn('slow')
			} else {
				$(this).hide()
			}
		})
	},
	
	init: function(val){
		elements = val;
		numElements = val.length;
		highlightGallery.showElement();
	}
};

var showTitles = [];
var showTimes = [];
var scheduleXML;
var getCurrentSchedule = {
	
	init:function(feed){
		for(i = 0, ii = feed.length; i < ii; i++){
			var titleStr = feed[i].title;
			if ( navigator.appName == "Netscape"){
			  //console.log('Feed title: ' + feed[i].title);
			}
			showTitles.push(titleStr.substring(0, titleStr.indexOf(',')-6));
			showTimes.push(titleStr.substring(titleStr.indexOf(',')-3, titleStr.length));
    }

		getCurrentSchedule.getStartTime();
		
	},
	
	getStartTime:function(){
	  
		//CURRENT
		var currentTime       = new Date();
		var currentMinutes    = currentTime.getMinutes();
		var currentHours      = currentTime.getHours();
		var currentDayOfWeek  = utils.getCurrentDay(currentTime.getDay())
		var currentDayOfMonth = currentTime.getDate();
		var currentMonth      = utils.getCurrentMonth(currentTime.getMonth());
		var currentYear       = currentTime.getFullYear();
		
		if(currentHours < 10)      { currentHours      = '0' + currentHours; }
		if(currentDayOfMonth < 10) { currentDayOfMonth = '0' + currentDayOfMonth; }
		
		var currentDateStr = currentDayOfWeek + ', ' + currentDayOfMonth + ' ' + currentMonth + ' ' + currentYear + ' ' + currentHours;
		
		//SCHEDULE
		var scheduleDayOfWeek  = showTimes[0].substring(0, showTimes[0].indexOf(','));
		var scheduleDayOfMonth = showTimes[0].substring(showTimes[0].indexOf(',')+2, showTimes[0].indexOf(',')+4);
		var startNode;

		for(i = 0, ii = showTimes.length; i < ii; i++){
		  
			var scheduleDateStr = showTimes[i].substring(0, showTimes[0].indexOf(':'));
			var curDayDigits    = currentDateStr.substring(currentDateStr.length-2, currentDateStr.length);
			var schedDayDigits  = scheduleDateStr.substring(scheduleDateStr.length-2, scheduleDateStr.length)
			
      // if ( navigator.appName == "Netscape"){
      //   console.log('showtimesi'+showTimes[i]);
      //   console.log(currentDateStr);
      //   console.log('current day ' + curDayDigits);
      //   console.log(scheduleDateStr);
      //   console.log('schedule day' + schedDayDigits);
      // }
			
			if( curDayDigits <= schedDayDigits ){
				startNode = i;
				break;
			} else {
			  startNode = showTimes.length + 1;
			}
		}
	
		$('.schedule-summary').each(function(i){
		  
			$(this).text(showTitles[startNode+i-1])
			
		})

		$('#schedule-snippet .time').each(function(i){
		  
			sStr   = (showTimes[startNode+i-1] != '') ? showTimes[startNode+i-1] : '';
			sHour  = Math.floor(sStr.substring(sStr.indexOf(':'),sStr.indexOf(':')-2));
			
			sTime  = sStr.substring(sStr.indexOf(':')-2,sStr.lastIndexOf(':')+3)
			sYear  = currentYear;
			sMonth = utils.getCurrentMonthStr(sStr.substring(sStr.indexOf(sYear)-4,sStr.indexOf(sYear)-1));
			sDay   = sStr.substring(5, 7);

			mfStr  = sYear+'-'+sMonth+'-'+sDay+'T'+sTime;
			sMin   = sStr.substring(sStr.lastIndexOf(':'),sStr.lastIndexOf(':')-2);
			
			if(sHour == 00) {sHour=12}
			if(sHour >  12) {sHour -= 12; meridium = 'PM' }	else { meridium = 'AM' }
			if(sHour <  10) {sHour = '  &nbsp; '+sHour;}
			
			$(this).html('<abbr class="dtstart" title="'+mfStr+'">'+sHour+':'+sMin+meridium+'</abbr>');
			
		})
	}

};

var getWeeklySchedule = {
  
	curDay:'',
	dayXML:'',
	
	init:function(feed){
	  
		this.feed = feed;
				
		var currentDate = new Date();
		if(utils.urlVars() == ''){
			//determine day
			curDay = utils.getCurrentDay(currentDate.getDay()).toLowerCase();
		} else{
			curDay = utils.urlVars();
		}
		
		//show this week
		var myDate      = new Date();
		                  myDate.setDate(myDate.getDate()+6)
		var cDay        = currentDate.getDate()
		var cMonth      = utils.getCurrentMonthFullStr( utils.getCurrentMonth( currentDate.getMonth() ).toLowerCase() ).toUpperCase();
		var schedTitle  = cMonth.toUpperCase() + ' ' + cDay + ' - ';
		    schedTitle += myDate.getUTCDate() + ' ' + currentDate.getFullYear();
		
		$('#schedule-week span').text(schedTitle);
		
		//rearrange days of the week
		var dCnt = currentDate.getDay();
		$('#schedule-week-nav a').each(function(i){
		  
			var d = utils.getCurrentDay(dCnt++);
			var urlAttr = $(this).attr('href');
			var newAttr = urlAttr.substring(urlAttr, urlAttr.length-3);
			
			$(this)
			  .text(d.toUpperCase())
			  .attr('href', newAttr + d.toLowerCase() )
			  .parent()
			  .addClass(d.toLowerCase())			  
			  .filter('.' + curDay)
			  .children('a')
			  .addClass('active');
			  
			if(dCnt==7){dCnt=0}
			
		});
		
		getWeeklySchedule.getCurDayXMlNodes();
		
	},
	
	getCurDayXMlNodes:function(){
	  
    today          = new Date();
    todayDayInt    = today.getDay();
    todayDay       = utils.getCurrentDay( todayDayInt );
    todayDate      = today.getDate();
    curDayInt      = utils.getCurrentDayInt( curDay.toString() );    
    curTodayDiff   = (( curDayInt + 7 ) - todayDayInt) % 7;
    /* curTodayDiff   = ( curTodayDiff == 7 ) ? 0 : curTodayDiff; */
        
    curDays        = new Date();
                     curDays.setDate(today.getDate() + curTodayDiff);
    curDateString  = curDays.toDateString();
    curMonth       = utils.getCurrentMonthFullStr( curDateString.substring(4,7) )
    curDate        = curDateString.substring(8,10);
    if (curDate < 10) { curDate = curDate.substring(1,3); };
        
    schedDate   = utils.getCurrentDayFullStr( curDay.toString() );
    
    $('#schedule-main #schedule-date').text(schedDate.toUpperCase() + ', ' + curMonth.toUpperCase() + ' ' + curDate);
	  
		getWeeklySchedule.populateSchedule('morning',   0,  11);
		getWeeklySchedule.populateSchedule('afternoon', 12, 17);
		getWeeklySchedule.populateSchedule('evening',   17, 23);

	},
	
  populateSchedule:function(timeframe,begin,end){
    
    for(var i=0, ii=this.feed.length; i<ii; i++){
		
      var titleStr  = this.feed[i].title;
			var schedDay  = titleStr.substring(titleStr.indexOf(',')-3,titleStr.indexOf(',')).toLowerCase();
			var beginTime = titleStr.substring(titleStr.indexOf(':')-2, titleStr.indexOf(':'));
			
			if( ( curDay == schedDay ) && ( beginTime >= begin ) && ( beginTime < end )){
			  
			  sYear       = titleStr.substring(titleStr.indexOf(':')-7, titleStr.indexOf(':')-3);
  			sMonth      = utils.getCurrentMonthStr(titleStr.substring(titleStr.indexOf(',')+5, titleStr.indexOf(',')+8))+1;
  			sDay        = titleStr.substring(titleStr.indexOf(',')+2, titleStr.indexOf(',')+4);    			
				sHour       = Math.floor(titleStr.substring(titleStr.indexOf(':')-2, titleStr.indexOf(':')));
				sMin        = titleStr.substring(titleStr.indexOf(':')+1, titleStr.indexOf(':')+3)
				
				if ( sMonth < 10) { sMonth = '0' + sMonth }
				if ( sHour  > 12) { sHour -= 12 }
				
				meridium    = (timeframe == 'morning') ? 'AM' : 'PM';
				dateStr     = sYear + '-' + sMonth + '-' + sDay + 'T' + sHour + ':' + sMin + ':00';
				
				row =  '<tr class="vevent"><td class="time schedule-time"><abbr class="dtstart" title="'+dateStr+'">';
				row += sHour+':'+sMin+meridium;
				row += '</abbr></td>';
				row += '<td class="summary schedule-title">';
				row += titleStr.substring(0, titleStr.indexOf(',')-6);
				row += '</td></tr>';
				
				$('#schedule-' + timeframe + ' tbody').append(row);
				
			}
  			  			
    }
  }  
};


var utils = {
	
	urlVars:function(){
		var vars = [], hash;
		var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	    for(var i = 0, ii = hashes.length; i < ii; i++)  {
        hash = hashes[i].split('=');
        vars.push(hash[1]);
        vars[hash[0]] = hash[1];
	    }
	    return vars;
	},
	
	match:function(val,obj,type){
	  var i = 0;
    for ( key in obj ){
      if ( obj[key].substring(0,3).toLowerCase() == val.toLowerCase() ) {
        if ( type == 'int' )
          return i;
        else 
          return obj[i];
      }
      i++;
    }
	},
	
	getDate:function(val,obj,type){
	  
	  if (obj == 'month'){
	    obj = this.months;
	  } else {
	    obj = this.days;
	  }
    
    if( parseInt(val) == val ){
      data = obj[val];
    } else if ( val.length == 3 ) {
      data = this.match(val,obj,type);
    } else {
      data = this.match(val,obj,type);
  	  data = ( data < 10 ) ? '0' + data : data;
    }
    
    switch (type) {
      case 'int':
        return parseInt(data);
        break;
      case 'abbr':
        return data.substring(0,3);
        break;
      default:
        return data;
    }
	  
	},
	
	getCurrentDay:function(val){
	  return this.getDate(val,'day','abbr');
	},
	
	getCurrentDayInt:function(val){
	  return this.getDate(val,'day','int');
	},
	
	getCurrentDayFullStr:function(val){
	  return this.getDate(val,'day');
	},
	
	getCurrentMonth:function(val){
	  return this.getDate(val,'month','abbr');
	},
	
	getCurrentMonthFullStr:function(val){
	  return this.getDate(val,'month');
	},
	
	getCurrentMonthStr:function(val){
	  data = this.getDate(val,'month','int') + 1;
	  data = ( data < 10 ) ? '0' + data : data;
    return data;
	},
	
	days : {
	  0 : 'Sunday',
	  1 : 'Monday',
	  2 : 'Tuesday',
	  3 : 'Wednesday',
	  4 : 'Thursday',
	  5 : 'Friday',
	  6 : 'Saturday'
	},
	
	months : {
	  0  : 'January',
	  1  : 'February',
	  2  : 'March',
	  3  : 'April',
	  4  : 'May',
	  5  : 'June',
	  6  : 'July',
	  7  : 'August',
	  8  : 'September',
	  9  : 'October',
	  10 : 'November',
	  11 : 'December'
	}
	
}