


VideoLib.clickedRating = function(id, rating, currRater) {
    var d = VideoLib.setRating(id, rating);
    if (d) {
        d.addCallbacks(function(resp) { VideoLib.ratingOkay(resp, rating); }, function(err) { VideoLib.ratingErr(err, currRater); });
    }
}

VideoLib.ratingOkay = function(resp, rating) {
    VideoLib.my_rating = VideoLib.my_temp_rating = rating;
    // fetch rating info and update it all over the page.
    VideoLib.refreshRaters();
}

VideoLib.ratingErr = function(err, imgid) {
    VideoLib.logAtTop(err.faultString);
    Jaman.Rater.resetRatingFor(imgid);
}

VideoLib.clickedTempRating = function(id, rating, currRater) {
    VideoLib.my_temp_rating = rating;
    // focus the review section.
    $("review_summary").focus();
}

VideoLib.refreshRaters = function(norefresh) {
    Jaman.Rater.setRatingForObj(VideoLib.currentVideoID, VideoLib.my_rating, "");
    var ownerRating = $("ownerReviewRating");
    if (ownerRating) {
        ownerRating.style.width = 45 * VideoLib.my_rating / 100 + "px";
    }
    if (!norefresh) {
        // fetch number/avg rating and populate values.
        var query = {"videoID": VideoLib.currentVideoID};
        query[VideoLib.ACTION] = VideoLib.FETCH_THUMBNAIL_XML_ACTION_VALUE;
        var d = VideoLib.makeRequest(VideoLib.FETCH_THUMBNAIL_XML_ACTION_URL, query);
        d.addCallbacks(function(resp) {
            var info = eval(resp.responseText)[0];
            var s = info.rating.count + (info.rating.count == 1 ? " Rating" : " Ratings");
            s += " (Avg. " + Math.round(info.rating.average / 10) / 2 + ")";
            $("summaryRatingStats").innerHTML = s;
            $("communityRatingStats").innerHTML = s;
        }, function(err) {
            VideoLib.logAtTop(err.faultString);
        });
    }
}

VideoLib.refreshCommunityBlock = function() {
    var query = {"videoID": VideoLib.currentVideoID,
                 "theAction": "fetch_community_xml"};
    d = VideoLib.makeRequest("/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("/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.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_temp_rating;
    query["theAction"] = "review_update_xml";

    d = VideoLib.makePostRequest("/review/", query);
    d.addCallbacks(VideoLib.postOkay, VideoLib.postErr);
}

VideoLib.postOkay = function() {
    VideoLib.my_rating = VideoLib.my_temp_rating;
    VideoLib.refreshRaters();

    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.refreshCommunityBlock();
}

VideoLib.postErr = function(err) {
    VideoLib.resetRatings();
    VideoLib.log("postErr", err.faultString);
}

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.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("/review/", query);
    d.addCallbacks(VideoLib.replyOkay, VideoLib.replyErr);
}

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("/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);
}

// special handler here for paginated reviews
VideoLib.handlePageOffset = function(n) {
    this.closePopup();
    var f = $("theForm");
    f.pageOffset.value = n;
    VideoLib.refreshReviews();
    VideoLib.scrollTo("communityBlock");
}

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;
    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();

        Jaman.Rater.setRatingFor("raterImage101", VideoLib.my_rating);

    appendChildNodes($("movieFinderPopupDiv"), $("scoreWidget"));     MovieFinderWidgetLib.onRatingChanged = null;

    VideoLib.scrollTo("communityBlock");
}

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("/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("/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("/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");
    }
}
