﻿// --------------------------------------------------------------------------------------------------------
//      View Display Functions
// --------------------------------------------------------------------------------------------------------


function DisableForm(formName) {
    var formSelector = 'form:first';
    if(formName) // formName may be any selector starting w/elementID
        formSelector = '#' + formName;
    
    var formElements = $(formSelector).find('input:text, input:password, input:file, textarea');
    formElements.attr('readonly', 'readonly');
    var checkElements = $(formSelector).find('input:radio, input:checkbox');
    checkElements.attr('disabled', 'disabled');
    var formSelects = $(formSelector).find('select');
    formSelects.attr('disabled', 'disabled');
}


// --------------------------------------------------------------------------------------------------------
//      Form Data Modification Functions
// --------------------------------------------------------------------------------------------------------

function SaveModel(controller, formID) {
    SaveModelByAction(controller, formID, 'Save');
}

function SaveModelByAction(controller, formID, action) {	
    ClearMessage();
    var form = $("#" + formID);
    form.validate();
    if (form.valid())
    {
        ShowSpinner();
        var params = form.serialize();
        CallActionWithParams(controller, action, params);
        ShowInfo("Saving...");
    }
}

function RefreshModel(controller, action, id, containerID) {
    DoAjaxPostWithCallBack(controller, action, 'id=' + id, function(data, status) {
                                                                        if (status=="success") {
                                                                            $("#" + containerID).html(data);
                                                                            HideSpinner();
                                                                        }
                                                                   });
}

function DeleteModel(modelType, controller, id, linkToType) {
    var msg = 'Are you sure you want to delete this ' + modelType + '?';
    if (confirm(msg)) {
        if (linkToType) {
            var secondMsg = 'This ' + modelType + ' is linked to a ' + linkToType + '. Continue with delete?';
            if (confirm(secondMsg)) {
                CallActionWithID(controller, "Delete", id);
            }
        }
        else {
            CallActionWithID(controller, "Delete", id);
        }
        
    }
}


// --------------------------------------------------------------------------------------------------------
//      Sublist Functions
// --------------------------------------------------------------------------------------------------------

// show dialog with sublist item
function EditSublistItem(controller, editOrCreate, params, itemType) 
{
    ClearMessage();
    var showAction = editOrCreate + itemType;
    var formContainer = itemType + "FormContainer";
    LoadInputForm(controller, showAction, params, formContainer, function() {
                                                SaveSublistItem(controller, itemType);
                                            });
}

// show readonly dialog with sublist item
function ViewSublistItem(controller, editOrCreate, params, itemType) 
{
    ClearMessage();
    var showAction = editOrCreate + itemType;
    var formContainer = itemType + "FormContainer";
    LoadInputForm(controller, showAction, params, formContainer, null);
}

// submit sublist item data for saving (provides javascript response)
function SaveSublistItem(controller, itemType) 
{
    var sort = $("#" + itemType + "_Sort").val();
    var filterName = $("#" + itemType + "_FilterName").val();
    
    var form = $("#" + itemType + "Form");
    form.validate();
    if (form.valid())
    {
        var params = form.serialize() + AppendSortAndFilterName(sort, filterName);
        CallActionWithParams(controller, "Save" + itemType, params);
    }
}

// remove sublist item (provides javascript response)
function DeleteSublistItem(controller, itemID, itemType, sort, filterName, secondWarning) {
    ClearMessage();
    if (confirm("Are you sure you want to delete this item?")) {
        var params = "itemID=" + itemID;
        params += AppendSortAndFilterName(sort, filterName);

        if (secondWarning) {
            if (confirm(secondWarning)) {
                CallActionWithParams(controller, "Delete" + itemType, params);                
            }
        } else {
            CallActionWithParams(controller, "Delete" + itemType, params);            
        }
    }
}

// remove sublist item (provides javascript response)
function RemoveSublistItem(controller, itemID, itemType, sort, filterName, secondWarning) {

    ClearMessage();
    if (confirm("Are you sure you want to unlink this item?")) {
        var params = "itemID=" + itemID;
        params += AppendSortAndFilterName(sort, filterName);

        if (secondWarning) {
            if (confirm(secondWarning)) {
                CallActionWithParams(controller, "Remove" + itemType, params);
            }
        } else {
            CallActionWithParams(controller, "Remove" + itemType, params);
        }
    }
}

// refresh list
function RefreshSublist(controller, params, itemType, sort, filterName) 
{
    params += AppendSortAndFilterName(sort, filterName);
    RefreshContent(controller, itemType + "List", params, itemType + "ListContainer")
}

function AppendSortAndFilterName(sort, filterName)
{
    var params = '';
    if (sort != null && sort != '')
        params += '&sort=' + sort;
    if (filterName != null && filterName != '')
        params += '&filterName=' + filterName;
    return params;
}

function SwapSublistItems(controller,itemType, itemID, parentID, delta) {    
    ClearMessage();
    var params = $.param({ "itemID": itemID, "parentID":parentID, "delta": delta });

    CallActionWithParams(controller, "Swap" + itemType, params);
    
    
}

// --------------------------------------------------------------------------------------------------------
//      Upload Functions for Sublist items.
// --------------------------------------------------------------------------------------------------------

// show dialog with sublist item
function UploadDocument(documentID, ownerType, ownerTypeID) {
    ClearMessage();
    var showAction = "Upload";
    var formContainer = "documentUploadFormContainer";
    var params = $.param({ "documentID": documentID, "ownerType": ownerType, "ownerTypeID": ownerTypeID });
    
    LoadInputForm("Document", "Upload", params, formContainer, SaveDocument);
}

function SaveDocument() {
    var form = $("#DocumentForm");
    var url = GetUrl("Document", "SaveDocument");
    var options = { "url": url, type: "post", inline: true, dataType: "script" };
    //var options = { "url": url, type: "post", dataType: "script" };
    ClearMessage();
    ShowSpinner();

    form.validate();
    if (form.valid()) {
        $(form).ajaxSubmit(options);
    }

}

function LinkDocumentToOwner(ownerType, ownerTypeId, documentId) {
    var params = $.param({ "id": ownerTypeId, "documentId": documentId });
    CallActionWithParams(ownerType, "LinkDocument", params);

}

function RefreshDocumentSublist(ownerType, ownerTypeId) {
    var params = "parentID=" + ownerTypeId;
    var itemType = ownerType + "Document";
    var sort = $("#" + ownerType + "_Sort").fieldValue();
    var filter = $("#" + ownerType + "_Document").fieldValue();
    CloseDialog();
    HideSpinner();
    RefreshSublist(ownerType, params, itemType, sort, filter);

}

function RollbackDocument(id) {
    var params = $.param({"id": id });

    if (confirm('Are you sure you want to roll back this document to its previous version?')) {
        CallActionWithParams("Document", "Rollback", params);
    }

}

function DownloadDocument(itemID) {
    RedirectWithID("Document", "Download", itemID);
}

function CopyDownloadLink(itemID) {
    var params = "id=" + itemID;
    LoadInputForm("Document", "CopyLink", params, "copyLinkFormContainer", null);

}


// --------------------------------------------------------------------------------------------------------
//      Pairing Select Fields with "Other" Fields
// --------------------------------------------------------------------------------------------------------

function PairSelectWithOther(selectFieldID, otherFieldID, triggerValue) {
    $("select#" + selectFieldID).change(function() {
        ToggleOtherField(selectFieldID, otherFieldID, triggerValue);
    });

    ToggleOtherField(selectFieldID, otherFieldID, triggerValue);
}

function ToggleOtherField(selectFieldID, otherFieldID, triggerValue) {
    selectFieldID = "select#" + selectFieldID;
    otherFieldID = "#" + otherFieldID;

    if ($(selectFieldID).length && $(otherFieldID).length) {
        var isTriggerValid = false;

        if (triggerValue) {
            isTriggerValid = ($(selectFieldID).val() == triggerValue)
        }
        else {
            var selectField = $(selectFieldID)[0];
            isTriggerValid = (selectField.selectedIndex == selectField.options.length - 1);
        }

        if (isTriggerValid) {
            $(otherFieldID).removeAttr("disabled").addClass("required");
        }
        else {
            $(otherFieldID).attr("disabled", "disabled").removeClass("required").val("").triggerHandler("change");
        }
    }
}

function EnableOtherFieldForPost(otherFieldID) {
    otherFieldID = "#" + otherFieldID;
    $(otherFieldID).removeAttr("disabled");
}

// --------------------------------------------------------------------------------------------------------
//      Syncing Revised Fields
// --------------------------------------------------------------------------------------------------------
function SetSyncField(sourceField, targetField, tabID) {
    var sourceSelector = "#" + sourceField;
    var targetSelector = "#" + targetField;
    var tabSelector = "#" + tabID;


    if ($(sourceSelector).val() != $(targetSelector).val())
    {
        var link = "&nbsp;<a href='#' onclick='CopyField(\"" + sourceField + "\",\"" + targetField + "\");return false'>copy</a>";

        $(sourceSelector).after(link);
        $(sourceSelector).addClass("revisedFieldHighlight");

        if ($(tabSelector) && !$(tabSelector).hasClass("revisedTabHighlight")) {
            $(tabSelector).addClass("revisedTabHighlight");
        }
    }

}

function CopyField(sourceField, targetField) {
    var sourceSelector = "#" + sourceField;
    var targetSelector = "#" + targetField;

    $(targetSelector).val($(sourceSelector).val());
}

function ClearTabHighlight(tabID) {
    var tabSelector = "#" + tabID;
    $(tabSelector).removeClass("revisedTabHighlight");
}

/*
This function expects three or more parameters to work properly. The source field
is the only declared parameters and the remaining are dynamic arguments.
Example Usage:
LinkDuplicateSyncFields('sourceFieldID','targetID1','targetID2');
*/
function LinkDuplicateSyncFields(sourceField) {

    if (arguments.length < 3) {
        alert("Function LinkDulicateSyncFields expects three or more parameters.");
        return;
    }
    var sourceSelector = "#" + sourceField;
    var elementIDs = $.makeArray(arguments);
    
    for (var i = 1; i < arguments.length; i++) {        
        var targetSelector = "#" + arguments[i];
        $(targetSelector).change(function() {
            for (var i = 0; i < elementIDs.length; i++) {                
                if (elementIDs[i] != $(this)[0].id) {
                    $("#" + elementIDs[i]).val($(this).val());
                }
            }
        });
    }
}