/*!
 * MIXVI YouTube Video Browser JavaScript Library v1.1
 * http://www.mixvi.com/
 *
 * Copyright 2010, TYZEN
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://www.tyzen.net
 *
 * Includes TEXTTUBE
 * http://www.texttube.org
 * Copyright 2010, TEXTTUBE
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sun August 1 2010
 */

var mixvi = {};

mixvi.MAX_RESULTS_LIST = 10;

mixvi.THUMBNAIL_WIDTH = 124;

mixvi.THUMBNAIL_HEIGHT = 93;


mixvi.PLAYER_WIDESCREEN_WIDTH = 720;

mixvi.PLAYER_STANDARD_WIDTH = 540;


mixvi.PLAYER_HEIGHT = 435;

mixvi.VIDEO_LIST_CSS_CLASS = 'videoslist';

mixvi.PREVIOUS_PAGE_BUTTON = 'previousPageButton';
mixvi.PREVIOUS_PAGE_BUTTON2 = 'previousPageButton2';

mixvi.NEXT_PAGE_BUTTON = 'nextPageButton';
mixvi.NEXT_PAGE_BUTTON2 = 'nextPageButton2';

mixvi.STANDARD_FEED_URL_TOP_RATED = 
    'http://gdata.youtube.com/feeds/standardfeeds/top_rated?';


mixvi.STANDARD_FEED_URL_TOP_FAVORITES = 
     'http://gdata.youtube.com/feeds/standardfeeds/top_favorites?';


mixvi.STANDARD_FEED_URL_MOST_VIEWED = 
    'http://gdata.youtube.com/feeds/standardfeeds/most_viewed?';


mixvi.STANDARD_FEED_URL_MOST_POPULAR = 
    'http://gdata.youtube.com/feeds/standardfeeds/most_popular?';


mixvi.STANDARD_FEED_URL_MOST_RESPONDED = 
    'http://gdata.youtube.com/feeds/standardfeeds/most_responded?';

mixvi.STANDARD_FEED_URL_MOST_DISCUSSED = 
'http://gdata.youtube.com/feeds/standardfeeds/most_discussed?';


mixvi.STANDARD_FEED_URL_RECENTLY_FEATURED = 
    'http://gdata.youtube.com/feeds/standardfeeds/recently_featured?';

mixvi.STANDARD_FEED_URL_WATCH_ON_MOBILE = 
    'http://gdata.youtube.com/feeds/standardfeeds/watch_on_mobile?';

mixvi.CHANNEL_FEED_URL = 
    'http://gdata.youtube.com/feeds';

mixvi.VIDEO_FEED_URL = 
    'http://gdata.youtube.com/feeds/videos?';

mixvi.QUERY_URL_MAP = {
  'top_rated' : mixvi.STANDARD_FEED_URL_TOP_RATED,
  
  'top_favorites' : mixvi.STANDARD_FEED_URL_TOP_FAVORITES,
  
  'most_viewed' : mixvi.STANDARD_FEED_URL_MOST_VIEWED,
  
  'most_popular' : mixvi.STANDARD_FEED_URL_MOST_POPULAR,
 
  'most_responded' : mixvi.STANDARD_FEED_URL_MOST_RESPONDED,
  
  'most_discussed' : mixvi.STANDARD_FEED_URL_MOST_DISCUSSED,
  
  'recently_featured' : mixvi.STANDARD_FEED_URL_RECENTLY_FEATURED,
  
  'watch_on_mobile' : mixvi.STANDARD_FEED_URL_WATCH_ON_MOBILE,
  
  'channel' : mixvi.CHANNEL_FEED_URL,
  
  'search' : mixvi.VIDEO_FEED_URL
};

mixvi.nextPage = 2;
mixvi.nextPage2 = 2;

mixvi.previousPage = 0;
mixvi.previousPage2 = 0;

mixvi.previousSearchTerm = '';

mixvi.previousQueryType = 'search';
mixvi.previousQueryType2 = 'channel';

mixvi.jsonFeed_ = null;

mixvi.appendScriptTag = function(scriptSrc, scriptId, scriptCallback) {
 
  var oldScriptTag = document.getElementById(scriptId);
  if (oldScriptTag) {
    oldScriptTag.parentNode.removeChild(oldScriptTag);
  }
  
  var script = document.createElement('script');
  script.setAttribute('src', 
      scriptSrc + '&alt=json-in-script&callback=' + scriptCallback);
  script.setAttribute('id', scriptId);
  script.setAttribute('type', 'text/javascript');
  
  document.getElementsByTagName('head')[0].appendChild(script);
};

mixvi.listVideos = function(queryType, searchTerm, page) {
  mixvi.previousSearchTerm = searchTerm; 
  mixvi.previousQueryType = queryType; 
  var queryUrl = mixvi.QUERY_URL_MAP[queryType];
  if (queryUrl) {
    queryUrl += 'max-results=' + mixvi.MAX_RESULTS_LIST +
        '&format=5&start-index=' + (((page - 1) * mixvi.MAX_RESULTS_LIST) + 1);
    if (searchTerm != '') {
      queryUrl += '&vq=' + encodeURI(searchTerm);
    }
    mixvi.appendScriptTag(queryUrl, 
                         'searchResultsVideoListScript', 
                         'mixvi.listVideosCallback');
    mixvi.updateNavigation(page);
	
  } else {
    alert('Unknown feed type specified');
  }
};

mixvi.userVideos = function(queryType, searchTerm, page) {
  mixvi.previousSearchTerm = searchTerm; 
  mixvi.previousQueryType2 = queryType; 
  var queryUrl = mixvi.QUERY_URL_MAP[queryType];
  if (queryUrl) {
    queryUrl += '/users/';
    if (searchTerm != '') {
      queryUrl += encodeURI(searchTerm) + '/uploads?orderby=updated&max-results=' + mixvi.MAX_RESULTS_LIST +
        '&format=5&start-index=' + (((page - 1) * mixvi.MAX_RESULTS_LIST) + 1);
    }
     mixvi.appendScriptTag(queryUrl, 
                         'searchResultsVideoListScript', 
                         'mixvi.listVideosCallback');
    mixvi.updateNavigation2(page);
   

  } else {
    alert('Unknown feed type specified');
  }
};
mixvi.userPresentVideos = function(queryType, searchTerm, page) {
  mixvi.previousSearchTerm = searchTerm; 
  mixvi.previousQueryType2 = queryType; 
  var queryUrl = mixvi.QUERY_URL_MAP[queryType];
  if (queryUrl) {
    queryUrl += '/users/';
    if (searchTerm != '') {
      queryUrl += encodeURI(searchTerm) + '/uploads?orderby=updated&max-results=' + mixvi.MAX_RESULTS_LIST +
        '&format=5&start-index=' + (((page - 1) * mixvi.MAX_RESULTS_LIST) + 1);
    }
     mixvi.appendScriptTag(queryUrl, 
                         'searchResultsVideoListScript', 
                         'mixvi.listVideosCall');
    mixvi.updateNavigation2(page);
   

  } else {
    alert('Unknown feed type specified');
  }
};

mixvi.PresentVideos = function(queryType, searchTerm, page) {
  mixvi.previousSearchTerm = searchTerm; 
  mixvi.previousQueryType = queryType; 
  var queryUrl = mixvi.QUERY_URL_MAP[queryType];
  if (queryUrl) {
    queryUrl += 'max-results=' + mixvi.MAX_RESULTS_LIST +
        '&format=5&start-index=' + (((page - 1) * mixvi.MAX_RESULTS_LIST) + 1);
    if (searchTerm != '') {
      queryUrl += '&vq=' + encodeURI(searchTerm);
    }
    mixvi.appendScriptTag(queryUrl, 
                         'searchResultsVideoListScript', 
                         'mixvi.listVideosCall');
    mixvi.updateNavigation(page);
	
  } 
};

mixvi.listVideosCall = function(data) {
 
  mixvi.jsonFeed_ = data.feed;
  var div = document.getElementById(mixvi.VIDEO_LIST_CSS_CLASS);
  var targetContainerId = 'mixvi';
  var html = ['<div>'];
  var tit = data.feed.title.$t;
  var total = number_format(data.feed.openSearch$totalResults.$t);
  var items = eval(data.feed.openSearch$itemsPerPage.$t);
  var start =  eval(data.feed.openSearch$startIndex.$t);
  var end = eval( start + items - 1);
  html.push(''+tit+'<br>');
  html.push('Results '+start+' - '+end+' of '+total+'');
  html.push('</div>');
  document.getElementById('videosinfo').innerHTML = html.join('');
  
  var entries = data.feed.entry || [];
  var html = ['<dl class="videos">'];
  
  for (var i = 0; i < entries.length; i++) {
    var targetContainerId = 'mixvi';
    var entry = entries[i];
    var title = entries[i].title.$t;
    var thumbnailUrl = entries[i].media$group.media$thumbnail[0].url;
    var playerUrl = entries[i].media$group.media$content[0].url;

    var vid = (getVideoId(entries[i].link[0].href));
    html.push('<dt><a href="javascript:playVideo(\''+vid+'\',\''+addslashes(title)+'\',\''+targetContainerId+'\',\''+entries[i].author[0].name.$t+'\')">');
	html.push('<img src="',thumbnailUrl,'" width="',mixvi.THUMBNAIL_WIDTH,'" height="',mixvi.THUMBNAIL_HEIGHT,'" onmouseout="mouseOutImage(this)" onmouseover="mousOverImage(this,\'',vid,'\',1)"></a>');
	html.push('<br/>', title.substr(0,37), '</dt>');}
    html.push('</dl><br style="clear: left;"/>');
    document.getElementById(mixvi.VIDEO_LIST_CSS_CLASS).innerHTML = html.join('');


  if (entries.length > 0) {
    loadVideo((getVideoId(entries[0].link[0].href)),addslashes(entries[0].title.$t),targetContainerId,entries[0].author[0].name.$t);
  }
  else if (entries.length == 0) {  
	  loadVideo('Glny4jSciVI','We Are The World','mixvi','wearetheworld');
  }
};

 
function loadVideo(vid,title,containerId,User) {
  swfobject.embedSWF("http://www.youtube.com/v/" + vid + "?version=3&enablejsapi=1&playerapiid=ytplayer&fs=1&rel=0",
  'player', mixvi.PLAYER_WIDESCREEN_WIDTH, mixvi.PLAYER_HEIGHT, '9.0.0', false, false, {allowScriptAccess: 'always',allowfullscreen: 'true'});
  document.getElementById(containerId).innerHTML = eval("YoutubePlayer_cf(vid,title,User)");
  }

function playVideo(vid,title,containerId,User){
	if(document.title)
		document.title = title;
	ytplayer.loadVideoById(vid);
	document.getElementById(containerId).innerHTML = eval("YoutubePlayer_cf(vid,title,User)");
}

function YoutubePlayer_cf(vid,title,User) {
	
	var searchtype = 'channel';
	YoutubePlayer_cfStr = '<font size="3px" color="gray"><b>'+ title +'</b></font></a><br>';
    YoutubePlayer_cfStr += 'Channel:&nbsp;<b><a href="http://mixvi.com/'+ User +'">'+ User +'</b></a>';
	return YoutubePlayer_cfStr;
}


 function getVideoId(url)
		{				
				return url.substring(url.indexOf('=')+1,url.lastIndexOf('&'));
		}

mixvi.listVideosCallback = function(data) {
 
  mixvi.jsonFeed_ = data.feed;
  var div = document.getElementById(mixvi.VIDEO_LIST_CSS_CLASS);
  var targetContainerId = 'mixvi';
  var html = ['<div>'];
  var tit = data.feed.title.$t;
  var total = number_format(data.feed.openSearch$totalResults.$t);
  var items = eval(data.feed.openSearch$itemsPerPage.$t);
  var start =  eval(data.feed.openSearch$startIndex.$t);
  var end = eval( start + items - 1);
  html.push(''+tit+'<br>');
  html.push('Results '+start+' - '+end+' of '+total+'');
  html.push('</div>');
  document.getElementById('videosinfo').innerHTML = html.join('');
  
   while (div.childNodes.length >= 1) {
    div.removeChild(div.firstChild);
  }
  
  var entries =  data.feed.entry || [];
  var html = ['<dl class="videos">'];
  for (var i = 0; i < entries.length; i++) {
    var targetContainerId = 'mixvi';
    var entry = entries[i];
    var title = entries[i].title.$t;
    var thumbnailUrl = entries[i].media$group.media$thumbnail[0].url;
    var playerUrl = entries[i].media$group.media$content[0].url;
    var vid = (getVideoId(entries[i].link[0].href));
    html.push('<dt><a href="javascript:playVideo(\''+vid+'\',\''+addslashes(title)+'\',\''+targetContainerId+'\',\''+entries[i].author[0].name.$t+'\')">');
	html.push('<img src="',thumbnailUrl,'" width="',mixvi.THUMBNAIL_WIDTH,'" height="',mixvi.THUMBNAIL_HEIGHT,'" onmouseout="mouseOutImage(this)" onmouseover="mousOverImage(this,\'',vid,'\',1)"></a>');
	html.push('<br/>', title.substr(0,37), '</dt>');}
    html.push('</dl><br style="clear: left;"/>');
    
	document.getElementById(mixvi.VIDEO_LIST_CSS_CLASS).innerHTML = html.join('');
  
};

mixvi.updateNavigation = function(page) {
  mixvi.nextPage = page + 1;
  mixvi.previousPage = page - 1;
  document.getElementById(mixvi.NEXT_PAGE_BUTTON).style.display = 'inline';
  document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON).style.display = 'inline';
  document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON2).style.display = 'none';
  document.getElementById(mixvi.NEXT_PAGE_BUTTON2).style.display = 'none';
  if (mixvi.previousPage < 1) {
    document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON).disabled = true;
  } else {
    document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON).disabled = false;
  }
  document.getElementById(mixvi.NEXT_PAGE_BUTTON).disabled = false;
};

mixvi.updateNavigation2 = function(page) {
  mixvi.nextPage2 = page + 1;
  mixvi.previousPage2 = page - 1;
  document.getElementById(mixvi.NEXT_PAGE_BUTTON2).style.display = 'inline';
  document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON2).style.display = 'inline';
  document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON).style.display = 'none';
  document.getElementById(mixvi.NEXT_PAGE_BUTTON).style.display = 'none';
  if (mixvi.previousPage2 < 1) {
    document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON2).disabled = true;
  } else {
    document.getElementById(mixvi.PREVIOUS_PAGE_BUTTON2).disabled = false;
  }
  document.getElementById(mixvi.NEXT_PAGE_BUTTON2).disabled = false;
};

function number_format(numstr) {
  var numstr = String(numstr);
  var re0 = /(\d+)(\d{3})($|\..*)/;
  if (re0.test(numstr))
    return numstr.replace(
      re0,
      function(str,p1,p2,p3) { return number_format(p1) + "," + p2 + p3; }
    );
  else
    return numstr;
}

function onPlayerError(errorCode) {
        alert("An error occured of type:" + errorCode);
      }
 
function onYouTubePlayerReady(playerId) {
        ytplayer = document.getElementById("player");
        ytplayer.addEventListener("onError", "onPlayerError");
      }

function addslashes(str) {
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'');
	return str;
}
function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	return str;
}
function HDPlayer() {
        resizePlayer(mixvi.PLAYER_WIDESCREEN_WIDTH, mixvi.PLAYER_HEIGHT);
      }
function HQPlayer() {
        resizePlayer(mixvi.PLAYER_STANDARD_WIDTH, mixvi.PLAYER_HEIGHT);
      }
function resizePlayer(width, height) {
        var playerObj = document.getElementById("player");
        playerObj.height = height;
        playerObj.width = width;
      }

var imname;
var timer;
 
function mousOverImage(name,id,nr){
	if(name)
		imname = name;
	imname.src = "http://img.youtube.com/vi/"+id+"/"+nr+".jpg";
	imname.style.border = 	'3px solid white';
	nr++;
	if(nr > 3)
		nr = 1;
	timer =  setTimeout("mousOverImage(false,'"+id+"',"+nr+");",1000);
 
}
 
function mouseOutImage(name){
 
	if(name)
		imname = name;
	imname.style.border = 	'3px solid #373433';
	if(timer)
		clearTimeout(timer);
 
}

