String.prototype.titleCase = function () {
  var str = "";
  var wrds = this.split(" ");
  for(keyvar in wrds) {
    str += ' ' + wrds[keyvar].substr(0,1).toUpperCase() + wrds[keyvar].substr(1,wrds[keyvar].length);
  }
  return str.substr(1).replace(/And /g,'and ');
}

function log(message){
  if(typeof console == "object"){
    console.log(message);
  }
}

function loadYTPlayer(videoId) {
  swfobject.embedSWF("http://www.youtube.com/v/"+videoId+"?enablejsapi=1&playerapiid=ytplayer&version=3&fs=1&modestbranding=1", 
                     "ytapiplayer", "640", "480", "8", null, null, yt_params, yt_atts);
}

function onYouTubePlayerReady(playerId) {
  ytplayer = document.getElementById("myytplayer");
  ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
}

function onytplayerStateChange(newState) {
  switch(newState) {
    case 1: setPlayIcon(currentVideoId, 'playing'); break;
    case 2: setPlayIcon(currentVideoId, 'paused'); break;
    case 3: setPlayIcon(currentVideoId, 'loaded'); break;
    case 5: setPlayIcon(currentVideoId, 'cued'); break;
    case 0: setPlayIcon(currentVideoId, 'ended'); break;
  }
  //1=playing, 2=paused, 3=loaded, 5=cued, 0=ended
}

function setPlayIcon(videoId,status) {
    if (videoId =="") return;
    document.getElementById("_c_"+videoId).className = 'vidControl '+status;
    document.getElementById(videoId).className = 'videoItem '+status;
}

function numberFormat(nStr){
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1))
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  return x1 + x2;
}

function getEntryById(videoId) {
   var entries = feedData.entry || [];
   var result={};
   for (var i = 0; i < entries.length; ++i) {
      var entry = entries[i];
      if (entry.media$group.yt$videoid.$t ==videoId) {
        result['title']=entry.title.$t;
        result['duration']=entry.media$group.yt$duration.seconds;
        result['duration_ms']=Math.floor( result['duration'] / 60) + ":" + ( result['duration'] % 60).toFixed();
        result['uploaded']=entry.media$group.yt$uploaded.$t;
        result['rated']=entry.gd$rating ? true : false;
        if (result['rated']) {
          result['average']=entry.gd$rating.average.toPrecision(4);
          result['min']=entry.gd$rating.min;
          result['max']=entry.gd$rating.max;
          result['numRaters']=entry.gd$rating.numRaters;
        }
        viewcount=entry.yt$statistics.viewCount;
        result['viewCount']= numberFormat(viewcount);
        result['favoriteCount']=entry.yt$statistics.favoriteCount;
        result['videoId']=videoId;

        return result;
      }        
   }
   return {};
}

function setDetails(videoId) {
   var entry=getEntryById(videoId);
   var html_links='<a href="http://www.youtube.com/watch?v=' + videoId + '">Download or Watch from <img src="/images/youtube_small.png" height="20" width="17" alt="YouTube" title="YouTube"></a>';
   $('#detailsLinks').html(html_links);

   var html_details=[];
//   html_details.push("Length "+entry['duration_ms']);
   if (entry['rated']) html_details.push("Rated " + entry['average'] + "/" + entry['max'] + " by " + entry['numRaters'] + " rater(s)");   

   $('#detailsInfo').html(html_details.join(""));
   $('#viewCount').html(entry['viewCount'] + " views");
}

function play(videoId,startSeconds) {
  setDetails(videoId);
  if (ytplayer) {
    if (currentVideoId == videoId) {
      state= ytplayer.getPlayerState();
      if (state == 2 || state == 5 ) {
        ytplayer.playVideo() ;
	
      } else { 
        ytplayer.pauseVideo();
      }
    } else {
      setPlayIcon(currentVideoId,'none');
      ytplayer.loadVideoById(videoId, startSeconds, "default")
      currentVideoId=videoId;
      ytplayer.playVideo();
    }
  }
}



// newer semesters sort first, and sort by category within semesters:
function eventSortSem(a, b){
  if (a['sem'] > b['sem']) return -1;
  else if (a['sem'] == b['sem']) {
     if (a['category'] < b['category'] ) return -1;
     else return 1;
  } else return 1;
}
// newer semesters sort first, and sort by coursename within semesters:
function eventSortCat(a, b){
  if (a['category'] > b['category']) return -1;
  else if (a['category'] == b['category']) {
     if (a['sem'] < b['sem'] ) return -1;
     else return 1;
  } else return 1;
}

//
// newer semesters sort first, and sort by coursename within semesters:
//
function courseSortSem(a, b){
  if (a['sem'] > b['sem']) return -1;
  else if (a['sem'] == b['sem']) {
     if (a['course'] < b['course'] ) return -1;
     else return 1;
  } else return 1;
}

//
// sort by dept, then by coursename
//
function courseSortDept(a, b){
  if (a['department'] > b['department']) return 1; 
  else if (a['department'] == b['department']) {
    if (a['course'] < b['course']) return -1;
    else return 1;
  } else return -1;
}

//
// breadCrumbs("events", "s", "All", "Title");
//
function breadCrumbs(section, by, selection, title) {
  return true;
  var html=['<li><a href="/index.html">webcast.berkeley</a></li>'];
  selectionClean= selection.replace(/_/g," ").titleCase();
  selectionSafe= selection.replace(/ /g,"_");

  if (selection != "All") {
    if (section=="events") {
      html.push(' <li>&gt;</li> <li><a href="series#e,',by,',,">All Events</a></li>'); 
    } else {
      html.push(' <li>&gt;</li> <li><a href="series#c,',by,',,">All Courses</a></li>'); 
    }

    if (section=="events") {
      html.push(' <li>&gt;</li> <li><a href="series#e,', by, ',',selectionSafe, ',">', selectionClean, ' Events</a></li>'); 
    } else {
      html.push(' <li>&gt;</li> <li><a href="series#c,', by, ',',selectionSafe, ',">', selectionClean, ' Courses</a></li>'); 
    }

  } else {
    if (section=="events") {
      html.push(' <li>&gt;</li> <li><a href="series#e,',by,',,">All Events</a></li>'); 
    } else {
      html.push(' <li>&gt;</li> <li><a href="series#c,',by,',,">All Courses</a></li>'); 
    }
  }

  html.push(' <li id="pageTitle"></li>');
  document.getElementById("breadCrumbs").innerHTML=html.join("");
}


//
//
  function processPlayLists() {
    var entries = feedData.entry || [];

    for (var i = 0; i < entries.length; ++i) {
      var entry = entries[i];
      entry['department']= "";
      entry['cat']= "";
      entry['lecturer']="";
      entry['sponsor']="";

      try {
      sponsorIndex=entry.summary.$t.indexOf("Sponsor:",1);    
      if (sponsorIndex > 0 ) {
        sponsorEnd=entry.summary.$t.indexOf("\n",sponsorIndex)+1;
        if (sponsorEnd >0) {
          entry['sponsor']=entry.summary.$t.slice(sponsorIndex+9,sponsorEnd);    
        } else {
          entry['sponsor']=entry.summary.$t.slice(sponsorIndex+9);
        }
      }

      for (var j = 0; j < entry.category.length; ++j) {
        var cat = entry.category[j];
        var term = cat.term.split(":")
	
        if (term[0] == "dept") {  entry['department']= term[1].titleCase().replace(/_/g," ");        }
        if (term[0] == "lect") {  entry['lecturer']= term[1].replace(/_/g," ");        }
        if (term[0] == "cat") {	  entry['cat']= term[1].replace(/_/g," ");        }

        if (term[0] == "sem") {
	  entry['semester']= term[1].replace(/_/g," ");
	  if (term[1].split('_')[0] == "Spring") {
	    entry['sem']= term[1].split('_')[1] + "B";
	  } else {
	    entry['sem']= term[1].split('_')[1] + "D";
	  }
	} else if (term[0] == "course") {
	  entry['course'] = term[1];
	}
      }
      entry['category']=entry['cat'];
    
    } catch(ex) {
      var removed=entries.splice(i,1);
      log("error in processing item:");
      log(JSON.stringify(removed));
    }
    } 
    if ($section=='courses') addITunesUEntries();
    sortEntries();
    gatherLists();

    if ($by == 'd') {
      populateSelect(department_list,"dept_select",$sel,2);
      populateSelect(semester_list,"sem_select","All",2);
      populateSelect(category_list,"cat_select","All",2);
    } else if ($by == 's') {
      populateSelect(department_list,"dept_select","All",2);
      populateSelect(semester_list,"sem_select",$sel,2);
      populateSelect(category_list,"cat_select","All",2);
    } else if ($by == 'c') {
      populateSelect(department_list,"dept_select","All",2);
      populateSelect(semester_list,"sem_select","All",2);
      populateSelect(category_list,"cat_select",$sel,2);
    } else {
      populateSelect(department_list,"dept_select","All",2);
      populateSelect(semester_list,"sem_select","All",2);
      populateSelect(category_list,"cat_select","All",2);
    }
    listCourses($by);
    resize_columns();
  }

  function gatherLists() {
    var entries = feedData.entry || [];
    var semester_alist={};
    var department_alist={};
    var category_alist={};
    semester_list.push(["Any Semesters","All",""]);
    department_list.push(["Any Departments","All","0"]);
    category_list.push(["Any Category","All","0"]);

    for (var i = 0; i < entries.length; ++i) {
      var entry=entries[i];
      if (entry['semester'] == undefined) continue;
      try {
        semester=entry['semester'];
        department=entry['department'].titleCase();
        category=entry['category'].titleCase() || "";
      } catch (ex) {
        log("error gathering lists: ");
        log(JSON.stringify(entry));
        continue;
      }

      if ( (semester != undefined) && (semester_alist[semester] != true) && (semester != "")) {
        semester_alist[semester] = true;
        semester_list.push( [ semester , semester.replace(/ /g,"_") ,entry['sem']]);
      }
      if (department != undefined && department_alist[department] == undefined && department != "") {
        department_alist[department] = true;
        department_list.push( [ department , department.replace(/ /g,"_"), department ]);
      }
      if (category != undefined && category_alist[category] == undefined && category != "") {
        category_alist[category] = true;
        category_list.push( [ category , category.replace(/ /g,"_"), category ]);
      }

    }
  }

  function findPlaylist(playlistId) {
    var entries = feedData.entry || [];
    for (var i = 0; i < entries.length; ++i) {
      if (entries[i]['yt$playlistId'].$t == playlistId) return entries[i];
    }
    return {};
  }

  function addITunesUEntries() {
    var entries = feedData.entry || [];    
    log("Adding iTunesUEntries " +itu_courses.length);
    for (var i=0; i < itu_courses.length ; ++i) {
       var new_entry={};
       var isNewEntry=false;
       var course=itu_courses[i];

       try {
         if (course.youTube != undefined && course.youTube.length == 16) {
           new_entry=findPlaylist(course.youTube);
         }
	 if (new_entry['semester'] == undefined ) {
           isNewEntry = true;
         }
         if ( new_entry['title'] != undefined && new_entry['title'].$t != course.title) {
           new_entry = {};
           isNewEntry = true;
         }

         new_entry['department']=course.dept || "";
         new_entry['cat']=course.cat || "";
         new_entry['lecturer']=course.lecturer || "";
         new_entry['sponsor']=course.sponsor || "";
         var semester=course.semester;

         new_entry['semester']= semester;
         if (semester.split(' ')[0] == "Spring") {
           new_entry['sem']= semester.split(' ')[1] + "B";
         } else {
           new_entry['sem']= semester.split(' ')[1] + "D";
         }

         new_entry['audioId']=course.audioId || "";
         new_entry['videoId']=course.videoId || "";
         new_entry['summary']=course.descr || "";
         new_entry['descr']=course.descr || "";

         if (isNewEntry) {
           new_entry['course']=course.title || "";
           new_entry['title']=course.title || "";
           new_entry.title = {$t: course.title || ""};
           new_entry.summary = {$t: course.descr || ""};
           new_entry['category'] = "";
           new_entry['yt$playlistId']= {$t:course.youTube || ""};
           entries.push(new_entry);
         }
       } catch(err) {
         log("error in adding an entry from itunesu_podcasts.js");
       }

    }  

  }

  function sortEntries() {
    if ($section == 'courses') {
      if ($by == 'd') {
        if ($sel != "All") {
          feedData.entry.sort(courseSortSem);
          }
        else {
          feedData.entry.sort(courseSortDept);
        }
      } else if ($by == 's') {
        feedData.entry.sort(courseSortSem);
      } else if ($by == 'sp') {
        feedData.entry.sort(courseSortSem);
      } 
    } else {
      if ($by == 'c') {
        feedData.entry.sort(eventSortCat);
      } else if ($by == 's') {
        feedData.entry.sort(eventSortSem);
      } else if ($by == 'sp') {
        feedData.entry.sort(eventSortSem);
      } 

    }
  }

  function listCourses(by) {
    var entries = feedData.entry || [];
    var previous="";
    var html = [];
    var html_s = ['<div id="browse">Browse Courses</div>'];
    var html_list = [];
    var selection= $sel.replace(/_/g," "); 
    var selectField ="";
    var byPlural=""
    var group_by=[];

    switch(by) {
      case 's': selectField="semester"; byPlural="Semesters";  break;
      case 'd': selectField="department"; byPlural="Departments"; break; 
      case 'c': selectField="category"; byPlural="Categories"; break;
      case 'sp': selectField="sponsor"; byPlural="Sponsors"; break;
    }

    if ($section == "courses") {
       group_by=[['Semester','s'],['Department','d']];
    } else {
       group_by=[['Category','c'],['Sponsor','sp'],['Semester','s']];
    }

    for (var i = 0; i < entries.length; ++i) {
      var entry = entries[i];
      if (entry[selectField] == undefined) continue;
      
      try { 
      var entryClean= entry[selectField].replace(/_/g," ").titleCase();
      var entrySafe=  entry[selectField].titleCase().replace(/ /g,"_");
      if (entry[selectField] =="") continue;
      if (entry[selectField] != previous) {
	if (selection == "All") {
           html.push('<div class="sub-selection"><h2><a href="#', $section[0], ',' ,by, ',',entrySafe,'" onclick="change_selection(\'',entry[selectField],'\');">',entryClean,'</a>');
           if (false && itu_events_h[entryClean] != undefined ) {
             itu_event=itu_events_h[entryClean];
             html.push('<span class="itulink"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',itu_event[1] ,'"><img alt="',itu_event[2] ,' audio" src="/images/sm_audio.png" height="15" width="18">iTunes audio </a></span>'); 
             html.push('<span class="itulink"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',itu_event[0] ,'"><img alt="',itu_event[2] ,' video" src="/images/sm_video.png" height="15" width="18">iTunes video </a></span>'); 
//             html.push(itu_events_h[entryClean]);
           }
           html.push('</h2></div>');

        }
	previous = entry[selectField];
	if (selection == entryClean) {
          html_list.push('<h2 class="selected" onclick="change_selection(\'',entry[selectField],'\');"><a href="#', $section[0], ',' ,by, ',',entrySafe,'" onclick="change_selection(\'',entry[selectField],'\');">',entryClean,'</a></h2>');
        } else {
          html_list.push('<h2 onclick="change_selection(\'',entry[selectField],'\');"><a href="#', $section[0], ',' ,by, ',',entrySafe,'" onclick="change_selection(\'',entry[selectField],'\');">',entryClean,'</a></h2>');	
	}
      }
      var title = entry.title.$t;
      if (selection == "All" || selection ==entryClean) {
        html.push('<div class="series">');
        if(entry['yt$playlistId'].$t != "" && entry['yt$playlistId'].$t != undefined) {
          html.push('<div class="series_title"><a href="playlist#',$section[0],',',by,',',$sel.replace(/ /g,'_'),',',entry['yt$playlistId'].$t,'">',title.titleCase() ,'</a></div>');
        } else {
          html.push('<div class="series_title">',title.titleCase() ,'</div>');
        }
        var summary=entry['summary'].$t || entry['descr'];
        if (summary.length > 450) {
          var summary_short=summary.substr(0,450);
          var summary_index=summary_short.lastIndexOf('. ');
          if (summary_index < 1) summary_index=summary_short.lastIndexOf(' ');
          summary=summary_short.substr(0,summary_index+1);
          if (summary_index < summary.length) { summary += '<span class="more"><a href="playlist#'+$section[0]+','+by+','+$sel.replace(/ /g,'_')+','+entry['yt$playlistId'].$t+'"> read more</a></span>'; }
//          log(summary);
        }
        html.push('<div class="series_subtitle"><div class="presenter">',entry['lecturer'],'</div> <div class="description">',summary ,'</div></div>');
        html.push('<div class="series_links">');
        // look for playlist - open and close <div playbutton> and <div youtube>
	if(entry['yt$playlistId'].$t != "" && entry['yt$playlistId'].$t != undefined) {
          html.push('<div class="playbutton"><a href="playlist#',$section[0],',',by,',',$sel.replace(/ /g,'_'),',',entry['yt$playlistId'].$t,'"><img src="/images/playbutton.png" alt="play button" title="Play Now"></a></div>');
          html.push('<div class="youtube"><a href="http://www.youtube.com/view_play_list?p=',entry['yt$playlistId'].$t,'" title="Watch video on YouTube"><img alt="',title.titleCase() ,' on youTube" src="/images/sm_video.png" height="21" width="48">VIDEO </a></div>'); 
        } else { html.push('<div class="playbutton">&nbsp;</div>'); }

        // look for itunes - open <div itunes>
        if((entry.audioId != "" && entry.audioId != undefined) || (entry.videoId != "" && entry.videoId != undefined)) { 
			 	 html.push('<div class="itunes"><img src="/images/itunes.png" height="21" width="80" alt="iTunes U">');
				
				// look for itunes audio - open and close <div itunesaudio>
					if(entry.audioId != "" && entry.audioId != undefined) { 
						html.push('<div class="itunesaudio"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',entry.audioId ,'" title="Listen to audio on iTunes">AUDIO</a></div>'); 
					} else { html.push('<div class="itunesaudio">&nbsp;</div>'); }
	
				// look for itunes video - open and close <div itunesvideo>
					if(entry.videoId != "" && entry.videoId != undefined) { 
						html.push('<div class="itunesvideo">&nbsp;|&nbsp;<a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',entry.videoId ,'" title="Watch video on iTunes">VIDEO </a></div>'); 
					} else { html.push('<div class="itunesvideo">&nbsp;</div>'); }
					html.push('</div>');
					
				html.push('</div>');	// close <div itunes>

			 } // end if any itunes found

		    html.push('</div>'); // close <div series_link>
      }
			
			html.push('</div>'); // close <div series>
    }
    catch(ex) {
      log("error in listing item:");
      log(ex);
      log(JSON.stringify(entry));
      continue;
    }
    }
    html.push('</div>');
    html_s.push('</div><div id="section_list">');
    for (var j = 0; j< group_by.length; j++) {
      var name=group_by[j][0];
      var code=group_by[j][1];
      if ($by == code) {
        html_s.push('<div class="group_header selected"><a href="#',$section[0],',',code,'" onclick="change_group_by(\'',code,'\'); ">By ',name,'</a></div>');
        html_s = html_s.concat(html_list);
      } else {
        html_s.push('<div class="group_header"><a href="#',$section[0],',',code,'" onclick="change_group_by(\'',code,'\'); ">By ',name,'</a></div>');
      }
    }
    document.getElementById("course_list").innerHTML = html.join("");
//    $('#main-container').height(20 + Math.max($('#section_list').height(), $('#course_list').height()));
  }

  function show_itunes() {
    return true;
    var section=$section;
    var semester="";

    if($by=="s" && $sel != "All") {
      semester = $sel;
    } else {
      semester="Fall 2010";
    }

    semester = semester.replace(/_/g," ");
    var html=['<h1 class="section">Podcasts</h1>'];
    html.push('<p>Additional content can be found in our iTunesU site.  Please see the following links in iTunes.</p>');

    if ($section == "courses") {
      html.push('<p><img src="images/available_itu.jpg" width=104 height=57 /><br/><a target="_itunesu" href="http://itunes.apple.com/WebObjects/DZR.woa/wa/viewTagged?tag=All+Courses&id=354813951">',semester,' podcasts on iTunes</a></p>');
      for ( var i=0, len=itu_courses.length; i<len; ++i ){
        var course=itu_courses[i];
        if (course.semester != semester) { continue; }
        if (course.videoId == "") {
          html.push('<img alt="" src="/images/pixel.gif" height=15 width=18>');
        } else {
          html.push('<a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',course.videoId,'"><img alt="',course.title,' video" src="/images/sm_video.png" height=15 width=18></a>');
        }
        if (course.audioId == "") {
          html.push('<img alt="" src="/images/pixel.gif" height=15 width=18> ');
        } else {
          html.push('<a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',course.audioId,'"><img alt="',course.title,' audio" src="/images/sm_audio.png" height=15 width=18></a> ');
        }
        html.push(course.title,' <br/>');  
      }
    } else {
      html.push('<p><a target="_itunesu" href="http://itunes.apple.com/WebObjects/DZR.woa/wa/viewTagged?tag=All+Events&id=354813951">UC Berkeley events on iTunes</a></p>');
      for ( var i=0, len=itu_events.length; i<len; ++i ){
        var event=itu_events[i];
        if (event[0] == "") {
          html.push(' <img alt="" src="/images/pixel.gif" height=15 width=18>');
        } else {
          html.push(' <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',event[0],'"><img alt="',event[2],' video" src="/images/sm_video.png" height=15 width=18></a>');
        }
        if (event[1] == "") {
          html.push(' <img alt="" src="/images/pixel.gif" height=15 width=18> ');
        } else {
          html.push(' <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=',event[1],'"><img alt="',event[2],' audio" src="/images/sm_audio.png" height=15 width=18></a> ');
        }
        html.push(event[2],' <br/>');  
      }
    }
//    document.getElementById("iTunesU_links").innerHTML=html.join('');
  }

  function setCourseTitle(title) {
    document.getElementById("courseTitle").innerHTML=title;
  }	
  function setCourseDescription(descr) {
    document.getElementById("courseDescription").innerHTML=descr.replace(/\n/g,"<br/>");
  }	
  function setLectureTitle(title) {
    document.getElementById("lectureTitle").innerHTML=title;
  }	


  function listVideos() {
    var entries = feedData.entry || [];
    var html = ['<h3 id="video_header">Videos</h3>'];
    
    setCourseTitle(feedData.title.$t);
//    document.getElementById("pageTitle").innerHTML="&gt; "+feedData.title.$t;
    setCourseDescription(feedData.subtitle.$t);

    for (var i = 0; i < entries.length; ++i) {
      var entry = entries[i];
      var title = entry.title.$t;
      var pos=title.indexOf(" - ");
      title= (pos != -1) ? title.substr(pos +3) : title; 
      var lecture = title.indexOf("Lecture ");
      if (lecture == 0) {
        colon= title.indexOf(": ", lecture);
        title=(colon != -1 && colon < 12) ? "<span class='lecture'>" + title.substr(0,colon+1) + "</span> " +title.substr(colon +1) : title;
      }

      var videoId= entry.media$group.yt$videoid.$t;
      if (currentVideoId == "") currentVideoId= videoId;
      html.push('<div class="videoItem" id="',videoId,'" onclick="play(\'',videoId,'\',0); return false;"><div class="vidControl none" id="_c_',videoId,
                '" ></div><div class="vidTitle">', title,'</div></div>');
      html.push('<div style="display:none;height:50px;" class="videoDescr collapsible" id="',videoId,'_p">', title,'</div>');
    }
    loadYTPlayer(currentVideoId);
    setDetails(currentVideoId);
    document.getElementById("video_list").innerHTML = html.join("");
    var height= Math.max( $('#video_area').height(), $('#video_list').height() , 620);
//    $('#main-container-playlist').height(height +21);
//    $('#video_list').height( height );


    //http://i.ytimg.com/vi/1WWnxA6odso/default.jpg
///    $(".videoItem").each(function() {
//        var content='<img src="http://i.ytimg.com/vi/';
//
//        content += $(this).attr('id');
//        content += '/default.jpg" alt="Loading thumbnail..." height="90" width="120" />';
//	content += '<p>'+entry.media$group.yt$duration.seconds/60+'</p>';
//        $(this).qtip({
//          style: { 
//            tip: { corner:'topMiddle', color: '#ffffff', size: {x:20,y:10}},
//            width: {min:400} },
//            content: content, show: 'mouseover', hide: 'mouseout',
//            position: { corner: { target: 'bottomMiddle',tooltip: 'topMiddle' } 
//          } 
//        });
///    });

//    $(".videoItem").qtip({
//       content: {url:'test'}, show: 'mouseover', hide: 'mouseout',position: { corner: { target: 'topMiddle' } } 
//    })

///    $(".videoItem").click( 
//      function() { //$(this).stop().animate({ backgroundColor: "#a79fd1"}, 1200); 
//                   //alert( $(this).attr("id")+"_p" );
//                   $(".videoDescr").hide();
//                   $(this).next().fadeIn(300);
//                 },
//      function() { $(this).stop().animate({ backgroundColor: "#ffffff" }, 800);
//                   //$(this).next().slideUp();
///                 });

  }


// name_values in the form [ [name0,value0] , [name1,value1] ]
  function populateSelect(name_values, select_name, selected_value, sort_index) {
    var select= document.getElementById(select_name);
    var current="";
    sort_index=sort_index || 0;

    name_values.sort( function(a,b){
      if (a[sort_index] > b[sort_index]) return 1;
      else if (a[sort_index] == b[sort_index]) return 0;
      else return -1;
    })
    
    select.length=0;

    for (var i=0; i< name_values.length; ++i) {

      var item = name_values[i];
      if (item == undefined) continue;
      if (item[1] != current) {
        current = item[0] || "";

        var option= new Option;
	option.text=item[0].titleCase();
	option.value=item[1].replace(/ /g,"_");

	option.selected= ( item[1] == selected_value) ? true: false;
        try {
	  select.add(option,null);
        } catch(ex) {
	  select.add(option); // for IE.
        }
      }
    }
  }


// gatherFeed gets called as the callback for each page of JSON returned by youTube
//
  function gatherFeed(root) {
    var feed = root.feed;
    var links = feed.link || [];
    var morePages=false;
    
    if (feedData.length == 0) {
      feedData=feed;
    } else {
      if (feed.entry) {
        feedData.entry=feedData.entry.concat(feed.entry);
      }
    }

    for (var i = 0; i < links.length; ++i) {
      //todo: need to make sure this is a NEXT link!
      var link=links[i];

      var index=/start-index=(\d+)/.exec(link['href'])[1];
      if (index > 0) { 
        getFeedData(index); 
        morePages=true;
      }
    }
    
    if (! morePages ) {
      switch(feedParameters.callBack) {
        case "playList":
          processPlayLists(); break;
        case "videoList":
          listVideos(); break;
      }
    }
  }

  function getFeedData(startIndex) {
    var feed=feedParameters.source;
    var fields=feedParameters.fields;
    var callBack=feedParameters.callBack;

    var getParams = '?alt=json-in-script&v=2' +
                  '&callback=gatherFeed' + 
		  '&fields=link[@rel=\'next\'],' + fields +
                  '&max-results=50'; // max allowed here is 50 default is 25.
    if (startIndex > 0 ) getParams += "&start-index=" + startIndex;
    feed += getParams;

    var scriptTag = document.createElement('script');
    scriptTag.src = feed;
    document.body.appendChild(scriptTag);
  }

  function reload_hash() {
    var hash=unescape(self.document.location.hash.substring(1));
    var options=hash.split(',');

    $oldSection=$section;
    $section= (options[0] == "e") ? "events" : "courses";
    $( '#'+$oldSection+'_tab').removeClass("active");
    $( '#'+$section+'_tab').addClass("active");

    $sec=(options[0] == "e") ? "e": "c";
    var by_default = ($section =="events") ? "c" : "s";  
    $by= (options[1] == undefined | options[1] =="") ? by_default : options[1];
    $sel=(options[2] == undefined | options[2] =="") ? "All" : options[2];
    $playlist=(options[3] == undefined | options[3] =="") ? "" : options[3];
  }

  function resize_columns() {
    $('#main-container').height(20 + Math.max($('#section_list').height(), $('#course_list').height()));
    var max= Math.max($('#section_list').height(), $('#course_list').height()) +20;
//    $('#left-column').height(max);
//    $('#center-column').height(max);

  }

  function refresh_view() {
    sortEntries();
    breadCrumbs($section, $by, $sel, "");
    listCourses($by);
    resize_columns();
  }

  function semester_changed(value, external) {
    external = external || false;
    $by="s";
    $sel=value;
    link= ($section == "events") ? "events.html#" : "series.html#";
    if (! external) {
      refresh_view();
      populateSelect(category_list,"cat_select","All",2);
      populateSelect(department_list,"dept_select","All",2);
      populateSelect(semester_list,"sem_select",value,2);
    } 
    window.location=link +$sec + "," + $by + "," + $sel;
  }

  function department_changed(value, external) {
    external = external || false;
    $by="d";
    $sel=value;
    link= ($section == "events") ? "events.html#" : "series.html#";
    if (! external) {
      refresh_view();
      populateSelect(department_list,"dept_select",value,2);
      populateSelect(semester_list,"sem_select","All",2);
      populateSelect(category_list,"cat_select","All",2);
    } 
    window.location=link +$sec + "," + $by + "," + $sel;
  }

  function sponsor_changed(value, external) {
    external = external || false;
    $by="d"; 
    $sel=value;
    link= ($section == "events") ? "events.html#" : "series.html#";
    if (! external) {
//      refresh_view();
//      populateSelect(department_list,"dept_select",value,2);
//      populateSelect(semester_list,"sem_select","All",2);
    }
    window.location=link +$sec + "," + $by + "," + $sel;
  }

  function category_changed(value, external) {
    external = external || false;
    $by="c";
    $sel=value;
    link= ($section == "events") ? "events.html#" : "series.html#";
    if (! external) {
//      refresh_view();
      populateSelect(department_list,"dept_select","All",2);
      populateSelect(semester_list,"sem_select","All",2);
//      parent.location="series.html#" +$sec + "," + $by + "," + $sel;
    }
    window.location=link +$sec + "," + $by + "," + $sel;
  }

  function change_group_by(value) {
    $sel="All";
    $by=value;
    refresh_view();
  }

  function change_selection(value) {
    $sel=value;
    refresh_view();
  }


