﻿var YT_Dialog;
var YT_TagDialog;
var YT_TagLibraryDlg;
var YT_VideoId;
var YT_VideoNode;
var YT_ModuleId;
var YT_Changes;
var YT_TagLibId;
var YT_TagLibNode;

function YT_Initialise()
{
  var parent=document.getElementById("VideoPlayer");
  if(parent!=null)
  {
    var width=parent.offsetWidth;
    var height=width*.875;
    var params={allowScriptAccess:"always"};
    var atts={id:"VideoPlayer"};  
    swfobject.embedSWF("http://www.youtube.com/v/"+YT_CurrVideoId+"&enablejsapi=1&playerapiid=ytplayer", "VideoPlayer", width, height, "8", null, null, params, atts);
  }
}
function onYouTubePlayerReady(playerId) 
{
  if(YT_AutoPlay)
  {
    ytplayer=document.getElementById("VideoPlayer");
    if(ytplayer)
    {
      ytplayer.playVideo();
    }
  }
}
function YT_StopVideo()
{
  ytplayer=document.getElementById("VideoPlayer");    
  if(ytplayer&&ytplayer.nodeName=="OBJECT")
  {
    var parent=ytplayer.parentNode;
    try
    {
      ytplayer.stopVideo();
    }
    catch(e){}
    parent.removeChild(ytplayer);
    var div=document.createElement("div");
    div.id="VideoPlayer";
    div.innerHTML="&#160;";
    if(parent.childNodes.length>0)
    {
      parent.insertBefore(div,parent.childNodes[0]);
    }
    else
    {
      parent.appendChild(div);
    }
  }
}
function YT_ManageVideos(moduleId)
{
  YT_StopVideo();
  __ReqMade=false;
  YT_Changes=false;
  YT_VideoId="";
  YT_VideoNode=null;
  YT_ModuleId=moduleId;
  YT_ShowVideoManager();
}

function YT_ShowVideoManager()
{
  if(__dataXml==null||__SelectNodes(__dataXml,"videoList")==null)
  {
    if(!__ReqMade)
    {
      __ReqMade=true;
      YT_GetVideos();
    }
    else
    {
      YT_ReqFailure();
    }    
  }
  else
  { 
    if(YT_Dialog==null)
    {
      YT_Dialog=document.getElementById(YT_ClientID+"YouTubeVideoEditor");
    }
    if(YT_TagDialog==null)
    {
      YT_TagDialog=document.getElementById(YT_ClientID+"TagsDialog");
    }
    if(YT_TagLibraryDlg==null)
    {
      YT_TagLibraryDlg=document.getElementById(YT_ClientID+"TagLibraryDialog");
    }
    YT_RefreshVideoManager();
    __ShowDialog(YT_Dialog);
  }
}

function YT_RefreshVideoManager()
{
  var paramNames=new Array();
  var paramVals=new Array();
  paramNames.push("videoId");
  paramVals.push(YT_VideoId);
  paramNames.push("moduleId");
  paramVals.push(YT_ModuleId);
  __Transform(YT_Dialog,__dataXml,YT_XSL_PATH+"ManageVideos.xsl",paramNames,paramVals);
}

function YT_ResetForm()
{
  YT_VideoId="";
  YT_VideoNode=null;
  YT_RefreshVideoManager();
}

function YT_EditVideo(videoId)
{
  YT_VideoId=videoId;
  var videoNodes=__SelectNodes(__dataXml,"videoList/YouTubeVideoInfo");
  if(videoNodes!=null)
  {
    for(var i=0;i<videoNodes.length;i++)
    {
      var currId=__NodeValue(videoNodes[i],"VideoId");
      if(currId==YT_VideoId)
      {
        YT_VideoNode=videoNodes[i];
        i=videoNodes.length;
      }
    }
  }
  YT_RefreshVideoManager();
}

function YT_AddOrUpdateVideo()
{
  __FormErrorCount=0;
  if(__ValidateNotEmpty("YouTubeVideoIdTextBox"))
  {
    __ValidateURL("YouTubeVideoIdTextBox");
  }
  __ValidateNotEmpty("YouTubeVideoTitleTextBox");
  if(__FormErrorCount==0)
  {
    var url=__GetValue("YouTubeVideoIdTextBox");
    var index=(url.indexOf("v=")>-1?url.indexOf("v="):(url.indexOf("V=")>-1?url.indexOf("V="):(url.indexOf("v/")>-1?url.indexOf("v/"):url.indexOf("V/"))));
    var videoId;
    if(index>-1)
    {
      videoId=url.substr(index+2);
      if(videoId.indexOf("&")>-1)
      {
        videoId=videoId.substr(0,videoId.indexOf("&"));
      }
    }
    else
    {
      videoId="INVALID";
    }
    var title=__GetValue("YouTubeVideoTitleTextBox");
    var description=__Replace(__Replace(__GetValue("YouTubeVideoDescriptionTextBox"),"\u000d\u000a","<br/>"),"\u000a","<br/>");
    var videoXml="";
    if(YT_VideoId=="")
    {
      videoXml="<YouTubeVideoInfo><ItemId>0</ItemId><AuthorId></AuthorId><DateAdded></DateAdded><LastUpdated></LastUpdated><VideoId><![CDATA["+videoId+"]]></VideoId><Title><![CDATA["+title+"]]></Title><Description><![CDATA["+description+"]]></Description><Enabled>true</Enabled><AutoPlay>false</AutoPlay><SortOrder>0</SortOrder><ModuleAssociations /></YouTubeVideoInfo>";
    }
    else
    {
      __SetNodeValue(YT_VideoNode,"VideoId",videoId);
      __SetNodeValue(YT_VideoNode,"Title",title);
      __SetNodeValue(YT_VideoNode,"Description",description);
      videoXml=__GetXML(YT_VideoNode);
    }
    if(videoXml!="")
    {
      YT_UpdateVideo(videoXml);
      YT_VideoId="";
    }
  }
}

function YT_AssociationChange(obj,videoId)
{
  var videoNodes=__SelectNodes(__dataXml,"videoList/YouTubeVideoInfo");
  if(videoNodes!=null)
  {
    for(var i=0;i<videoNodes.length;i++)
    {
      var currId=__NodeValue(videoNodes[i],"VideoId");
      if(currId==videoId)
      {
        var parent=__SelectSingleNode(videoNodes[i],"ModuleAssociations");
        if(parent)
        {
          if(obj.checked)
          {
            var newAssociationXml="<VideoAssociationInfo><ModuleId>"+YT_ModuleId+"</ModuleId><VideoItemId>"+videoId+"</VideoItemId><Enabled>false</Enabled><AutoPlay>false</AutoPlay></VideoAssociationInfo>";
            __AddEntityToDomFromString(parent,newAssociationXml);
          }
          else
          {
            var associations=__SelectNodes(parent,"VideoAssociationInfo");
            if(associations!=null)
            {
              for(var x=0;x<associations.length;x++)
              {
                var currentModuleId=__NumericNodeValue(associations[x],"ModuleId");
                if(currentModuleId==YT_ModuleId)
                {
                  __RemoveEntityByRef(associations[x]);
                  x=associations.length;
                }
              }
            }
          }
        }
        YT_UpdateVideo(__GetXML(videoNodes[i]));
        i=videoNodes.length;
      }
    }
  }
}

function YT_UpdateAssociationProperties(obj,enabled,autoPlay,videoId)
{
  var videoNodes=__SelectNodes(__dataXml,"videoList/YouTubeVideoInfo");
  if(videoNodes!=null)
  {
    for(var i=0;i<videoNodes.length;i++)
    {
      var currId=__NodeValue(videoNodes[i],"VideoId");
      if(currId==videoId)
      {
        var parent=__SelectSingleNode(videoNodes[i],"ModuleAssociations");
        if(parent)
        {
          var associations=__SelectNodes(parent,"VideoAssociationInfo");
          if(associations!=null)
          {
            for(var x=0;x<associations.length;x++)
            {
              var currentModuleId=__NumericNodeValue(associations[x],"ModuleId");
              if(currentModuleId==YT_ModuleId)
              {
                if(enabled)
                {
                  __SetNodeValue(associations[x],"Enabled",(obj.checked?"true":"false"));
                }
                if(autoPlay)
                {
                  __SetNodeValue(associations[x],"AutoPlay",(obj.checked?"true":"false"));
                }
                x=associations.length;
              }
            }
          }
        }
        YT_UpdateVideo(__GetXML(videoNodes[i]));
        i=videoNodes.length;
      }
    }
  }
}
function YT_PromptDeleteVideo()
{
  __ShowMessage("Warning","Are you sure?",2,null,"Yes","No",null,YT_ContinueVideoDelete,null);
}
function YT_ContinueVideoDelete()
{
  YT_DeleteVideo(__GetXML(YT_VideoNode));
  YT_VideoId="";
}
function YT_Close()
{
  __HideDialog(YT_Dialog);
  YT_Initialise();
  if(YT_Changes)
  {
    window.location=window.location;
  }
}

function YT_OutputTags()
{
  var paramNames=new Array();
  var paramVals=new Array();
  paramNames.push("requestPath");
  paramVals.push(__RequestPath);
  paramNames.push("videoId");
  paramVals.push(YT_VideoId);
  paramNames.push("title");
  paramVals.push(__GetValue("YouTubeVideoTitleTextBox"));
  __Transform(YT_TagDialog,__dataXml,YT_XSL_PATH+"BrowseTags.xsl",paramNames,paramVals);
  __ShowDialog(YT_TagDialog);
}

function YT_CloseTags()
{
  var tagCount=0;
  tagNodes=__SelectNodes(YT_VideoNode,"Tags/TagAssociationInfo");
  if(tagNodes!=null)
  {
    tagCount=tagNodes.length;
  }
  document.getElementById("YouTubeTagsButton").value="Tags ("+tagCount+")";
  __HideDialog(YT_TagDialog);
}

function YT_DeleteTag(pos)
{
  var tagNodes=__SelectNodes(YT_VideoNode,"Tags/TagAssociationInfo");
  if(tagNodes!=null)
  {
    var tagToRemove=null;
    var tagWordToRemove=document.getElementById("tag_"+pos).innerHTML;    
    for(var i=0;i<tagNodes.length;i++)
    {
      if(__NodeValue(tagNodes[i],"TagWord")==tagWordToRemove)
      {
        tagToRemove=tagNodes[i];
        i=tagNodes.length;
      }
    }
    if(tagToRemove!=null)
    {
      var tagLibId=__NumericNodeValue(tagToRemove,"TagLibraryItemId");
      if(tagLibId>0)
      {
        for(var i=tagNodes.length-1;i>=0;i--)
        {
          var currTabLibId=__NumericNodeValue(tagNodes[i],"TagLibraryItemId");
          if(currTabLibId==tagLibId)
          {
            __RemoveEntityByRef(tagNodes[i]);
          }
        }
      }
      else
      {
        var isLinked=false;
        var tagListNodes=__SelectNodes(__dataXml,"tagLibraries/TagLibraryInfo");
        if(tagListNodes!=null)
        {
          var tagLibId=-1;
          for(var i=0;i<tagNodes.length&&!isLinked;i++)
          {
            var currTabLibId=__NumericNodeValue(tagNodes[i],"TagLibraryItemId");
            if(currTabLibId!=tagLibId&&currTabLibId>0)
            {
              tagLibId=currTabLibId;
              for(x=0;x<tagListNodes.length&&!isLinked;x++)
              {
                var libId=__NumericNodeValue(tagListNodes[x],"ItemId");
                if(libId==tagLibId)
                {
                  var tagWordNodes=__SelectNodes(tagListNodes[x],"Entries/TagLibraryEntryInfo");
                  if(tagWordNodes!=null)
                  {
                    for(var z=0;z<tagWordNodes.length&&!isLinked;z++)
                    {
                      if(__NodeValue(tagWordNodes[z],"TagWord")==tagWordToRemove)
                      {
                        __SetNodeValue(tagToRemove,"TagLibraryItemId",tagLibId);
                        __SetNodeValue(tagToRemove,"IsAutoApplied",__NodeValue(tagNodes[i],"IsAutoApplied"));
                        isLinked=true;
                      }
                    }
                  }
                  x=tagListNodes.length;
                }
              }
            }
          }
        }
        if(!isLinked)
        {
          __RemoveEntityByRef(tagToRemove);
        }
      }
    }
    YT_OutputTags();
  }  
}

function YT_AddTags()
{
  YT_ParseTagList(document.getElementById("YouTubeTagListTextBox").value,0);
  __SetValue("YouTubeTagListTextBox","");
}

function YT_ShowTagLibraryDlg()
{
  var paramNames=new Array();
  var paramVals=new Array();
  __Transform(YT_TagLibraryDlg,__dataXml,YT_XSL_PATH+"TagListDialog.xsl",paramNames,paramVals);
  __ShowDialog(YT_TagLibraryDlg);
  var validItemFound=false;
  var tagLibNodes=__SelectNodes(__dataXml,"tagLibraries/TagLibraryInfo");
  if(tagLibNodes!=null&&tagLibNodes.length>0)
  {
    for(var i=0;i<tagLibNodes.length;i++)
    {
      YT_TagLibId=__NumericNodeValue(tagLibNodes[i],"ItemId");
      YT_RefreshTagLibraryDlg();
      validItemFound=true;
      i=tagLibNodes.length;
    }
  }
  document.getElementById("ViewTagLibrary").style.display=(validItemFound==true?"inline-block":"none");
  document.getElementById("AddTagsFromListButton").style.display=(validItemFound==true?"inline":"none")
  document.getElementById("LinkOptionsRow").style.display=(validItemFound==true?"inline":"none")
}

function YT_RefreshTagLibraryDlg()
{
  YT_GetTagLibrary();
  var paramNames=new Array();
  var paramVals=new Array();
  paramNames.push("tagLibId");
  paramVals.push(YT_TagLibId);
  __Transform(document.getElementById("ViewTagLibrary"),__dataXml,YT_XSL_PATH+"RefreshTagListDialog.xsl",paramNames,paramVals);
  var tagWordNodes=__SelectNodes(YT_TagLibNode,"Entries/TagLibraryEntryInfo");
  document.getElementById("AddTagsFromListButton").style.display=(tagWordNodes==null||tagWordNodes.length==0?"none":"inline");
  document.getElementById("LinkOptionsRow").style.display=(tagWordNodes==null||tagWordNodes.length==0?"none":"inline");
}

function YT_AddTagsFromList()
{
  var tagList="";
  var tagWordNodes=__SelectNodes(YT_TagLibNode,"Entries/TagLibraryEntryInfo");
  for(var i=0;i<tagWordNodes.length;i++)
  {
    if(tagList!="")
    {
      tagList=tagList+",";
    }
    tagList=tagList+__NodeValue(tagWordNodes[i],"TagWord");
  }
  var isLinked=__GetCheckValue("LinkToTagListCheckBox");
  YT_ParseTagList(tagList,(isLinked==true?YT_TagLibId:0));
  __HideDialog(YT_TagLibraryDlg);
}

function YT_ParseTagList(tagList,listItemId)
{
  var tagNodeParent=__SelectSingleNode(YT_VideoNode,"Tags");  
  var tags=tagList.split(",");
  var tagsAdded=false;
  for(var i=0;i<tags.length;i++)
  {
    var tag=tags[i].replace(/^\s+|\s+$/g, '').toLowerCase();
    if(tag!="")
    {
      var found=false;
      var tagNodes=__SelectNodes(tagNodeParent,"TagAssociationInfo");
      if(tagNodes)
      {
        for(var x=0;x<tagNodes.length;x++)
        {
          if(__NodeValue(tagNodes[x],"TagWord")==tag)
          {
            if(__NumericNodeValue(tagNodes[x],"TagLibraryItemId")>0&&listItemId===0)
            {
              __SetNodeValue(tagNodes[x],"TagLibraryItemId","0");
              __SetNodeValue(tagNodes[x],"IsAutoApplied","false");
              tagsAdded=true;
            }         
            found=true;  
            x=tagNodes.length;
          }
        }
      }
      if(!found)
      {
        var newTagXml="<TagAssociationInfo><AssociatedItemId>0</AssociatedItemId><ModuleDefId>0</ModuleDefId><TagLibraryItemId>"+listItemId+"</TagLibraryItemId><IsAutoApplied>false</IsAutoApplied><TagWord><![CDATA["+tag+"]]></TagWord></TagAssociationInfo>";
        __AddEntityToDomFromString(tagNodeParent,newTagXml);
        tagsAdded=true;
      }
    }
  }
  if(tagsAdded)
  {
    YT_OutputTags();
  }
}

function YT_GetTagLibrary()
{ 
  YT_TagLibNode=null;
  if(YT_TagLibId>0)
  {
    var tagLibrariesNode=__SelectSingleNode(__dataXml,"tagLibraries");
    if(tagLibrariesNode!=null)
    {
      var tagLibNodes=__SelectNodes(tagLibrariesNode,"TagLibraryInfo");
      if(tagLibNodes!=null)
      {
        for(i=0;i<tagLibNodes.length;i++)
        {
          var currTagLibId=__NumericNodeValue(tagLibNodes[i],"ItemId");
          if(currTagLibId==YT_TagLibId)
          {
            YT_TagLibNode=tagLibNodes[i];
            i=tagLibNodes.length;
          }
        }
      }
    }
  }
}

function YT_GetVideos()
{
  var reqData="<getVideoList />";
  __MakeRequest(YT_ID,reqData,YT_ReturnFromGettingVideoList,YT_ReqFailure);
}
function YT_ReturnFromGettingVideoList()
{
  __AddEntity(__SelectSingleNode(__Resp,"videoList"));
  __AddEntity(__SelectSingleNode(__Resp,"tagLibraries"));
  YT_ShowVideoManager();
}
function YT_UpdateVideo(videoXml)
{
  var reqData="<updateVideo>"+videoXml+"</updateVideo>";
  __MakeRequest(YT_ID,reqData,YT_ReturnFromGeneralUpdate,YT_ReqFailure);
  YT_Changes=true;
}
function YT_DeleteVideo(videoXml)
{
  var reqData="<deleteVideo>"+videoXml+"</deleteVideo>";
  __MakeRequest(YT_ID,reqData,YT_ReturnFromGeneralUpdate,YT_ReqFailure);
  YT_Changes=true;
}
function YT_ReturnFromGeneralUpdate()
{
  __RemoveEntity("videoList");
  __AddEntity(__SelectSingleNode(__Resp,"videoList"));
  YT_RefreshVideoManager();
}

function YT_ReqFailure()
{
  var errorMessage=__NodeValue(__Resp,"responseText");
  if(errorMessage=="")
  {
    errorMessage="An unexpected error has occurred.";
  }
  __ShowMessage("Error",errorMessage,0,"Okay");
}
