﻿var RaF = RaF || {};

RaF.isIE = false;
if (document.all) //navigator.appName == 'Microsoft Internet Explorer')
    RaF.isIE = true;

RaF.current_id = 0;

RaF.changePageUrl = null;

/* Text messages */
RaF.txtNoNewMailsAdded = "Der blev ikke tilføjet nogle nye e-mail-adresser";
RaF.txtImported = "Importeret";
RaF.txtSucessfullySaved = "Ændringerne blev gemt";
RaF.txtSuccessfullyAdded = "Data blev tilføjet";
RaF.txtFillInName = "Skriv navn";
RaF.txtCorrectEmail = "Skriv korrekt e-mail";
RaF.txtWrongTypeSelectedCSV = "Der er valgt en forkert filtype, skal være .csv";
RaF.txtDeleted = "Slettet";
RaF.txtClearAllConfirm = "Er du sikker på du vil fjerne alle tilføjede venner?";
RaF.txtEmailTooLong = "E-mail-adresse er for lang";
RaF.txtNameTooLong = "Navn er for langt";
RaF.txtManyErrors = "Nogle felter er ikke udfyldt korrekt";
RaF.txtTimeoutExpired = "Det var desværre ikke muligt at importere de ønskede email adresser fra din mailklient på dette tidspunkt. Vær venlig at prøve igen senere";
RaF.txtClearAllPattern = "Slet alle importerede(<!--@FriendsTotal-->)";
RaF.txtReadyForAction = "Parat...";
RaF.txtClearedAll = "Alle felter blev nulstilllet";
RaF.txtSelectImportType = "Angiv venlist import type";
RaF.txtNoFriendsAdded = "Du burde vælge nogle venner";

RaF.ajaxOnTimeout = function(res)
{
    RaF.HideLoading();
    RaF.ShowError(RaF.txtTimeoutExpired);
    var btnImport = $("btnImport");
    if (btnImport != null)
    {
        btnImport.disabled = false;
    }
}

AjaxPro.onTimeout = RaF.ajaxOnTimeout;
AjaxPro.timeoutPeriod = 30000;


RaF.getNextSibling = function(o)
{
    var n = o;
    do
        n = n.nextSibling;
    while (n && n.nodeType != 1);
    
    return n;
}

RaF.getPreviousSibling = function(o)
{
    var p = o;
    do
        p = p.previousSibling;
    while (p && p.nodeType != 1);
    
    return p;
}

RaF.getTextContent = function(node)
{
    if (isIE)
    {
        return node.innerText;
    }
    return node.textContent;
}

RaF.setTextContent = function(node, value)
{
    if (isIE)
    {
        node.innerText = value;
    }
    else
    {
        node.textContent = value;
    }
}

RaF.getClearAllButton = function()
{
    return $("clearAllLink");
}

RaF.getFriendsTable = function()
{
    return $("tblFriends");
}

RaF.getFriendRow = function(field)
{
    return field.parentNode.parentNode;
}

RaF.getFriendRowById = function(id)
{
    var table = RaF.getFriendsTable();
    
    var trs = table.getElementsByTagName("tr");
    if (trs.length >= 2)
    {
        for (var i=1; i<trs.length; i++)
        {
            var row = trs[i];
            var idInput = RaF.getIdInput( row ).value;
            if (id == idInput)
            {
                return row;
            }
        }
    }
    return null;
}

RaF.getIsActive = function(row)
{
    return row.getElementsByTagName("td")[0].getElementsByTagName("input")[0].checked;
}

RaF.getIdInput = function(row)
{
    return row.getElementsByTagName("td")[0].getElementsByTagName("input")[1];
}

RaF.getNameInput = function(row)
{
    return row.getElementsByTagName("td")[1].getElementsByTagName("input")[0];
}

RaF.getNameHidden = function(row)
{
    return row.getElementsByTagName("td")[1].getElementsByTagName("input")[1];
}

RaF.getEmailInput = function(row)
{
    return row.getElementsByTagName("td")[2].getElementsByTagName("input")[0];
}

RaF.getEmailHidden = function(row)
{
    return row.getElementsByTagName("td")[2].getElementsByTagName("input")[1];
}


RaF.ShowLoading = function()
{
    $("divLoading").innerHTML = '<img height="21px" width="81px" src="/files/billeder/site/ajax_loading.gif" alt="Henter data" />';
}

RaF.HideLoading = function()
{
    $("divLoading").innerHTML = RaF.txtReadyForAction;;
}

RaF.ShowError = function(text)
{        
    $("referMessageContainer").setStyle({color: "red"});    
    $("referMessageContainer").innerHTML = text;
    $("referMessageContainer").title = text.stripTags();
    $("referMessageContainer").show();
}
    
RaF.ShowMessage = function(text)
{
    $("referMessageContainer").setStyle({color: "green"});
    $("referMessageContainer").innerHTML = text;
    $("referMessageContainer").title = text.stripTags();
    $("referMessageContainer").show();
}

RaF.HideMessage = function()
{
    $("referMessageContainer").hide();
}

RaF.SetClearAllCount = function(numImported)
{
    RaF.setTextContent(RaF.getClearAllButton(), RaF.txtClearAllPattern.replace(/<!--@FriendsTotal-->/g, numImported));
}


RaF.CurrentPage = 0;
RaF.Sort = 1;



RaF.ValidateInput = function(row)
{
    var name = RaF.getNameInput(row).value;
    var email = RaF.getEmailInput(row).value.toLowerCase();
    
    return RaF.ValidateFriendData(name, email);
}

RaF.ValidateFriendData = function(name, email)
{
    var sError = "";
    
    sError = RaF.ValidateName(name);
    if (sError != "")
    {
        sError += "<br/>";
    }
    
    sError += RaF.ValidateEmail(email);
  
    if (sError != "")
    {
        RaF.ShowError(sError);
        return false;
    }
    else
    {    
        return true;
    }
    
    return false;
}

RaF.ValidateName = function(name)
{
    if (name.length <= 0)
        return RaF.txtFillInName;
    else if (name.length > 100)
        return RaF.txtNameTooLong;
    else
        return "";
}

RaF.ValidateEmail = function(email)
{
    var reEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/
    if (email.search(reEmail) == -1)
        return RaF.txtCorrectEmail;
    else if (email.length > 40)
        return RaF.txtEmailTooLong;
    else
        return "";
}

RaF.SaveFriendsPage = function()
{
    var table = RaF.getFriendsTable();
    
    var inp = $("flivFriendsData");
    
    var trs = table.getElementsByTagName("tr");
    if (trs.length < 2)
    {
        if (RaF.ChangePage != null)
        {
            RaF.ShowError(RaF.txtNoFriendsAdded);
        }
        return false;
    }
    var idList = "";
    var namesList = "";
    var emailsList = "";
    var isActiveList = "";
    
    var errorFields = new Array();
    var errorNum = 0;
    
    for (var i=1; i<trs.length; i++)
    {
        var row = trs[i];
        
        var id = RaF.getIdInput( row ).value;
        var name = RaF.getNameInput(row).value;
        var email = RaF.getEmailInput(row).value;
        var isActive = RaF.getIsActive(row);
        
        if (isActive == true)
        {
            if (RaF.ValidateName(name) != "")
            {
                errorFields[errorNum] = RaF.getNameInput(row);
                errorNum++;
            }
            if (RaF.ValidateEmail(email) != "")
            {
                errorFields[errorNum] = RaF.getEmailInput(row);
                errorNum++;
            }
        }        
        if (idList != "")
        {
            idList += "|";
            namesList += "|";
            emailsList += "|";
            isActiveList += "|";
        }
        
        idList += id;
        namesList += name;
        emailsList += email;
        isActiveList += isActive;
    }
    
    if (errorNum > 0)
    {
        for (var i=0; i<errorNum; i++)
        {
            errorFields[i].className = "rafInputError";
        }
        RaF.ShowError(RaF.txtManyErrors);
        return false;
    }
    else
    {
        RaF.HideMessage();
        Forbrugerliv.ReferAFriend.FrontEnd.SaveFriendsList(idList, namesList, emailsList, isActiveList, RaF.SaveFriendsList_Callback);
        return true;
    }
}

RaF.SaveFriendsList_Callback = function(ret)
{
    if (RaF.changePageUrl != null)
    {
        if (ret.error == null)
        {                        
            window.location = RaF.changePageUrl;        
        }
        else
        {
            RaF.ShowError(RaF.txtManyErrors);
        }
    }
}

RaF.importChange = function(select)
{
    var divBrowse = $("referBrowse");
    var divLogin = $("referLogin");
    

    if (select.value == 3)
    {
        divLogin.style.display = "none";
        divBrowse.style.display = "block";
    }
    else if (select.value == 0 || select.value == 1 || select.value == 2)
    {
        divBrowse.style.display = "none";
        divLogin.style.display = "block";
    }
    else
    {
        divBrowse.style.display = "none";
        divLogin.style.display = "none";
    }
}


RaF.ApplyEditName = function(field)
{
    if (field)
    {
        var row = RaF.getFriendRow(field);
        
        var id = RaF.getIdInput(row).value;
        var name = RaF.getNameInput(row).value;        
        var email = RaF.getEmailInput(row).value;
        var isActive = RaF.getIsActive(row);

        if (RaF.ValidateFriendData(name, email) != true)
        {
            var sError = RaF.ValidateName(name);
            if (sError != "")
            {
                RaF.getNameInput(row).className = "rafInputError";
            }
            else
            {
                RaF.getNameInput(row).className = "rafInputIdle";
            }
        }
        else
        {
            RaF.getNameInput(row).className = "rafInputIdle";
            if (name != RaF.getNameHidden(row).value)
            {
                RaF.HideMessage();
                Forbrugerliv.ReferAFriend.FrontEnd.SaveFriend(id, name, email, isActive, RaF.SaveFriendName_Callback);
            }
        }
    }
}

RaF.ApplyEditEmail = function(field)
{
    if (field)
    {
        var row = RaF.getFriendRow(field);
        
        var id = RaF.getIdInput(row).value;
        var name = RaF.getNameInput(row).value;
        var email = RaF.getEmailInput(row).value;
        var isActive = RaF.getIsActive(row);
        
        if (RaF.ValidateFriendData(name, email) != true)
        {
            var sError = RaF.ValidateEmail(email);
            if (sError != "")
            {
                RaF.getEmailInput(row).className = "rafInputError";
            }
            else
            {
                RaF.getEmailInput(row).className = "rafInputIdle";
            }
        }
        else
        {

            RaF.getEmailInput(row).className = "rafInputIdle";
            if (email != RaF.getEmailHidden(row).value)
            {
                RaF.HideMessage();
                Forbrugerliv.ReferAFriend.FrontEnd.SaveFriend(id, name, email, isActive, RaF.SaveFriendEmail_Callback);
            }
        }
    }
}

RaF.SaveFriendName_Callback = function(ret)
{
    RaF.SaveFriendProcess(ret, "name");
}

RaF.SaveFriendEmail_Callback = function(ret)
{
    RaF.SaveFriendProcess(ret, "email");
}

RaF.SaveFriendProcess = function(ret, defaultField)
{
    var row = RaF.getFriendRowById(ret.value[1]);
    
    if (ret.value[3] != "")
    {
        defaultField = ret.value[3];
    }
    
    var field = RaF.getNameInput(row);
    var hidden = RaF.getNameHidden(row);
    if (defaultField == "email")
    {
        field = RaF.getEmailInput(row);
        hidden = RaF.getEmailHidden(row);
    }
    
    if (ret.value[0] == "error" || ret.error != null)
    {
        if (ret.error != null)
        {
            RaF.ShowError(ret.error.Message);
        }
        else
        {
            RaF.ShowError(ret.value[2]);
        }
        field.className = "rafInputError";
    }
    else
    {
        hidden.value = field.value;
        RaF.ShowMessage(RaF.txtSucessfullySaved);
        field.className = "rafInputIdle";
    }
}


RaF.AddFriend = function()
{
    var friendName = $("inputAddFriendName").value;
    var email = $("inputAddFriendEmail").value;
    if (RaF.ValidateFriendData(friendName, email) == true)
    {
        RaF.ShowLoading();
        Forbrugerliv.ReferAFriend.FrontEnd.SaveFriend("", friendName, email, true, RaF.AddFriend_Callback);
    }    
}

RaF.AddFriend_Callback = function(ret)
{
    RaF.HideLoading();
    if (ret.value[0] == "error" || ret.error != null)
    {
        if (ret.error != null)
        {
            RaF.ShowError(ret.error.Message);
        }
        else
        {
            RaF.ShowError(ret.value[2]);
        }
    }
    else
    {
        $("inputAddFriendName").value = "Navn";
        $("inputAddFriendEmail").value = "E-mail";
        RaF.ShowMessage(RaF.txtSuccessfullyAdded);
        Forbrugerliv.ReferAFriend.FrontEnd.ChangePage(0, RaF.Sort, RaF.ChangePage_Callback);
    }
}

RaF.DeleteFriend = function(link)
{
    var row = RaF.getFriendRow(link);

    var id = RaF.getIdInput(row).value;
    
    RaF.ShowLoading();
    Forbrugerliv.ReferAFriend.FrontEnd.DeleteFriend(id, RaF.DeleteFriend_Callback);
}

RaF.DeleteFriend_Callback = function(ret)
{
    RaF.HideLoading();
    RaF.ShowMessage(RaF.txtDeleted);
    Forbrugerliv.ReferAFriend.FrontEnd.ChangePage(RaF.CurrentPage, RaF.Sort, RaF.ChangePage_Callback);
}

RaF.ClearAll = function()
{
    if (confirm(RaF.txtClearAllConfirm))
    {
        Forbrugerliv.ReferAFriend.FrontEnd.ClearAll(RaF.ChangePage_Callback);
        RaF.ShowMessage(RaF.txtClearedAll);
    }
}


RaF.Import = function()
{
    var select = $("inputImportType");
    var divBrowse = $("referBrowse");
    var divLogin = $("referLogin");
    
    if (select.value == 3)
    {
        var validExtensions = /(.csv)$/i;
        var file = $("inputReferFile").value;
        
        if (!validExtensions.test(file))
        {
			RaF.ShowError(RaF.txtWrongTypeSelectedCSV);
        }
        else
        {
            RaF.HideMessage();
            RaF.DoPostBack();
        }
    }
    else if (select.value == 0 || select.value == 1 || select.value == 2)
    {
        var login = $("inputReferLogin").value;
        var password = $("inputReferPassword").value;
        
        $("btnImport").disabled = true;
        
        RaF.ShowLoading();
        Forbrugerliv.ReferAFriend.FrontEnd.ImportFriendsMail(select.value, login, password, RaF.Import_Callback);
    }
    else
    {
        divBrowse.style.display = "none";
        divLogin.style.display = "none";
        RaF.ShowMessage(RaF.txtSelectImportType);
    }
}

RaF.Import_Callback = function(ret)
{
    RaF.HideLoading();
    $("btnImport").disabled = false;
    
    $("inputReferPassword").value = "";
    
    if (ret.error != null)
    {
        RaF.ShowError(ret.error.Message);
    }
    else
    {
        var message = RaF.txtImported + ": " + ret.value.First;
        if (ret.value.First <= 0)
        {
            message += "<br/>" + RaF.txtNoNewMailsAdded;
        }
        RaF.ShowMessage(message);
        $("referData").innerHTML = "" + ret.value.Second[0];
        RaF.SetClearAllCount(ret.value.Second[1]);
        
        $("inputReferLogin").value = "";
    }
    
    var table = RaF.getFriendsTable();
    var trs = table.getElementsByTagName("tr");
    
    if (trs.length < 2)
    {
        RaF.getClearAllButton().style.display = "none";
    }
    else
    {
        RaF.getClearAllButton().style.display = "block";
    }
}


RaF.ChangePage = function(page, sort)
{
    if (RaF.SaveFriendsPage() == true)
    {
        RaF.ShowLoading();

        RaF.CurrentPage = page;
        RaF.Sort = sort;
        
        RaF.ShowLoading();
        Forbrugerliv.ReferAFriend.FrontEnd.ChangePage(RaF.CurrentPage, RaF.Sort, RaF.ChangePage_Callback);
    }
}

RaF.ChangePage_Callback = function(ret)
{
    RaF.HideLoading();
    $("referData").innerHTML = "" + ret.value[0];
    RaF.SetClearAllCount(ret.value[1]);
    
    var table = RaF.getFriendsTable();
    var trs = table.getElementsByTagName("tr");
    
    if (trs.length < 2)
    {
        RaF.getClearAllButton().style.display = "none";
    }
    else
    {
        RaF.getClearAllButton().style.display = "block";
    }
}

RaF.ChangeStep = function(step)
{
    var url;
    var currentUrl = location.href;
    if (currentUrl.indexOf("page") < 0)
    {
	if (currentUrl.indexOf("#") > 0)
	{
        url = currentUrl.replace("#", "&page=" + step);
	}
	else
	{
		url = currentUrl + "&page=" + step;
	}
    }
    else
    {
        url = currentUrl.replace(/page=[0-9]+/, "page="+step);
    }

    var tbl = RaF.getFriendsTable();
    
    var saveResult = true;
    
    RaF.changePageUrl = url;
    
    if (tbl != undefined && tbl != null)
    {
        saveResult = RaF.SaveFriendsPage();
    }
     
    if (saveResult != true)
    {
        RaF.changePageUrl = false;
    }
    
    if (tbl == undefined || tbl == null)
    {
        window.location = RaF.changePageUrl;
    }
}

