
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;
    
    location.href = SfEmailInvite.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;
    $("emailInviteArea_emailInviteMessageFieldtxt").value = emailData.MessageBody;
    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;
        
        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.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";
    }
}
    


