// Trigger system
function startUpdateOnlineStatus() {
  if (!stopUpdateOnlineStatus) {
    updateOnlineStatus();
    handleUpdateOnlineStatus = window.setTimeout("startUpdateOnlineStatus()",globalUpdateOnlineInterval);
    $('#monitor_triggerOnlineStatus').html('handleUpdateOnlineStatus: ' + handleUpdateOnlineStatus);
  }
}
function stopTrigger(trigger) {
  switch (trigger) {
    case 'updateOnlineStatus':
      stopUpdateOnlineStatus = true;
      window.clearTimeout(handleUpdateOnlineStatus);
      if (globalDebugMode) {
          alert('trigger ' + trigger + ':' + handleUpdateOnlineStatus + ' stopped');
      }
      break;
  }
}

// Online status
function updateOnlineStatus() {
  try {
    return $.ajax({
      type: "GET",
      url: globalWWWRoot + "webservice/ajax_status.php",
      data: "action=get_status&mountpoint_id=4",
      dataType: "json",
      async: false,
      success: function(json){
        if (json.error.status == false ) {
          // Si el estado ha cambiado hay que actualizar cosas
          if (globalOnlineStatus != json.data.on_air) {
            // si hemos cambiado de offline a online hay que adaptar el ancho y el alto del player
            if (json.data.on_air) {
              globalPlayerWidth = json.data.width;
              globalPlayerHeight = json.data.height; 
            }
            setOnlineStatus(json.data.on_air);
            updatePlayer();
          }
        } else {
          setErrorMessage(json.error.message);
          if (updateOnlineStatus) {
            stopTrigger('updateOnlineStatus');
          }
					return false;
        }
      },
      error:  function(msg){
        setErrorMessage('ajax.error: ' + msg);
        if (updateOnlineStatus) {
          stopTrigger('updateOnlineStatus');
        }
		return false;
      }
    });
  } catch(error) {
    setErrorMessage('getOnlineStatus.error: ' + error);
    if (updateOnlineStatus) {
      stopTrigger('updateOnlineStatus');
    }
    return false;
  }
}
function setOnlineStatus (value) {
  globalOnlineStatus = value;
  $('#monitor_onlineStatus').html('onlineStatus: ' + value);
}

// Java Support
function displayJavaInstall() {
  var message ="Parece que no tienes el plugin de Java para tu navegador instalado.<br />" +
      "Para ver los programas de coclea.tv en directo es inprescindible tener instalado este plug-in.<br />" +
      "Te lo podrás descargar en esta página <a href=\""+javaDownLoadURL+"\" onclick=\"openUrl(\""+javaDownLoadURL+"\"); return false\">"+javaDownLoadURL+"</a>" +
	$('#messageBoxContent').html(message);
  $('#messageBox').show();

}
function handleJavaSupport() {
  if (globalDebugMode) {
    alert('handleJavaSupport');
  }
	if (globalJavaSupport == 0) {
		displayJavaInstall();
	}
}

// Flash Player
function displayFlashPlayer (programId, data) {
  if (globalFlashPlayerLoaded) {
    flashPlayerUnload();
  }
  if (globalCortadoLoaded) {
    cortadoStop();
    cortadoUnload();
  }
  if (programId == 0) { // mode playlist
    // var flashvars = 'file='+file+'&playlist=bottom&playlistsize='+playlistsize+'&autostart=true&repeat=always';
    // height = height + playlistsize;
    // var file = globalWWWRoot + 'inc/mediaplayer/playlist.xml';
    var file = globalWWWRoot + 'inc/mediaplayer/generate_playlist.php';
    var width = 512;
    var height = 288;
    var flashvars = 'file='+file+'&amp;autostart=true&amp;repeat=always&amp;shuffle=true&amp;streamer=/xmoov.php&amp;skin='+ globalWWWRoot + 'inc/js/schoon.swf';
  } else { // mode single file
    if (typeof data.files != 'undefined' && typeof data.files[2] != 'undefined' ) {
    // var file = globalWWWRoot + 'streaming_dev/video/' + data.files[2].file_name;
      var file = data.files[2].file_name;
      var width = data.files[2].file_width;
      var height = data.files[2].file_height;
      var flashvars = 'file='+file+'&amp;autostart=false&amp;streamer=/xmoov.php&amp;skin='+ globalWWWRoot + 'inc/js/schoon.swf';
    }
  }
  var so = new SWFObject('./inc/js/player.swf','mpl',width,height,'9');
  so.addParam('allowfullscreen','true');
  so.addParam('allowscriptaccess','always');
  so.addParam('wmode','opaque');
  so. addParam('flashvars',flashvars);
  so.addVariable('plugins', 'gapro-1');
  so.addVariable('gapro.accountid', 'UA-11155212-2');
  so.addVariable('gapro.tracktime', 'true');
  so.write('flashPlayer');
  $('#flashPlayerContainer').show();
  globalFlashPlayerLoaded = true;
}
function initFlashPlayer(programId) {
  if (programId != 0) {
    try {
      return $.ajax({
        type: "GET",
        url: globalWWWRoot + "webservice/veure.php",
        data: "action=get_programa&program_id="+programId,
        dataType: "json",
        async: true,
        success: function(json){
          if (json.error.status == false ) {
            $('#flashPlayer').html('<img src="./img/loadingAnimation.gif" alt="Carregant flashPlayer ..." />');
            displayFlashPlayer(programId,json.data);
            updateMetaData(programId);
            // scrollToVideo(programId);
          } else {
            setErrorMessage(json.error.message);
          }
        },
        error:  function(msg){
          setErrorMessage('initFlashPlayer: ajax.error: ' + msg);
          return false;
        }
      });
    } catch(error) {
      setErrorMessage('initFlashPlayer.error: ' + error);
      return false;
    }
  } else {
    var data = new Array();
    displayFlashPlayer(programId, data);
  }
}
function flashPlayerUnload() {
  $('#flashPlayer').html('<!-- flashPlayer unloaded -->');
  $('#flashPlayerContainer').hide();
  globalFlashPlayerLoaded = false;
}    

// Cortado Player
function cortadoPlay() {
  try {
    document.applets[0].doPlay();
  } catch (e) {
    setErrorMessage('cortadoPlay error: ' + e);
  }
}
function cortadoPause() {
  try {
    document.applets[0].doPause();
  } catch (e) {
    setErrorMessage('cortadoPause error: ' + e);
  }
}
function cortadoStop() {
  try {
    document.applets[0].doStop();
  } catch (e) {
    setErrorMessage('cortadoStop error: ' + e);
  }
}
function cortadoRestart() {
  try {
    document.applets[0].doStop();
    document.applets[0].doPlay();
  } catch (e) {
    setErrorMessage('cortadoRestart error: ' + e);
  }
}

function cortadoUnload() {
  $('#cortadoPlayer').html('<!-- cortado unloaded -->');
  $('#cortadoPlayerContainer').hide();
  globalCortadoLoaded = false;
}    
function initCortadoPlayer (url, width, height, metaDataId) {
  if (!globalJavaSupport)  {
    // Hay un programa online pero el navegador NO tiene Java instalado
    // reproduce playlist de la mediabase con flash player
    // y lanza un aviso
		if (globalDebugMode) {
			alert('online && !java: auto play flash + error');
    }
    initFlashPlayer(0);  
  } else {
  
    var applet = '<applet codebase="'+ globalWWWRoot + 'inc/cortado" code="com.fluendo.player.Cortado.class" archive="cortado_url.jar" id="cortado" height="'+height+'" width="'+width+'"><param name="bufferSize" value="800"><param name="statusHeight" value="16"><param name="url" value="'+url+'"><param name="video" value="true"><param name="audio" value="true"><param name="live" value="true"><param name="seekable" value="false"><param name="autoplay" value="true"><param name="codebase_lookup" value="false"></applet>';
    if (globalDebugMode) {
      alert('online && java: auto play cortado');
    }
    updateMetaData(metaDataId);
    scrollToVideo(metaDataId);
    
    if (globalFlashPlayerLoaded) {
      flashPlayerUnload();
    }
    $('#flashPlayerContainer').hide();
    $('#cortadoPlayer').html(applet);
    $('#live').hide();
    $('#cortadoPlayerContainer').show();
    cortadoRestart();
    globalCortadoLoaded = true;
  }
}

// Player general
function setMetaData(metaData) {
  $('#programName').html(metaData.container_name);
  $('#programTitle').html(metaData.program_title);
  $('#programDescription').html(metaData.program_i18n_description + "<br />" + "");
  $('#programDownloads').html(metaData.download_links + "<br />" + "");
}
function updateMetaData(metaDataId) {
  if (metaDataId) {
    try {
      $.ajax({
        type: "GET",
        url: globalWWWRoot + "webservice/ajax_program.php",
        data: "action=get&program=" + metaDataId,
        dataType: "json",
        success: function(json){
          if (json.error.status == false ) {
            setMetaData(json.data);
          } else {
            setErrorMessage('updateMetaData('+metaDataId+').error ' + json.error.message);
          }
        },
        error:  function(msg){
          setErrorMessage('ajax.error: ' + msg);
        }
      });  
     } catch (error) {
      setErrorMessage('updateMetaData('+metaDataId+').error: ' + error);
    }
  } else {
    $('#programName').html('<!-- program name unloaded -->');
    $('#programTitle').html('<!-- program Title unloaded -->');
    $('#programDescription').html('<!-- program Description unloaded -->');
    $('#programDownloads').html('<!-- program Downloads unloaded -->');
    
  }
}

function updatePlayer() {
  if (globalOnlineStatus == 1) {
    initCortadoPlayer('http://coclea.tv:8000/coclea.ogg', globalPlayerWidth, globalPlayerHeight, 0);
    $('#live').show();
  } else {
    initFlashPlayer(0);
  }
}

//
// Mediabase navegacion Categorias, Subcategorias, etc.
// 

function set_programas_2 (data) {
  $('div.scrollable2 div.items').empty();
  $(data).each (
    function (i, val) {
      if (typeof val.files != 'undefined' && typeof val.files[4] != 'undefined') {
        $('div.scrollable2 div.items').append('<div id="scroll2_'+val.program_id+'"><img src="'+globalWWWRoot + 'streaming_dev/thumbnails/'+val.files[4].file_name+'" alt="thumb" title="'+val.program_title+'" width="128" /></div>');
      } else {
        $('div.scrollable2 div.items').append('<div id="scroll2_'+val.program_id+'"><img src="'+globalWWWRoot + 'streaming_dev/thumbnails/nopreview.png" alt="no preview" title="'+val.program_title+'" width="128" /></div>');
      }
      
    }
  );
  // init_scrollable();
  api2 = $("div.scrollable2").scrollable({
        next: 'a.next2', 
        prev: 'a.prev2',
        navi: 'div.navi2',
        api: true,
        size: 3
  });
  api2.reload();
  $("div.scrollable2 div.items div").click(function() { 
    var parts = $(this).attr('id').split("_");
    var id = parts[1];
    initFlashPlayer(id);
  }); 
}

function set_programas (data) {
  $('div.scrollable2 div.items').empty();
  $(data).each (
    function (i, val) {
      $('div.scrollable2 div.items').append('<div id="scroll2_'+val.program_id+'"><img src="'+globalWWWRoot + 'streaming_dev/thumbnails/'+val.files[4].file_name+'" alt="thumb" title="'+val.program_title+'" width="128" /></div>');
    }
  );

  // init_scrollable();
  api2 = $("div.scrollable2").scrollable({
        next: 'a.next2', 
        prev: 'a.prev2',
        navi: 'div.navi2',
        api: true
  });

  api2.reload();
  api2.click(0);

  $("div.scrollable2 div.items div").click(function() { 
    var parts = $(this).attr('id').split("_");
    var id = parts[1];
    initFlashPlayer(id);
  }); 
}

function update_programas (subCategoriaId) {
  if (api2  != null ) {
    api2.seekTo(0);
    api2.click(0);
  }
  $('div.scrollable2 div.items').html('<img src="./img/loadingAnimation.gif" alt="Carregant programes ..." />');

  try {
    return $.ajax({
      type: "GET",
      url: globalWWWRoot + "webservice/veure.php",
      data: "action=get_programas&sub_categoria_id="+subCategoriaId,
      dataType: "json",
      async: false,
      success: function(json){
        if (json.error.status == false ) {
          set_programas_2(json.data);
        } else {
          setErrorMessage(json.error.message);
        }
      },
      error:  function(msg){
        setErrorMessage('ajax.error: ' + msg);
				return false;
      }
    });
  } catch(error) {
    setErrorMessage('update_programas.error: ' + error);
    return false;
  }
}


function set_sub_categorias (data) {
  $('div.scrollable1 div.items').empty();
  $(data).each (
    function (i, val) {
      $('div.scrollable1 div.items').append('<div id="scroll1_'+val.sub_categoria_id+'">'+val.sub_categoria_name+'</div>');
      globalSubCategorias[i] = val.sub_categoria_id;
    }
  );

  api1 = $("div.scrollable1").scrollable({
        next: 'a.next1', 
        prev: 'a.prev1',
        navi: 'div.navi1',
        api: true,
        size: 3
  });  
  api1.reload();
  api1.click(0);

  update_programas(globalSubCategorias[0]);
  
  $("div.scrollable1 div.items div").click(function() { 
    // perform the effect
    var parts = $(this).attr('id').split("_");
    var id = parts[1];
    update_programas(id);
  });
}

function update_sub_categorias (categoriaId) {
  if (api1  != null ) {
    api1.seekTo(0);
    api1.click(0);
  }

  $('div.scrollable1 div.items').html('<img src="./img/loadingAnimation.gif" alt="Carregant subcategories ..." />');

  try {
    return $.ajax({
      type: "GET",
      url: globalWWWRoot + "webservice/veure.php",
      data: "action=get_sub_categorias&categoria_id="+categoriaId,
      dataType: "json",
      async: false,
      success: function(json){
        if (json.error.status == false ) {
          set_sub_categorias(json.data);
        } else {
          setErrorMessage(json.error.message);
        }
      },
      error:  function(msg){
        setErrorMessage('ajax.error: ' + msg);
				return false;
      }
    });
  } catch(error) {
    setErrorMessage('update_sub_categorias.error: ' + error);
    return false;
  }

}

function set_categorias (data) {
  $('div.scrollable0 div.items').empty();
  $(data).each (
    function (i, val) {
      globalCategorias[i] = val.categoria_id;
      $('div.scrollable0 div.items').append('<div id="scroll0_'+val.categoria_id+'">'+val.categoria_name+'</div>');
    }
  );

  // init_scrollable();
  api0 = $("div.scrollable0").scrollable({
        next: 'a.next0', 
        prev: 'a.prev0',
        navi: 'div.navi0',
        api: true,
        size: 3
  }); 
  api0.reload();
  api0.click(0);
  
  update_sub_categorias(globalCategorias[0]);
  
  $("div.scrollable0 div.items div").click(function() { 
    // perform the effect
    var parts = $(this).attr('id').split("_");
    var id = parts[1];
    update_sub_categorias(id);
  });

}

function update_categorias() {
  if (api0 != null ) {
    api0.seekTo(0);
    api0.click(0);
  }

  $('div.scrollable0 div.items').html('<img src="./img/loadingAnimation.gif" alt="Carregant categories ..." />');
  try {
    return $.ajax({
      type: "GET",
      url: globalWWWRoot + "webservice/veure.php",
      data: "action=get_categorias",
      dataType: "json",
      async: false,
      success: function(json){
        if (json.error.status == false ) {
          set_categorias(json.data);
        } else {
          setErrorMessage(json.error.message);
        }
      },
      error:  function(msg){
        setErrorMessage('ajax.error: ' + msg);
      }
    });
  } catch(error) {
    setErrorMessage('update_categorias.error: ' + error);
  }
}
function var_dump(obj) {
   if(typeof obj == "object") {
      return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
   } else {
      return "Type: "+typeof(obj)+"\nValue: "+obj;
   }
}

function scrollToVideo(program_id) {
  // disable this temporarily
  if (program_id) {
	    try {
	      $.ajax({
	        type: "GET",
        url: globalWWWRoot + "webservice/ajax_program.php",
        data: "action=get&program=" + program_id + '&program_categorias=true',
        dataType: "json",
        success: function(json){
          if (json.error.status == false ) {
        	  api0.reload();
        	  api0.seekTo(json.data.categoria_index);
        	  api0.click(json.data.categoria_index);
        	  update_sub_categorias(json.data.categoria_id);

        	  api1.reload();
        	  api1.seekTo(json.data.sub_categoria_index);
        	  api1.click(json.data.sub_categoria_index);
        	  update_programas(json.data.sub_categoria_id);
        	  
        	  api2.reload();
            api2.seekTo(json.data.program_index);
        	  api2.click(json.data.program_index);
          } else {
            setErrorMessage('scrollToVideo('+ program_id +').error: ' + json.error.message);
          }
        },
        error:  function(msg){
          setErrorMessage('scrollToVideo('+ program_id +') ajax.error: ' + msg);
        }
      });  
     } catch (error) {
      setErrorMessage('scrollToVideo('+ program_id +').error: ' + error);
    }
  } else {
	  var error = 'El parámetro program_id no puede estar vacio'; 
      setErrorMessage('scrollToVideo('+ program_id +').error: ' + error);
  }
}

function itemMonitor(obj) {
  $('#debugMsg').append('itemMonitor:<br/>');
  try {
    currentItem = obj.index;
  } catch (e) {
    setErrorMessage('itemMonitor: ' + e);
    $('#debugMsg').append('itemMonitor: '+ e +'<br/>');
  }
};


function stateMonitor (obj) {
  try {
    if(obj.newstate == 'PLAYING') {
      var metaDataId = player.getPlaylist()[currentItem]['title'];
      var title = player.getPlaylist()[currentItem]['title'];
      if ((metaDataId != 0) && (typeof metaDataId != "undefined")) {
    	  scrollToVideo(metaDataId);
    	  updateMetaData(metaDataId);
      }
    }
  } catch (e) {
    setErrorMessage('stateMonitor: ' + e);
    $('#debugMsg').append('stateMonitor: '+ e +'<br/>');
  }
}

function playerReady(obj) {
  try {
    if (player = document.getElementById(obj.id)) {
      $('#debugMsg').append('playerReady: Player_id' + obj.id + '<br/>');
      //  player.addControllerListener("ITEM","playListItemTracker"); 
      player.addControllerListener('ITEM', 'itemMonitor');
      player.addModelListener('STATE', 'stateMonitor');
    } else {
      $('#debugMsg').append('playerReady: no Player<br/>');
    }
  } catch (e) {
    setErrorMessage('playerReady: ' + e);
    $('#debugMsg').append('playerReady: '+ e +'<br/>');
  }
  
};
