﻿var YT_Req;
var YT_Resp;

function YT_ShowVideoProperties()
{ 
  var reqData="<video id='0'><request action='getviewerproperties'/></video>";
  YT_MakeRequest(reqData);
  if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){
    document.getElementById("VideoCaptionTextBox").value=YT_Resp.getElementsByTagName("title")[0].childNodes[0].nodeValue;
    document.getElementById("ListVideosCheckbox").checked=(YT_Resp.getElementsByTagName("listVideos")[0].childNodes[0].nodeValue=="true"?true:false);
    document.getElementById("IncludeDescriptionCheckBox").checked=(YT_Resp.getElementsByTagName("includeDescription")[0].childNodes[0].nodeValue=="true"?true:false);
    var mode=YT_Resp.getElementsByTagName("mode")[0].childNodes[0].nodeValue;
    if(mode=="1"){
      document.getElementById("InOrderRadio").checked=true;
      document.getElementById("RandomlyRadio").checked=false;
    }
    else{
      document.getElementById("InOrderRadio").checked=false;
      document.getElementById("RandomlyRadio").checked=true;
    }
    document.getElementById("VideoCaptionLabel").innerHTML="Caption:";
    document.getElementById("VideoCaptionLabel").className="Normal";
    document.getElementById("NoCaptionError").style.display="none";
    YTDLG_ID=YT_ID+"VideoViewerPropertiesDialog";
    YTDLG_PositionBackDrop();
  }
}

function YT_UpdateVideoProperties()
{
  var title=document.getElementById("VideoCaptionTextBox").value.replace(/^\s+|\s+$/g, '');
  var listVideos=document.getElementById("ListVideosCheckbox").checked;
  var includeDescription=document.getElementById("IncludeDescriptionCheckBox").checked;
  var mode=(document.getElementById("InOrderRadio").checked==true?"1":"0");
  if(title==""){
    document.getElementById("VideoCaptionLabel").innerHTML="Caption:*";
    document.getElementById("VideoCaptionLabel").className="NormalRed";
    document.getElementById("NoCaptionError").style.display="inline";
  }
  else{
    var reqData="<video id='0'><request action='updateviewerproperties'/><title><![CDATA["+title+"]]></title><listVideos>"+listVideos+"</listVideos><includeDescription>"+includeDescription+"</includeDescription><mode>"+mode+"</mode></video>";
    YT_MakeRequest(reqData);
    window.location=window.location;
  }  
}

function YT_CancelVideoProperties()
{
  document.getElementById(YT_ID+"VideoViewerPropertiesDialog").style.visibility="hidden";
  document.getElementById(YT_ID+"DialogBackDrop").style.display="none";
}

function YT_ShowVideoManager()
{
  YT_InitialiseForm();
  YT_GetVideoList();
  YTDLG_ID=YT_ID+"ManageVideosDialog";
  YTDLG_PositionBackDrop();
}

function YT_CloseVideoManager()
{
  window.location=window.location;
}

function YT_GetVideoList()
{
  var reqData="<video id='0'><request action='videolist'/></video>";
  YT_MakeRequest(reqData);
  if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){
    var videos=YT_Resp.getElementsByTagName("video");
    if(videos.length==0){
      document.getElementById("NoVideosMessage").style.display="inline";
      document.getElementById("VideoItemContainer").style.display="none";
    }    
    else{
      document.getElementById("NoVideosMessage").style.display="none";
      document.getElementById("VideoItemContainer").style.display="inline";
      document.getElementById("VideoList").innerHTML="";
      for(var i=0;i<videos.length;i++)
      {
        YT_AddVideoToList(videos[i]);
      }
    }    
  }
}

function YT_EditVideoProperties(videoId)
{
  document.getElementById(YT_ID+"VideoItemIdInput").value=videoId;
  var reqData="<video id='"+videoId+"'><request action='get'/></video>";
  YT_MakeRequest(reqData);
  if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){
    document.getElementById("YouTubeVideoReferenceTextBox").value=YT_Resp.getElementsByTagName("videoReference")[0].childNodes[0].nodeValue;
    document.getElementById("VideoTitleTextBox").value=YT_Resp.getElementsByTagName("videoTitle")[0].childNodes[0].nodeValue;
    document.getElementById("VideoDescriptionTextBox").value=YT_Resp.getElementsByTagName("videoDescription")[0].childNodes[0].nodeValue;    
    YT_PopulateTags();
    document.getElementById("DeleteVideoButton").style.display="inline";
    document.getElementById("ResetFormButton").style.display="inline";
    document.getElementById("TagsRow").style.display="inline";
    document.getElementById("AddOrUpdateVideoButton").value="Update";
    YT_ResetLabels();
  }
}

function YT_AddOrUpdateVideo()
{
  var error=false;
  var videoId=document.getElementById(YT_ID+"VideoItemIdInput").value;
  var videoReference=document.getElementById("YouTubeVideoReferenceTextBox").value.replace(/^\s+|\s+$/g, '');
  var videoTitle=document.getElementById("VideoTitleTextBox").value.replace(/^\s+|\s+$/g, '');
  var videoDescription=document.getElementById("VideoDescriptionTextBox").value.replace(/^\s+|\s+$/g, '');
  if(videoReference==""){
    document.getElementById("YouTubeRefLabel").innerHTML="You Tube Reference:*";
    document.getElementById("YouTubeRefLabel").className="NormalRed";
    document.getElementById("NoRefError").style.display="inline";
    error=true;
  }
  if(videoTitle==""){
    document.getElementById("VideoTitleLabel").innerHTML="Video Title:*";
    document.getElementById("VideoTitleLabel").className="NormalRed";
    document.getElementById("NoTitleError").style.display="inline";
    error=true;
  }
  if(!error){
    var reqData="<video id='"+videoId+"'><request action='addupdate'/><videoReference><![CDATA["+videoReference+"]]></videoReference><videoTitle><![CDATA["+videoTitle+"]]></videoTitle><videoDescription><![CDATA["+videoDescription+"]]></videoDescription></video>"
    YT_MakeRequest(reqData); 
    if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){      
      YT_InitialiseForm();
      var video=YT_Resp.getElementsByTagName("video")[0];
      YT_AddVideoToList(video);
      document.getElementById("NoVideosMessage").style.display="none";
      document.getElementById("VideoItemContainer").style.display="inline";      
    }
  }
}

function YT_DeleteVideo()
{  
  var videoId=document.getElementById(YT_ID+"VideoItemIdInput").value;
  var reqData="<video id='"+videoId+"'><request action='delete'/></video>";
  YT_MakeRequest(reqData);
  if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){
    var videoRow=document.getElementById("videoRow"+videoId);
    var parent=videoRow.parentNode;
    parent.removeChild(videoRow);
    if(parent.childNodes.length==0){
      document.getElementById("NoVideosMessage").style.display="inline";
      document.getElementById("VideoItemContainer").style.display="none";
    }
  } 
  YT_InitialiseForm();
}

function YT_AssociateOrDisassociateVideo(videoId,checked)
{
  var reqData="<video id='"+videoId+"'><request action='associate' data='"+checked+"'/></video>";
  YT_MakeRequest(reqData);
  if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){
    var videoRowCells=document.getElementById("videoRow"+videoId).getElementsByTagName("span");
    videoRowCells[3].getElementsByTagName("input")[0].disabled=!checked;
    videoRowCells[3].getElementsByTagName("input")[0].checked=checked;
  }
}

function YT_EnableOrDisableVideo(videoId,checked)
{
  var reqData="<video id='"+videoId+"'><request action='disable' data='"+checked+"'/></video>";
  YT_MakeRequest(reqData);
}

function YT_AddVideoToList(video)
{
  var videoId=video.getElementsByTagName("videoId")[0].childNodes[0].nodeValue; 
  var container=document.getElementById("VideoList");
  var rowSpan=null;
  var newRow=false;
  for(var i=0;i<container.childNodes.length;i++)
  {
    if(container.childNodes[i].id=="videoRow"+videoId)
    {
      rowSpan=container.childNodes[i];
      break;
    }
  }
  if(rowSpan==null)
  {
    rowSpan=document.createElement("span");
    rowSpan.className="GridRow";
    rowSpan.id="videoRow"+videoId;  
    newRow=true;
  }
  else
  {
    rowSpan.innerHTML="";
  }
  var dateSpan=document.createElement("span");
  dateSpan.className="Column1";
  var dateLink=document.createElement("a");
  dateLink.href="#";
  dateLink.innerHTML=video.getElementsByTagName("dateAdded")[0].childNodes[0].nodeValue;  
  dateLink.onclick=function YT_EditVid(){YT_EditVideoProperties(videoId);return(false);};
  dateSpan.appendChild(dateLink);
  rowSpan.appendChild(dateSpan);
  var titleSpan=document.createElement("span");
  titleSpan.className="Column2";
  var titleLink=document.createElement("a");
  titleLink.href="#";
  titleLink.innerHTML=video.getElementsByTagName("videoTitle")[0].childNodes[0].nodeValue;  
  titleLink.onclick=function YT_EditVid(){YT_EditVideoProperties(videoId);return(false);};
  titleSpan.appendChild(titleLink);
  rowSpan.appendChild(titleSpan);
  var onThisPage=(video.getElementsByTagName("onThisPage")[0].childNodes[0].nodeValue=="true"?true:false);
  var onThisPageSpan=document.createElement("span");
  onThisPageSpan.className="Column3";
  var onThisPageCheckBox=document.createElement("input");
  onThisPageCheckBox.type="checkbox";
  onThisPageCheckBox.onclick=function YT_Associate(){YT_AssociateOrDisassociateVideo(videoId,this.checked);};
  onThisPageSpan.appendChild(onThisPageCheckBox);
  onThisPageSpan.getElementsByTagName("input")[0].checked=onThisPage;
  rowSpan.appendChild(onThisPageSpan);
  var enabled=(video.getElementsByTagName("enabled")[0].childNodes[0].nodeValue=="true"?true:false);
  var enabledSpan=document.createElement("span");
  enabledSpan.className="Column4";
  var enabledCheckBox=document.createElement("input");
  enabledCheckBox.type="checkbox";
  enabledCheckBox.onclick=function YT_Enable(){YT_EnableOrDisableVideo(videoId,this.checked);};
  enabledSpan.appendChild(enabledCheckBox);
  enabledSpan.getElementsByTagName("input")[0].checked=enabled;
  enabledSpan.getElementsByTagName("input")[0].disabled=!onThisPage;
  rowSpan.appendChild(enabledSpan);
  if(newRow)
  {
    container.appendChild(rowSpan);
  }  
}

function YT_AddTags()
{
  var videoId=document.getElementById(YT_ID+"VideoItemIdInput").value;
  var reqData="<video id='"+videoId+"'><request action='addtags'/><tags><![CDATA["+document.getElementById("TagsTextBox").value+"]]></tags></video>";
  YT_MakeRequest(reqData);
  if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){
    YT_PopulateTags();
  }  
  document.getElementById("TagsTextBox").value="";
}

function YT_DeleteTag(tag)
{
  var videoId=document.getElementById(YT_ID+"VideoItemIdInput").value;
  var reqData="<video id='"+videoId+"'><request action='deletetag'/><tag><![CDATA["+tag+"]]></tag></video>";
  YT_MakeRequest(reqData);
  if(YT_Resp&&YT_Resp.getElementsByTagName("error").length==0){
    YT_PopulateTags();
  }    
}

function YT_PopulateTags()
{
  var tags=YT_Resp.getElementsByTagName("tag");
  var tagContainer=document.getElementById("TagContainer");
  tagContainer.innerHTML="";
  if(tags.length==0){
    tagContainer.style.display="none";
  }
  else{
    for(var i=0;i<tags.length;i++){
      var tagWord=tags[i].childNodes[0].nodeValue;
      var columnSpan=document.createElement("span");
      columnSpan.className="Column";
      var delButton=document.createElement("img");
      delButton.src=YT_DeleteGif;
      delButton.title="Remove the tag '"+tagWord+"'"
      delButton.i_value=tagWord;
      delButton.onclick=function YT_DelTag(){YT_DeleteTag(this.i_value);};
      columnSpan.appendChild(delButton);
      var tagSpan=document.createElement("span");
      tagSpan.className="Normal";
      tagSpan.innerHTML=tagWord;
      columnSpan.appendChild(tagSpan);
      tagContainer.appendChild(columnSpan);
    }
    tagContainer.style.display="inline";
  }
}

function YT_InitialiseForm()
{
  document.getElementById("YouTubeVideoReferenceTextBox").value="";
  document.getElementById("VideoTitleTextBox").value="";
  document.getElementById("VideoDescriptionTextBox").value="";
  document.getElementById("DeleteVideoButton").style.display="none";
  document.getElementById("ResetFormButton").style.display="none";
  document.getElementById("TagsRow").style.display="none";
  document.getElementById("AddOrUpdateVideoButton").value="Add";
  document.getElementById(YT_ID+"VideoItemIdInput").value="0";  
  YT_ResetLabels();
}

function YT_ResetLabels()
{
  document.getElementById("YouTubeRefLabel").innerHTML="You Tube Reference:";
  document.getElementById("YouTubeRefLabel").className="Normal";
  document.getElementById("NoRefError").style.display="none";
  document.getElementById("VideoTitleLabel").innerHTML="Video Title:";
  document.getElementById("VideoTitleLabel").className="Normal";
  document.getElementById("NoTitleError").style.display="none";
}

function YT_MakeRequest(reqData)
{
  YT_Req=null;
  if(window.XMLHttpRequest){
    YT_Req = new XMLHttpRequest();
  }
  else {
    if(window.ActiveXObject){
      YT_Req = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else{
      if(window.ActiveXObject){
        YT_Req = new ActiveXObject("Msxml2.XMLHTTP");
      }
    }
  }
  if(YT_Req){
    YT_Req.open("POST",window.location, false);
    YT_Req.setRequestHeader('Content-Type', "text/xml-yt");   
    YT_Req.send(reqData);
    if(YT_Req.readyState==4)
    {    
      try{
        YT_Resp=new ActiveXObject("Microsoft.XMLDOM");
        YT_Resp.async=false;
        if(YT_Req.status==200){
          if(YT_Req.responseText!=""){
            YT_Resp.loadXML(YT_Req.responseText);
          }
          else{
            YT_Resp.loadXML("<success />");
          }
        }
        else{
          YT_Resp.loadXML("<error />");
        }
      }
      catch(e){
        try{      
          parser=new DOMParser();
          if(YT_Req.status==200){
            if(YT_Req.responseText!=""){
              YT_Resp=parser.parseFromString(YT_Req.responseText,"text/xml");
            }
            else{
              YT_Resp=parser.parseFromString("<success />","text/xml");
            }          
          }
          else{
            YT_Resp=parser.parseFromString("<error />","text/xml");
          }
        }
        catch(e){
          YT_Resp=null;
        }          
      }
    }
  }
}