// Funktion des Dialogs IDD_CONFIG zur Herstellung der korrekten
// Darstellung der "Drucken"-Buttons je nach gespeicherter
// Tab-Auswahl sowie zum Ausblenden des Materiallisten-Tabs bei
// entsprechender Parameter-Einstellung. Lädt außerdem den
// korrekten Preis der Konfiguration beim Initialisieren des
// Dialogs
function initIddConfig()
{
	// chueller - Warema: Delay display of config preview table in main dialog
	// Falls der Vorschaudaten-Bereich unterhalb des
    // Menübaums genutzt wird, den Bereich temporär
	// ausblenden (um bestehende alte Vorschaugrafiken
	// bis zu deren Aktualisierung zu verbergen)
    if($F("cfgPreviewAvailable") == "true")
	{
        displayCfgPreviewArea(false);
	}
	// Warema: end
	
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    var tabCtrl = dialog.IDC_EASYKATLIGHTCONFIG_TABS;
    
    // Flag für eine externe Konfiguration abfragen
    var externalConfig = $F("isExternalConfig");
	
    // Materiallisten-Tab ausblenden, sofern der ent-
    // sprechende Parameter gesetzt ist oder es sich um
    // eine externe Konfiguration handelt
    if($F("showMatlist") == "false" || externalConfig == "true")
        tabCtrl.hideTab("IDC_MATLIST_TABREITER");
    
    /* Alle Buttons des Dialogs (OK, Zurück, Typenschlüssel-Analyse)
	 * mit einem onMouseUp-Handler versehen, damit das Formular nicht
	 * per Enter-Taste in einem Edit-Feld abgeschickt werden kann
	 */
    $("CFG_OK").observe("mouseup", function(event) {
        startConfigRequest(Event.element(event), 'CFG_OK');
    });
	$("IDC_CFG_CANCEL").observe("mouseup", function(event) {
        startConfigRequest(Event.element(event), 'CFG_CANCEL');
    });
	$("TCA_GO").observe("mouseup", function(event) {
        StartTCA();
    });
    
    // Menübaumknoten fokussieren, sofern eine gespeicherte
    // Konfiguration geladen wurde
    var focusTreeNode = $F("loadedConfigTreeNode");
    
    if(focusTreeNode)
    {
        if(focusTreeNode.toUpperCase() != "ROOT")
        {
            topEasykatFrame.dialog.IDC_TREE_CLASSES.focusItem(focusTreeNode);
            topEasykatFrame.dialog.IDC_TREE_CLASSES.setSelected(focusTreeNode);
        }
    }
    
    // Je nach Typ der Konfiguration (extern / intern),
    // den Initialaufbau des Dialogs einleiten
    if(externalConfig != "true")
        startRequest("ajax/ConfigInitialLoad");
	else
		EasyKat.ExternalConfiguration.app.startRequest("ajax/ExternalConfigInitialLoad");
    
	// Materialliste laden, wenn der entsprechende
    // Tab-Reiter beim Dialogaufruf selektiert ist
    var selectedTab = tabCtrl.getSelected();

    if(selectedTab == "IDC_MATLIST_TABREITER")
		loadBomTable();
}


// Function of the dialog IDD_LOGIN to correct some
// browser-specific layout bugs (e.g. scrollbars
// show although needless)
function initIddLogin()
{
    var loginImageContainer = document.getElementById('LOGIN_IMAGE_CONTAINER');
    var dialogWidth = parseInt(document.body.getAttribute('dialogwidth'));
    var dialogHeight = parseInt(document.body.getAttribute('dialogheight'));
    
	// Correct both dimension values by 4 pixels if
	// system is running in CD-ROM mode and Mozilla
	// control gets used to visualize catalog. Du-
	// ring initialization of catalog it was neces-
	// sary in this case to reduce dialog size by
	// this amount on server side (PARAMETER.b) in
	// order to avoid the application window from
	// getting some pixels too large
	var dialogSizeCorrection = 0;
	if($F("systemInInternetMode") == "false" && navigator.appName.indexOf("Explorer") == -1)
		dialogSizeCorrection = 4;
	
    // Avoid problems at applying the style parameters
    // to the image container element in IE7 by delaying
    // the performance
    setTimeout(function() {
        loginImageContainer.style.width = dialogWidth + dialogSizeCorrection + "px";
        loginImageContainer.style.height = dialogHeight + dialogSizeCorrection + "px";
        loginImageContainer.style.overflow = "hidden";
    }, 5);
}


// chueller - Warema: Determine browser language
// Funktion des Dialogs IDD_CHECKBROWSERLANGUAGE
// zur Ermittlung der Sprache des aufrufenden
// Browsers
function checkBrowserLanguage()
{
	var browserLanguage = "";
	
	if (navigator.appName == 'Netscape')
		browserLanguage = navigator.language;
	else
		browserLanguage = navigator.browserLanguage;
	
	createNewHiddenFormField('EKSUBMITEVENTPAR', browserLanguage);
	ekSubmit('');
}
// Warema: end


// Funktion des Dialogs IDD_CFGSUMMARY zur 
// Durchführung von Initialisierungs-Prozessen
function initIddCfgSummary()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Bei externer Konfiguration auf das Produktbild
    // einen onclick-Handler setzen, um das Cad4Web-
    // Applet zu laden
    if($F("isExternalConfig") == "true")
    {
        $("IDC_CFGSUMMARYTABLE_CONFIGIMAGE").observe("click", function(event)
        {
			topEasykatFrame.Cad4Web.openCadWin({
				preview: '2D',
				hide2dtoolbar: 1,
				language: topEasykatFrame.$("IDC_COMBO_LANGUAGE").value,
				/* chueller - Warema: Don't show Java errors,
				 * initialize KiM 2D DXF viewer and pass con-
				 * figuration XML file to Cad4Web handler*/
				applet2d: 1,
				applet2d_config_xml: topEasykatFrame.$F("cad4Web2dConfigXml"),
				showjavaerrormsg: 0,
				// Warema: end
				errordisplay: 0,
				Mapping_Profile_JSON: 'extConfig/SpecialProfile.json' //Pfad und Filename des Special Mapping Files
			});
        });
    }
    
    // Cad4Web-Button einblenden, sofern erlaubt
    if($F("cad4WebAvailable") == "true")
        $("IDC_CFGSUMMARY_DISPLAY_CAD").show();
    
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_OFFER zur Herstellung
// der korrekten Ansicht des Angebots-Dialogs und
// zur Aktualisierung der Kalkulationsdaten beim
// Aufruf des Tab-Reiters "Kalkulation".
function	initIddOffer()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    var tabCtrl = dialog.IDC_OFFERTABCTRL;
    var selectedTab = tabCtrl.getSelected();
    
    // Merker für das Ausblenden des Angebots-
    // und Kalkulations-Tabreiters
    var offerTabHidden = false;
    var calcTabHidden  = false;
    
    // Tabs verstecken, Buttons ausblenden und
    // die Eingabefelder des Vertriebs-Tabs
    // auf disabled setzen
    var hiddenTabIds = $F("hiddenTabIds");
    
    if ( hiddenTabIds != "" )
    {
        hiddenTabIds = hiddenTabIds.split(";");
        
        for(i = 0; i < hiddenTabIds.length; i++)
        {
            tabCtrl.hideTab(hiddenTabIds[i]);
            
            // Sofern der Angebots-Tab ausgeblendet
            // wird, deaktiviere die Buttons "CSV
            // erstellen", "Drucken PDF / RTF",
            // "Als Mail senden" und "Export XML"
            if(hiddenTabIds[i] == "IDC_OFFER_BASICDATA_TAB")
            {
                offerTabHidden = true;
                //$("IDC_OFFER_CREATE_CSV").hide();
                //$("IDC_OFFER_PRINT_RTF").hide();
                $("IDC_OFFER_PRINT_PDF").hide();
                $("IDC_OFFER_SEND_EMAIL").hide();
                $("IDC_OFFER_EXPORT_XML").hide();
            }
            if(hiddenTabIds[i] == "IDC_CALCULATION_TAB")
            {
                // Währungs-Combobox des Angebots-Tabs ausblenden
                calcTabHidden = true;
                $("IDC_OFFER_CURRENCY").hide();
                $("IDC_OFFER_CURRENCY_LABEL").hide();
                
                // Preis-Checkboxen des Layout-Tabs abwählen und
                // deaktivieren
                $("IDC_OFFER_OVERVIEW_PRICE_LABEL").className = "easykatLight-smallText_disabled";
				$("IDC_OFFER_OVERVIEW_UNIT_PRICE_LABEL").className = "easykatLight-smallText_disabled";
                $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_PRICE").disabled = true;
                $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_PRICE").checked = false;
				$("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_UNIT_PRICE").disabled = true;
                $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_UNIT_PRICE").checked = false;
                $("IDC_OFFER_DETAILS_PRICE_LABEL").className = "easykatLight-smallText_disabled";
				$("IDC_OFFER_DETAILS_UNIT_PRICE_LABEL").className = "easykatLight-smallText_disabled";
                $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_PRICE").disabled = true;
                $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_PRICE").checked = false;
				$("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_UNIT_PRICE").disabled = true;
                $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_UNIT_PRICE").checked = false;
            }
        }
        
        // Die Eingabefelder des Vertriebs-Tabs
        // auf disabled setzen
        var salesTabEditFields = $("IDC_SALES_ADDRESS_TAB").select("input");
        
        dialog["IDC_FIRMENNAME_SALES"].setReadonly();
        
        for(var i = 0; i <  salesTabEditFields.length; i++)
        {
            salesTabEditFields[i].readOnly = true;
            salesTabEditFields[i].className = "easykatLight-disabledTextField";
            salesTabEditFields[i].style.color = "rgb(100,100,100)";
        }
        
        // Auch die Anrede-Combobox deaktivieren
        dialog["*.PROJECT.SETTINGS.SALES.IDC_ANREDE_SALES"].disable();
    }
    
    // Den Button zur eMail-Anfrage sowie das Textfeld
    // "Bemerkung" samt Label ausblenden, wenn der
    // Angebots-Tabreiter nicht ausgeblendet wurde
    // (vertriebsseitiger Modus des Konfigurators)
    if(!offerTabHidden)
	{
        dialog.IDC_OFFER_REQUEST_NOTICE_TEXTAREA_LABEL.hide();
        dialog["*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_REQUEST_NOTICE_TEXTAREA"].hide();
        dialog.IDC_OFFER_EMAIL_REQUEST_BUT.hide();
	}
	// Die Ansprechpartner-Eingabefelder für die eMail-
	// Anfrage aktivieren, wenn das System im kunden-
	// seitigen Modus läuft
	else
	{
		dialog["*.PROJECT.SETTINGS.CLIENT.IDC_ANREDE_CUSTOMER"].show();
		dialog.IDC_ANSPRECHPARTNER_CUSTOMER_LABEL.show();
		dialog.IDC_ANSPRECHPARTNER_CUSTOMER.show();
	}
    
    // Kalkuliere beim Anklicken des Kalkulationstabs oder
	// wenn die Projektliste verändert wurde
    if (selectedTab == "IDC_CALCULATION_TAB" || document.getElementById('RELOADED_OFFER_DIALOG').value == "true")
    {
        // Dieser Aufruf der beiden Ajax-Funktionen löst
        // keinen Antwort-Konflikt aus, da der Kalkula-
        // tions-Tab frühestens beim zweiten Besuch des
        // Angebots-Dialogs bereits beim Dialogeintritt
        // selektiert sein kann. Dadurch ist bereits die
        // Währungs-Historie gesetzt, und die letztere
        // Funktion ruft nicht nochmals die Kalkulation
        // auf.
        calculate('full');
        
        // Das Flag zum Neukalkulieren aufgrund einer
        // veränderten Projektliste zurücksetzen, da
        // hier bereits die komplette Neuberechnung
        // durchgeführt wurde
        document.getElementById('RELOADED_OFFER_DIALOG').value = 'false';
        
        setOfferCurrency("IDC_OFFER_CURRENCY");
        
        // Die korrekte Anzeige der Combobox "Alle mar-
        // kieren" unter das Kalkulations-Tabelle prüfen
        verifyCheckboxStatus();
    }
    
    // Folgende Aktionen durchführen, wenn der Kalkula-
    // tions-Tabreiter nicht ausgeblendet wurde (d.h.
    // vertriebsseitiger Modus mit Preisanzeige):
    // - Header-Zelle über der Checkbox-Kontrolle sowie
    //   vor dem kalkulierten Positionspreis verstecken
    // - onchange-Handler auf die Preisfaktor- sowie
    //   die Währungs-Combobox setzen, um stets eine
    //   aktuelle Kalkulation vorliegen zu haben
    // - mouseover- und mouseout-Handler der Tabelle
    //   löschen, um JavaScript-Fehler zu vermeiden
    if(!calcTabHidden)
    {
        var offerCalcTable = dialog["*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.CALC.OFFER_TABLE"];
        
        Element.removeClassName( offerCalcTable.columnHeader.headerTable.rows[0].cells[0], "header");
        Element.removeClassName( offerCalcTable.columnHeader.headerTable.rows[0].cells[7], "header");
        
        $("IDC_OFFER_CURRENCY").observe("change", function(event)
        {
            setOfferCurrency(Event.element(event).id);
        });
        
        if($("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.PRICE_FACTOR_IDENT").style.display != "none")
        {
            $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.PRICE_FACTOR_IDENT").observe("change", function(event)
            {
                calculate('full');
            });
        }
        
        /*for(var i = 1; i < offerCalcTable.element.rows.length; i++)
        {
            Event.stopObserving(offerCalcTable.element.rows[i], "mouseover", offerCalcTable.rowOverReference);
            Event.stopObserving(offerCalcTable.element.rows[i], "mouseout", offerCalcTable.rowOutReference);
        }*/
    }
	
	// Initialen Status der Checkbox "Adresse Kunde"
	// abfragen, um die Eingabefelder "zu Händen von"
	// dementsprechend zu aktivieren bzw. deaktivieren
	initIddOffer_showToAttentionFields($("IDC_OFFER_CHECKBOX_CUSTOMER_ADDRESS").checked);
	
    // Event-Handler auf die "Adresse Kunde" Check-
    // box legen, um die Felder "zu Händen von" je
    // nach Selektion ein- bzw. auszublenden
    $("IDC_OFFER_CHECKBOX_CUSTOMER_ADDRESS").observe("click", function(event)
    {
        var eventElement = Event.element(event);
        
		initIddOffer_showToAttentionFields(eventElement.checked);
    });
    
    // Initialen Status des Radio-Buttons für die
	// Felder "Lieferzeit" abfragen und diese de-
    // aktivieren, sofern der Radio-Button nicht
    // angewählt ist
	initIddOffer_showDateOfDeliveryFields($("IDC_OFFER_DELIVERYPERIOD_RADIO").checked);
    
    // Event-Handler auf die Radio-Buttons vor
    // den Feldern "Lieferzeit" und "Lieferdatum"
    // legen, um die Felder zu deaktivieren, de-
    // ren Radio-Button nicht angewählt ist
    $("IDC_OFFER_DELIVERYPERIOD_RADIO").observe("click", function(event)
    {
        initIddOffer_showDateOfDeliveryFields($("IDC_OFFER_DELIVERYPERIOD_RADIO").checked);
    });
    
    $("IDC_OFFER_DATEOFDELIVERY_RADIO").observe("click", function(event)
    {
        initIddOffer_showDateOfDeliveryFields($("IDC_OFFER_DELIVERYPERIOD_RADIO").checked);
    });
    
    
    // Sofern das System im Vertriebs-Modus läuft
    if(!offerTabHidden)
    {
        // Prüfen des selektierten Wertes der Dokument-
        // typ-Combobox und Freigabe des nebenstehenden
        // Edit-Felds, sofern der Wert "USER_DEFINED"
        // ausgewählt wurde
        var documentTypeCombobox = $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_DOCUMENT_TYPE_COMBO");
        documentTypeCombobox.observe("change", function(event)
        {
            var selectedDocType = Event.element(event).value;
            initIddOffer_setDocTypeUserFieldStatus(selectedDocType);
        });
        
        initIddOffer_setDocTypeUserFieldStatus(documentTypeCombobox.selected);
        
		if(is.nav && is.gecko)
		{
			var commonEditFields = $$("input.textNormal");
			
			for(var i = 0; i < commonEditFields.length; i++)
				commonEditFields[i].style.width = (parseInt(commonEditFields[i].style.width.replace("px", "")) + 2) + "px";
			
			var calculationEditFields = $$("input.easykatLight-rightAlignTextField");
			
			for(var i = 0; i < calculationEditFields.length; i++)
				calculationEditFields[i].style.width = (parseInt(calculationEditFields[i].style.width.replace("px", "")) + 2) + "px";
			
			var disabledCalcEditFields = $$("input.easykatLight-disabledTextfield_rightAlign");
			
			for(var i = 0; i < disabledCalcEditFields.length; i++)
				disabledCalcEditFields[i].style.width = (parseInt(disabledCalcEditFields[i].style.width.replace("px", "")) + 2) + "px";
			
			var textAreas = $$("textarea.easykatLight-textarea");
			
			for(var i = 0; i < textAreas.length; i++)
				textAreas[i].setStyle({margin: '0px', padding: '1px'});
			
			var checkBoxes = $$("input[type=checkbox]");
			
			for(var i = 0; i < checkBoxes.length; i++)
				checkBoxes[i].style.marginTop = "4px";
			
			var groupBoxLabels = $$("legend");
			
			for(var i = 0; i < groupBoxLabels.length; i++)
				groupBoxLabels[i].style.marginLeft = "7px";
		}
		
        // Initialen Status der Checkboxen für die
        // Inhalte von Übersichts-Tabelle und Detail-
        // Angaben des Angebots-Dokuments abfragen und
        // abhängige Checkboxen aktivieren bzw. deak-
        // tivieren
        var overviewTableCheckbox = $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_TABLE");
        var positionDetailsCheckbox = $("IDC_OFFER_CHECKBOX_POSITIONDETAILS");
        var configDetailsCheckbox = $("IDC_OFFER_CHECKBOX_CFGPRODUCTDETAILS");
        
        initIddOffer_setOfferContentCheckboxesStatus(overviewTableCheckbox.checked, (positionDetailsCheckbox.checked || configDetailsCheckbox.checked));
        
        // Event-Handler auf die drei Checkboxen für
        // die Inhalte von Übersichts-Tabelle und Detail-
        // Angaben des Angebots-Dokuments legen, um auf
        // Änderungen von deren Status reagieren zu können
        overviewTableCheckbox.observe("click", function(event)
        {
			var overviewTable = $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_TABLE").checked;
            var positionDetails = $("IDC_OFFER_CHECKBOX_POSITIONDETAILS").checked;
            var configDetails = $("IDC_OFFER_CHECKBOX_CFGPRODUCTDETAILS").checked;
			
            initIddOffer_setOfferContentCheckboxesStatus(overviewTable, (positionDetails || configDetails));
        });
        
        positionDetailsCheckbox.observe("click", function(event)
        {
            var overviewTable = $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_TABLE").checked;
            var positionDetails = $("IDC_OFFER_CHECKBOX_POSITIONDETAILS").checked;
            var configDetails = $("IDC_OFFER_CHECKBOX_CFGPRODUCTDETAILS").checked;
            
            initIddOffer_setOfferContentCheckboxesStatus(overviewTable, (positionDetails || configDetails));
        });
        
        configDetailsCheckbox.observe("click", function(event)
        {
            var overviewTable = $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_TABLE").checked;
            var positionDetails = $("IDC_OFFER_CHECKBOX_POSITIONDETAILS").checked;
            var configDetails = $("IDC_OFFER_CHECKBOX_CFGPRODUCTDETAILS").checked;
            
            initIddOffer_setOfferContentCheckboxesStatus(overviewTable, (positionDetails || configDetails));
        });
    }
    
    // Event-Handler zur Überprüfung der Einträge in
    // die Adress-Felder von Kunde und Vertrieb auf
    // die Buttons "Drucken PDF" und "Drucken RTF"
    // legen, sofern der Angebots-Tab sichtbar ist
    if(!offerTabHidden)
    {
        /*$("IDC_OFFER_PRINT_RTF").observe("click", function(event)
        {
            // Prüfen, ob wenigstens eine Checkbox
            // der Kalkulations-Tabelle angeklickt
            // ist, sofern der Kalkulations-Tab
            // angezeigt wird
            if(!calcTabHidden)
            {
                var checkboxSelected = initIddOffer_checkSelectedArticles();
                
                if(!checkboxSelected)
                    return;
            }
            
            // Prüfen, ob wenigstens eine der Detail-
            // Angaben-Checkboxen des Layout-Tabs
            // selektiert ist
            initIddOffer_checkChosenContents(event);
        });*/
        
        $("IDC_OFFER_PRINT_PDF").observe("click", function(event)
        {
            // Prüfen, ob wenigstens eine Checkbox
            // der Kalkulations-Tabelle angeklickt
            // ist, sofern der Kalkulations-Tab
            // angezeigt wird
            if(!calcTabHidden)
            {
                var checkboxSelected = initIddOffer_checkSelectedArticles();
                
                if(!checkboxSelected)
                    return;
            }
            
            // Prüfen, ob wenigstens eine der Detail-
            // Angaben-Checkboxen des Layout-Tabs
            // selektiert ist
            initIddOffer_checkChosenContents(event);
        });
		
		$("IDC_OFFER_PRINT_DOC").observe("click", function(event)
        {
            // Prüfen, ob wenigstens eine Checkbox
            // der Kalkulations-Tabelle angeklickt
            // ist, sofern der Kalkulations-Tab
            // angezeigt wird
            if(!calcTabHidden)
            {
                var checkboxSelected = initIddOffer_checkSelectedArticles();
                
                if(!checkboxSelected)
                    return;
            }
            
            // Prüfen, ob wenigstens eine der Detail-
            // Angaben-Checkboxen des Layout-Tabs
            // selektiert ist
            initIddOffer_checkChosenContents(event);
        });
		
		// Setup event handler for the two buttons
		// calling a popup dialog which provides
		// additional settings to control content 
		// of certain sections of printed offer do-
		// cument as well as their layout
		var overviewTableSettingsButton = $("changeOverviewTableLayoutSettings");
		var detailsTableSettingsButton = $("changeDetailsTableLayoutSettings");
		
		overviewTableSettingsButton.observe("click", function(event)
		{
			handleOfferLayoutSettings({task: "getPopupContent", settingsSection: "overviewTable"});
		});
		
		detailsTableSettingsButton.observe("click", function(event)
		{
			handleOfferLayoutSettings({task: "getPopupContent", settingsSection: "detailsTable"});
		});
		
		// Ensure, that default values are set for
		// all layout settings controlable by popup
		// dialog which gets called by the event
		// handlers instantiated above. Thus no er-
		// rors occur, if this dialog doesn't get
		// called until printing process is started
		// which requires these settings
		handleOfferLayoutSettings({task: "setupParameterDefaults"});
		
		// If container of popup dialog does already
		// exist, remove it, so it has to be setup
		// again when called. This avoids JavaScript
		// errors if Internet Explorer is used con-
		// cerning click observer of checkbox con-
		// trols which are part of the dialog. The
		// deletion process has to be done the old-
		// fashioned way, because it's the only one
		// which gets performed by Internet Explorer
		var popupVar = topEasykatFrame.document.getElementById("layoutSettingsContainer");
		if(popupVar)
			popupVar.parentNode.removeChild(popupVar);
		
		// Adapt position and label of buttons de-
		// pending on which kind of browser is used
		if(!is.ie)
		{
			overviewTableSettingsButton.style.top = (parseInt(overviewTableSettingsButton.style.top.substring(0,3)) + 1) + "px";
			detailsTableSettingsButton.style.top = (parseInt(detailsTableSettingsButton.style.top.substring(0,3)) + 1) + "px";
		}
		else
		{
			overviewTableSettingsButton.value = overviewTableSettingsButton.value.replace(" ", "<br/>");
			detailsTableSettingsButton.value = detailsTableSettingsButton.value.replace(" ", "<br/>");
		}
    }
    
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}

// Utility-Funktion der Initialisierungsfunktion des
// Dialogs IDD_OFFER zur Ein- bzw. Ausblendung der
// "zu Händen von"-Eingabefelder
function initIddOffer_showToAttentionFields(showFields)
{
	if(showFields)
	{
		dialog.IDC_OFFER_TOATTENTION_COMBO.enable();
		dialog.IDC_OFFER_TOATTENTION.element.disabled = false;
		dialog.IDC_OFFER_TOATTENTION.element.className = "textNormal";
	}
	else
	{
		dialog.IDC_OFFER_TOATTENTION_COMBO.disable();
		dialog.IDC_OFFER_TOATTENTION.element.disabled = true;
		dialog.IDC_OFFER_TOATTENTION.element.className = "easykatLight-disabledTextField";
	}
}

// Utility-Funktion der Initialisierungsfunktion des
// Dialogs IDD_OFFER zur Aktivierung bzw. Deaktivie-
// rung des Eingabefelds für eine benutzerdefinierte
// Bezeichnung des Angebots-Dokuments je nach Aus-
// wahl in der vorgeschalteten Combobox
function initIddOffer_setDocTypeUserFieldStatus(comboboxSelection)
{
    var userDocTypeEditField = $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_DOCUMENT_TYPE_USER");
    
    if(comboboxSelection == "DOCTYPE_USER_DEFINED")
    {
        userDocTypeEditField.disabled = false;
        userDocTypeEditField.className = "textNormal";
    }
    else
    {
        userDocTypeEditField.disabled = true;
        userDocTypeEditField.className = "easykatLight-disabledTextField";
    }
}


// Utility-Funktion der Initialisierungsfunktion des
// Dialogs IDD_OFFER zur Aktivierung bzw. Deaktivie-
// rung der Eingabefelder "Lieferzeit" und "Liefer-
// datum" je nach Status der Radio-Buttons davor
function initIddOffer_showDateOfDeliveryFields(radioButtonSelected)
{
    // Sofern der Radio-Button "Lieferzeit" ange-
    // wählt ist
    if(radioButtonSelected)
    {
        dialog.IDC_OFFER_DATEOFDELIVERY.element.disabled = true;
        dialog.IDC_OFFER_DATEOFDELIVERY.element.className = "easykatLight-disabledTextField";
        dialog.IDC_OFFER_DELIVERY_COMBO.enable();
        dialog.IDC_OFFER_DELIVERYPERIOD.element.disabled = false;
        dialog.IDC_OFFER_DELIVERYPERIOD.element.className = "textNormal";
    }
    else
    {
        dialog.IDC_OFFER_DATEOFDELIVERY.element.disabled = false;
        dialog.IDC_OFFER_DATEOFDELIVERY.element.className = "textNormal";
        dialog.IDC_OFFER_DELIVERY_COMBO.disable();
        dialog.IDC_OFFER_DELIVERYPERIOD.element.disabled = true;
        dialog.IDC_OFFER_DELIVERYPERIOD.element.className = "easykatLight-disabledTextField";
    }
}

// Utility-Funktion der Initialisierungsfunktion des
// Dialogs IDD_OFFER zur Aktivierung bzw. Deaktivie-
// rung der Checkboxen fuer den Inhalt des Angebots
// je nach Status der beiden "Detail-Angaben"-Check-
// boxen darueber
function initIddOffer_setOfferContentCheckboxesStatus(overviewTable, details)
{
    // JSON-String mit den Parameter-Vorgaben im
    // Bezug auf die Veränderbarkeit der Checkboxen
    // laden, damit keine ausgegrauten Checkboxen
    // versehentlich wieder aktiviert werden
    var parameterCheckboxDisabledData = eval("(" + $F("parameterCheckboxDisabledData") + ")");
    
    // Der vordere Teil des Idents aller Checkboxen
    // sowie der vordere und letzte Teil des Idents
    // aller Checkbox-Labels
    var checkboxFrontPartIdent = "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_";
    var checkboxLabelFrontPartIdent = "IDC_OFFER_";
    var checkboxLabelLastPartIdent  = "_LABEL";
    
    // Variablen für den CSS-Style und den disabled-
    // Status der beiden Checkbox-Gruppen
    var overviewCheckboxLabelClassName = "easykatLight-smallText";
    var overviewCheckboxDisabledStatus = false;
    var detailsCheckboxLabelClassName  = "easykatLight-smallText";
    var detailsCheckboxDisabledStatus  = false;
    
    if(!overviewTable)
    {
        overviewCheckboxLabelClassName += "_disabled";
        overviewCheckboxDisabledStatus = true;
    }
    
    if(!details)
    {
        detailsCheckboxLabelClassName += "_disabled";
        detailsCheckboxDisabledStatus = true;
    }
	
	// Adapt status of the two buttons triggering
	// popup dialog which provides further settings
	// for corresponding content section of offer
	// document to that of related checkboxes
	$("changeOverviewTableLayoutSettings").disabled = overviewCheckboxDisabledStatus;
	$("changeDetailsTableLayoutSettings").disabled = detailsCheckboxDisabledStatus;
    
    // Prüfen, ob der Kalkulations-Tab sichtbar
    // ist, da nur in diesem Fall die Preis-
    // Checkboxen ebenfalls beeinflusst werden
    var calculationTabDisplayStatus = $("IDC_OFFERTABCTRL").down("div").select("a")[2].style.display;
    
    if(calculationTabDisplayStatus == "none")
    {
        parameterCheckboxDisabledData["OVERVIEW_PRICE"] = 1;
        parameterCheckboxDisabledData["DETAILS_PRICE"] = 1;
    }
    
    // Elemente der Übersichts-Tabelle unter Be-
    // rücksichtigung der Parameter-Vorgaben an-
    // passen
    for(var currentIdentPart in parameterCheckboxDisabledData)
    {
        // Sofern die Combobox nicht durch Parame-
        // ter-Vorgaben dauerhaft ausgegraut ist
        if(!parseInt(parameterCheckboxDisabledData[currentIdentPart]))
        {
            // Den Ident der Checkbox vervollständigen
            var checkboxIdent = checkboxFrontPartIdent + currentIdentPart;
            
			// Den Ident des Edit-Feldes ableiten, sofern
			// es ein solches Edit-Feld gibt
			/*var editFieldIdent;
			if(currentIdentPart.indexOf("OVERVIEW") >= 0)
			{
				if(currentIdentPart == "OVERVIEW_POSITIONNR" || currentIdentPart == "OVERVIEW_QUANTITY" || currentIdentPart == "OVERVIEW_ARTNR" || currentIdentPart == "OVERVIEW_ARTDESC" || currentIdentPart == "OVERVIEW_PRICE")
					editFieldIdent = checkboxIdent.replace("_CHECKBOX_", "_EDIT_");
			}*/
			
            // Aus dem Teil des Idents der Checkbox den
            // Ident von deren Label ableiten
            var labelIdent = checkboxLabelFrontPartIdent + currentIdentPart + checkboxLabelLastPartIdent;
            
            // Status des Labels und der Combobox je
            // nach Gruppenzugehörigkeit anpassen
            if(currentIdentPart.indexOf("OVERVIEW") >= 0)
            {
                $(labelIdent).className = overviewCheckboxLabelClassName;
                $(checkboxIdent).disabled = overviewCheckboxDisabledStatus;
				
				// Edit-Feld anpassen, falls vorhanden
				/*if(editFieldIdent)
					$(editFieldIdent).disabled = overviewCheckboxDisabledStatus;*/
            }
            else
            {
                $(labelIdent).className = detailsCheckboxLabelClassName;
                $(checkboxIdent).disabled = detailsCheckboxDisabledStatus;
            }
        }
    }
}

// Utility-Funktion der Initialisierungsfunktion des
// Dialogs IDD_OFFER zur Überprüfung der Stati der
// Artikel-Checkboxen im Kalkulations-Tab (erste
// Zeile der Kalkulations-Tabelle). Lässt die Erzeu-
// gung eines PDF- / RTF-Dokuments nur dann zu, wenn
// mindestens eine der Checkboxen gewählt ist.
// ACHTUNG: Protoype nicht einsetzbar, da die "rows"
//          Eigenschaft der Tabelle überlagert wird
//
// @return true, wenn mindestens eine Checkbox ge-
//         wählt ist, ansonsten false
function initIddOffer_checkSelectedArticles()
{
    var calculationTable = document.getElementById("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.CALC.OFFER_TABLE_TABLE");
    
    // Flag für die Auswahl einer Checkbox
    var checkboxSelected = false;
    
    // Iteriere über die Tabellenzeilen
    for(var i = 1; i < calculationTable.rows.length && !checkboxSelected; i++)
    {
        // Checkbox extrahieren
        var checkboxCell = calculationTable.rows[i].cells[0].getElementsByTagName("input")[0];
        
        if(checkboxCell.checked)
            checkboxSelected = true;
    }
    
    // Sofern keine Checkbox ausgewählt ist,
    // Fehlermeldung anzeigen
    if(!checkboxSelected)
        alert($F("noArticleCheckboxesSelectedNotice"));
    
    return checkboxSelected;
}

// Utility-Funktion der Initialisierungsfunktion des
// Dialogs IDD_OFFER zur Überprüfung der Stati der
// Angebotsinhalts-Checkboxen. Lässt die Erzeugung
// eines PDF- / RTF-Dokuments nur dann zu, wenn min-
// destens eine der Checkboxen in jedem gewünschten
// Segment (Details / Übersichts-Tabelle) gewählt ist
function initIddOffer_checkChosenContents(event)
{
    // Get the ID of the clicked button
    var clickedButton = Event.element(event);
    
    // Get the availability of the overview table
    // section and the details section
    var printOverviewTable = $("*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_TABLE").checked;
    var printDetails = $("IDC_OFFER_CHECKBOX_POSITIONDETAILS").checked || $("IDC_OFFER_CHECKBOX_CFGPRODUCTDETAILS").checked;
    
    // Flag for the permissibility of printing
    // (if the value is as high as the number of
    // sections available printing is allowed)
    var printOfferDocument = 0;
    
    // Array with the IDs of all checkbox elements
    // of the overview table section to check
    var overviewTableCheckboxIDs = ["*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_POSITIONNR",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_QUANTITY",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_ARTNR",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_ARTDESC",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_PRICE",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_TYPECODE",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_REMARK",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_PICTURE",
                                     "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_NOTICETEXT",
									 "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_OVERVIEW_UNIT_PRICE"];
    
    // Array with the IDs of all checkbox elements
    // of the product details section to check
    var productDetailsCheckboxIDs = ["*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_POSITIONNR",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_QUANTITY",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_ARTNR",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_ARTDESC",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_PRICE",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_TYPECODE",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_REMARK",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_PICTURE",
                                      "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_NOTICETEXT",
									  "*.DLGDATA.DLGVARS.EASYKATLIGHT.IDD_OFFER.IDC_OFFER_CHECKBOX_DETAILS_UNIT_PRICE"];
    
    // If the overview table section is available
    if(printOverviewTable)
    {
        // Check, if at least one of the section's
        // checkboxes is checked
        for(var i = 0; i < overviewTableCheckboxIDs.length; i++)
        {
            if($(overviewTableCheckboxIDs[i]).checked)
            {
                printOfferDocument++;
                break;
            }
        }
    }
    
    // If the details section is available
    if(printDetails)
    {
        // Check, if at least one of the section's
        // checkboxes is checked
        for(var i = 0; i < productDetailsCheckboxIDs.length; i++)
        {
            if($(productDetailsCheckboxIDs[i]).checked)
            {
                printOfferDocument++;
                break;
            }
        }
    }
    
    // Allow the printing of the offer, if the value
    // of the flag is as high as sections are available
    if((printOfferDocument == 2 && (printOverviewTable && printDetails)) || (printOfferDocument == 1 && (printOverviewTable || printDetails) && !(printOverviewTable && printDetails)) || (printOfferDocument == 0 && !(printOverviewTable || printDetails)))
    {
        if(clickedButton.id == "IDC_OFFER_PRINT_RTF")
            printDocument('PRINT_OFFER', 'RTF');
        else if(clickedButton.id == "IDC_OFFER_PRINT_PDF")
            printDocument('PRINT_OFFER', 'PDF');
		else if(clickedButton.id == "IDC_OFFER_PRINT_DOC")
			printDocument('PRINT_OFFER', 'DOC');
    }
    else
        alert($F("noContentCheckboxesSelectedNotice"));
}


// Funktion des Dialogs IDD_PRODUCT zur Durchführung
// von Initialisierungs-Prozessen, die für die ein-
// wandfreie Funktion der Dialogdarstellung benötigt
// werden.
function initIddProduct()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Laden der unteren, produktgruppenabhängigen
    // HTML-Seite des Headerbereichs des Dialogs
    // "IDD_MAIN". Wenn keine HTML-Seite mit der
    // aktuellen Produktgruppe verknüpft ist, ist
    // diese Funktion wirkungslos
    loadHtmlPage("LOWER_HEADER");
    
	// Retrieve all tabs and setup event handler to
	// inform server about tab changes
	var tabArea = $("IDC_PRODUCT_TABS").firstDescendant();
	
	// If at least one tab is present
	if(tabArea)
	{
		var tabLinks = tabArea.childElements();
		var selectedTab = dialog.IDC_PRODUCT_TABS.getSelected();
		
		for(var i = 0; i < tabLinks.length; i++)
			tabLinks[i].observe("click", setActiveTab);
		
		// Inform server about tab change which could
		// have occurred because new product group
		// doesn't possess the kind of tab selected
		// before product group changed
		setActiveTab.apply($("IDC_PRODUCT_TABS").select("a[panelid=" + selectedTab + "]")[0], []);
		
		// If a preconfiguration tab is present and it
		// is selected at startup, initialize it
		if(selectedTab == "PRECONFIG_TAB")
			handlePreConfig({scenario: 'initialize'});
	}
	
	// Register handler for scaling product group ta-
	// ble. Delayed call of handler is necessary to
	// give browser enough time to display table be-
	// fore its dimensions will be determined by the
	// routine. Most parts of handler function will
	// only be performed if system is running on In-
	// ternet Explorer 7, but others are always run
    var prodGroupTabLink = $("IDC_PRODUCT_TABS").select("a[panelid=PRODUCT_GROUP_TAB]");
    
    if(prodGroupTabLink.length > 0)
    {
		// If product group tab is already selected
		// during instantiation of TabCtrl, call
		// handler once directly before registering
		// it with onclick event
		if(dialog.IDC_PRODUCT_TABS.getSelected() == "PRODUCT_GROUP_TAB")
			setTimeout("resizeProdGroupTable();", 50);
		
        prodGroupTabLink[0].observe("click", function()
        {
           resizeProdGroupTable();
        });
    }
    
    // Observer fuer das Updaten der Produkttabelle mittels
    // Ajax-Request einhaengen, um spezielle Einstellungen
    // fuer bestimmte Tabellenzellen setzen zu koennen
    document.observe("table:updated", function(updateData)
    {
        var selectedProductTab = dialog.IDC_PRODUCT_TABS.getSelected();
		
		if(selectedProductTab != "PRECONFIG_TAB")
			selectedProductTab = selectedProductTab.substring(11);
		
		finishTableUpdate(updateData, "PRODUCT_TABLE_" + selectedProductTab);
    });
    
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Enable all dialog controls again, if not the pre-
	// configuration tab is selected now (because it
	// required some additional requests to initialize
	// and handles the dialog controls availability it-
	// self). Also do it, if not a single tab exists
	if((selectedTab && selectedTab != "PRECONFIG_TAB") || !tabArea)
		enableInput();
}


// Funktion des Dialogs IDD_PRODUCT_SUB (Produkt-
// tabelle) zur Durchführung von Initialisierungs-
// Prozessen
function initIddProductSub()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
}


// Funktion des Dialogs IDD_COMPARE_PRODUCTS zur 
// Durchführung von Initialisierungs-Prozessen
function initIddCompareProducts()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_EXPERTSEARCH zur 
// Durchführung von Initialisierungs-Prozessen
function initIddExpertSearch()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_SEARCHRESULT zur 
// Durchführung von Initialisierungs-Prozessen
function initIddSearchResult()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_DETAILS zur Durch-
// führung von Initialisierungs-Prozessen
function initIddDetails()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_DOCUMENTS zur Durch-
// führung von Initialisierungs-Prozessen
function initIddDocuments()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_FAVORITELIST zur Herstellung der
// korrekten Darstellung des "Produkte vergleichen"-Buttons
function	initIddFavoritelist()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    var checkedItems   = 0;
    var favTableWidget = dialog.IDC_FAVLIST_TABLE;
    var tableRows      = favTableWidget.getRowCount();
    
    for(i = 0; i < tableRows; i++)
    {
        tableCell = favTableWidget.element.rows[i+1].cells[0];
        checkBox  = Element.getFirstChildByTagName(tableCell, 'input');
        
        if(checkBox.checked)
            checkedItems++;
    }
    
    // Wenn mindestens 2 Produkte ausgewählt sind
    // den "Vergleichen"-Button einblenden
    if(checkedItems > 1)
    {
        // Wichtig: Dies geht NUR im IE, nicht in Mozilla, da
        // Tabellenzeilen (TDs) eigentlich keine Blockelemente sind
        $("IDC_FAVLIST_COMPARE_PRODUCTS").style.display = "block";
    }
    else
    {
        $("IDC_FAVLIST_COMPARE_PRODUCTS").style.display = "none";
    }
    
    // Den "Position löschen" Button verstecken, solange
    // keine Tabellenzeile ausgewählt ist
    checkFavoriteListButtonsStatus();
    
    // Die Header-Zelle über den Checkboxen verstecken
    Element.removeClassName( dialog["IDC_FAVLIST_TABLE"].columnHeader.headerTable.rows[0].cells[0], "header");
    
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_PROJECTLIST_TABS zur Durch-
// führung von Initialisierungs-Prozessen
function initIddProjectlistTabs()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
}

function initIddProjectlist()
{
	document.observe("table:updated", function(updateData)
	{
		finishTableUpdate(updateData, "IDC_PROJLIST_TABLE");
		
		// Refresh the array containing the product type
		// of all positions
		document.getElementById("projectlistProductTypes").value = updateData.memo.value.productTypes.toJSON();
		
		// Adjust the availability of the buttons to the
		// selected table row, if a selection has been
		// done
		var tableWidget = dialog["IDC_PROJLIST_TABLE"];
		var selectedTableRow = tableWidget.getSelected();
		if(selectedTableRow != "")
			tableWidget.element.fire('table:selectionchange', { value: selectedTableRow } );
		
		// Enable the screen controls again
		enableInput();
	});
	
	document.observe("table:selectionchange", checkPositionModify);
	
	// Fire an initial table selection change event, if
	// a table row is already selected during the gene-
	// ration of the wigdet
	var tableWidget = dialog["IDC_PROJLIST_TABLE"];
	var selectedTableRow = tableWidget.getSelected();
	if(selectedTableRow != "")
		tableWidget.element.fire('table:selectionchange', { value: selectedTableRow } );
	
	var projectListTable = document.getElementById("IDC_PROJLIST_TABLE_TABLE");
	
	// Correct the alignment of the details icon table
	// cell by removing the needless last whitespace
	// after the image tag, if the icon is present
	for(var i = 1; i < projectListTable.rows.length; i++)
	{
		var detailsIconCell = projectListTable.rows[i].cells[1];
		
		if(detailsIconCell.firstChild.tagName == "IMG")
			detailsIconCell.innerHTML = detailsIconCell.innerHTML.substring(0, detailsIconCell.innerHTML.length - 1);
	}
	
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
	// Enable the screen controls again
	enableInput();
}


// Funktion des Dialogs IDD_SETTINGS zur Durch-
// führung von Initialisierungs-Prozessen
function initIddSettings()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    // Prüfen, ob ein Systemfehler vorliegt und wenn ja
    // dessen Anzeige veranlassen
    checkSystemError();
    
    // Alle Bedienelemente des Dialogs wieder freigeben
    enableInput();
}


// Funktion des Dialogs IDD_VERSION zum Korrigieren
// der Darstellung der Plan-Software Adresse, da
// dise HTML-Tags enthält, deren "<" und ">"-Zeichen
// in die entsprechenden XML-Entitäten zerlegt wur-
// den
function initIddVersion()
{
	// Aktivieren der Überwachung für alle Event-
	// Handler des Dialogs, um diese bei speziellen
	// Ereignis-Kombinationen unterbrechen zu können
	setupEventObserver();
	
    var plansoftAddress = $("IDC_PLANSOFT_LABEL").innerHTML;
    plansoftAddress = plansoftAddress.replace(/&lt;/g, "<").replace(/&gt;/g, ">");
    $("IDC_PLANSOFT_LABEL").innerHTML = plansoftAddress;
    
    // Eltern-Dialog wieder freigeben
    window.opener.enableInput();
	
	// Enable event observer of main dialog again,
	// because it has been disabled to load version
	// dialog
	window.opener.topEasykatFrame.confirmCache.ignoreObserver = false;
}
