
Type.registerNamespace('SfEmail');

SfEmail.ValidateEmailAddress = function(address) {
    var emailRegEx = /^[A-Z0-9.'_%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$/i;
    return emailRegEx.test(address);
}

SfEmail.EnableStartTime = function() {
    var enable = $("emailInviteStartcb").checked;
    $("emailInviteArea_emailInviteStartTimetxt").disabled = !enable;
    SfEmail.UpdateMessage();
}

SfEmail.UpdateMessage = function() {
    var startTimeInputElement = $("emailInviteArea_emailInviteStartTimetxt");
    var startTimeInput = startTimeInputElement.value;

    var checkboxElement = $("emailInviteStartcb");
    var messageFieldElement = $("emailInviteArea_emailInviteMessageFieldtxt");
    if (checkboxElement.checked) {
        var startTimeMS = SfKernel.DurationDisplayToMS(startTimeInput);
        messageFieldElement.value = replaceStartPoint(startTimeMS);
    }
    else {
        messageFieldElement.value = replaceStartPoint(0);
    }

    function replaceStartPoint(startTimeMS) {
        var messageText = $("emailInviteArea_emailInviteMessageFieldtxt").value;
        var playFromString = "&playfrom=";
        var peidString = "peid=";
        var startTimeHMS = SfKernel.GetDisplayDuration(startTimeMS, true);

        if (messageText.match(playFromString) == null && startTimeMS > 0) {
            messageText = messageText.replace(peidString + getPeId(), peidString + getPeId() + playFromString + startTimeMS);
        }
        else {
            var startIndex = messageText.indexOf(playFromString);
            var endIndex = messageText.indexOf("\n", startIndex);
            var oldStartTime = messageText.substring(startIndex, endIndex);
            if (startTimeMS > 0) {
                messageText = messageText.replace(peidString + getPeId() + oldStartTime, peidString + getPeId() + playFromString + startTimeMS);
            }
            else {
                messageText = messageText.replace(peidString + getPeId() + oldStartTime, peidString + getPeId());
            }
        }
        return messageText;
    }

    function getPeId() { return Manifest.PresentationId.replace(/-/g, ""); }

}

SfEmail.SetInviteStartTime = function() {
    var startTimeInputElement = $("emailInviteArea_emailInviteStartTimetxt");
    var currentTimeDisplay = $("PlayerPositionArea").innerHTML;
    startTimeInputElement.value = currentTimeDisplay.substring(0, currentTimeDisplay.indexOf("/"));
    SfEmail.EnableStartTime();
}


SfEmail.ClientExport = function() {
    SfEmail.CloseEmailInvitation();
    SfEmailIsShowing = false;

    var invite = SfEmail.CollectData();
    var mailTo = String.format("mailto:{0}?subject={1}&body={2}",
                                encodeURIComponent(invite.ToAddresses.join(",")),
                                encodeURIComponent(invite.Subject),
                                encodeURIComponent(invite.MessageBody));
    location.href = mailTo;
}

var SfEmailInvite = null;
var SfEmailIsShowing = false;

SfEmail.OpenEmailInvitation = function() {
    if ($("EmailInviteArea").style.display != "block") {
        SfEmail.HidePresentationCardScrollbars();
        $("emailInviteArea_emailInviteToFieldtxt").value = "";

        var fromAddress = new MediasitePlayerCookie().GetValue("UserFromEmail");
        if (fromAddress != undefined) {
            $("emailInviteArea_emailInviteFromFieldtxt").value = fromAddress;
        }

        if (Manifest.PlayStatus != SfKernel.PresentationPlayStatus.OnDemand) {
            $("emailInviteStartcb").disabled = true;
        }

        if (SfEmailInvite) {
            SfEmail.SetInviteStartTime();

            if (!SfEmailInvite.UseServerForSMTP) {
                SfEmail.ClientExport();
            }
            else {
                show("EmailInviteArea");
                SfEmailIsShowing = true;
            }
        }
        else {
            SonicFoundry.Mediasite.Player.DataAccess.PlayerService.GetInvite(Manifest.PlaybackTicketId, SfEmail.GetInviteOnSuccess);
        }
    }
}

SfEmail.CloseEmailInvitation = function() {
    hide("EmailInviteArea");
}

// workaround for issue in firefox 2 on mac where scrollbars show on top layer regardless of zIndex.
SfEmail.HidePresentationCardScrollbars = function() {
    if ($('CurrentSlideArea').offsetLeft == ($('PresentationCardArea').offsetLeft + 1)) {
        $('PresentationCardAreaScrollDiv').style.overflow = 'hidden';
        $('PresentationCardAreaScrollDiv').style.overflowY = 'hidden';
    }
}

SfEmail.ShowPresentationCardScrollbars = function() {
    if ($('CurrentSlideArea').offsetLeft == ($('PresentationCardArea').offsetLeft + 1)) {
        $('PresentationCardAreaScrollDiv').style.overflowY = 'scroll';
        $('PresentationCardAreaScrollDiv').style.overflowX = 'hidden';
    }
}

SfEmail.GetInviteOnSuccess = function(emailData) {
    $("emailInviteArea_emailInviteSubjectFieldtxt").value = emailData.Subject;
    var message = emailData.MessageBody;
    var messageCleaned = message.replace(/\t/g, "");
    $("emailInviteArea_emailInviteMessageFieldtxt").value = messageCleaned;

    SfEmailInvite = emailData;
    SfEmail.SetInviteStartTime();

    if (!emailData.UseServerForSMTP) {
        SfEmail.ClientExport();
    }
    else {
        show("EmailInviteArea");
        SfEmailIsShowing = true;
    }
}

SfEmail.SendEmail = function() {
    var invite = SfEmail.CollectData();

    if (validateInvite(invite)) {
        SonicFoundry.Mediasite.Player.DataAccess.PlayerService.SendInvite(Manifest.PlaybackTicketId, invite, SfEmail.SendOnSuccess);
        new MediasitePlayerCookie().SetValue("UserFromEmail", invite.FromAddress);
    }
    else {
        SfEmail.ShowMessage(Localization.EmailInviteInvalid, false)
    }

    function validateInvite(invite) {
        if (!SfEmail.ValidateEmailAddress(invite.FromAddress)) {
            return false;
        }

        for (var i = 0; i < invite.ToAddresses.length; i++) {
            if (!SfEmail.ValidateEmailAddress(invite.ToAddresses[i])) {
                return false;
            }
        }
        return true;
    }

}

SfEmail.SendOnSuccess = function(message) {
    SfEmail.ShowMessage(message, true);
}


SfEmail.ShowMessage = function(message, closeParent) {
    show('emailInviteModalMask');
    show('emailInviteReturnDiv');
    $("emailInviteReturnDivMessage").innerHTML = message;
    $("emailInviteReturnDivCloseButtonFlag").innerHTML = closeParent;
}

SfEmail.CloseMessage = function() {
    hide('emailInviteModalMask');
    hide('emailInviteReturnDiv');
    if ($("emailInviteReturnDivCloseButtonFlag").innerHTML != "false") {
        SfEmail.CloseEmailInvitation();
        SfEmailIsShowing = false;
    }
    else {
        $("emailInviteReturnDivCloseButtonFlag").innerHTML = "true";
    }
}

function show(e) {
    $(e).style.display = "block";
}
function hide(e) {
    $(e).style.display = "none";
}


SfEmail.CollectData = function() {
    var invite = new SonicFoundry.Mediasite.Player.DataAccess.PlayerEmailMessage();
    invite.FromAddress = $("emailInviteArea_emailInviteFromFieldtxt").value;

    var recipients = $("emailInviteArea_emailInviteToFieldtxt").value.split(";");

    for (var i = 0; i < recipients.length; i++) {
        recipients[i] = recipients[i].trim();
    }

    invite.ToAddresses = recipients;
    invite.Subject = $("emailInviteArea_emailInviteSubjectFieldtxt").value;
    invite.MessageBody = $("emailInviteArea_emailInviteMessageFieldtxt").value;
    return invite;
}

/// Ask Question Area

Type.registerNamespace('SfForum');

var SfForumIsShowing = false;

SfForum.EnableQuestionTime = function() {
    var enable = $("askQuestionTimecb").checked;
    $("askQuestionArea_askQuestionTimetxt").disabled = !enable;
}

SfForum.OpenAskQuestion = function() {
    if ($("AskQuestionArea").style.display != "block") {
        SfEmail.HidePresentationCardScrollbars();
        show("AskQuestionArea");
        SfForumIsShowing = true;

        this.TextAreasInit();

        var userFromName = new MediasitePlayerCookie().GetValue("UserFromName");
        if (userFromName != undefined) {
            $("askQuestionArea_askQuestionNameFieldtxt").value = userFromName;
        }
        var userFromEmail = new MediasitePlayerCookie().GetValue("UserFromEmail");
        if (userFromEmail != undefined) {
            $("askQuestionArea_askQuestionEmailFieldtxt").value = userFromEmail;
        }

        if (Manifest.PlayStatus != SfKernel.PresentationPlayStatus.OnDemand) {
            // hide checkbox and move send button off form field
            $("askQuestionButtons").style.height = '44px';
            $("askQuestionButtons").style.top = '12px';
            $("askQuestionButtons").style.right = '12px';
            $("askQuestionTime").style.display = "none";
            $("askQuestionTimecb").checked = false;
            $("askQuestionArea_askQuestionTimetxt").value = "00:00:00";
        }
        else {
            $("askQuestionTimecb").checked = true;
            SfForum.SetPresentationTime();
        }
    }
}

SfForum.CloseAskQuestion = function() {
    hide('AskQuestionArea');
}

SfForum.SetPresentationTime = function() {
    var currentTimeDisplay = $("PlayerPositionArea").innerHTML;
    $("askQuestionArea_askQuestionTimetxt").value = currentTimeDisplay.substring(0, currentTimeDisplay.indexOf("/"));
    SfForum.EnableQuestionTime();
}

SfForum.TextAreasInit = function() {
    var obj = document.getElementById("askQuestionArea_askQuestionMessageFieldtxt");
    obj.onkeyup = SfForum.ForceMaxLength;
    obj.onblur = SfForum.ForceMaxLength;
}

SfForum.ForceMaxLength = function() {
    var characterLimit = 2048;
    if (this.value.length > characterLimit) {
        this.value = this.value.substring(0, characterLimit);
    }
}

SfForum.SendQuestion = function() {
    var questionInfo = new SonicFoundry.Mediasite.Player.DataAccess.PresentationQuestion();

    questionInfo.Submitter = $("askQuestionArea_askQuestionNameFieldtxt").value;
    questionInfo.SubmitterEmail = $("askQuestionArea_askQuestionEmailFieldtxt").value;
    questionInfo.Subject = $("askQuestionArea_askQuestionSubjectFieldtxt").value;
    questionInfo.Question = $("askQuestionArea_askQuestionMessageFieldtxt").value;

    if ($("askQuestionTimecb").checked) {
        questionInfo.TimeInPresentation = SfKernel.DurationDisplayToMS($("askQuestionArea_askQuestionTimetxt").value);
    }
    else {
        questionInfo.TimeInPresentation = 0;
    }

    var errors = SfForum.AskQuestionFormErrors(questionInfo);

    if (errors.length > 0) {
        SfForum.ShowAskQuestionMessage(errors, false);
        return;
    }

    SonicFoundry.Mediasite.Player.DataAccess.PlayerService.SendQuestion(Manifest.PlaybackTicketId, questionInfo, SfForum.SendQuestionOnSuccess);

    new MediasitePlayerCookie().SetValue("UserFromName", questionInfo.Submitter);

    if (questionInfo.SubmitterEmail.length > 0) {
        new MediasitePlayerCookie().SetValue("UserFromEmail", questionInfo.SubmitterEmail);
    }
}

SfForum.AskQuestionFormErrors = function(questionInfo) {
    var errors = "";

    if (questionInfo.Submitter.length < 1) {

        errors += "<br/> - " + Localization.ForumNameRequired;
    }

    if (questionInfo.SubmitterEmail.length > 0 && !SfEmail.ValidateEmailAddress(questionInfo.SubmitterEmail)) {
        errors += "<br/> - " + Localization.ForumEmailInvalid;
    }

    if (questionInfo.Subject.length < 1) {
        errors += "<br/> - " + Localization.ForumSubjectRequired;
    }

    if (questionInfo.Question.length < 1) {
        errors += "<br/> - " + Localization.ForumQuestionRequired;
    }

    if (questionInfo.TimeInPresentation > Manifest.Duration) {
        errors += "<br/> - " + Localization.ForumQuestionTimeError;
    }

    if (errors.length > 0) {
        errors = Localization.ForumErrorMessage + "<br/>" + errors;
    }
    return errors;
}

SfForum.SendQuestionOnSuccess = function(response) {

    if (response.Success) {
        SfForum.ShowAskQuestionMessage(Localization.SubmitQuestionSuccess, true);

        $("askQuestionArea_askQuestionMessageFieldtxt").value = "";
        $("askQuestionArea_askQuestionSubjectFieldtxt").value = "";
    }
    else {
        if (response.Message.length > 0) {
            SfForum.ShowAskQuestionMessage(response.Message, false);
        }
        else {
            SfForum.ShowAskQuestionMessage(Localization.SubmitQuestionFailure, false);
        }
    }

}

SfForum.ShowAskQuestionMessage = function(message, closeParent) {
    show('askQuestionModalMask');
    show('askQuestionReturnDiv');
    $("askQuestionReturnDivMessage").innerHTML = message;
    $("askQuestionReturnDivCloseButtonFlag").innerHTML = closeParent;
}

SfForum.CloseAskQuestionMessage = function() {
    hide('askQuestionModalMask');
    hide('askQuestionReturnDiv');
    if ($("askQuestionReturnDivCloseButtonFlag").innerHTML != "false") {
        SfForum.CloseAskQuestion();
        SfForumIsShowing = false;
    }
    else {
        $("askQuestionReturnDivCloseButtonFlag").innerHTML = "true";
    }
}
    


