﻿// --------------------------------------------------------------------------------
// Set operation mode: debug/release
// --------------------------------------------------------------------------------
window._GlobalDebugMode = false;

// --------------------------------------------------------------------------------
// Expands or collapses all container elements.
// --------------------------------------------------------------------------------
function CollapseExpandAll() {

    var Contents = $('div.Element').find('div[id^=ElementContent]');

    var IsAnythingExpanded = false;

    for (var Index = 0; Index < Contents.length; Index++) {
        if (!$(Contents[Index]).hasClass('ElementContentInvisible')) {
            IsAnythingExpanded = true;
            break;
        }
    }

    if (IsAnythingExpanded) {
        Contents.cssClass('ElementContentInvisible');
        $('h2.ElementTitle').addClass('CollapsedTitle');
    }
    else {
        Contents.cssClass('ElementContentVisible');
        $('h2.ElementTitle').removeClass('CollapsedTitle');
    }
}

// --------------------------------------------------------------------------------
// Expands or collapses a specified container element.
// --------------------------------------------------------------------------------
function CollapseExpandElementContent(contentId, headerId) {

    var Content = $('#' + contentId);
    var Header = $('#' + headerId);

    if (Content[0].className == 'ElementContentInvisible') {
        // Expand
        Content.cssClass('ElementContentVisible');
        Header.removeClass('CollapsedTitle');
    }
    else {
        // Collapse
        Content.cssClass('ElementContentInvisible');
        Header.addClass('CollapsedTitle');
    }
}

// --------------------------------------------------------------------------------
// Loads a picture in the gallery.
// --------------------------------------------------------------------------------
function LoadImage(image, description) {
    imageToLoad = new Image();
    imageToLoad.src = image;
    $('#PhotoNormal')[0].src = imageToLoad.src;
    $('#Description').html(description);
}

// --------------------------------------------------------------------------------
// Opens the gallery.
// --------------------------------------------------------------------------------
function OpenGallery(address) {
    Okno = window.open(address, 'Galeria', 'toolbar=no, menubar=no, location=no, personalbar=no, scrollbars=no, directories=no, status=no, resizable=no, width=640, height=665');
    Okno.focus();
    return true;
}

// --------------------------------------------------------------------------------
// Disables the whole form.
// --------------------------------------------------------------------------------
function DisableForm(form) {
    var count = form.elements.length;
    for (i = 0; i < count; i++) {
        form.elements[i].disabled = true;
    }
}

// --------------------------------------------------------------------------------
// Starts asynchronous searching.
// --------------------------------------------------------------------------------
function AsyncSearch(searchResultsDivId, address) {

    $.manageAjax.add("AsyncSearch", {
        type: 'GET',
        url: address,
        cache: false,
        success: function (data) {
            $('#' + searchResultsDivId).html(data);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {

            // Check the operation mode
            if (window._GlobalDebugMode) {
                // Debug mode
                $('#' + searchResultsDivId).html(XMLHttpRequest.status + ' - ' + XMLHttpRequest.statusText + ':<br />' + XMLHttpRequest.responseText);
            }
            else {
                // Release mode
                $('#' + searchResultsDivId).html('Search results could not be loaded.');
            }
        }
    });
}

// --------------------------------------------------------------------------------
// Filters the list using AJAX.
// --------------------------------------------------------------------------------
function ApplyFilter(listId, address, queueName, buttonId) {

    $.manageAjax.abort(queueName);

    var Button = $('#' + buttonId);

    Button.attr('disabled', true);
    $('#' + listId).clearSelect();

    $.manageAjax.add(queueName, {
        // NOTE: POST to solve caching problems in IE
        type: 'POST',
        url: address,
        cache: false,
        dataType: 'json',
        success: function (data) {
            $('#' + listId).fillSelect(data);

            if (data.length > 0) {
                Button.attr('disabled', false);
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        }
    });
}

// --------------------------------------------------------------------------------
// Loads list items via AJAX.
// --------------------------------------------------------------------------------
function LoadList(listId, address, loaderDivId, errorDivId, onSuccessFunction, onSuccessArgument) {

    $('#' + errorDivId).hide();
    $('#' + loaderDivId).show();
    $('#' + listId).clearSelect();

    $.manageAjax.add('SelectListsQueue', {
        // NOTE: POST to solve caching problems in IE
        type: 'POST',
        url: address,
        cache: false,
        dataType: 'json',
        success: function (data) {
            $('#' + listId).fillSelect(data);
            $('#' + loaderDivId).hide();

            if (onSuccessFunction != undefined) {
                if (onSuccessArgument == undefined) {
                    onSuccessFunction();
                }
                else {
                    onSuccessFunction(onSuccessArgument);
                }
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            DisableForm($('#' + listId)[0].form);
            $('#' + errorDivId).show();
            $('#' + loaderDivId).hide();
        }
    });
}

// --------------------------------------------------------------------------------
// Adjusts the number of room parameters forms.
// --------------------------------------------------------------------------------
function AdjustRoomParameters(containerId, numberOfRooms, actionUrl) {

    var Container = $('#' + containerId);

    while (Container.children().length > parseInt(numberOfRooms)) {
        Container.children().last().remove();
    }

    var NumberOfDivs = Container.children().length;

    while (Container.children().length < parseInt(numberOfRooms)) {

        var RoomParametersDiv = document.createElement("div");

        Container.append(RoomParametersDiv);

        LoadRoomParameters(RoomParametersDiv, actionUrl + '?roomNumber=' + NumberOfDivs);
        NumberOfDivs++;
    }
}

// --------------------------------------------------------------------------------
// Loads room parameters form via AJAX.
// --------------------------------------------------------------------------------
function LoadRoomParameters(roomParametersDiv, address) {

    $(roomParametersDiv).addClass('RoomParametersLoading');

    $.ajax({
        type: 'GET',
        url: address,
        cache: false,
        success: function (data) {
            $(roomParametersDiv).html(data);
            $(roomParametersDiv).removeClass('RoomParametersLoading');
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {


            if (window._GlobalDebugMode) {
                // Debug mode
                $(roomParametersDiv).html(XMLHttpRequest.status + ' - ' + XMLHttpRequest.statusText + ':<br />' + XMLHttpRequest.responseText);
            }
            else {
                // Release mode
                $(roomParametersDiv).html('Form could not be loaded.');
            }

            $(roomParametersDiv).removeClass('RoomParametersLoading');
        }
    });
}

// --------------------------------------------------------------------------------
// Creates or removes children ages lists to match the desired number of children.
// --------------------------------------------------------------------------------
function AdjustChildrenAges(containerId, numberOfChildren, name, cssClass, emptyText) {

    var Container = $('#' + containerId);

    if (Container.children('select').length == 0 && numberOfChildren > 0) {
        Container.html('');
    }
    else if (Container.children('select').length > 0 && numberOfChildren == 0) {
        Container.html(emptyText);
    }

    while (Container.children('select').length > parseInt(numberOfChildren)) {
        Container.children('select').last().remove();
    }

    var SelectNumber = Container.children().length;

    if (name == undefined) {
        name = 'ChildrenAges';
    }

    if (cssClass == undefined) {
        cssClass = 'SearchFormElement';
    }

    while (Container.children().length < parseInt(numberOfChildren)) {

        var ChildrenAgesSelect = document.createElement("select");

        ChildrenAgesSelect.name = name;

        //var SelectDiv = document.createElement('div');
        //$(SelectDiv).cssClass(cssClass);
        //$(SelectDiv).append(ChildrenAgesSelect);

        $(ChildrenAgesSelect).cssClass(cssClass);
        Container.append(ChildrenAgesSelect);

        for (var i = 0; i < 18; i++) {
            var Opt = new Option(i == 0 ? '< 1' : i, i);

            if ($.browser.msie) {
                ChildrenAgesSelect.add(Opt);
            }
            else {
                ChildrenAgesSelect.add(Opt, null);
            }
        }

        SelectNumber++;
    }
}

// --------------------------------------------------------------------------------
// Creates or removes children ages lists to match the desired number of children.
// --------------------------------------------------------------------------------
function AdjustAccommodationChildrenAges(containerId, roomNumber, numberOfChildren) {

    var Container = $('#' + containerId);

    if (Container.children().first().hasClass("ChildrenAgesEmptyNode")) {
        Container.children().first().remove();
    }

    while (Container.children().length > parseInt(numberOfChildren)) {
        Container.children().last().remove();
    }

    var SelectNumber = Container.children().length;

    if (parseInt(numberOfChildren) > 0) {

        while (Container.children().length < parseInt(numberOfChildren)) {

            var ChildrenAgesSelect = document.createElement("select");
            ChildrenAgesSelect.name = 'RoomsParameters[' + roomNumber + '].ChildrenAges[' + SelectNumber + ']';

            Container.append(ChildrenAgesSelect);
            Container.append(document.createTextNode(' '));

            for (var i = 0; i < 18; i++) {
                var Opt = new Option(i == 0 ? '< 1' : i, i);

                if ($.browser.msie) {
                    ChildrenAgesSelect.add(Opt);
                }
                else {
                    ChildrenAgesSelect.add(Opt, null);
                }
            }

            SelectNumber++;
        }

    } else {
        var Span = document.createElement("span");
        Span.className = "ChildrenAgesEmptyNode";

        Span.appendChild(document.createTextNode("-"));

        Container.append(Span);
    }
}

// --------------------------------------------------------------------------------
// Shows or hides the advanced settings and sets an appropriate hidden field.
// --------------------------------------------------------------------------------
function ToggleAdvancedSettings(settingsDivId, hiddenFieldId, roomNumber) {
    $('#' + settingsDivId).toggle();
    if ($('#' + settingsDivId)[0].style.display == 'none') {
        $('#' + hiddenFieldId).val('-1');
    }
    else {
        $('#' + hiddenFieldId).val(roomNumber.toString());
    }
}

// --------------------------------------------------------------------------------
// Checks the allotments, enables or disables appropriate radio buttons and the submit button.
// --------------------------------------------------------------------------------
function CheckAccommodationAllotments(dateId, requiredSelections, warningDivId) {

    var Context = $('#' + dateId);

    var UsedAllotments = new Array();

    for (var i in window._GlobalAllotments) {

        var UsedRooms = 0;
        $('input.' + dateId, Context).each(function (index) {
            if (this.value == i && this.checked) {
                UsedRooms++;
            }
        });
        UsedAllotments[i] = UsedRooms;
    }

    var DateRadios = $('.' + dateId);
    DateRadios.each(function (index) {
        var Enabled = false;

        if (window._GlobalAllotments[this.value] - UsedAllotments[this.value] > 0) {
            Enabled = true;
        }
        else {
            Enabled = $('input.' + dateId + '[name="' + this.name + '"][value="' + this.value + '"]:checked', Context).length > 0;
        }

        this.disabled = !Enabled;
    });

    // Enable or disable the submit button depending on the number of checked radios
    $('#Button-' + dateId).attr('disabled', DateRadios.filter(':checked').length != requiredSelections);

    if (DateRadios.filter(':checked').length != requiredSelections) {
        $('#' + warningDivId).show();
    }
    else {
        $('#' + warningDivId).hide();
    }
}

// --------------------------------------------------------------------------------
// Gets the selected offers and creates a hidden fields for adding to cart.
// --------------------------------------------------------------------------------
function PrepareAccommodationOffers(dateId, cultureName) {

    msf.setCulture(cultureName);

    var Context = $('#' + dateId);

    var i = 0;

    var Form = $('#AddToCartForm');

    $('input.' + dateId, Context).each(function (index) {
        if (this.checked) {
            var Offer = window._GlobalOffers[this.id];

            Form.append('<input type="hidden" name="offersToAdd[' + i + '].OfferId" value="' + Offer.OfferId + '" />');
            Form.append('<input type="hidden" name="offersToAdd[' + i + '].BoardTypeId" value="' + Offer.BoardTypeId + '" />');
            Form.append('<input type="hidden" name="offersToAdd[' + i + '].PartnerId" value="' + Offer.PartnerId + '" />');
            Form.append('<input type="hidden" name="offersToAdd[' + i + '].Price" value="' + String.__Format('{0:0.00}', Offer.Price) + '" />');

            for (var j = 0; j < Offer.PriceDetails.length; j++) {
                Form.append('<input type="hidden" name="priceDetails[' + i + '][' + j + '].Age" value="' + Offer.PriceDetails[j].Age + '" />');
                Form.append('<input type="hidden" name="priceDetails[' + i + '][' + j + '].IsAdult" value="' + Offer.PriceDetails[j].IsAdult + '" />');
                Form.append('<input type="hidden" name="priceDetails[' + i + '][' + j + '].Price" value="' + Offer.PriceDetails[j].Price + '" />');
                Form.append('<input type="hidden" name="priceDetails[' + i + '][' + j + '].PriceType" value="' + Offer.PriceDetails[j].PriceType + '" />');
            }

            i++;
        }
    });
}

// --------------------------------------------------------------------------------
// Calculates a total price depending on the selected offers.
// --------------------------------------------------------------------------------
function CalculateAccommodationOffersPrice(dateId, currencyFormat, cultureName) {

    var Context = $('#' + dateId);

    var CheckedRadios = $('.' + dateId + ':checked', Context);

    var TotalPrice = 0;

    CheckedRadios.each(function (index) {
        TotalPrice += window._GlobalOffers[this.id].Price;
    });

    msf.setCulture(cultureName);
    $('#' + dateId + '-Total').html(String.__Format(currencyFormat, TotalPrice));
}

// --------------------------------------------------------------------------------
// Loads the rest of the offers in accommodation search results.
// --------------------------------------------------------------------------------
function LoadMoreAccommodationOffers(targetDivId, form, partnerId, address) {
    $('#' + targetDivId).html('');
    $('#' + targetDivId).cssClass('MoreOffersLoading');

    var Data = $(form).serializeArray();

    $.each(Data, function (key, parameter) {
        if (parameter.name == 'parameters.SearchMode') {
            parameter.value = 'Contextual';
        }
        if (parameter.name == 'parameters.PartnerId') {
            parameter.value = partnerId;
        }
    });

    $.ajax({
        type: 'POST',
        url: address,
        data: Data,
        cache: false,
        success: function (data) {
            $('#' + targetDivId).before(data);
            $('#' + targetDivId).remove();
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // Check the operation mode
            if (window._GlobalDebugMode) {
                $('#' + searchResultsDivId).html(XMLHttpRequest.status + ' - ' + XMLHttpRequest.statusText + ':<br />' + XMLHttpRequest.responseText);
            }
            else {
                $('#' + targetDivId).html('Search results could not be loaded.');
            }

            $('#' + targetDivId).cssClass('MoreOffers');
        }
    });
}

// --------------------------------------------------------------------------------
// Loads the rest of the offers in transport ticket search results.
// --------------------------------------------------------------------------------
function LoadMoreTransportTicketOffers(targetDivId, form, address, direction) {
    var TargetDiv = $('#' + targetDivId);
    TargetDiv.html('');
    TargetDiv.cssClass('MoreOffersLoading');

    if (window._GlobalOffersPage == undefined) {
        window._GlobalOffersPage = new Array();
    }

    if (window._GlobalOffersPage[direction] == undefined) {
        window._GlobalOffersPage[direction] = 1;
    }

    window._GlobalOffersPage[direction]++;

    var Data = $(form).serializeArray();
    Data.push({
        name: 'page',
        value: window._GlobalOffersPage[direction]
    });
    Data.push({
        name: 'direction',
        value: direction
    });

    $.ajax({
        type: 'POST',
        url: address,
        data: Data,
        cache: false,
        success: function (data) {
            TargetDiv.before(data);
            TargetDiv.remove();
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // Check the operation mode
            if (window._GlobalDebugMode) {
                TargetDiv.html(XMLHttpRequest.status + ' - ' + XMLHttpRequest.statusText + ':<br />' + XMLHttpRequest.responseText);
            }
            else {
                TargetDiv.html('Search results could not be loaded.');
            }

            TargetDiv.cssClass('MoreOffers');
        }
    });
}

// --------------------------------------------------------------------------------
// Opens a window for a question.
// --------------------------------------------------------------------------------
function Ask(address, form, fullOfferId, roomNumber) {

    var FormData = $(form).serialize();

    if (fullOfferId != undefined) {
        FormData += '&offer.OfferId=' + window._GlobalOffers[fullOfferId].OfferId;
        FormData += '&offer.BoardTypeId=' + window._GlobalOffers[fullOfferId].BoardTypeId;
        FormData += '&offer.PartnerId=' + window._GlobalOffers[fullOfferId].PartnerId;
        FormData += '&offer.Price=' + window._GlobalOffers[fullOfferId].Price;
    }
    if (roomNumber != undefined) {
        FormData += '&roomNumber=' + roomNumber;
    }

    var AskWindow = window.open(address + '?' + FormData, 'Ask', 'width=560,height=500,menubar=0,status=0,toolbar=0,resizable=0,directories=0,scrollbars=1', true);
    AskWindow.focus();
}

// --------------------------------------------------------------------------------
// Opens a window for a transport question.
// TODO MZ - Check this!
// --------------------------------------------------------------------------------
function AskTransport(address, form, offerId, price) {

    var FormData = form.serialize();

    FormData += '&offer.OfferId=' + offerId;
    FormData += '&offer.Price=' + price;

    var AskWindow = window.open(address + '?' + FormData, 'Ask', 'width=600,height=450,menubar=0,status=0,toolbar=0,resizable=0,directories=0,scrollbars=1', true);
    AskWindow.focus();
}

// --------------------------------------------------------------------------------
// Opens a window with a pricelist.
// --------------------------------------------------------------------------------
function ShowPricelist(address) {

    var PricelistWindow = window.open(address, 'Pricelist', 'width=900,height=650,menubar=0,status=0,toolbar=0,resizable=1,directories=0,scrollbars=1', true);
    PricelistWindow.focus();
}

// --------------------------------------------------------------------------------
// Formats the price
// --------------------------------------------------------------------------------
function FormatPrice(price, currencyFormat, cultureName) {
    msf.setCulture(cultureName);
    return String.__Format(currencyFormat, price);
}

// --------------------------------------------------------------------------------
// Assigns a customer.
// --------------------------------------------------------------------------------
function AssignCustomer(targetDivId, address, itemId, offerId, customerId, checkAssignmentsAddress) {

    if (itemId == undefined || offerId == undefined || customerId == undefined) {
        return;
    }

    $.manageAjax.abort('CheckAssignmentsQueue');

    $('#NextStep').hide();
    $('#NextStepDisabled').show();

    var TargetDiv = $('#' + targetDivId);
    TargetDiv.attr('style', 'height: ' + TargetDiv.innerHeight() + 'px;');
    TargetDiv.html('');
    TargetDiv.cssClass('CustomerAssignmentLoader');

    var Data = [{
        name: 'itemId',
        value: itemId
    },
    {
        name: 'offerId',
        value: offerId
    },
    {
        name: 'customerId',
        value: customerId
    }
    ];

    $.ajax({
        type: 'POST',
        url: address,
        data: Data,
        cache: false,
        success: function (data) {
            TargetDiv.cssClass('CustomerAssignment');
            TargetDiv.html(data);
            TargetDiv.attr('style', 'height: auto;');

            CheckAssignmentsComplete(checkAssignmentsAddress);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // Check the operation mode
            if (window._GlobalDebugMode) {
                TargetDiv.html(XMLHttpRequest.status + ' - ' + XMLHttpRequest.statusText + ':<br />' + XMLHttpRequest.responseText);
            }
            else {
                TargetDiv.html('Search results could not be loaded.');
            }

            TargetDiv.cssClass('CustomerAssignment');
            TargetDiv.attr('style', 'height: auto;');
        }
    });
}

// --------------------------------------------------------------------------------
// Unassigns a customer.
// --------------------------------------------------------------------------------
function UnassignCustomer(targetDivId, address, checkAssignmentsAddress) {
    $.manageAjax.abort('CheckAssignmentsQueue');

    $('#NextStep').hide();
    $('#NextStepDisabled').show();

    var TargetDiv = $('#' + targetDivId);
    TargetDiv.attr('style', 'height: ' + TargetDiv.innerHeight() + 'px;');
    TargetDiv.html('');
    TargetDiv.cssClass('CustomerAssignmentLoader');

    $.ajax({
        type: 'GET',
        url: address,
        cache: false,
        success: function (data) {
            TargetDiv.attr('style', 'height: auto;');
            TargetDiv.cssClass('CustomerAssignment');
            TargetDiv.html(data);

            CheckAssignmentsComplete(checkAssignmentsAddress);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // Check the operation mode
            if (window._GlobalDebugMode) {
                TargetDiv.html(XMLHttpRequest.status + ' - ' + XMLHttpRequest.statusText + ':<br />' + XMLHttpRequest.responseText);
            }
            else {
                TargetDiv.html('Search results could not be loaded.');
            }

            TargetDiv.cssClass('CustomerAssignment');
            TargetDiv.attr('style', 'height: auto;');
        }
    });
}

// --------------------------------------------------------------------------------
// Checks if the assignments are complete.
// --------------------------------------------------------------------------------
function CheckAssignmentsComplete(address) {
    $.manageAjax.add('CheckAssignmentsQueue', {
        type: 'POST',
        url: address,
        cache: false,
        success: function (data) {
            if (data) {
                $('#NextStep').show();
                $('#NextStepDisabled').hide();
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        }
    });
}

// --------------------------------------------------------------------------------
// Performs asynchronous log on operation.
// --------------------------------------------------------------------------------
function AsyncLogOn(address, targetDivId, loaderDivId, contentDivId, form) {
    $('#' + contentDivId).css('visibility', 'hidden');
    $('#' + loaderDivId).show()

    $.ajax({
        type: 'POST',
        url: address,
        data: $(form).serialize(),
        cache: false,
        success: function (data, status, xhr) {
            var ContentType = xhr.getResponseHeader('content-type') || '';

            if (ContentType.indexOf('html') > -1) {
                $('#' + targetDivId).html(data);
            }
            else if (ContentType.indexOf('javascript') > -1) {
                eval(data);
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {

        }
    });
}

// --------------------------------------------------------------------------------
// Initializes the galleries.
// --------------------------------------------------------------------------------
function InitGalleries(galleryClass) {
    $('.' + galleryClass).scrollTo('0', 500, { easing: 'easeOutQuart' });
}

// --------------------------------------------------------------------------------
// Scrolls the horizontal gallery.
// --------------------------------------------------------------------------------
function ScrollGallery(contentDivId, direction) {

    var Offset = 300;

    if (direction > 0) {
        Offset = '+=' + Offset;
    }
    else {
        Offset = '-=' + Offset;
    }

    $('#' + contentDivId).scrollTo(Offset + 'px', 500, { easing: 'easeOutQuart', axis: 'x' });
}

// --------------------------------------------------------------------------------
// Sets the number of beds options in range numberOfAdults/2 .. numberOfAdults.
// --------------------------------------------------------------------------------
function SetAvailableNumberOfBeds(numberOfAdults, select) {
    var Data = new Array();

    for (var Beds = Math.ceil(numberOfAdults / 2); Beds <= numberOfAdults; Beds++) {
        Data.push({ Text: Beds, Value: Beds });
    }

    select.fillSelect(Data);

    select.val(numberOfAdults);
}

// --------------------------------------------------------------------------------
// Makes the checkbox act as radio button.
// --------------------------------------------------------------------------------
function ActAsRadioButton(groupName, clicked) {
    var value = clicked.checked;

    $('input[name = "' + groupName + '"]').attr('checked', false);

    clicked.checked = value;
}

// --------------------------------------------------------------------------------
// Updates the characters counter and trims a textarea if necessary.
// --------------------------------------------------------------------------------
function UpdateRemainingNoteCharacters(textarea, maxLength, targetId) {

    var RemainingCharacters = maxLength - textarea.value.length;

    if (RemainingCharacters < 0) {

        textarea.value = textarea.value.substring(0, maxLength);
        RemainingCharacters = 0;
    }

    $('#' + targetId).html(RemainingCharacters);
   
}

// --------------------------------------------------------------------------------
// Shows an edition box for a note.
// --------------------------------------------------------------------------------
function ShowNoteEditionBox(itemId, emptyContent) {

    var Popup =  $('#NoteEditionBoxPopup-' + itemId);
    $.blockUI({ message: Popup, css: { width: '580px', height: '195px', cursor: 'default'} }); 
    Popup.attr('style', 'cursor: default;');

    var StartContent = $('#ReadonlyNoteText-' + itemId).text();

    if (StartContent == emptyContent)
    {
        StartContent = '';
    }


    $('#NoteText-' + itemId).attr('value', StartContent);
}

// --------------------------------------------------------------------------------
// Discards the edition box for a note.
// --------------------------------------------------------------------------------
function CancelNote(itemId) {

    $.unblockUI();  
    
    var OriginalText = $('#ReadonlyNoteText-' + itemId).text();

    var Popup =  $('#NoteEditionBoxPopup-' + itemId);

    Popup.attr('value', OriginalText);
    Popup.attr('style', 'width: 0; height: 0; overflow: hidden;');  
}

// --------------------------------------------------------------------------------
// Saves a note using ajax.
// --------------------------------------------------------------------------------
function SaveNote(address, text, itemId, emptyContent) {

    $('#NoteEditionBoxWrapper-' + itemId).addClass('NoteBoxLoading');

    text = text.trim();

    if (text.length == 0)
    {
        text = emptyContent;
    }

    $.ajax({
        type: 'POST',
        url: address,
        data: [{ name: 'text', value: text }, { name: 'itemId', value: itemId}],
        cache: false,
        success: function (data, status, xhr) {
           
            $('#NoteEditionBoxWrapper-' + itemId).removeClass('NoteBoxLoading');

            $('#ReadonlyNoteText-' + itemId).text(text);

            CancelNote(itemId);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            CancelNote(itemId);
        }        
    });

}
