/**********************************
*   QuickList Extends Playlist   *
**********************************/
window['videa']['classes']['QuickList'] = function() {
  var me = this;
  this.classname = "QuickList";
  var contdiv = null;
  me.rendered = false;
  me.shuffle = false;
  me.loop = false;
  me.playInProgress = false;
  me.vcodePlaying = null;
  me.history = new Array();
  me.loadMode = 0;
  videos = {};
}

window['videa']['classes']['QuickList'].inheritsFrom(window['videa']['classes']['Playlist']);

window['videa']['classes']['QuickList'].prototype.init = function() {
  var me = this;
  me.quickListChanged = new videa.Event(me);
  me.quickListVideoChanged = new videa.Event(me);
  me.listChanged.addhandler(me.onListChanged, me);
  me.videoRemoved.addhandler(me.onVideoRemoved, me);
  var vcodelist = new Array();
  var cookiestr = getCookie("quicklist");
  if (cookiestr) {
    var nandl = cookiestr.split("#");
    me.setName(nandl[0]);
    var _vcodes = nandl[1].split(",");
    for (var i=0; i<_vcodes.length; i++) {
      if (_vcodes[i] && _vcodes[i] != "") vcodelist.push(_vcodes[i]);
    }
    me.shuffle = (parseInt(nandl[2]) == 1);
    me.loop = (parseInt(nandl[3]) == 1);
    me.playInProgress = (parseInt(nandl[4]) == 1);
    me.create(vcodelist);
  }
  me.history = new Array();
  var cookiestr = getCookie("quicklist_history");
  if (cookiestr) {
    var _vcodes = cookiestr.split(",");
    for (var i=0; i<_vcodes.length; i++) {
      if (_vcodes[i] && _vcodes[i] != "") me.history.push(_vcodes[i]);
    }
  }
}

window['videa']['classes']['QuickList'].prototype.onListChanged = function(sender) {
  var me = this;
  me.saveQLCookie();
  me.getVideosData();
}

window['videa']['classes']['QuickList'].prototype.onVideoRemoved = function(sender, args) {
  var me = this;
  /*
  var divs = getElementsByClassName("play_add");
  for (var i=0; i<divs.length; i++) {
    var div = divs[i];
    var str = div.onclick.toString();
    if (str.indexOf(args) > -1) {
      //remove next sibling
      div.style.display = "block";
      alert(args);
    }
  }
  */
}

window['videa']['classes']['QuickList'].prototype.saveQLCookie = function() {
  var me = this;
  var cookiestr = "";
  for (var i=0; i<me.order.length; i++) {
    if (cookiestr != "") cookiestr += ",";
    cookiestr += me.order[i];
  }
  var shuffleValue = me.shuffle?1:0;
  var loopValue = me.loop?1:0;
  var playInProgressValue = me.playInProgress?1:0;
  setCookie("quicklist", me.getName() + "#" + cookiestr + "#" + shuffleValue + "#" + loopValue + "#" + playInProgressValue, null, "/");
}

window['videa']['classes']['QuickList'].prototype.addToHistory = function(vcode) {
  var me = this;
  for (var i=0; i<me.history.length; i++) {
    if (me.history[i] == vcode)  return;
  }
  me.history.push(vcode);
  me.saveQLHistoryCookie();
}

window['videa']['classes']['QuickList'].prototype.saveQLHistoryCookie = function() {
  var me = this;
  var cookiestr = "";
  for (var i=0; i<me.history.length; i++) {
    if (cookiestr != "") cookiestr += ",";
    cookiestr += me.history[i];
  }
  setCookie("quicklist_history", cookiestr, null, "/");
}

window['videa']['classes']['QuickList'].prototype.loadandplay = function(name, vcodelist, videourl) {
  var me = this;
  me.order = vcodelist;
  me.setName(name);
  me.saveQLCookie();
  me.play(videourl);
}

window['videa']['classes']['QuickList'].prototype.play = function(videourl, vcode) {
  var me = this;
  me.playInProgress = true;
  me.saveQLCookie();
  me.history = new Array();
  me.saveQLHistoryCookie();
  if (me.loadMode == 0) {
    top.location = videourl + "?play=1";
  } else {
    me.jumpTo(vcode);
  }
}

window['videa']['classes']['QuickList'].prototype.getNextVideo = function() {
  var me = this;
  if (!me.playInProgress) return null;
  var i = 0;
  while (i<me.order.length && me.order[i] != me.vcodePlaying) i++;
  var j = 0;
  while (j<me.history.length && me.history[j] != me.vcodePlaying) j++;
  var videosToPlay = new Array();
  for (var k=0; k<me.order.length; k++) {
    var l = 0;
    while (l < me.history.length && me.history[l] != me.order[k]) l++;
    if (l >= me.history.length) videosToPlay.push(me.order[k]);
  }
  var playMode = (me.shuffle?10:0);
  playMode += (me.loop?1:0);
  switch (playMode) {
    case 1:
      if (i == (me.order.length -1)) {
        return videos[me.order[0]];
      }
    case 0:
      if (i < (me.order.length - 1)) {
        return videos[me.order[i+1]];
      }
      return null;
    case 11:
      if (videosToPlay.length == 0) {
        if (j == (me.history.length - 1)) {
          return videos[me.history[0]];
        } else {
          return videos[me.history[j+1]];
        }
      }
    case 10:
      if (videosToPlay.length > 0) {
        return videos[videosToPlay[Math.floor(Math.random() * videosToPlay.length)]];
      }
      return null;
  }
}

window['videa']['classes']['QuickList'].prototype.jumpTo = function(vcode) {
  var me = this;
  var i = 0;
  while (i<me.order.length && me.order[i] != vcode) i++;
  if (i < me.order.length) {
    me.vcodePlaying = vcode;
    me.addToHistory(vcode);
    me.quickListChanged.raise();
    me.quickListVideoChanged.raise(videos[me.order[i]].vcode);
  }
}

window['videa']['classes']['QuickList'].prototype.getVideosData = function(req) {
  var me = this;
  if (!req) req = {};
  //ha AJAX requestbol tertunk vissza, akkor dolgozzuk fel a visszakapott json adatokat
  if (req && req.json) {
    var resp = req.json;
    if (resp.response.code != 0) {
      alert("Nem sikerült lekérni a gyorslista videóinak adatait!");
      me.clear();
      return false;
    }
    var v = resp.response.videos;
    for (var i=0; i<v.length; i++) {
      videos[v[i].vcode] = new Video(v[i]);
    }
    req._callback = req.params.callback;
    me = req.params.callbackObj;
  }
  //ha nincs renderelve a lista, felesleges tovabb foglalkozni vele
  if (!me.rendered) return;
  //megvizsgaljuk, hogy hianyoznak-e valamelyik listaban szereplo video adatai, es ha igen, elkuldjuk az AJAX requestet
  var data = "";
  for (var i=0; i<me.order.length; i++) {
    if (videos[me.order[i]] == null) {
      if (data != "") data += "&";
      data += "vcode[]=" + me.order[i];
    }
  }
  if (data != "") {
    data = "cmd=getvideosdata&" + data;
    var _req = videa.AJAX.newRequest();
    _req.send("/ajaxinterface.php?cmd=getvideosdata", me.getVideosData, {"reqparams":data,"callback":req._callback,"callbackObj":me});
  } else {
    me.quickListChanged.raise();
    if (req._callback) req._callback.call(me);
  }
}

