// JavaScript Document

var ytVideoApp = {};

ytVideoApp.SYNDICATED_SEARCH_DIV = 'videoSearchResultDiv';

ytVideoApp.SYNDICATED_COMMENTS_DIV = 'videoCommentsContent';

ytVideoApp.SYNDICATED_PREV_COMMENTS_DIV = 'videoPrevComments';

ytVideoApp.SYNDICATED_NEXT_COMMENTS_DIV = 'videoNextComments';

ytVideoApp.SYNDICATED_SHOWED_COMMENTS_DIV = 'videoCommentsShowed';

ytVideoApp.SYNDICATED_COMMENT_DIV = 'videoAddCommentDiv';

ytVideoApp.SYNDICATED_COMMENTS_LINK_DIV = 'videoCommentsAuthLink';

ytVideoApp.COMMENT_TEXTAREA = 'ytVideoCommentText';

ytVideoApp.SYNDICATED_COMMENT_CHAR = 'ytVideoCommentCounter';

ytVideoApp.SYNDICATED_RATING = 'videoPlayerRatings';

ytVideoApp.SYNDICATED_UPLOAD_DIV = 'videoUploadFormDiv';
         

/**
 * Sends an AJAX request to the server to retrieve a list of videos or
 * the video player/metadata.  Sends the request to the specified filePath
 * on the same host, passing the specified params, and filling the specified
 * resultDivName with the resutls upon success.
 * @param {String} filePath The path to which the request should be sent
 * @param {String} params The URL encoded POST params
 * @param {String} resultDivName The name of the DIV used to hold the results
 */
ytVideoApp.sendRequest = function(filePath, params, resultDivName) {
  if (window.XMLHttpRequest) {
    var xmlhr = new XMLHttpRequest();
  } else {
    var xmlhr = new ActiveXObject('MSXML2.XMLHTTP.3.0');
  }

  xmlhr.open('POST', filePath);
  xmlhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

  xmlhr.onreadystatechange = function() {
    var resultDiv = document.getElementById(resultDivName);
    if (xmlhr.readyState == 1) {
      resultDiv.innerHTML = 'Načítání...'; 
    } else if (xmlhr.readyState == 4 && xmlhr.status == 200) {
      if (xmlhr.responseText) {
        resultDiv.innerHTML = xmlhr.responseText;
      }
    } else if (xmlhr.readyState == 4) {
      alert('Invalid response received - Status: ' + xmlhr.status);
    }
  }
  xmlhr.send(params);
}

/** 
 * Uses ytVideoApp.sendRequest to prepare a syndicated upload.
 * 
 * @param {String} videoTitle The title for new video
 * @param {String} videoDescription The video's description
 * @param {String} videoCategory The category for the video
 * @param {String} videoTags A white-space separated string of Tags
 */
ytVideoApp.prepareSyndicatedUpload = function(videoTitle, videoOwner, videoDescription) {
  var filePath = 'youtube.fnc.php';
  var params = 'operation=createUploadForm' +
               '&videoTitle=' + videoTitle +
               '&videoOwner=' + videoOwner +
               '&videoDescription=' + videoDescription;
  ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_UPLOAD_DIV);
}

/** 
 * Uses ytVideoApp.sendRequest to prepare a syndicated search.
 * 
 * @param {String} videoText The video's description
 * @param {String} videoDeveloperTag The video's developer tags
 */
ytVideoApp.prepareSyndicatedSearch = function(videoText, videoDeveloperTag) {
  var filePath = 'youtube.fnc.php';
  var params = 'operation=searchVideo' +
               '&videoText=' + videoText +
               '&videoDeveloperTag=' + videoDeveloperTag;
  ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_SEARCH_DIV);
}

ytVideoApp.prepareSyndicatedAddRating = function(videoRating) {
  var filePath = 'youtube.fnc.php';
  var params = 'operation=AddVideoRating' +
               '&videoRating=' + videoRating;
  ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_RATING);
}

ytVideoApp.prepareSyndicatedPrintAllComments = function(videoID, totalItems) {
  var videoCommentsNext = document.getElementById('videoCommentsNext');
  var showedCommentsDiv = document.getElementById(ytVideoApp.SYNDICATED_SHOWED_COMMENTS_DIV);
  showedCommentsDiv.innerHTML = totalItems;
  
  var filePath = 'youtube.fnc.php';
  var params = 'operation=printAllComments' +
               '&videoID=' + videoID +
               '&totalItems=' + totalItems;
  ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_COMMENTS_DIV);
  videoCommentsNext.innerHTML = "";
}

ytVideoApp.prepareSyndicatedAddComment = function(commentText) {
  var filePath = 'youtube.fnc.php';
  var params = 'operation=addComment' +
               '&commentText=' + commentText;
  ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_COMMENTS_DIV);
  document.getElementById(ytVideoApp.SYNDICATED_COMMENT_DIV).innerHTML = '';
}

ytVideoApp.prepareSyndicatedPrintNextComments = function(videoID, sIndex, ItemsPerPage, totalItems) {
  var videoCommentsNext = document.getElementById('videoCommentsNext');
  if (sIndex<totalItems) {
    var showedCommentsDiv = document.getElementById(ytVideoApp.SYNDICATED_SHOWED_COMMENTS_DIV);
    var commentsDiv = document.getElementById(ytVideoApp.SYNDICATED_PREV_COMMENTS_DIV);
    var nextCommentsDiv = document.getElementById(ytVideoApp.SYNDICATED_NEXT_COMMENTS_DIV);
    var nextIndex = sIndex + ItemsPerPage;
    videoCommentsNext.innerHTML = "<a href=\"#\" onclick=\"ytVideoApp.prepareSyndicatedPrintNextComments(\'"+ videoID +"\', "+ nextIndex +", "+ ItemsPerPage + ","+ totalItems +"); return false;\">Zobrazit další komentáře</a>";
    commentsDiv.innerHTML = commentsDiv.innerHTML + nextCommentsDiv.innerHTML;
    
    if (nextIndex>totalItems) {
      showedCommentsDiv.innerHTML = totalItems; 
    } else {
      showedCommentsDiv.innerHTML = nextIndex-1;  
    }
    
    var filePath = 'youtube.fnc.php';
    var params = 'operation=printNextComments' +
                 '&videoID=' + videoID +
                 '&sIndex=' + sIndex + 
                 '&ItemsPerPage=' + ItemsPerPage;             
    ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_NEXT_COMMENTS_DIV);
  } else {
    videoCommentsNext.innerHTML = "";
  }
}

/**
 * Creates a comment form.
 */
ytVideoApp.prepareUploadForm = function() { 
  var  metaDataForm = ['<form action="" method="post" >',
    '<label for="ytVideoCommentText">Komentovat toto video</label><br />',
    '<textarea id="ytVideoCommentText" name="ytVideoCommentText" cols="50" rows="4"></textarea><br />',
    '<input type="submit" name="ytVideoCommentSubmit" id="ytVideoCommentSubmit" value="Zveřejnit komentář"/> ',
    '</form>'].join('');
  document.getElementById(ytVideoApp.SYNDICATED_COMMENT_DIV).innerHTML = metaDataForm;
}

/**
 * Creates a comment form.
 */
ytVideoApp.prepareCommentForm = function() { 
  var  metaDataForm = ['<form action="" method="post" onsubmit="ytVideoApp.prepareSyndicatedAddComment(this.ytVideoCommentText.value);return false;" >',
    '<label for="ytVideoCommentText">Komentovat toto video</label>',
    '<textarea id="ytVideoCommentText" name="ytVideoCommentText" cols="50" rows="4" onkeyup="ytVideoApp.CommentsCounter()" oninput="ytVideoApp.CommentsCounter()" onpaste="ytVideoApp.CommentsCounter()"></textarea>',
    '<input type="submit" name="ytVideoCommentSubmit" id="ytVideoCommentSubmit" value=""/><input type="button" onclick="ytVideoApp.prepareCommentStorno(); return false;" id="ytVideoCommentStorno" value=""/> Počet zbývajících znaků: <span id="ytVideoCommentCounter">500</span>',
    '</form>'].join('');
  document.getElementById(ytVideoApp.SYNDICATED_COMMENT_DIV).innerHTML = metaDataForm;
}

/**
 * Creates a comment links.
 */
ytVideoApp.prepareCommentLinks = function(videoID) {
  var filePath = 'youtube.fnc.php';
  var params = 'operation=auth_sub_request' +
               '&videoID=' + videoID;
  ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_COMMENTS_LINK_DIV);
}


ytVideoApp.CommentsCounter = function() {
  var maxChar = 500;
  
  var textarea = document.getElementById(ytVideoApp.COMMENT_TEXTAREA);
  var counter = document.getElementById(ytVideoApp.SYNDICATED_COMMENT_CHAR);
  
  var actualLen = textarea.value.length;
  
  if (actualLen > maxChar) {
    textarea.value = textarea.value.substring(0, maxChar);
  }
   
  counter.innerHTML = maxChar - actualLen; 
}

ytVideoApp.prepareCommentStorno = function() {
    var textarea = document.getElementById(ytVideoApp.COMMENT_TEXTAREA);
    textarea.value = '';
    document.getElementById(ytVideoApp.SYNDICATED_COMMENT_DIV).innerHTML = '';
}













