


VideoLib.postOkay = function() {
    var f = $("theForm");

    hideElement("postErr");
    hideElement("reviewEntry");
    hideElement("preview");

    VideoLib.saveRatings();

        if ($("review_summary") && $("review_summary").value && $("review_summary").value.trim().length > 0) {
        VideoLib.showShareYourReview();
    } else {
        VideoLib.scrollTo("communityBlock");
    }

    // refresh reviews using new sort order to get the added/edited review.
    var f = $("theForm");
    f.pageOffset.value = 0; // go to first page to show the review
    f.sortCriteria.value = 1;
    f.sortOrder.value = 1;

    VideoLib.filterSelector.setSelectedOption(f.sortCriteria.value + "|" + f.sortOrder.value);

        VideoLib.refreshSummaryBlock();     Jaman.GraphicButton.enableButton("postReviewBtn");
}

VideoLib.refreshCommunityBlock = function()
{
    var query = {"videoID": VideoLib.currentVideoID,
                 "theAction": "fetch_community_xml"};
    d = VideoLib.makeRequest("/a/video/", query);
    d.addCallback(VideoLib.refreshCommunityBlockOkay);
}

VideoLib.refreshCommunityBlockOkay = function(resp)
{
    $("communityBlock").innerHTML = resp.responseText;

    // reconnect write review button.
    Jaman.GraphicButton.reconnectButton("writeReviewBtn");

    // re-init movie finder widget
    MovieFinderWidgetLib.initSliders();

    VideoLib.refreshReviews(true);
}

VideoLib.sortReviews = function(value) {
    var arr = value.split("|");
    var f = $("theForm");
    f.pageOffset.value = 0;
    f.sortCriteria.value = arr[0];
    f.sortOrder.value = arr[1];
    VideoLib.refreshReviews();
}

VideoLib.refreshReviews = function(showYours, id) {
    if (id && id.indexOf("reviewreply") == 0) {
        VideoLib.reviewID = $(id + ".reviewID").value;
    }
    var f = $("theForm");
    var query = {"videoID": VideoLib.currentVideoID,
                 "pageOffset": f.pageOffset.value,
                 "sortCriteria": f.sortCriteria.value,
                 "sortOrder": f.sortOrder.value,
                 "theAction": "review_list"};
    d = VideoLib.makeRequest("/a/reviewList/", query);
    d.addCallback(VideoLib.postRefresh);
}

VideoLib.postRefresh = function(resp) {
        if ($("sortDiv")) {
        $("sortDiv").removeChild(VideoLib.filterSelector.getDOM());
    }
    $("reviewList").innerHTML = resp.responseText;

    if ($("sortDiv")) {
        // set drop down in the right place
        $("sortDiv").appendChild(VideoLib.filterSelector.getDOM());
    }

    if (VideoLib.reviewID) {
        // scroll to this review.
        VideoLib.scrollTo("review_" + VideoLib.reviewID);
        // open replies for this review.
        VideoLib.toggleReplies(VideoLib.reviewID, true);
    }

    if (VideoLib.showWriteOnLoad) {
        VideoLib.showWrite();
        if (VideoLib.showRatingSaved) {
            var postErr = $("postErr");
            postErr.innerHTML = "Rating saved! Why don't you score the movie or write a comment about it?";
            MochiKit.Style.showElement(postErr);
        }
    }

    VideoLib.reviewID = null;
}

VideoLib.postErr = function(err) {
    VideoLib.resetRatings();
    VideoLib.log("postErr", err.faultString);
    Jaman.GraphicButton.enableButton("postReviewBtn");
}

VideoLib.handlePost = function(anchor) {
    if (!VideoLib.checkLoggedIn(null, 'please sign in or register to post reviews')) {
        Jaman.GraphicButton.enableButton("postReviewBtn");
        return;
    }

    var reviewSummary = $("review_summary").value.trim();
    if (!VideoLib.ratingChanged && VideoLib.my_rating == VideoLib.my_temp_rating && MochiKit.Base.isEmpty(reviewSummary)) {
        Jaman.GraphicButton.enableButton("postReviewBtn");
        VideoLib.log("postErr", "Please write a comment, rate or score the movie.");
        $("review_summary").focus();
        return;
    }
    
    VideoLib.log("postErr", VideoLib.INFO_REVIEW_SENDING); 
    hideElement("preview");

    var query = {};
    if (VideoLib.ratingChanged)
    {
        query = MovieFinderWidgetLib.getRatingQuery();
    }

    query["videoID"] = VideoLib.currentVideoID;
    query["summary"] = $("review_summary").value;
    query["my_rating"] = VideoLib.my_rating;
    query["theAction"] = "review_update_xml";

    d = VideoLib.makePostRequest("/a/review/", query);
    d.addCallbacks(VideoLib.postOkay, VideoLib.postErr);
}

VideoLib.handleReplyPost = function() {
    VideoLib.setReplyMessage("Posting reply...");
    var query = {"videoID": VideoLib.currentVideoID,
                 "reviewID": VideoLib.reviewID,
                 "summary": $("reply_summary").value,
                 "theAction": "reply_create_xml"};
    d = VideoLib.makePostRequest("/a/review/", query);
    d.addCallbacks(VideoLib.replyOkay, VideoLib.replyErr);
}

VideoLib.handleReply = function(anchor, reviewID) {
    if (!VideoLib.checkLoggedIn(this.pageURL, 'please sign in or register to post replies')) {
        return;
    }
    VideoLib.clearLogAtTop();
    VideoLib.openPopup("reply", anchor, "reply_summary");
    VideoLib.reviewID = reviewID;
}

VideoLib.replyErr = function(err) {
    VideoLib.setReplyMessage(err.faultString);
    Jaman.GraphicButton.enableButton("postReplyBtn");
}

VideoLib.replyOkay = function(resp) {
    VideoLib.anchor = "reply" + resp.responseText;

    VideoLib.replyCancel();
    VideoLib.refreshReviews();
    VideoLib.log("reply2Err", "Reply posted."); // after refresh
    Jaman.GraphicButton.enableButton("postReplyBtn");
}

VideoLib.handleShareReview = function(anchor, reviewID) {
    if (!VideoLib.checkLoggedIn(this.pageURL, 'please sign in or register to share reviews')) {
        return;
    }
    VideoLib.clearLogAtTop();
    VideoLib.reviewID = reviewID;
    ShareLib.clickedEmail(anchor, null, null, "shareReview_");
}

VideoLib.showShareYourReview = function() {
    if (!VideoLib.checkLoggedIn(this.pageURL, 'please sign in or register to share reviews')) {
        return;
    }
    VideoLib.clearLogAtTop();
    ShareLib.clickedEmail(null, null, null, "shareYourReview_", false /* no popup */);
    MochiKit.Style.showElement("shareYourReview");
}

VideoLib.closeShareYourReview = function() {
    MochiKit.Style.hideElement("shareYourReview");
    VideoLib.scrollTo("communityBlock");
}

VideoLib.handleEmailReview = function(prefix, bShareMyReview) {
    var shareMyReview = bShareMyReview || false;
    if (($(prefix + "email_from").value.length == 0) && (VideoLib.getLoginID() == null)) {
        VideoLib.log(prefix + "shareErr", VideoLib.ERROR_SHARE_VIDEO_FROM);
        return;
    }

    var sb = VideoLib.selectedBoxes(prefix + 'contactsGrid');

    if ((sb.length == 0) && ($(prefix + "email_to").value.length == 0)) {
        VideoLib.log(prefix + "shareErr", VideoLib.ERROR_SHARE_VIDEO_TO);
        return;
    }

    if ($(prefix + "email_message").value.length > 100000) {
        VideoLib.log("shareErr", VideoLib.SHARE_LENGTH_ERROR);
        return;
    }

    VideoLib.log("shareErr", VideoLib.SENDING_SHARE_VIDEO_MSG);
    var query, url;

    url = VideoLib.SHARE_VIDEO_ACTION_URL;

    query = {"email_from": $(prefix + "email_from").value,
             "email_contacts": sb,
             "email_to": $(prefix + "email_to").value,
             "email_message": $(prefix + "email_message").value};

    if (shareMyReview)
    {
        query[VideoLib.ACTION] = VideoLib.SHARE_MY_REVIEW_ACTION_VALUE;
        query["videoID"] = VideoLib.currentVideoID;
    }
    else
    {
        query[VideoLib.ACTION] = VideoLib.SHARE_REVIEW_ACTION_VALUE;
        query["reviewID"] = VideoLib.reviewID;
    }

    d = VideoLib.makePostRequest(url, query);
    d.addCallbacks(function() { VideoLib.shareReviewOkay(shareMyReview); }, function(err) { VideoLib.shareReviewErr(err, prefix); });
}

VideoLib.shareReviewOkay = function(bShareMyReview)
{
    VideoLib.logAtTop(VideoLib.INFO_EMAIL_SENT);

    if (bShareMyReview)
    {
        VideoLib.closeShareYourReview();
    }
    else
    {
        VideoLib.closePopup();
    }
}

VideoLib.shareReviewErr = function(err, prefix)
{
    VideoLib.log(prefix + "shareErr", err.faultString);
}

VideoLib.clickedFavoriteReview = function(reviewID) {
    if (!VideoLib.checkLoggedIn(this.pageURL, 'please sign in or register to rate reviews')) {
        return;
    }
    var query = { "reviewID": reviewID,
                  "theAction": "favorite_review_xml" };
    VideoLib.clearLogAtTop();
    var d = VideoLib.makeRequest("/a/video/", query);
    d.addCallbacks(function() { VideoLib.favoriteReviewOkay(reviewID); }, VideoLib.favoriteReviewErr);
}

VideoLib.favoriteReviewOkay = function(reviewID) {
    hideElement("review." + reviewID + ".favoriteReview");
    hideElement("review." + reviewID + ".favoriteReviewCount");
    showElement("review." + reviewID + ".favoriteReview.clicked");
    VideoLib.toggleMore("review." + reviewID + ".favoriteReview.clicked.", true);
}

VideoLib.favoriteReviewErr = function(err) {
    VideoLib.logAtTop(err.faultString);
}

VideoLib.refreshSummaryBlock = function() {
    var query = {"videoID": VideoLib.currentVideoID,
                 "theAction": "fetch_summary_xml"};
    var d = VideoLib.makeRequest("/a/video/", query);
    d.addCallback(VideoLib.refreshSummaryBlockOkay);
}

VideoLib.refreshSummaryBlockOkay = function(resp) {
    $("summaryBlock").innerHTML = "";
    $("summaryBlock").innerHTML = resp.responseText;
    VideoLib.refreshCommunityBlock();
}

VideoLib.clickedRating = function(id, rating) {
    VideoLib.my_rating = rating;

    if ($("reviewEntry") && $("reviewEntry").style.display != "none") {
        // don't update rating while still writing review
        // keep in sync all the raters.
        VideoLib.resetTempRater();
        // focus the review section.
        $("review_summary").focus();
        return;
    }

    var d = VideoLib.setRating(VideoLib.currentVideoID, VideoLib.my_rating);
    if (d) {
                Jaman.GraphicButton.disableButton("writeReviewBtn");
        d.addCallbacks(VideoLib.ratingOkay, VideoLib.ratingErr);
    }
}

VideoLib.ratingOkay = function(resp) {
    Jaman.GraphicButton.enableButton("writeReviewBtn");
        VideoLib.refreshSummaryBlock();
}

VideoLib.ratingErr = function(err) {
    VideoLib.my_rating = 0;
    VideoLib.logAtTop(err.faultString);
    Jaman.GraphicButton.enableButton("writeReviewBtn");
        VideoLib.refreshSummaryBlock();
}

VideoLib.clickedFullScreen = function() {
    var width = screen.availWidth;
    var height = screen.availHeight;
        if (document.all) {
        height = height - 36;
        width = width - 10;
    }
    var options = "resizable=yes,status=no,height=" + height + ",width=" + width + ",top=0,left=0";
    win = this.openWindow("/a/fullScreen/?videoUrl=" + escape(VideoLib.videoURL) +
                      "&videoSize=" + VideoLib.videoSize + "&videoDuration=" + VideoLib.videoDuration +
                      "&videoID=" + VideoLib.currentVideoID + "&sads=" + (this.SHOW_ADS ? "1" : "0"),
                      width, height, "fullScreen");
    var player = this.thisMovie();
    if (player) {
        player.handlePause();
    }
    VideoLib.videoComplete();
}

VideoLib.fetchVideoOkay = function(resp, showYours) {
    var text = resp.responseText;

    var texts = text.split('""""""');
    VideoLib.updateInnerHtml("aboveMeta", texts[0])
    VideoLib.updateInnerHtml("sideMeta", texts[1]);
    VideoLib.updateInnerHtml("belowMeta", texts[2]);
    VideoLib.updateInnerHtml("titleBlock", texts[3]);
    VideoLib.updateInnerHtml("communityBlock", texts[4]);
    VideoLib.updateInnerHtml("belowTitleBlock", texts[5]);

    if (window["pngfix"]) { pngfix(); } // reapply pngfix

    // preserve the expand/collapse status -- sideLess is part of the main page
    // so its state doesn't get wiped out by the above statements

    VideoLib.anchor = null;
        VideoLib.refreshReviews(showYours);
}

VideoLib.updateInnerHtml = function(elementName, text)
{
    var elem = $(elementName);
    if (elem)
    {
        elem.innerHTML = text;
    }
}

VideoLib.fetchVideoErr = function(err) {
    VideoLib.logAtTop("Unable to fetch video: " + err.faultString);
}

VideoLib.fetchVideo = function(showYours) {
    var query = {"videoID": VideoLib.currentVideoID,
                 "theAction": "fetch_video_xml"};
    d = VideoLib.makeRequest("/a/video/", query);
    d.addCallbacks(function (resp) { VideoLib.fetchVideoOkay(resp, showYours); },
                   VideoLib.fetchVideoErr);
}

VideoLib.movieSetMyRating = function() {
    //VideoLib.rollOff();
    var m = VideoLib.thisMovie();
}

VideoLib.showGroup = function(id) {
      showElement("group." + id);
      hideElement("group." + id + ".minimized");
}

VideoLib.hideGroup = function(id) {
      hideElement("group." + id);
      showElement("group." + id + ".minimized");
}

VideoLib.showMoreInfo = function() {
    hideElement("belowMoreMinimized");
    showElement("belowMore");
}

VideoLib.hideMoreInfo = function() {
    showElement("belowMoreMinimized");
    hideElement("belowMore");
}


// special handler here for paginated reviews
VideoLib.handlePageOffset = function(n) {
    this.closePopup();
    var f = $("theForm");
    f.pageOffset.value = n;
    VideoLib.refreshReviews();
    VideoLib.scrollTo("communityBlock");
}

// rater stuff
VideoLib.handlePreview = function() {
    if (this.my_rating > 0) {
        $("previewStars").src = VNimages("/stars/star_sm_" + (this.my_rating/2) + ".gif");
    }
    $("previewText").innerHTML = VideoLib.escapeAndLinkify($("review_summary").value);
    showElement("preview");
    VideoLib.scrollTo("preview");
}

VideoLib.showRatingSaved = false;
VideoLib.hasPutRating = function() {
    VideoLib.showRatingSaved = true;
    VideoLib.showWrite();
}

VideoLib.showWriteOnLoad = false;
VideoLib.showWrite = function(noFocus) {
    if (!VideoLib.checkLoggedIn(this.pageURL, 'Please sign in or register to post reviews')) {
        return;
    }

    if (!$("reviewEntry")) {
        VideoLib.showWriteOnLoad = true;
        return;
    } else {
        VideoLib.showWriteOnLoad = false;
    }

    hideElement("showWrite");
    hideElement("rankingDiv");
    hideElement("noReviews");

    appendChildNodes($("reviewMovieFinder"), $("scoreWidget"));      VideoLib.ratingChanged = false;
    VideoLib.my_temp_rating = VideoLib.my_rating;
    MovieFinderWidgetLib.onRatingChanged = function() { VideoLib.ratingChanged = true; };

    VideoLib.closeShareYourReview();

    showElement("reviewEntry");
    VideoLib.scrollTo("reviewEntry");
    VideoLib.reviewCache = $("review_summary").value;
    VideoLib.closePopup();
    if (!noFocus) {
        $("review_summary").focus();
    }
}

VideoLib.hideWrite = function() {
    showElement("showWrite");
    showElement("rankingDiv");
    showElement("noReviews");
    hideElement("postErr");
    hideElement("reviewEntry");
    hideElement("preview");
    $("review_summary").value = VideoLib.reviewCache;

    VideoLib.resetRatings();

    // reset rating to stored value
    VideoLib.my_rating = VideoLib.my_temp_rating;
    // refresh raters
    VideoLib.resetTempRater();

    appendChildNodes($("movieFinderPopupDiv"), $("scoreWidget"));     MovieFinderWidgetLib.onRatingChanged = null;

    VideoLib.scrollTo("communityBlock");
}

VideoLib.resetTempRater = function() {
        Jaman.Rater.setRatingFor("raterImage0", VideoLib.my_rating, VideoLib.avg_rating);
    Jaman.Rater.setRatingFor("raterImage51", VideoLib.my_rating);
    Jaman.Rater.setRatingFor("raterImage101", VideoLib.my_rating);
}

VideoLib.saveRatings = function() {
    VideoLib.my_rating1 = MovieFinderWidgetLib.rating1;
        VideoLib.my_rating2 = MovieFinderWidgetLib.rating2;
        VideoLib.my_rating3 = MovieFinderWidgetLib.rating3;
        VideoLib.my_rating4 = MovieFinderWidgetLib.rating4;
}

VideoLib.resetRatings = function() {
    MovieFinderWidgetLib.setRatings(
        VideoLib.my_rating1,
        VideoLib.my_rating2,
        VideoLib.my_rating3,
        VideoLib.my_rating4);
}

VideoLib.expandReview = function(elem) {
    id = elem.id.substring(elem.id.indexOf('.') + 1);
    showElement("review." + id + ".display");
    hideElement("review." + id + ".truncate");
    setTimeout("VideoLib.expandReviewButtons('" + id + "')", 200);
    }

VideoLib.expandReviewButtons = function(id) {
    hideElement("reviewplus." + id);
    showElement("reviewminus." + id);
}

VideoLib.collapseReview = function(elem) {
    id = elem.id.substring(elem.id.indexOf('.') + 1);
    hideElement("review." + id + ".display");
    showElement("review." + id + ".truncate");

    setTimeout("VideoLib.collapseReviewButtons('" + id + "')", 200);
}

VideoLib.collapseReviewButtons = function(id) {
    hideElement("reviewminus." + id);
    showElement("reviewplus." + id);
}

VideoLib.handleDeleteReply = function(anchor, id) {
    VideoLib.handleDelete(anchor, id);
    this.deleteAction = "reply_delete_xml";
}

// local override
VideoLib.handleDeleteConfirm = function() {
    var f = $("theForm");
    if (this.deleteAction == "reply_delete_xml") {
        var query = {};
        query[this.ACTION] = this.deleteAction;
        query["replyID"] = VideoLib.deleteID;
        d = this.makePostRequest("/a/review/", query);
        d.addCallbacks(VideoLib.deleteReplyOkay, VideoLib.deleteReplyErr);
        this.closePopup();
    }
    else if (this.deleteAction == "remove") {
        var query = {};
        query[this.ACTION] = this.deleteAction;
        query["reviewID"] = VideoLib.deleteID;
        d = this.makePostRequest("/a/review/", query);
        d.addCallbacks(VideoLib.deleteReplyOkay, VideoLib.deleteReplyErr);
        this.closePopup();
    } else {
        f.videoID.value = VideoLib.deleteID;
        f[VideoLib.ACTION].value = VideoLib.REMOVE_ACTION_VALUE;
        f.submit();
    }
}

VideoLib.deleteReplyOkay = function() {
    VideoLib.refreshReviews();
}

VideoLib.deleteReplyErr = function(err) {
    VideoLib.logAtTop(err.faultString);
}

VideoLib.handleDeleteReview = function(anchor, id) {
    VideoLib.handleDelete(anchor, id);
    this.deleteAction = "remove";
}

VideoLib.showMovieFinderPopup = function(anchor, clicked)
{
    if (!VideoLib.checkLoggedIn(this.pageURL, 'please sign in or register to score movies'))
    {
        return;
    }

    if (!clicked && VideoLib.theOpenPopup != null)
    {
        return;
    }

    if (!clicked)
    {
        //$("movieFinderPopupInnerDiv").onmouseover = function() { log("onmouseover"); VideoLib.stopHideMovieFinderTimer(); };
        //$("movieFinderPopupInnerDiv").onmouseout = function() {  log("onmouseout"); VideoLib.stopShowMovieFinderTimer(); VideoLib.startHideMovieFinderTimer(); };
    }

    VideoLib.openPopup('movieFinderPopup', anchor, '');
}

VideoLib.closeMovieFinderPopup = function(cancelled)
{
    if (cancelled)
    {
        VideoLib.resetRatings();
    }

    $("movieFinderPopupInnerDiv").onmouseover = null;
    $("movieFinderPopupInnerDiv").onmouseout = null;
    VideoLib.closePopup();
    VideoLib.stopShowMovieFinderTimer();
    VideoLib.stopHideMovieFinderTimer();
}

VideoLib.filterSelector = null;
VideoLib.showMovieFinderTimer = null;
VideoLib.hideMovieFinderTimer = null;
VideoLib.SHOW_TIMER_SECONDS = 0.6;
VideoLib.HIDE_TIMER_SECONDS = 0.75;

VideoLib.movieScoreOnMouseOver = function(anchor)
{
    VideoLib.startShowMovieFinderTimer(anchor);
    VideoLib.stopHideMovieFinderTimer();
}

VideoLib.movieScoreOnMouseOut = function(anchor)
{
    VideoLib.stopShowMovieFinderTimer(anchor);
    VideoLib.stopHideMovieFinderTimer();
}

VideoLib.startShowMovieFinderTimer = function(anchor)
{
    if (!VideoLib.showMovieFinderTimer) // if not already started.
    {
        VideoLib.showMovieFinderTimer = setTimeout(function() { VideoLib.showMovieFinderPopup(anchor, false); }, VideoLib.SHOW_TIMER_SECONDS * 1000);
    }
}

VideoLib.stopShowMovieFinderTimer = function()
{
    if (VideoLib.showMovieFinderTimer)
    {
        clearTimeout(VideoLib.showMovieFinderTimer);
    }
    VideoLib.showMovieFinderTimer = null;
}

VideoLib.startHideMovieFinderTimer = function()
{
    if (!VideoLib.hideMovieFinderTimer) // if not already started.
    {
        VideoLib.hideTimer = setTimeout(function() { VideoLib.closeMovieFinderPopup(); }, VideoLib.HIDE_TIMER_SECONDS * 1000);
    }
}

VideoLib.stopHideMovieFinderTimer = function()
{
    if (VideoLib.hideMovieFinderTimer)
    {
        clearTimeout(VideoLib.hideMovieFinderTimer);
    }
    VideoLib.hideMovieFinderTimer = null;
}

VideoLib.saveMovieFinderRating = function() {
    var query = MovieFinderWidgetLib.getRatingQuery();
    query[VideoLib.ACTION] = "review_put_rating_xml";
    query["videoID"] = VideoLib.currentVideoID;
    var d = VideoLib.makeRequest("/a/review/", query);
    VideoLib.closeMovieFinderPopup();
    d.addCallbacks(VideoLib.saveMovieFinderRatingOkay, VideoLib.saveMovieFinderRatingErr);
}

VideoLib.saveMovieFinderRatingOkay = function() {
    VideoLib.saveRatings();
    VideoLib.refreshCommunityBlock(); }

VideoLib.saveMovieFinderRatingErr = function(err) {
    VideoLib.resetRatings();
    VideoLib.logAtTop(err.faultString);
}

VideoLib.toggleReplies = function(id, showMore) {
    VideoLib.toggleMore('review.' + id + '.replies.link1.', showMore);
    VideoLib.toggleMore('review.' + id + '.replies.link2.', showMore);
    VideoLib.toggleMore('review.' + id + '.replies.', showMore);
}

VideoLib.toggleFields = new Array();
VideoLib.handleInfoMore = function(showMore) {
    VideoLib.toggleMore("infoLink", showMore);
    for (var i = 0; i < VideoLib.toggleFields.length; i++) {
        VideoLib.toggleMore(VideoLib.toggleFields[i], showMore);
    }
}

VideoLib.toggleMore = function(prefix, showMore) {
    if (showMore) {
        showElement(prefix + "More");
        hideElement(prefix + "Less");
    } else {
        showElement(prefix + "Less");
        hideElement(prefix + "More");
    }
}
