﻿/// <reference path="jquery-1.2.3-intellisense.js" />
/// <reference path="Global.js" />
/// <reference path="Membership.js" />
/// <reference path="FileManager.js" />

var Story =
{
    _likeStoryUrl: '',
    _commentStoryUrl: '',
    _commentListUrl: '',
    _flagUrl: '',
    _deleteStoryUrl: '',
    _shareStoryUrl: '',
    _uploadStoryImageUrl: '',
    _previewStoryUrl: '',
    _checkStoryUrlUnique: '',

    set_likeStoryUrl: function(value) {
        if (Story._likeStoryUrl !== value) {
            Story._likeStoryUrl = value;
        }
    },

    set_commentStoryUrl: function(value) {
        if (Story._commentStoryUrl !== value) {
            Story._commentStoryUrl = value;
        }
    },

    set_commentListUrl: function(value) {
        if (Story._commentListUrl !== value) {
            Story._commentListUrl = value;
        }
    },

    set_flagUrl: function(value) {
        if (Story._flagUrl !== value) {
            Story._flagUrl = value;
        }
    },

    set_deleteStoryUrl: function(value) {
        if (Story._deleteStoryUrl !== value) {
            Story._deleteStoryUrl = value;
        }
    },

    set_shareStoryUrl: function(value) {
        if (Story._shareStoryUrl !== value) {
            Story._shareStoryUrl = value;
        }
    },

    set_uploadStoryImageUrl: function(value) {
        if (Story._uploadStoryImageUrl !== value) {
            Story._uploadStoryImageUrl = value;
        }
    },

    set_previewStoryUrl: function(value) {
        if (Story._previewStoryUrl !== value) {
            Story._previewStoryUrl = value;
        }
    },

    set_submitStoryUrl: function(value) {
        if (Story._submitStoryUrl !== value) {
            Story._submitStoryUrl = value;
        }
    },

    set_checkStoryUrlUnique: function(value) {
        if (Story._checkStoryUrlUnique !== value) {
            Story._checkStoryUrlUnique = value;
        }
    },

    preview: function(formId) {
        $('#' + formId)
			.attr("action", Story._previewStoryUrl)
			.attr("target", "_new")
			.submit();
    },

    submitStory: function(formId) {
        $('#' + formId)
			.attr("action", Story._submitStoryUrl)
			.attr("target", "")
			.submit();
    },

    like: function(storyId, currentVote, count, it, ed, ing) {

        $('#' + it).hide();
        $('#' + ing).show();

        $.ajax({
            type: "POST",
            url: Story._likeStoryUrl,
            data: "storyId=" + storyId.toString(),
            success: function(json) {
                var result = eval('(' + json + ')');
                if (!result.isSuccessful) {
                    $('#' + ing).hide();
                    $('#' + it).show();
                    alert(result.errorMessage);
                } else {
                    currentVote += 1;
                    $('#' + count).html("<strong>" + currentVote.toString() + "</strong><br />Likes");
                    $('#' + ing).hide();
                    $('#' + ed).show();
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $('#' + ing).hide();
                $('#' + it).show();
                alert(textStatus);
                alert('An unexpected error has occurred while voting on this story.');
            }
        });
    },

    validateComment: function() {
        var txtComment = $('#txtComment');
        var comment = $.trim(txtComment.val());
        var error = '';

        if (comment.length == 0) {
            error = 'Comment cannot be empty';
        } else if (comment.length > 2048) {
            error = 'Comment must be less than 2048 characters';
        }

        if (error.length > 0) {
            $('#commentMessage').html(error);
            $('#commentMessage').show();
            txtComment.focus();

            return false;
        }

        $('#commentMessage').hide();
        return true;
    },

    updateComments: function(storyId, onComplete) {

        $.get(Story._commentListUrl, { "storyId": storyId }, function(result) {

            if ($.isFunction(onComplete)) {
                onComplete(result);
            }
        });
    },


    comment: function(storyId, captchaInput, captchaGuid, captchaImage, onComplete) {
        if (!Membership.get_isLoggedIn()) {
            Membership.showLogin();
            return;
        }

        if (!Story.validateComment()) {
            return;
        }

        Story._showMessage('submittingMessage', 'Submitting comment...', false);
        $('#btnSubmitComment').attr('disabled', 'disabled')

        var txtComment = $('#txtComment');
        var comment = $.trim(txtComment.val());

        var params = {
            'storyId': storyId.toString(),
            'commentContent': comment,
            'captchaInput': $('#' + captchaInput).val(),
            'captcha-guid': $('#' + captchaGuid).val(),
            'captchaValid': 'false'
        };

        $.ajax({
            type: "POST",
            url: Story._commentStoryUrl,
            data: params,
            success: function(json) {
                var result = eval('(' + json + ')');
                if (!result.isSuccessful) {
                    if (result.errorMessage.indexOf('captcha') > -1) {
                        Global.getNewCapture(captchaImage, $('#' + captchaGuid));
                    }

                    if (result.errorMessage.indexOf('captcha') > 0) {
                        Story._showMessage('captchaMessage', result.errorMessage, false);
                        Story._showMessage('submittingMessage', '', true);
                    } else {
                        Story._showMessage('submittingMessage', result.errorMessage, true);
                    }

                    txtComment.focus();
                    $('#btnSubmitComment').attr('disabled', '');


                } else {
                    txtComment.val('');
                    $('#captchaMessage').hide();
                    $('#txtCaptchaInput').val('');
                    Story._showMessage('submittingMessage', 'Thanks for your comment!', false);

                    $('#btnSubmitComment').hide();
                    $('#btnSubmitComment').attr('disabled', '');

                    if ($.isFunction(onComplete)) {
                        onComplete();
                    }
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert('An unexpected error has occurred while submitting the comment.');
                $('#btnSubmitComment').attr('disabled', '')
            }
        });
    },

    flag: function(storyId, message, it, ed, ing, onComplete) {

        $('#' + it).hide();
        $('#' + ing).show();

        var params = {
            'storyId': storyId.toString(),
            'message': message
        };

        $.ajax({
            type: "POST",
            url: Story._flagUrl,
            data: params,
            success: function(json) {
                var result = eval('(' + json + ')');
                if (!result.isSuccessful) {
                    $('#' + ing).hide();
                    $('#' + it).show();
                    alert(result.errorMessage);
                }
                else {
                    // yay! successful flagging
                    $('#' + ing).hide();
                    $('#' + ed).text("Reported as " + message);
                    $('#' + ed).show();
                    if ($.isFunction(onComplete)) {
                        onComplete();
                    }
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $('#' + ing).hide();
                $('#' + it).show();
                alert('An unexpected error has occurred while submitting the request.');
            }
        });
    },

    requestFlag: function(storyId, it, ed, ing) {
        // must be logged in
        if (!Membership.get_isLoggedIn()) {
            Membership.showLogin();
            return;
        }

        var pane = Story.openFlagPane(storyId);

        pane.find('.close').click(function() {
            Story.closeFlagPane(storyId);
        });
        pane.find('input[type=button]').click(function() {
            var msg = pane.find('input[name=flag]:checked').val();
            if (msg) {
                Story.flag(storyId, msg, it, ed, ing, function() {
                    Story.closeFlagPane(storyId);
                });
            }
        });

    },

    closeFlagPane: function(storyId) {
        var flagArea = $('#flagArea' + storyId);
        flagArea.slideUp().fadeOut('fast');

    },

    openFlagPane: function(storyId) {

        var flagArea = $('#flagArea' + storyId);
        var contents = '<div class="instruction">Choose a Reason:</div><div class="close"><a href="javascript:;">Close (x)</a></div><ul><li><input type="radio" name="flag" value="Spam" /> Spam</li><li><input type="radio" name="flag" value="Expired" /> Expired</li><li><input type="radio" name="flag" value="Duplicate" /> Duplicate</li><li><input type="radio" name="flag" value="Offensive" /> Offensive</li><ul><div><input class="button" type="button" value="Report this Item" /></div>';
        flagArea.html(contents);
        flagArea.slideDown().fadeIn('fast');

        return flagArea;
    },





    deleteStory: function(storyId, it, ing) {
        if (!Membership.get_isLoggedIn()) {
            Membership.showLogin();
            return;
        }

        if (!Story.confirmStoryDelete()) {
            return;
        }

        $('#' + it).hide();
        $('#' + ing).show();

        var params = {
            'storyId': storyId.toString()
        };

        $.ajax({
            type: "POST",
            url: Story._deleteStoryUrl,
            data: params,
            success: function(json) {
                var result = eval('(' + json + ')');
                if (!result.isSuccessful) {
                    $('#' + ing).hide();
                    $('#' + it).show();
                    alert(result.errorMessage);
                }
                else {
                    $('#' + ing).hide();
                    window.location.reload();
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $('#' + ing).hide();
                $('#' + it).show();
                alert('An unexpected error has occurred while submitting the request.');
            }
        });
    },

    checkUnique: function(el, validator, ruleName) {
        if (!Membership.get_isLoggedIn()) {
            Membership.showLogin();
            return;
        }

        var params = {
            storyurl: $('#' + el).val()
        };

        $.ajax({
            type: "POST",
            url: Story._checkStoryUrlUnique,
            data: params,
            success: function(json) {
                var result = eval('(' + json + ')');
                var element = document.getElementById(el);
                if (!result.isSuccessful) {
                    var errors = {};
                    errors[element.name] = result.errorMessage;
                    validator.showErrors(errors);
                }
                else {
                    if (result.unique) {
                        var submitted = validator.formSubmitted;
                        validator.prepareElement(element);
                        validator.formSubmitted = submitted;
                        validator.successList.push(element);
                        validator.showErrors();
                    } else {
                        var errors = {};
                        errors[el] = validator.defaultMessage(element, ruleName);
                        validator.showErrors(errors);
                    }
                    validator.stopRequest(element, result.unique);
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {

            }
        });
    },

    showShare: function(storyId, storyTitle) {
        var ops = Global.modalBoxOptions;
        //ops.containerCss = {height:'150px', width:'400px', left:'50%', top:'15%', "margin-left": '-200px'};	
        ops.containerCss = { left: '50%', top: '15%', "margin-left": '-200px' };
        $('div.shareModalContent').modal(ops);
        //$('#btnTellFriend').attr("storyid", storyId);

        $('#storyIdHidden').val(storyId);
        $('#shareStoryTitle').html(storyTitle);
    },

    shareStory: function(storyId, name, email, ing, ed, it) {
        if (!Membership.get_isLoggedIn()) {
            Membership.showLogin();
            return;
        }

        $('#' + ing).show();

        var params = {
            'storyId': storyId.toString(),
            'friendName': name,
            'email': email
        };

        $.ajax({
            type: "POST",
            url: Story._shareStoryUrl,
            data: params,
            success: function(json) {
                var result = eval('(' + json + ')');
                if (!result.isSuccessful) {
                    $('#' + ing).hide();
                    alert(result.errorMessage);
                }
                else {
                    $('#' + ing).hide();
                }
                $('#' + ed).show();
                $('#' + it).hide();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $('#' + ing).hide();
                alert('An unexpected error has occurred while submitting the request.');
                Global.closeModal($.modal.impl.dialog);
            }
        });

    },

    hideShareStory: function() {
        Global.closeModal($.modal.impl.dialog);
    },

    uploadStoryImage: function(fileInputId, fileLocation) {
        if (!Membership.get_isLoggedIn()) {
            Membership.showLogin();
            return;
        }

        FileManager.ajaxFileUpload( //upload new image
			Story._uploadStoryImageUrl,
			fileInputId,
			'loading',
			function(filePath, height, width) { //success function
			    $('#upImg').slideUp( //slide up old image
					"fast",
					function() { //slide down new image
					    $(this)
						.css("height", height)
						.css("width", width)
						.attr("src", filePath)
						.slideDown("slow");
					}
				);
			    $("#" + fileLocation).val(filePath);
			},
			function() { //fail function
			    $('#upImg').slideUp("fast"); //slide up old image				
			}
		);
    },

    confirmSpamComplaint: function() {
        return confirm("Are you sure you want to mark this story as spam?");
    },

    confirmStoryDelete: function() {
        return confirm("Are you sure you want to delete this story?");
    },

    _showMessage: function(e, msg, err) {
        if (err) {
            $('#' + e).css('color', '#ff0000');
        }
        else {
            $('#' + e).css('color', '');
        }
        $('#' + e).html(msg)
        $('#' + e).show();
    },

    cancelSubmission: function(redirectUrl) {
        if (confirm("Are you sure you want to cancel?")) {
            location.href = redirectUrl;
        }
    }
}