﻿/// <reference path="jquery-1.3.1-vsdoc.js" />

function MoveSelectedItems(ddlSourceId, ddlTargetId) {
    var ddlSource = document.getElementById(ddlSourceId);
    var ddlTarget = document.getElementById(ddlTargetId);

    if (ddlSource && ddlTarget) {
        for (var itemNum = ddlSource.options.length - 1; itemNum >= 0; itemNum--) {
            if (ddlSource.options[itemNum].selected) {
                var previousOption = ddlSource.options[itemNum];
                previousOption.selected = false;
                ddlSource.removeChild(previousOption);
                ddlTarget.appendChild(previousOption);
            }
        }
    }
}

function GetSelectedValue(dropdownId) {
    if (dropdownId) {
        var dropdown = $("#" + dropdownId).get(0);

        if (dropdown) {
            return dropdown.options[dropdown.selectedIndex].value;
        }
    }

    return null;
}

function ClearTextbox(controlId) {
    if (controlId) {
        var control = $("#" + controlId).get(0);

        if (control) {
            control.value = "";
        }
    }
}

function ResetDropdown(controlId) {
    if (controlId) {
        var control = $("#" + controlId).get(0);

        if (control) {
            control.selectedIndex = 0;
        }
    }
}

var allConceptInfo = {};
function DisplayConceptDetails(selectedValue) {
    if (selectedValue) {
        if (allConceptInfo[selectedValue]) {
            alert(allConceptInfo[selectedValue]);
        }
        else {
            alert("Keine Beschreibung zum gewählten Konzept gefunden.");
        }
    }
    else {
        alert("Bitte zuerst ein Konzept wählen.");
    }
}

function UpdateSelectBySelect(ddlSourceId, ddlTargetId) {
    var ddlSource = document.getElementById(ddlSourceId);
    var ddlTarget = document.getElementById(ddlTargetId);

    if (ddlSource && ddlTarget) {
        var selectedValue = ddlTarget.value;

        // Cleanup the target.
        // [MB]
        for (var itemNum = ddlTarget.options.length - 1; itemNum > 0; itemNum--) {
            ddlTarget.removeChild(ddlTarget.options[itemNum]);
        }

        // Fill in the new stuff.
        // [MB]
        var found = false;
        for (var itemNum = 0; itemNum < ddlSource.options.length; itemNum++) {
            var sourceOption = ddlSource.options[itemNum];

            var newOption = new Option(sourceOption.text, sourceOption.value);
            newOption.selected = (sourceOption.value == selectedValue);

            if (newOption.selected)
                found = true;

            ddlTarget.options[ddlTarget.options.length] = newOption;
        }

        ddlTarget.value = (found) ? selectedValue : "";
    }
}

function SelectAllItems(ddlSourceId) {
    var ddlSource = document.getElementById(ddlSourceId);

    if (ddlSource) {
        for (var itemNum = 0; itemNum < ddlSource.options.length; itemNum++) {
            ddlSource.options[itemNum].selected = true;
        }
    }
}

var uploadFieldCounter = 0;
function AddContent(dummyID, targetID) {
    var dummy = document.getElementById(dummyID);
    var target = document.getElementById(targetID);

    if (dummy && target) {
        uploadFieldCounter++;

        var dummyHTML = dummy.innerHTML;
        dummyHTML = dummyHTML.replace(/##UPLOAD_FIELD_NAME##/, "galleryImage_" + uploadFieldCounter);

        var newContainer = document.createElement("div");
        target.appendChild(newContainer);

        newContainer.innerHTML = dummyHTML;
    }
}

function FindParentOrSelfWrapped(e, className) {
    var foundElement = null;

    if (e) {
        if (e.srcElement)
            foundElement = FindParentOrSelfByClassName(e.srcElement, className);

        if (isFF || isChrome) {
            if (!foundElement && e.currentTarget) {
                foundElement = FindParentOrSelfByClassName(e.currentTarget, className);
            }

            if (!foundElement && e.originalTarget) {
                foundElement = FindParentOrSelfByClassName(e.originalTarget, className);
            }

            if (!foundElement && e.relatedTarget) {
                foundElement = FindParentOrSelfByClassName(e.relatedTarget, className);
            }
        }
    }

    return foundElement;
}

function GetBrowserSpecificTarget(e) {
    if (e) {
        return (isFF || isChrome) ? e.currentTarget : e.srcElement;
    }

    return null;
}

function FindParentOrSelfByClassName(currentItem, className) {
    var cnRegExp = new RegExp(className);

    while (currentItem) {
        if (cnRegExp.test(currentItem.className)) {
            return currentItem;
        }

        currentItem = currentItem.offsetParent;
    }

    return null;
}

var monthLengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
function SubstractDaysFromDate(dateToChange, daysToSubstract) {
    var currentDay = dateToChange.getDate();
    var currentMonth = dateToChange.getMonth();
    var currentYear = dateToChange.getYear();

    currentDay -= daysToSubstract;

    if (currentDay <= 0) {
        currentDay = monthLengths[(currentMonth >= 0) ? currentMonth - 1 : 11] - Math.abs(currentDay);
        currentMonth -= 1;
    }

    if (currentMonth <= 0) {
        currentMonth = 12 - Math.abs(currentMonth);
        currentYear -= 1;
    }

    return new Date(currentYear, currentMonth, currentDay);
}

var refreshDatesFirstRun = true;
var refreshDatesAllowChanges = false;
function RefreshDates(e) {
    if (e) {
        var dateParts = e.split(/\./);
        if (dateParts.length == 3) {
            var newEventStartDate = new Date(dateParts[2], (parseInt(dateParts[1]) - 1), dateParts[0]);
        }

        var bookableEndDate = $("#TbBookableEndDate").get(0);
        var eventEndDate = $("#TbEventEndDate").get(0);
        
        if (bookableEndDate) {
            var dateDummy = new Date();
            var today = PadLeft(dateDummy.getDate(), 2, "0") + "." + PadLeft((dateDummy.getMonth() + 1), 2, "0") + "." + dateDummy.getFullYear();

            if (refreshDatesFirstRun) {
                refreshDatesFirstRun = false;
                refreshDatesAllowChanges = (today == bookableEndDate.value);
            }

            if (refreshDatesAllowChanges) {
                var newBookableEndDate = SubstractDaysFromDate(newEventStartDate, 3);

                bookableEndDate.value = PadLeft(newBookableEndDate.getDate(), 2, "0") + "." + PadLeft((newBookableEndDate.getMonth() + 1), 2, "0") + "." + newBookableEndDate.getFullYear();
                eventEndDate.value = PadLeft(newEventStartDate.getDate(), 2, "0") + "." + PadLeft((newEventStartDate.getMonth() + 1), 2, "0") + "." + newEventStartDate.getFullYear();
            }
        }
    }
}

function PadLeft(text, targetLength, charToPad) {
    text = text + "";

    while (text.length < targetLength) {
        text = charToPad + text;
    }

    return text;
}

function PadRight(text, targetLength, charToPad) {
    text = text + "";

    while (text.length < targetLength) {
        text += charToPad;
    }

    return text;
}

function ResetPagingPage() {
    var hfPaging = $('#CurrentPagingPageNumber').get(0);

    if (hfPaging)
        hfPaging.value = 0;

    var hfAlphabeticalPaging = $('#CurrentPagingPageStartingLetters').get(0);

    if (hfAlphabeticalPaging)
        hfAlphabeticalPaging.value = 0;
}

function ResetPagingPageAndSubmit() {
    ResetPagingPage();
    
    document.forms[0].submit();
}

function SelectPagingPageAndSubmit(pagingNumber)
{
    var hfPaging = $('#CurrentPagingPageNumber').get(0);

    if (hfPaging)
        hfPaging.value = pagingNumber;

    document.forms[0].submit();
}

function SelectAlphabeticalPagingPageAndSubmit(pagingLetters) {
    var hfPaging = $('#CurrentPagingPageStartingLetters').get(0);

    if (hfPaging)
        hfPaging.value = pagingLetters;

    document.forms[0].submit();
}


function ValidateTime(time, fieldName) {
    var errorMsg = null;

    if (time) {
        if (time.value.length == 2)
            time.value += ":00";

        if (time.value.length < 5)
            errorMsg = "Bitte geben Sie ein gültiges Datumsformat ein (HH:MM).";

        if (!errorMsg) {
            if (time.value.substr(2, 1) != ":")
                errorMsg = "Bitte geben Sie ein gültiges Datumsformat ein (HH:MM).";

            if (!errorMsg) {
                var timeParts = time.value.split(new RegExp(":"));

                if (timeParts.length != 2) {
                    errorMsg = "Bitte geben Sie ein gültiges Datumsformat ein (HH:MM).";
                }

                if ((parseInt(timeParts[0]) < 0) || (parseInt(timeParts[0]) > 24))
                    errorMsg = "Bitte geben Sie eine Uhrzeit zwischen 0 und 24 Uhr ein.";

                if ((parseInt(timeParts[1]) < 0) || (parseInt(timeParts[1]) > 59))
                    errorMsg = "Die Minutenangabe der Uhrzeit muss sich zwischen 0 und 60 bewegen.";
            }
        }
    }

    if (errorMsg) {
        if (fieldName)
            errorMsg = "Wert '" + fieldName + "':\n" + errorMsg;

        alert(errorMsg);

        return false;
    }

    return true;
}

function removeLeadingZeros(inputString) {
    inputString = inputString + "";

    return (inputString.substr(0, 1) == "0") ? inputString.substr(1, inputString.length) : inputString;
}

var automaticallySetTimes = {};
function SynchronizeTime(controlIdSource, controlIdTarget, minutesDifference) {
    var sourceControl = $(controlIdSource).get(0);
    var targetControl = $(controlIdTarget).get(0);

    if (sourceControl && targetControl) {
        var targetValue = targetControl.value;
        var sourceValue = sourceControl.value;
        var autoTime = (automaticallySetTimes[controlIdTarget]) ? automaticallySetTimes[controlIdTarget] : null;

        if ((targetValue == "") || (targetValue == "00:00") || (autoTime && (autoTime == targetValue))) {
            var sourceValueParts = sourceValue.split(':');
            var sourceValueHour = parseInt(removeLeadingZeros(sourceValueParts[0]));
            var sourceValueMinutes = parseInt(removeLeadingZeros(sourceValueParts[1]));

            var newMinutes = sourceValueMinutes + parseInt(minutesDifference);
            if (newMinutes < 0) {
                var multiplier = (newMinutes < 0) ? -1 : 1;
                var hoursDifference = Math.ceil(Math.abs(newMinutes) / 60) * multiplier;
                newMinutes = (Math.abs(hoursDifference) * 60) + newMinutes;
                sourceValueHour += parseInt(hoursDifference);

                if (sourceValueHour < 0) {
                    sourceValueHour = 24 + sourceValueHour;
                }
            }

            targetControl.value = PadLeft(sourceValueHour, 2, "0") + ":" + PadLeft(newMinutes, 2 , "0");
            automaticallySetTimes[controlIdTarget] = targetControl.value;
        }
    }
}

function ConvertGermanToEnglishPrice(item) {
    if (item) {
        item.value = item.value.replace(new RegExp(","), ".");

        var splittedParts = item.value.split(new RegExp("\\."));
        if (splittedParts.length == 2) {
            var secondPartExcessLength = 2 - splittedParts[1].length;

            if (secondPartExcessLength < 0) {
                item.value = item.value.substr(0, item.value.length + secondPartExcessLength);
            }
            else {
                item.value = PadRight(item.value, item.value.length + secondPartExcessLength, '0');
            }
        }
        else if ((splittedParts.length == 1) && (item.value.substr(item.value.length - 3, 3) != ",00")) {
            item.value = item.value.replace(new RegExp("\\."), "");
            
            item.value += ".00"
        }
    }
}

// ################################
// ## Event details gallery
// ## [MB]
// ################################

var thumbnailBarAnimationPending = false;
var currentlyMarkedItem = 0;
var currentlyScrolledItem = 0;
function MoveThumbnailBar(thumbnailBar, newItemToSelect) {
    if (thumbnailBar && !thumbnailBarAnimationPending) {
        // Select the just active item.
        // [MB]
        if ((newItemToSelect >= 0) && (newItemToSelect < slideBarPics.length)) {
            $(".SelectedItem").each(function(idx, e) {
                $(e).removeClass("SelectedItem");
            });
            $(".SlideBarPicNavi").each(function(idx, e) {
                if (idx == newItemToSelect) {
                    $(e).addClass("SelectedItem");
                }
            });

            $(".SlideBarPicItem").each(function(idx, e) {
                if (idx == newItemToSelect) {
                    $("img", e).css("border", "3px #960103 solid");
                }
                else {
                    $("img", e).css("border", "3px #FFFFFF solid");
                }
            });

            if (slideBarPics[newItemToSelect]) {
                var si = $("#SelectedImage").get(0);

                if (si)
                    si.src = slideBarPics[newItemToSelect];
            }

            var itemToScrollTo = newItemToSelect;
            if (itemToScrollTo > slideBarPics.length - 3)
                itemToScrollTo = slideBarPics.length - 3;
            var newPosition = -(125 * itemToScrollTo);

            thumbnailBarAnimationPending = true;
            $(thumbnailBar).animate({ left: newPosition }, 300 * Math.abs(currentlyScrolledItem - itemToScrollTo), FinishThumbnailBarAnimation);

            currentlyScrolledItem = itemToScrollTo;
            currentlyMarkedItem = newItemToSelect;
        }
    }
}

function MoveThumbnailBarBy(thumbnailBar, itemsToMove) {
    MoveThumbnailBar(thumbnailBar, (parseInt(currentlyMarkedItem) + parseInt(itemsToMove)));
}

function FinishThumbnailBarAnimation() {
    thumbnailBarAnimationPending = false;
}

function AttachEnterKeyToFormSubmit(controlId) {
    if (controlId) {
        var controlToAddEventTo = $("#" + controlId).get(0);

        if (controlToAddEventTo) {
            $(controlToAddEventTo).keydown(function(e) {
                if (e.keyCode == 13) {
                    document.forms[0].submit();
                }
            });
        }
    }
}

// ##############################
// ## Modal popup stuff
// ## [MB]
// ##############################

var lastDisplayedElement = null;
var warningText = null;
function ShowUnnamedGuestsHint() {
    var inactiveBoxCount = $("#GuestContainer .InactiveTextbox").length;
    var selectedGuestCount = 1;

    var tc = $("#TicketCount").get(0);
    if (tc)
        selectedGuestCount = tc.selectedIndex + 1;

    var namedCount = (selectedGuestCount - inactiveBoxCount);

//    if (inactiveBoxCount > 0) {
//        if (namedCount == 1) {
//            warningText = "Sie bestellen soeben " + selectedGuestCount + " Ticket(s), aber nur 1 Ticket ist mit Namen personalisiert. Ist dies korrekt?";
//        }
//        else {
//            warningText = "Sie bestellen soeben " + selectedGuestCount + " Ticket(s), aber nur " + namedCount + " Tickets sind mit Namen personalisiert. Ist dies korrekt?";
//        }

//        FadeInModalPopupBackground(DisplayWarning);
//    }
//    else {
        warningText = null;
        document.forms[0].submit();
//    }
}

function FadeInModalPopupBackground(fadeInFinishedCallback) {
    var grayOverlay = $("#GrayOverlay");

    if (isIE6) {
        grayOverlay.css("height", $(document).height());
    }
    
    grayOverlay.css("display", "block");
    $(grayOverlay).animate({ opacity: 0.6 }, 400, fadeInFinishedCallback);
}

function FadeOutModalPopupBackground() {
    if (lastDisplayedElement) {
        $(lastDisplayedElement).css("display", "none");
        StopCenteringItem();
    }

    if ($("#GrayOverlay").css("opacity") > 0)
        $("#GrayOverlay").animate({ opacity: 0 }, 400, HideModalPopup);
}

function HideModalPopup() {
    var grayOverlay = $("#GrayOverlay");

    grayOverlay.css("display", "none");
}

function DisplayWarning() {
    if (warningText) {
        lastDisplayedElement = $("#OverlayContentWarning");

        lastDisplayedElement.css("display", "block");
        lastDisplayedElement.css("position", "absolute");
        RealignLastCenteredItem();

        var textContainer = $(".HintText", lastDisplayedElement).get(0);
        if (textContainer) {
            textContainer.innerHTML = warningText;
        }
    }
}

function OpenIframe(iframeSrc, iframeWidth, iframeHeight) {
    var oi = $("#OverlayIframeContainer iframe").get(0);

    if (oi) {
        // Update for to small windows.
        // [MB]
        var oldHeight = iframeHeight;
        var windowHeight = $(window).height();

        if (iframeHeight > (windowHeight - 50)) {
            iframeHeight = windowHeight - 100;
            if (iframeHeight < 50)
                iframeHeight = 50;
        }
    
        oi.src = iframeSrc + "?substractHeight=" + (oldHeight - iframeHeight);
        oi.style.width = iframeWidth + "px";
        oi.style.height = iframeHeight + "px";
        lastDisplayedElement = $("#OverlayIframeContainer");
        RealignLastCenteredItem();

        FadeInModalPopupBackground(ShowIframeCallback);
    }
}

function ShowIframeCallback() {
    $("#OverlayIframeContainer").css("display", "block");
}

function CloseIframe() {
    $("#OverlayIframeContainer").css("display", "none");

    FadeOutModalPopupBackground();
}

function StopCenteringItem() {
    lastDisplayedElement = null;
}

function RealignLastCenteredItem() {
    if (lastDisplayedElement) {
        var newLeft = ($(document).width() / 2) - ($(lastDisplayedElement).width() / 2);
        lastDisplayedElement.css("left", newLeft + "px");


        var additionalTop = 0;
        if (!window.pageYOffset) {
            additionalTop = (document.documentElement.scrollTop != 0) ? document.documentElement.scrollTop : document.body.scrollTop;
        }
        else {
            additionalTop = window.pageYOffset;
        }

        var newTop = 50 + (additionalTop );
        
        lastDisplayedElement.css("top", newTop + "px");
    }
}


$(window).resize(function() {
    RealignLastCenteredItem();
});
$(window).scroll(function() {
    RealignLastCenteredItem();
});

$(document).keydown(function(e) {
    if (e.keyCode == 27) {
        CloseIframe();
    }
});