//window.onload = initilize;
ajaxRequestCounter = 0;

document.observe("dom:loaded", function() {
    registerLanguageSelectorEvents();
    registerMerkzettelEvent();
    registerHomeLinkEvent();
    registerStichwortSucheEvents();
    registerDetailPageEvents();

    registerKurzansichtHistory();
	
	//Wenn auf der Uebersichtseite, dann INFX Preise holen, wenn jSonDiv definiert
	if($('jsondataUebersicht'))
		getINFXPreisautomatisch(0);

    registerDocumentEvents();
    writeform();
    showSmallMap();
    showMerkzettelMap()
    // If the user is on Detail page. Declare a global variable for DetailGrossImages.
    W3CElement = cic.$('json_detailgross_images');
    if (W3CElement) {
        json_detailgross = eval('(' + W3CElement.innerHTML + ')');
    }
    W3CElement = cic.$('json_detail2_images');
    if (W3CElement) {
        json_detail2 = eval('(' + W3CElement.innerHTML + ')');
    }

    // Initilize Merkzettel.
    try { mz = new Merkzettel(); } catch (error) { };

});

Event.observe(document, 'keydown', function(event) {
	if((event.keyCode == Event.KEY_RETURN || event.keyCode == Event.KEY_UP ||  event.keyCode == Event.KEY_DOWN)&& sitchwortSucheAutoComplete) {
		sitchwortSucheAutoComplete.onKeyPress(event);
//		sitchwortSucheAutoComplete.element.focus();
	}

});


Event.observe(document, 'click', function(event) {
	sitchwortSucheAutoComplete.hideList = true;
	sitchwortSucheAutoComplete.hide();
});

/*
window.dhtmlHistory.create({
    toJSON: function(o) { return Object.toJSON(o); },
    fromJSON: function(s) { return s.evalJSON(); }
});

window.onload = function() {
    dhtmlHistory.initialize();
    dhtmlHistory.addListener(historyChange);
    //	if(dhtmlHistory.isFirstLoad() && cic.$('kurzansichtTemplateContainer')) {
    //dhtmlHistory.add("Seite1");
    //} else {

		//		}

};
*/
function registerKurzansichtHistory() {
    if (!cic.$('kurzansichtTemplateContainer')) return;
    if (dhtmlHistory.isFirstLoad()) {
        var info = {};
        info.container = 'kurzansichtTemplateContainer';
        info.page = 'uebersicht';
        info.url = "/web/skripte/template/kurzansichtTemplate.cfm";

        dhtmlHistory.add("Seite1", info);
    }
}

/*
* Callback function to receive history change events.
*/
function historyChange(newLocation, historyData) {
    /*if(newLocation == "") {
    newLocation = "/web/skripte/template/kurzansichtTemplate.cfm/startelement/1/aktiveSeite/1";
    }	*/
    displayLocation(newLocation, historyData);
}

function displayLocation(newLocation, sectionData) {
    //console.info(sectionData);
    if (sectionData) {
        new Ajax.Request(sectionData.url,
		{
		    onSuccess: function(transport) {
		        cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    },
		    onFailure: function(transport) {
		        cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    }
		});
    }
}

function registerMerkzettelEvent() {
    if (!!cic.$('merkzettel')) {
        cic.addEvent(cic.$('merkzettel'), 'click', function() {
            window.location.href = '/web/index.cfm/pm/merkzettel';
        });
    }
    if (cic.$('merkzettelDruckansichtContainer')) {
        var timer = setTimeout('window.print()', 2000);
        //clearTimeout(mapTimer)
    }
}

function registerHomeLinkEvent() {
    if (!!cic.$('homelink')) {
        cic.addEvent(cic.$('homelink'), 'click', function() {
            window.location.href = '/web/index.cfm';
        });
    }
}
function registerDocumentEvents() {
    cic.addEvent(document, 'click', hideCalendars);
}

function writeform() {
    if (cic.$('form_container')) {
        replaceSelect();
    }
    /*
    if(cic.$('form_container')) {
    formWriter = new CICFormWriter('form_container');
    formWriter.setData(json);  
    formWriter.writeForm();

	/* 	new Ajax.Request("/web/skripte/template/rechercheMaske.cfm", {
    onSuccess: function(response) {
        
    json = response.responseText.strip();
    formWriter.setData(eval(json);  
    formWriter.writeForm();
    },
    onFailure: function() {
    alert("Request Failed");
    }
    });*/

    //}
}

/*
* Language event handler.
*/
function registerLanguageSelectorEvents() {
    var languages = cic.$('languages');
    if (languages) {
        cic.addEvent(languages, 'mouseover', showList);
        cic.addEvent(languages, 'mouseout', hideList);
    }
}
function showList() {
    cic.$('languages_list').style.display = 'block';
}
function hideList() {
    cic.$('languages_list').style.display = 'none';
}

/*
* Stichwortsuche event handler.
*/
function registerStichwortSucheEvents() {
    var codeObjektdirekt = cic.$('codeObjektdirekt')
    if (codeObjektdirekt) {
        //cic.addEvent(codeObjektdirekt, 'keypress', stichwortKeyObserver);
        cic.addEvent(codeObjektdirekt, 'focus', stichwortGotFocus);
        cic.addEvent(codeObjektdirekt, 'blur', stichwortLostFocus);

        // AutoCompleter function.
       sitchwortSucheAutoComplete = new Ajax.Autocompleter('codeObjektdirekt', 'autoCompleterDiv',
						   '/web/skripte/dsp_suggestions.cfm',
						   { afterUpdateElement: submitSearch, Frequency: 0.4, minChars: 3 }
		);
    }

}
function stichwortKeyObserver(event) {
    code = (window.event) ? window.event.keyCode : event.which;
}

function activateAutocompleter() {
    var codeObjektdirekt = cic.$('codeObjektdirekt');

    if (codeObjektdirekt.getAttribute('default') != codeObjektdirekt.value) {
        sitchwortSucheAutoComplete.activate();
        onActivationComplete();
    }
    return false;
}

function onActivationComplete() {
    var codeObjektdirekt = cic.$('codeObjektdirekt');
    var elem = sitchwortSucheAutoComplete.getCurrentEntry();

    if (!elem) {
        var timeoutID = window.setTimeout("onActivationComplete()", 200);
    }
    else {
        window.clearTimeout(timeoutID);

        var value = codeObjektdirekt.value;
        var defaultValue = codeObjektdirekt.getAttribute("default");

        if (defaultValue !== value && value !== "" && elem) {
            elem = (elem.getAttribute('ishead')) ? elem.nextSibling : elem;
            //submitSearch(value, elem);
        }
    }
}

function expandSearch(e) {
	//Event.stop(e);
	sitchwortSucheAutoComplete.hideList = false;
	
	element = Event.findElement(e, 'LI')
	var id = element.id;
	var listItems = element.parentNode.getElementsByTagName('LI');
	//element.parentNode.removeChild(element);
	element.style.display = 'none';
	for(var i = 0; i < listItems.length; i++) {
		var li = listItems[i];
		if(li.id) {
			if(id ==li.id.split("_")[1]) {
				li.style.display = ''
			}
		}
	}
/*	listItems[0].scrollTo();
	sitchwortSucheAutoComplete.active = true;
	sitchwortSucheAutoComplete.hasFocus = true;
	sitchwortSucheAutoComplete.onExpand();

	Event.stop(e);
*/
}

function stichwortGotFocus() {
    var codeObjektdirekt = cic.$('codeObjektdirekt');
    codeObjektdirekt.value = (codeObjektdirekt.defaultValue == codeObjektdirekt.value) ? "" : codeObjektdirekt.value;
    codeObjektdirekt.select();
}
function stichwortLostFocus() {
    var codeObjektdirekt = cic.$('codeObjektdirekt');
    codeObjektdirekt.value = (codeObjektdirekt.value == "") ? codeObjektdirekt.defaultValue : codeObjektdirekt.value;
}

function submitSearch(text, li) {

	text.value = text.value.strip();
    var codeObjektdirekt = cic.$('codeObjektdirekt');
	while (li.getAttribute('ishead')) {
		li = li.next();
	}
	li.className = 'selected';

    if (codeObjektdirekt.value == "") {
				value = li.childNodes[1].innerHTML.stripTags();
        codeObjektdirekt.value = value;
		} else {
			value = codeObjektdirekt.value;
		}
 
		var ids = li.getAttribute("id").split("_");

		var _url = "/web/index.cfm?";


		switch(parseInt(ids[1])) {

		case 13:
			_url += "pm=direktsuche&suchart=hotel&idland="+ids[0];
			break;
		case 18:
			_url += "pm=direktsuche&suchart=hotel&idregion="+ids[0];
			break;
		case 19:
			_url += "pm=direktsuche&suchart=hotel&idort="+ids[0];
			break;
		case 31:
			_url += "pm=direktsuche&suchart=kreuzfahrt&idzielgebiet="+ids[0];
			break;
		case 189:
			_url += "pm=direktsuche&suchart=kreuzfahrt&idhafen="+ids[0];
			break;
		case 32:
			_url += "pm=direktsuche&suchart=kreuzfahrt&idschiff="+ids[0];
			break;
		case 36:
			_url += "pm=detail&suchart=kreuzfahrt&idobjekt="+ids[0];
			break;
		case 206:
			_url += "pm=detail&suchart=kreuzfahrt&idobjekt="+ids[0];
			break;
		case 6:
			_url += "pm=detail&suchart=flugsuche&idobjekt="+ids[0];
			break;
		case 8:
			_url += "pm=detail&suchart=rundreise&idobjekt="+ids[0];
			break;

		default:
			_url = "/web/index.cfm/";
	}
	/*abc = _url + "&" + $('formulardirekt').serialize().strip()
    console.info(abc);
	return;*/

    window.location.href = _url + "&" + $('formulardirekt').serialize().strip();
}

/*
* Deckspläne Kreuzfahrten, wird das denn aufgerufen????
*/
function showDecksplaene(e, idobjekt, anzPers, kabinentyp) {
    Event.stop(e);
    showinfobox_gross(e, 'Bitte warten...');
    new Ajax.Request('/web/skripte/template/seefluss_preise_decksplan.cfm?IDObjekt=' + idobjekt + '&anzPers=' + anzPers + '&kabinentyp=' + kabinentyp,
		{
		    onSuccess: function(transport) {
		        cic.$('Infobx_gross_body').innerHTML = transport.responseText.strip();
		    },
		    onFailure: function(transport) {
		        cic.$('Infobx_gross_body').innerHTML = transport.responseText.strip();
		        //alert('fehler');
		        //cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    }
		});
}


/*
* Termine und Preise Infos Kreuzfahrten
*/
function showKabinenInfo(e, idkabinentyp, idliste, beschreibungstitel) {
    var position = cic.getPointerPosition(e);
    Event.stop(e);
    showinfobox_gross(e, 'Bitte warten...');
    new Ajax.Request("/web/skripte/dsp_kabineninfo.cfm?idkabinentyp=" + idkabinentyp + "&idbeschreibungstitelliste=" + idliste + "&beschreibungstitelliste=" + encodeURI(beschreibungstitel),
		{
		    onSuccess: function(transport) {
		        cic.$('Infobx_gross_body').innerHTML = transport.responseText.strip();
		        cic.$('Infobx_gross_body').style.cssText = 'display:block;position:absolute;left:0px;top:0px;width:550px';
		    },
		    onFailure: function(transport) {

		        alert('fehler');
		        //cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    }
		});

}

/*
* Versicherungs Infos Buchung allgemein
*/
function showVersicherungInfo(e, idversicherung, idversicherungsart) {
    var position = cic.getPointerPosition(e);
    Event.stop(e);
    showinfobox_gross(e, 'Bitte warten...', -350, 0);
    new Ajax.Request("/web/skripte/dsp_versicherungsinfo.cfm?idversicherung=" + idversicherung + "&idversicherungsart=" + idversicherungsart,
		{
		    onSuccess: function(transport) {
		        cic.$('Infobx_gross_body').innerHTML = transport.responseText.strip();
		        cic.$('Infobx_gross_body').style.cssText = 'display:block;position:absolute;left:0px;top:0px;width:550px';
		    },
		    onFailure: function(transport) {

		        alert('fehler');
		        //cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    }
		});

}

/*
* Route Infos Kreuzfahrten
*/

function showRouteInfo(e, idhafen, idroute) {
    var position = cic.getPointerPosition(e);
    Event.stop(e);
    showinfobox_gross(e, 'Bitte warten...');
    new Ajax.Request("/web/skripte/dsp_detail_ausgabe_seefluss_hafen.cfm?hafenid=" + idhafen + "&routeid=" + idroute,
		{
		    onSuccess: function(transport) {
		        cic.$('Infobx_gross_body').innerHTML = transport.responseText.strip();
		        cic.$('Infobx_gross_body').style.cssText = 'display:block;position:absolute;left:-500px;top:-150px';
		    },
		    onFailure: function(transport) {

		        alert('fehler');
		        //cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    }
		});

}

/*
* hafen Infos Kreuzfahrten
*/

function showHafenInfo(e, idhafen) {
    var position = cic.getPointerPosition(e);
    Event.stop(e);
    showinfobox_gross(e, 'Bitte warten...');
    new Ajax.Request("/web/skripte/dsp_detail_ausgabe_seefluss_hafenbeschreibung.cfm?hafenid=" + idhafen,
		{
		    onSuccess: function(transport) {
		        cic.$('Infobx_gross_body').innerHTML = transport.responseText.strip();
		        cic.$('Infobx_gross_body').style.cssText = 'display:block;position:absolute;left:-30px;top:-150px';
		    },
		    onFailure: function(transport) {

		        alert('fehler');
		        //cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    },evalScripts: true
		});

}
/*
* See Fluss Suche Schiff
*/

function showSeeFlussSucheSchiff(e, idreiseart, idzielgebiet) {
    var position = cic.getPointerPosition(e);
    Event.stop(e);
    showinfobox_gross(e, 'Bitte warten...');
    new Ajax.Request("/web/skripte/dsp_changeschiff.cfm?idreiseart=" + idreiseart + "&idzielgebiet=" + idzielgebiet,
		{
		    onSuccess: function(transport) {
		        cic.$('Infobx_gross_body').innerHTML = transport.responseText.strip();
		        cic.$('Infobx_gross_body').style.cssText = 'display:block;position:absolute;left:-500px;top:-150px';
		    },
		    onFailure: function(transport) {

		        alert('fehler');
		        //cic.$(sectionData.container).innerHTML = transport.responseText.strip();
		    }
		});

}


/*
* Infobox_kurz functions.
*/
function showinfobox(e, vorteil) {
    var position = cic.getPointerPosition(e);
    if (position) {
        var infoxbox = cic.$('kurz_infobox');

        cic.$('tooltipContents').innerHTML = vorteil;
        cic.$('kurz_infobox').style.cssText = 'display:block;position:absolute;left:' + parseInt(position.x + 5) + 'px;top:' + parseInt(position.y + 3) + 'px';
        //cic.$('kurz_infobox').style.cssText = 'display:block;position:absolute;left:' + parseInt(position.x - 200) + 'px;top:' + parseInt(position.y + 3) + 'px';
    }
}
function hideinfobox(e) {
    cic.$('kurz_infobox').style.display = 'none';
}

/*
* Infobox_gross functions.
*/
function showinfobox_gross(e, content, offsetLeft, offsetTop) {
    var position = cic.getPointerPosition(e);
	var _offsetTop = (offsetTop) ? offsetTop : 0;
	var _offsetLeft = (offsetLeft) ? offsetLeft : 0;
    if (position) {
        var infoxbox = cic.$('Infobx_gross_container');

        cic.$('Infobx_gross_body').innerHTML = content;
        cic.$('Infobx_gross_container').style.cssText = 'display:block;position:absolute;left:' + parseInt(position.x + 5 + _offsetLeft) + 'px;top:' + parseInt(position.y + 3 + _offsetTop) + 'px';
        //cic.$('kurz_infobox').style.cssText = 'display:block;position:absolute;left:' + parseInt(position.x - 200) + 'px;top:' + parseInt(position.y + 3) + 'px';
    }
}
function hideinfobox_gross(e) {
    cic.$('Infobx_gross_container').style.display = 'none';
}

/*
* Kurzansicht functions.
*/
function switchPage(startelement, pagenumber) {
    var remoteurl = "/web/skripte/template/kurzansichtTemplate.cfm/startelement/" + startelement + "/aktiveSeite/" + pagenumber;
    var info = {};
    info.container = 'kurzansichtTemplateContainer';
    info.page = 'uebersicht';
    info.url = remoteurl;

    dhtmlHistory.add("Seite" + pagenumber, info);

    new Ajax.Request(remoteurl,
	{
	    onSuccess: function(transport) {
	        cic.$('kurzansichtTemplateContainer').innerHTML = transport.responseText.strip();
	    },
	    onFailure: function(transport) {
	        cic.$('kurzansichtTemplateContainer').innerHTML = transport.responseText.strip();
	    }
	});
}

function showKurzMap(idobjekt) {
    idobjekt = idobjekt || 0;

    if (document.getElementsByClassName) {
        var container = document.getElementsByClassName('uebersicht_kopf_container')[0];
        var left = cic.$('kurzansicht_kopf_left');
        var right = cic.$('kurzansicht_kopf_right');
        var body = cic.$('kurzansicht_kopf_body');
        var contents = cic.$('kurzansicht_kopf_contents');
        var mapNotVisible = contents.getAttribute('isMapVisible') === 'false' || contents.getAttribute('isMapVisible') === null;

        container.style.height = '530px';
        left.style.height = '500px';
        right.style.height = '500px';
        body.style.height = '500px';

        contents.style.height = '400px';
        contents.style.margin = '13px 0px';

        if (mapNotVisible) {
            new Ajax.Request('/web/skripte/template/geodataKurzansicht.cfm/idobjekt/' + idobjekt, {
                onSuccess: addOverlays,
                onFailure: addOverlaysFailure
            });
        } else {
            mapWrapper.triggerInfoWinfow(idobjekt);
        }
    }
}

function addOverlays(response) {
    var data = eval('(' + response.responseText.strip() + ')');
    mapWrapper = new MapWrapper('kurzansicht_kopf_contents', { 'centerLatitude': data[0].lat, 'centerLongitude': data[0].lng });
    //	var contents = cic.$('kurzansicht_kopf_contents');

    mapWrapper.init(data);
}

function addOverlaysFailure(response) {
    var contents = cic.$('kurzansicht_kopf_contents');
    contents.innerHTML = response.responseText.strip();
}

/*
* Calendar show.
*/
function hideCalendars(e) {

    if (e.button == 2) return;

    var target = cic.targetElement(e);

    // hide from calendar if visible.
    if (target.getAttribute('id') !== 'calendar_date_from') {
        var terraCalVon = cic.$('terra_cal_von');

        if (terraCalVon && terraCalVon.style.display == 'block') {
            terraCalVon.style.display = 'none';
            return false;
        }
    }

    var target = cic.targetElement(e);

    // hide to calendar if visible.
    if (target.getAttribute('id') !== 'calendar_date_to') {
        var terraCalBis = cic.$('terra_cal_bis');
        if (terraCalBis && terraCalBis.style.display == 'block') {
            terraCalBis.style.display = 'none';
            return false;
        }
    }
}

function showFromCalender(minDate, maxDate) {
    var terraCalVon = cic.$('terra_cal_von');
    if (terraCalVon.style.display == 'block') {
        terraCalVon.style.display = 'none';
        return false;
    }
    var datumPfeilContainer = cic.$('datumPfeilContainer');


    if (datumPfeilContainer.style.display == 'block')
        datumPfeilContainer.style.display = 'none';

    var position = cic.getElementPosition(cic.$('calendar_date_from'));
    terraCalVon.style.cssText = 'position:absolute;top:' + parseInt(position.y + 19) + 'px;left:' + position.x + 'px;display:block;;z-index:250';

    kalender = new Kalender('vnd', {
        "orientation": 'horizental',
        "onSelect": callback_datumvon,
        "calendars": 3,
        "language": "de",
        "minDate": minDate,
        "maxDate": maxDate,
        "startDay": 1,
        "navigationPosition": "bottom",
        "monthSelector": 1,
        "showMonthName": 1,
        "showNavigation": 1
    });
    kalender.show();

    cic.addEvent(terraCalVon, 'click', function(event) {
        if (event.stopPropagation)
            event.stopPropagation()
        else
            event.cancelBubble = true;
    });

}
function showToCalender(minDate, maxDate) {
    var fromDate = cic.$('calendar_date_from').innerHTML;
    if (fromDate != "")
        minDate = fromDate;
    var terraCalBis = cic.$('terra_cal_bis');
    if (terraCalBis.style.display == 'block') {
        terraCalBis.style.display = 'none';
        return false;
    }
    var datumPfeilContainer = cic.$('datumPfeilContainer');

    if (datumPfeilContainer.style.display == 'block')
        datumPfeilContainer.style.display = 'none';

    lsMinDate = minDate.toDate().AddDays(7);

    var position = cic.getElementPosition(cic.$('calendar_date_to'));
    terraCalBis.style.cssText = 'position:absolute;top:' + parseInt(position.y + 19) + 'px;left:' + position.x + 'px;display:block;z-index:249';

    kalender_bis = new Kalender('bsd', {
        "orientation": 'horizental',
        "onSelect": callback_datumbis,
        "calendars": 3,
        "language": "de",
        "minDate": minDate, //.toDate().AddDays(0).LSDateFormat(), 
        "maxDate": maxDate,
        "startDay": 1,
        "navigationPosition": "bottom",
        "monthSelector": 1,
        "showMonthName": 1,
        "showNavigation": 1
    });
    kalender_bis.show();

    cic.addEvent(terraCalBis, 'click', function(event) {
        if (event.stopPropagation)
            event.stopPropagation();
        else
            event.cancelBubble = true;
    });
}
function submitRechercheMaske() {
    if (cic.$('sucheVon').value == '' || cic.$('sucheBis').value == '')
        cic.$('datumPfeilContainer').style.display = 'block';
    else
        cic.$('recherchemaskeFormular').submit()
}

function callback_datumvon(d) {
    var date = (d.getDate() > 9) ? d.getDate() : 0 + '' + d.getDate();
    var month = (d.getMonth() + 1 > 9) ? parseInt(d.getMonth() + 1) : 0 + '' + parseInt(d.getMonth() + 1);
    var datum = date + "." + month + "." + d.getFullYear();
    cic.$("calendar_date_from").innerHTML = datum;
    cic.$('terra_cal_von').style.display = 'none';
    cic.$('sucheVon').value = datum;
    reloadRechercheMaske();
}

function callback_datumbis(d) {
    var date = (d.getDate() > 9) ? d.getDate() : 0 + '' + d.getDate();
    var month = (d.getMonth() + 1 > 9) ? parseInt(d.getMonth() + 1) : 0 + '' + parseInt(d.getMonth() + 1);
    var datum = date + "." + month + "." + d.getFullYear();
    cic.$("calendar_date_to").innerHTML = datum;
    cic.$('terra_cal_bis').style.display = 'none';
    cic.$('sucheBis').value = datum;
    reloadRechercheMaske();
}
function reloadRechercheMaske() {
    if (cic.$('sucheVon').value != "" && cic.$('sucheBis').value != "") {
        sucheAktualisieren();
    }
}

function showStartMap() {
    alert('under construction')
}

/*
* detail page functions.
*/
function registerDetailPageEvents() {
    var W3CElement = cic.$('weiterempfehlen');
    var element = cic.$('details_container');

    if (W3CElement) {
        cic.addEvent(W3CElement, 'click', weiterEmpfehlen);
    }
    if (element) {
        if (cic.$('details_container').getAttribute('termine')) {
            cic.scrollTo('details_container');
            cic.$('details_container').removeAttribute('termine');
        }
    }

    istDruckanschit = (document.getElementsByClassName("druckansicht_container")[0]) ? true : false;
    if (istDruckanschit) {
        var timer = setTimeout('window.print()', 1000);
    }

}
function weiterEmpfehlen() {
    createLayer();
    var elem = cic.$('weiterempfehlen');
    new Ajax.Request("/web/skripte/dsp_weiterempfehlen.cfm/idobjekt/" + elem.getAttribute('idobjekt') + "/objektname/" + elem.getAttribute('objektname'), {
        onSuccess: function(response) {
            var container = cic.$('weiterempfehlen_container');
            var top = (!!document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
            cic.$('weiterempfehlen_body').innerHTML = response.responseText.strip();
            cic.$('weiterempfehlen_body').style.display = 'block';
            container.style.display = 'block';
            container.style.left = parseInt(screen.width / 2 - container.offsetWidth / 2) + 'px';
            container.style.top = parseInt(top + 50) + 'px';
        },

        onFailure: function() { alert('Request failed.'); removeLayer(); }

    });
}

function weiterEmpfehlenClose() {
    removeLayer();
    cic.$('weiterempfehlen_container').style.display = 'none';
}

function validateWeiterEmpfForm() {
    var error = [];
    var emailAbsender = cic.$('emailAbsender');
    var nameAbsender = cic.$('nameAbsender');
    var emailEmpfaenger = cic.$('emailEmpfaenger');
    var nameEmpfaenger = cic.$('nameEmpfaenger');

    if (!cic.isEmail(emailAbsender.value))
        error.push(emailAbsender.getAttribute('validationmsg'));

    if (!cic.isEmail(emailEmpfaenger.value))
        error.push(emailEmpfaenger.getAttribute('validationmsg'));

    if (nameAbsender.value == '')
        error.push(nameAbsender.getAttribute('validationmsg'));

    if (nameEmpfaenger.value == '')
        error.push(nameEmpfaenger.getAttribute('validationmsg'));

    if (error.length == 0) {
        var errors_container = cic.$('validation_errors');
        errors_container.style.display = 'none';
        var querystring = $('weiterempfehlen_form').serialize();

        new Ajax.Request("/web/skripte/dsp_weiterempfehlen_response.cfm?" + querystring, {
            onSuccess: function(response) {
                cic.$('weiterempfehlen_body').innerHTML = response.responseText.strip();
            },
            onFailure: function(response) {
                alert('Weiterempfehlen process failed.')
            }
        });
    }
    else {
        var errors_container = cic.$('validation_errors');
        errors_container.innerHTML = error.join("<br />");
        errors_container.style.display = 'block';
    }
}
function showSmallMap() {
    var mapContainer = cic.$('map_small');

    if (!mapContainer) return;

    var geodataContainer = cic.$('geodata_container');
    if (geodataContainer) {
        var data = geodataContainer.getAttribute('data');
        if (data) {
            data = eval('(' + data + ')');
        }
        var a = (data.lat == "" || data.lng == "");

        if (data.lat == "" || data.lng == "") {
            cic.$('smallmapContainer').style.display = 'none'
            return;
        }
        drawMap('map_small', data);
    }
}
function showDetailImage(key) {
    var image = cic.$('gross_bild');
    image.src = json_detailgross[key].url;
    image.alt = json_detailgross[key].signature2;

    var signature = cic.$('unterschrift');
    signature.innerHTML = json_detailgross[key].signature1;
}
function slideShow() {
    createLayer();

    var container = cic.$("slideshow_container");
    var top = (!!document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
    container.style.display = 'block';
    container.style.left = parseInt(screen.width / 2 - container.offsetWidth / 2) + 'px';
    container.style.top = parseInt(top + 50) + 'px';

    if (!SlideShow.isInitilized) {
        var images = [];
        for (var key in json_detailgross) {
            if (json_detailgross.hasOwnProperty(key)) {
                images.push(json_detailgross[key].url);
            }
        }
        SlideShow.Init("slideshowImagesContainer", { "imageURLs": images, "infoContainer": 'ImageInfo' });
    }
    SlideShow.Start();

    // lightbox = new LightBox(json_detail2);
    // lightbox.initilize();
}
function lightboxSlideshow() {
    createLayer();
    var container = cic.$('lightboxContainer');
    var lightbox = new CICLightBox(json_detail2);
    lightbox.initilize();

}

function slideShowClose() {
    removeLayer();

    var container = cic.$("slideshow_container");
    container.style.display = 'none';
    SlideShow.Stop();
}


function getUnterkunft(e, idObject) {
    cic.preventDefault(e);
    targetNode = cic.targetElement(e);
    cic.$('detail_termine_preise').style.display = 'block';

    if (!idObject) {
        alert('idObject is undefined');
        return false;
    }

    new Ajax.Request('/web/skripte/template/unterkunft.cfm/idobjekt/' + idObject, {
        onSuccess: success,
        onFailure: failure
    });


}

function getTermine(e, idObject) {
    cic.preventDefault(e);
    targetNode = cic.targetElement(e);
    cic.$('detail_termine_preise').style.display = 'none';

    if (!idObject) {
        alert('idObject is undefined');
        return false;
    }
    new Ajax.Request('/web/skripte/template/termine.cfm/idobjekt/' + idObject, {
        onSuccess: success,
        onFailure: failure
    });
}

function getGoogleMap(e, idNode) {
    cic.preventDefault(e);
    targetNode = (idNode) ? cic.$(idNode) : cic.targetElement(e);
    cic.$('detail_termine_preise').style.display = 'none';

    var geodataContainer = cic.$('geodata_container');

    if (geodataContainer) {
        var geodata = geodataContainer.getAttribute('data');
        if (geodata) {
            geodata = eval('(' + geodata + ')');
        } else {
            return false;
        }
    }

    var MapElement = cic.createElement('div', 'detail_beschreibung', 'large_map');
    MapElement.style.cssText = 'height:600px;padding-top:13px';

    var DetailsContainer = document.getElementById('details_container');
    DetailsContainer.innerHTML = ''
    DetailsContainer.appendChild(MapElement);

    var map = new GMap2(MapElement);
    map.addControl(new GSmallMapControl());
    map.setCenter(new GLatLng(geodata.lat, geodata.lng), 12);


    map.addOverlay(new GMarker(new GLatLng(geodata.lat, geodata.lng), createIcon()));

    updateTabs()
}
function createIcon() {
    var icon = new GIcon();
    icon.image = "/images/icons/icon.png";
    icon.iconSize = new GSize(22, 21);
    icon.iconAnchor = new GPoint(10, 15);
    icon.infoWindowAnchor = new GPoint(14, 14);
    return icon;
}

function getOrtsInformation(e, idOrt) {
    targetNode = cic.targetElement(e);
    cic.preventDefault(e);
    cic.$('detail_termine_preise').style.display = 'none';

    if (!idOrt) {
        alert('idOrt is undefined');
        return false;
    }

    new Ajax.Request('/web/skripte/template/cityinformation.cfm/idOrt/' + idOrt, {
        onSuccess: function(response) {
            document.getElementById('details_container').innerHTML = response.responseText.strip();
            updateTabs()
            W3CElement = cic.$('citymap_container');
            if (!!W3CElement) {
                drawMap('citymap_container', eval('(' + W3CElement.getAttribute('data') + ')'))
            }
        },
        onFailure: failure
    });
}
function updateTabs() {
    var tabsContainer = cic.$('detail_tabs_container');
    var tabs = tabsContainer.getElementsByTagName("a");

    if (tabs && tabs.length > 0) {
        for (i = 0; i < tabs.length; i++) {
            var tab = tabs[i];
            if (tab == targetNode)
                tab.className = 'detail_tab_active';
            else
                tab.className = 'detail_tab_inactive';
        }
    }
}
function success(response) {
    document.getElementById('details_container').innerHTML = response.responseText.strip();
    updateTabs()

    showSmallMap();
}
function failure(response) {
    document.getElementById('details_container').innerHTML = response.responseText.strip();
}

/*
Termine und Preise Tabelle auf der Detailseite
*/

function getTerminePreiseTabelle() {
    var element = cic.$('detail_termine_preise');
    if (!element) return;
    var objId = element.getAttribute("idObjekt");
    var queryString = '';

    queryString = '&' + $('terminePreiseForm').serialize();

    if (element) {
        new Ajax.Request("/web/skripte/template/dsp_detailrecherche_terminePreise.cfm?idObjekt=" + objId + queryString,
		{
		    onSuccess: function(response) {
		        element.innerHTML = response.responseText.strip();
		    },
		    onFailure: function(response) {
		        element.innerHTML = response.responseText.strip();
		    }
		});
    }
}
/******************************************************************
* Funktionen fuer die Uebersichtseite, um INFX Preise zu ermitteln *
*******************************************************************/

/*automatisch*/
function getINFXPreisautomatisch(count,requestCounter) {
	if(!requestCounter) {
		var requestCounter = ajaxRequestCounter;
	}
	if(count == 0)
		ItemsKurzansichtAktuelleSeite = cic.$('jsondataUebersicht').innerHTML.evalJSON();

	if(ItemsKurzansichtAktuelleSeite != '' && requestCounter == ajaxRequestCounter){
		var idObjekt 		= ItemsKurzansichtAktuelleSeite[count].idObjekt;
		var id = count+1;
		var elementPreis = cic.$('preis_' + idObjekt);
	    var elementPreisText = cic.$('preistext_' + idObjekt);
		var jSonDiv = $('jsondataUebersicht');
		var aData = new Array(3);
	
	    var queryString = '&istZeitlichFlexibel='+jSonDiv.getAttribute('flexibel')+'&von='+jSonDiv.getAttribute('von')+'&bis='+jSonDiv.getAttribute('bis')+'&dauer='+jSonDiv.getAttribute('dauer')+'&anzahlerwachsene='+jSonDiv.getAttribute('anzahlerwachsene')+'&anzahlkinder='+jSonDiv.getAttribute('anzahlkinder')+'&idVerpflegung='+jSonDiv.getAttribute('idVerpflegung')+'&idabflughafen='+jSonDiv.getAttribute('idabflughafen')+'&idUnterbringung='+jSonDiv.getAttribute('idUnterbringung')+'&suchartAnreise='+jSonDiv.getAttribute('suchartAnreise');
	
	    var remoteUrl = '/web/skripte/template/getInfxpreisUebersicht.cfm?idObjekt=' + idObjekt + queryString;
	
	    elementPreis.innerHTML = '<img width="110px" height="20px" src="/web/images/termine_preise_loader.gif">';
	    new Ajax.Request(remoteUrl,
		{
		    onSuccess: function(response) {
		        aData = response.responseText.split("|");
		        elementPreis.innerHTML = aData[0];
		        elementPreisText.innerHTML = aData[1];
				if(aData[2] == 0) {
					getINFXPreisautomatisch(id,requestCounter);
				}
				
		       
		    },
		    onFailure: function(response) {
		        elementPreis.innerHTML = 'Details';
		        //elementPreisText.innerHTML = '';
				if(aData[2] == 0) {
					getINFXPreisautomatisch(id,requestCounter);
				}
		    }
		});
		
	}
}



/* einmal Klick*/
function getINFXPreis(idObj) {
    var elementPreis = cic.$('preis_' + idObj);
    var elementPreisText = cic.$('preistext_' + idObj);
	var jSonDiv = $('jsondataUebersicht');
	var aData = new Array(2);

    var queryString = '&istZeitlichFlexibel='+jSonDiv.getAttribute('flexibel')+'&von='+jSonDiv.getAttribute('von')+'&bis='+jSonDiv.getAttribute('bis')+'&dauer='+jSonDiv.getAttribute('dauer')+'&anzahlerwachsene='+jSonDiv.getAttribute('anzahlerwachsene')+'&anzahlkinder='+jSonDiv.getAttribute('anzahlkinder')+'&idVerpflegung='+jSonDiv.getAttribute('idVerpflegung')+'&idabflughafen='+jSonDiv.getAttribute('idabflughafen')+'&idUnterbringung='+jSonDiv.getAttribute('idUnterbringung')+'&suchartAnreise='+jSonDiv.getAttribute('suchartAnreise');

    var remoteUrl = '/web/skripte/template/getInfxpreisUebersicht.cfm?idObjekt=' + idObj + queryString;

    elementPreis.innerHTML = '<img width="110px" height="20px" src="/web/images/termine_preise_loader.gif">';
    new Ajax.Request(remoteUrl,
	{
	    onSuccess: function(response) {
	        aData = response.responseText.split("|");
	        elementPreis.innerHTML = aData[0];
	        elementPreisText.innerHTML = aData[1];
	       
	    },
	    onFailure: function(response) {
	        elementPreis.innerHTML = '';
	        ///elementPreisText.innerHTML = '';
	    }
	});
}

/*
* Newsletter
*/

function subscribe() {
    var W3CElement = cic.$('email');

    if (W3CElement) {
        createLayer();
        new Ajax.Request('/web/skripte/dsp_newsletterform.cfm/recipientId/' + W3CElement.value, {
            onSuccess: function(response) {
                var container = cic.$('newsletterform_container');
                var top = (!!document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;

                cic.$('newsletterform_body').innerHTML = response.responseText.strip();
                cic.$('newsletterform_body').style.display = 'block';
                container.style.display = 'block';
                container.style.left = parseInt(screen.width / 2 - container.offsetWidth / 2) + 'px';
                container.style.top = parseInt(top + 50) + 'px';
            },

            onFailure: function() { alert('Request failed.'); removeLayer(); }

        });
    }
}

function hideNewsletterLayer() {
    cic.$('newsletterform_container').style.display = 'none';
    removeLayer();
}

function validateNewsletterForm() {
    var error = [];
    var anrede = document.forms['newsletter_form']['salutation'];
    var anrede_checked = false;
    var email = cic.$('email_field');
    var firstname = cic.$('firstname_field');
    var lastname = cic.$('lastname_field');

    for (i = 0; i < anrede.length; i++) {
        if (anrede[i].checked) anrede_checked = true;
    }

    if (!anrede_checked)
        error.push(cic.$('salutation_Herr').getAttribute('validationmsg'));
    if (firstname.value == '')
        error.push(firstname.getAttribute('validationmsg'));
    if (lastname.value == '')
        error.push(lastname.getAttribute('validationmsg'));
    if (!cic.isEmail(email.value))
        error.push(email.getAttribute('validationmsg'));

    if (error.length > 0) {
        var error_container = cic.$('error_container');
        error_container.innerHTML = error.join('<br />');
        error_container.style.display = 'block';
    } else {
        var querystring = $('newsletter_form').serialize();
        new Ajax.Request("/web/skripte/template/subscribe.cfm?" + querystring, { onSuccess: function(response) {
            document.getElementsByClassName('newsletterform_container')[0].innerHTML = response.responseText.strip();
        }
        });
    }
}

/*
*
*/
function createLayer() {

    var page = cic.$("page");
    var oDiv = document.createElement('div');
    var style = 'height:' + page.clientHeight + 'px;width:' + page.clientWidth + 'px;background-color:#4069A2;position:absolute;top:0px;z-index:10;'
    style += (cic.isIE()) ? 'filter: alpha(opacity=0);' : 'opacity:0;'
    oDiv.style.cssText = style;
    oDiv.setAttribute('id', 'page_layer');
    page.appendChild(oDiv)
}

function removeLayer() {
    var page = cic.$("page");
    var pageLayer = cic.$('page_layer');
    if (pageLayer)
        pageLayer.parentNode.removeChild(pageLayer);
}

function displaysubmenue(menue) {
    cic.toggleDisplay('sub' + menue);
}
function drawMap(mapContainerId, data) {
    var map = new GMap2(cic.$(mapContainerId));
    map.addControl(new GSmallMapControl());
    map.setCenter(new GLatLng(data.lat, data.lng), 11);
    var marker = new GMarker(new GLatLng(data.lat, data.lng), createIcon())
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml('Some text');
    });
    map.addOverlay(marker);
}

/*
* Merkzettelübersicht
*/
function showMerkzettelMap(idobjekt) {

    var idobjekt = idobjekt || 0;
    var mekzettelidsContainer = cic.$('merkzettelobjectids');
    if (mekzettelidsContainer) {
        var ids = mekzettelidsContainer.getAttribute('ids');
        var mapContainer = cic.$('mz_map');
        if (mapContainer) {
            new Ajax.Request('/web/skripte/template/geodataMerkzettelUebersicht.cfm/idobjekt/' + idobjekt + "/ids/" + ids, {
                onSuccess: addMerkzettelOverlaysSuccess,
                onFailure: addMerkzettelOverlaysFailure
            });
        }
    }
}

function addMerkzettelOverlaysSuccess(response) {

    var data = eval('(' + response.responseText.strip() + ')');
    mapWrapper = new MapWrapper('mz_map', { 'centerLatitude': data[0].lat, 'centerLongitude': data[0].lng, 'showMinimizeControl': false });
    mapWrapper.init(data);
}

function addMerkzettelOverlaysFailure(response) {
    var contents = cic.$('mz_map');
    contents.innerHTML = response.responseText.strip();
}

function toggleMerkzettelMap(e) {
    var W3CElement = cic.targetElement(e);
    var issmallmap = !(W3CElement.getAttribute('issmallmap') === 'false' || W3CElement.getAttribute('issmallmap') === null)
    var verkleinernText = W3CElement.getAttribute('verkleinernText');
    var vergroessernText = W3CElement.getAttribute('vergroessernText');

    W3CElement.innerHTML = (issmallmap) ? verkleinernText : vergroessernText;

    W3CElement.setAttribute('issmallmap', !issmallmap);

    document.getElementsByClassName('map_container')[0].style.height = (issmallmap) ? '400px' : '132px';
    document.getElementById('mz_map').style.height = (issmallmap) ? '365px' : '120px';

    showMerkzettelMap();

}
function expandMerkzettelMap(idobjekt) {
    var W3CElement = cic.$('mzMapToggleDiv');
    var issmallmap = !(W3CElement.getAttribute('issmallmap') === 'false' || W3CElement.getAttribute('issmallmap') === null)

    if (issmallmap) {
        var verkleinernText = W3CElement.getAttribute('verkleinernText');
        W3CElement.setAttribute('issmallmap', !issmallmap);
        W3CElement.innerHTML = verkleinernText;
        document.getElementsByClassName('map_container')[0].style.height = '400px';
        document.getElementById('mz_map').style.height = '365px';
    }
    showMerkzettelMap(idobjekt);
}


function validateCatalogForm() {
    var error = [];
    var anrede_checked = false;
    var type_checked = false;

    var email = cic.$('catalogEmail');
    var vorname = cic.$('catalogVorname');
    var nachname = cic.$('catalogNachname');
    var anrede = document.forms['catalog_form']['salutation'];
    var catalogtype = document.forms['catalog_form']['catalogType'];

    for (i = 0; i < anrede.length; i++) {
        if (anrede[i].checked) anrede_checked = true;
    }

    for (i = 0; i < catalogtype.length; i++) {

        if (catalogtype[i].checked) type_checked = true;
    }

    if (!cic.isEmail(email.value))
        error.push(email.getAttribute('validationmsg'));

    if (!anrede_checked)
        error.push(cic.$('salutation_frau').getAttribute('validationmsg'));

    if (vorname.value == '')
        error.push(vorname.getAttribute('validationmsg'));

    if (nachname.value == '')
        error.push(nachname.getAttribute('validationmsg'));

    if (!type_checked)
        error.push(cic.$('catalog_type').getAttribute('validationmsg'));


    if (error.length == 0) {

        /*
        new Ajax.Request("/web/skripte/dsp_weiterempfehlen_response.cfm?"+querystring, {
        onSuccess: function(response) {
        cic.$('weiterempfehlen_body').innerHTML = response.responseText.strip();
        },
        onFailure: function(response) {
        alert('Weiterempfehlen process failed.')
        }
        });		
        */
    }
    else {
        var errors_container = cic.$('catalogform_validation_errors');
        errors_container.innerHTML = error.join("<br />");
        errors_container.style.display = 'block';
    }

}
function merkzettelSenden() {
    createLayer();
    new Ajax.Request("/web/skripte/dsp_merkzettelversenden.cfm", {
        onSuccess: function(response) {
            var container = cic.$('merkzettelsenden_container');
            var top = (!!document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
            cic.$('merkzettelsenden_body').innerHTML = response.responseText.strip();
            cic.$('merkzettelsenden_body').style.display = 'block';
            container.style.display = 'block';
            container.style.left = parseInt(screen.width / 2 - container.offsetWidth / 2) + 'px';
            container.style.top = parseInt(top + 50) + 'px';
        },

        onFailure: function() { alert('Request failed.'); removeLayer(); }

    });
}
function validateMerkzettelForm() {
    var error = [];
    var emailAbsender = cic.$('emailAbsender');
    var nameAbsender = cic.$('nameAbsender');
    var emailEmpfaenger = cic.$('emailEmpfaenger');
    var nameEmpfaenger = cic.$('nameEmpfaenger');

    if (!cic.isEmail(emailAbsender.value))
        error.push(emailAbsender.getAttribute('validationmsg'));

    if (!cic.isEmail(emailEmpfaenger.value))
        error.push(emailEmpfaenger.getAttribute('validationmsg'));

    if (nameAbsender.value == '')
        error.push(nameAbsender.getAttribute('validationmsg'));

    if (nameEmpfaenger.value == '')
        error.push(nameEmpfaenger.getAttribute('validationmsg'));

    if (error.length == 0) {
        var errors_container = cic.$('validation_errors');
        errors_container.style.display = 'none';
        var querystring = $('weiterempfehlen_form').serialize();

        new Ajax.Request("/web/skripte/dsp_merkzettelversenden_response.cfm?" + querystring, {
            onSuccess: function(response) {
                cic.$('merkzettelsenden_body').innerHTML = response.responseText.strip();
            },
            onFailure: function(response) {
                alert('Weiterempfehlen process failed.')
            }
        });
    }
    else {
        var errors_container = cic.$('validation_errors');
        errors_container.innerHTML = error.join("<br />");
        errors_container.style.display = 'block';
    }
}

function merkzettelSendenClose() {
    removeLayer();
    cic.$('merkzettelsenden_container').style.display = 'none';
}
function confirmMerkzettelDelete() {
    createLayer();
    var container = cic.$('divConfirmMessage');
    var top = (!!document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
    container.style.display = 'block';
    container.style.left = parseInt(screen.width / 2 - container.offsetWidth / 2) + 'px';
    container.style.top = parseInt(top + screen.height / 3) + 'px';

}

function merkzettelDelete() {
    mz.RemoveAll();
    cic.$('divConfirmMessage').style.display = 'none';
    window.location.href = "/web/index.cfm";
}

function mekzettelDeleteCancel() {
    cic.$('divConfirmMessage').style.display = 'none';
    removeLayer();
}

function angebotEntfernen(element, idobject) {
    mz.Remove(element, idobject, false);
    window.location.reload(true);
}

function formValidator(formid) {

    var form = cic.$(formid);
    var wert = '';

    if (!form) return ('');

    var errors = [];
    var len = form.elements.length;

    for (var elementIdx = 0; elementIdx < len; elementIdx++) {

        var element = form.elements[elementIdx];
		var frameelement = null;
        var type = element.type.toLowerCase();
		var frameElementType = null;
			

        //if (!element && !element.getAttribute('validationtype')) return ('');
		if (!element || !element.getAttribute('validationtype')) continue;
			
		//Es gibt Elemente, um die liegt ein Div, das den Rahmen dann darstellt z.B. bei check- und radioboxen	
		if(element.getAttribute('frameElement'))
			frameelement = $(element.getAttribute('frameElement'));
		else
	 		frameelement = element ;
		
		//Typ des Elements holen. Bei Divs kommt hier null zurück	
		frameElementType = frameelement.type;
		
        //Errorstyle fuer alle elemente zurücksetzen
        //if (type === "radio" || type === "checkbox")
		if(frameElementType == null)//also bei Divs, die um Check-, Radioboxen und Selekts liegen. Letztere nur bei IE7.
		    frameelement.style.border = "0";
        else
            frameelement.style.border = "solid #7f9db9 1px";
		
		switch (element.getAttribute('validationtype')) {

            case 'text': if (cic.getValue(element).strip() == "") {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            case 'email': if (!cic.isEmail(cic.getValue(element))) {	
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            //nur zahlen auch mit Leerzeichen, nicht leer      
            case 'numeric':
                wert = cic.getValue(element).replace(',', '.');
                wert = wert.replace(' ', '');
                if (wert == "" || isNaN(wert)) {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            case 'numericnozero':
                wert = cic.getValue(element).replace(',', '.');
                wert = wert.replace(' ', '');
                if (wert == "" || wert == 0 || isNaN(wert)) {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            //nur zahlen auch mit Leerzeichen, leer erlaubt    
            case 'numericorempty':
                wert = cic.getValue(element).replace(',', '.');
                wert = wert.replace(' ', '');
                if (wert != "" && isNaN(wert)) {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            case 'confirm': if (cic.getValue(cic.$(element.getAttribute('sourcefield'))) !== cic.getValue(element)) {
                    errors.push(element.getAttribute('validationmsg'));
                    // element.style.border = "solid #f00 1px";
                }
                break;

            // nicht leer und keine zahlen    
            case 'nonumbers': if ((cic.getValue(element).strip() == "") || (cic.getValue(element).match(/[0-9]/))) {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            // leer erlaubt, aber keine Zahlen    
            case 'nonumbersorempty': if ((cic.getValue(element).match(/[0-9]/))) {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            // nicht leer und Datumsformat:  "dd.mm.yyyy" oder "dd-mm-yyyy"    
            case 'date': if ((cic.getValue(element).strip() == "") || !(cic.getValue(element).match(/^((0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]((19|20)\d\d))$/))) {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;

            // nicht leer und Monatsformat: "mm.yyyy" or "mm/yyyy"    
            case 'monthyear': if ((cic.getValue(element).strip() == "") || !(cic.getValue(element).match(/^((0[1-9]|1[012])[.\/]((19|20)\d\d))$/))) {
                    errors.push(element.getAttribute('validationmsg'));
                    frameelement.style.border = "solid #f00 1px";
                }
                break;
				
			 // das Ergebnis der Validierung (true/false) wurde per Ajax in ein hidden Field geschrieben, das hier dann ausgelesen wird. Im Fehlerfall dann roter Rahmen wie gehabt 
			 // wird z.B. für die Versicherungen - Checkbox verwendet   
            case 'boolfieldvalue': if(element.getAttribute('validationField')){
					var fieldValue = $(element.getAttribute('validationField')).value;
					if (!(fieldValue == 1 || fieldValue == true || fieldValue == 'yes')){
						errors.push(element.getAttribute('validationmsg'));
	                    frameelement.style.border = "solid #f00 1px";
					}
                }
                break;
        }

    }
	
    return (errors.length > 0) ? '<li>' + errors.uniq().join("<li>") : '';
}

function validateKotaktForm(formid) {
    var errors = formValidator(formid);
    alert(errors)
    return (errors == "") ? "" : "<ul><li>" + errors + "</ul>";
}

function ListAppend(l, v, d) {
    l += ""; // cheap way to convert to a string
    if (!d) { d = ","; }
    var r = "";
    if (this.ListLen(l)) {
        r = l + d + v;
    } else {
        r = v;
    }
    return r;
}

function ListDeleteAt(l, p, d) {
    l += ""; // cheap way to convert to a string
    if (!d) { d = ","; }
    var i, posInList;
    var posInArray = p - 1;
    var thisD = "";
    var r = "";
    for (i = 0; i < l.split(d).length; i++) {
        if (i != posInArray) {
            posInList = i + 1;
            if (r.length) {
                thisD = d;
            }
            r += thisD + this.ListGetAt(l, posInList, d);
        }
    }
    return r;
}

function ListFind(l, v, d) {
    l += ""; // cheap way to convert to a string
    if (!d) { d = ","; }
    var r = 0;
    var listToArray = l.split(d);
    for (var i = 0; i < listToArray.length; i++) {
        if (listToArray[i] == v) {
            r = i + 1;
            break;
        }
    }
    return r;
}

function ListGetAt(l, p, d) {
    l += ""; // cheap way to convert to a string
    if (!d) { d = ","; }
    return l.split(d)[p - 1];
}

function ListLen(l, d) {
    l += ""; // cheap way to convert to a string
    if (!d) { d = ","; }
    if (l.length) { return l.split(d).length; }
    return 0;
}
function toggleOptions(containerId, childElementId, klappname) {

    klappObj = document.getElementsByName("sucheAufgeklappt")[0];
    klappObj.value = ListDeleteAt(klappObj.value, ListFind(klappObj.value, klappname));

    var container = document.getElementById(containerId);
    var optionsContainer = document.getElementById(childElementId);

    if (optionsContainer.style.display == 'none')
        klappObj.value = ListAppend(klappObj.value, klappname);


    optionsContainer.style.display = (optionsContainer.style.display == 'block') ? 'none' : 'block'
    if (container.className == "zu" || container.className == "auf")
        container.className = (container.className == 'auf') ? 'zu' : 'auf';
    else
        container.className = (container.className == 'auf_head') ? 'zu_head' : 'auf_head';

}
/*
* Generate Customized Selectboxes.
*/
function replaceSelect() {
    var selects = [];
    var suchmaske = document.getElementById("recherchemaskeFormular");
    var selectboxes = suchmaske.getElementsByTagName('select');
    var selectText = "Bitte auswählen";
    var selectRightSideWidth = 21;
    var selectLeftSideWidth = 8;
    selectAreaHeight = 21;
    selectAreaOptionsOverlap = 2;
    var imagesPath = "images/";

    // Access all Selectboxes in Search mask.
    for (var cfs = 0; cfs < selectboxes.length; cfs++) {
        selects.push(selectboxes[cfs]);
    }

    // Replace the select boxes
    for (var q = 0; q < selects.length; q++) {
        if (selects[q].className == "") continue;

        //create and build div structure
        var selectArea = document.createElement('div');
        var left = document.createElement('div');
        var right = document.createElement('div');
        var center = document.createElement('div');
        var button = document.createElement('a');
        var text = document.createTextNode(selectText);
        center.id = "mySelectText" + q;
        var selectWidth = parseInt(selects[q].className.replace(/width_/g, ""));
        center.style.width = selectWidth - 10 + 'px';
        selectArea.style.width = selectWidth + selectRightSideWidth + selectLeftSideWidth + 'px';
        button.style.width = selectWidth + selectRightSideWidth + selectLeftSideWidth + 'px';
        button.style.marginLeft = -selectWidth - selectLeftSideWidth + 'px';
        button.href = "javascript:showOptions(" + q + ")";
        button.onkeydown = this.selectListener;
        button.className = "selectButton"; //class used to check for mouseover
        selectArea.className = "selectArea";
        selectArea.id = "sarea" + q;
        left.className = "left";
        right.className = "right";
        center.className = "center";
        right.appendChild(button);
        center.appendChild(text);
        selectArea.appendChild(left);
        selectArea.appendChild(right);
        selectArea.appendChild(center);
        //hide the select field
        selects[q].style.display = 'none';
        //insert select div
        selects[q].parentNode.insertBefore(selectArea, selects[q]);
        //build & place options div
        var optionsDiv = document.createElement('div');
        optionsDiv.style.width = selectWidth + 1 + 'px';
        optionsDiv.className = "optionsDivInvisible";
        optionsDiv.id = "optionsDiv" + q;
        optionsDiv.style.left = this.findPosX(selectArea) + 'px';
        optionsDiv.style.top = this.findPosY(selectArea) + selectAreaHeight - selectAreaOptionsOverlap + 'px';
        //get select's options and add to options div
        for (var w = 0; w < selects[q].options.length; w++) {
            var optionHolder = document.createElement('p');
            var optionLink = document.createElement('a');
            var optionTxt = document.createTextNode(selects[q].options[w].text);
            optionLink.href = "javascript:showOptions(" + q + "); selectMe('" + selects[q].id + "'," + w + "," + q + ");sucheAktualisieren()";
            optionLink.appendChild(optionTxt);
            optionHolder.appendChild(optionLink);
            optionsDiv.appendChild(optionHolder);
            if (selects[q].options[w].selected) { this.selectMe(selects[q].id, w, q); }
        }
        document.getElementsByTagName("body")[0].appendChild(optionsDiv);
    }
}

function selectListener(e) {
    if (!e) var e = window.event;
    var thecode = e.keyCode;
    switch (thecode) {
        case 40: //down
            var fieldId = this.parentNode.parentNode.id.replace(/sarea/g, "");
            var linkNo = 0;
            for (var q = 0; q < this.selects[fieldId].options.length; q++) { if (this.selects[fieldId].options[q].selected) { linkNo = q; } }
            ++linkNo;
            if (linkNo >= this.selects[fieldId].options.length) { linkNo = 0; }
            this.selectMe(this.selects[fieldId].id, linkNo, fieldId);
            break;
        case 38: //up
            var fieldId = this.parentNode.parentNode.id.replace(/sarea/g, "");
            var linkNo = 0;
            for (var q = 0; q < this.selects[fieldId].options.length; q++) { if (this.selects[fieldId].options[q].selected) { linkNo = q; } }
            --linkNo;
            if (linkNo < 0) { linkNo = this.selects[fieldId].options.length - 1; }
            this.selectMe(this.selects[fieldId].id, linkNo, fieldId);
            break;
        default:
            break;
    }
}

function findPosY(obj) {
    var posTop = 0;
    while (obj.offsetParent) { posTop += obj.offsetTop; obj = obj.offsetParent; }
    return posTop;
}

function findPosX(obj) {
    var posLeft = 0;
    while (obj.offsetParent) { posLeft += obj.offsetLeft; obj = obj.offsetParent; }
    return posLeft;
}

function showOptions(g) {
    elem = document.getElementById("optionsDiv" + g);
    selectArea = document.getElementById("sarea" + g);

    elem.style.left = this.findPosX(selectArea) + 'px';
    elem.style.top = this.findPosY(selectArea) + selectAreaHeight - selectAreaOptionsOverlap + 'px';

    if (elem.className == "optionsDivInvisible") { elem.className = "optionsDivVisible"; }
    else if (elem.className == "optionsDivVisible") { elem.className = "optionsDivInvisible"; }
    elem.onmouseout = this.hideOptions;
}

function hideOptions(e) {
    if (!e) var e = window.event;
    var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
    if (((reltg.nodeName != 'A') && (reltg.nodeName != 'DIV')) || ((reltg.nodeName == 'A') && (reltg.className == "selectButton") && (reltg.nodeName != 'DIV'))) { this.className = "optionsDivInvisible"; };
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}


function infogrossbild(e, bild, nummer, position) {
		var element = Event.element(e);
		var position = element.positionedOffset();
    Event.stop(e);
    verschiebung = 400;
    if (position != NaN) { verschiebung = verschiebung + position }
    y = (document.all) ? window.event.y + document.body.scrollTop : e.pageY - verschiebung;
    grossbildLayer = document.getElementById('gross' + bild + '_' + nummer);
    grossbildLayer.style.display = 'block';
    grossbildLayer.style.top = position.top + "px";
   // grossbildLayer.style.left = parseInt(position.left + element.getWidth() + 20) + "px";

    new Draggable('gross' + bild + '_' + nummer)

}




function selectMe(selectFieldId, linkNo, selectNo) {

    if (selectFieldId == "") return;
    selectField = document.getElementById(selectFieldId);

    for (var k = 0; k < selectField.options.length; k++) {
        if (k == linkNo) { selectField.options[k].selected = "selected"; }
        else { selectField.options[k].selected = ""; }
    }
    textVar = document.getElementById("mySelectText" + selectNo);
    var newText = document.createTextNode(selectField.options[linkNo].text);
    textVar.replaceChild(newText, textVar.childNodes[0]);
}

String.prototype.toDate = function() {
    var dateArray = this.split(".");
    return new Date(dateArray[2], dateArray[1] - 1, dateArray[0], 0, 0, 0);
}

Date.prototype.LSDateFormat = function() {
    var date = (this.getDate() > 9) ? this.getDate() : 0 + '' + this.getDate();
    var month = (this.getMonth() + 1 > 9) ? parseInt(this.getMonth() + 1) : 0 + '' + parseInt(this.getMonth() + 1);
    return date + "." + month + "." + this.getFullYear();
}

Date.prototype.AddDays = function(numberOfDays) {
    if (isNaN(numberOfDays)) return;

    return new Date(this.setDate(this.getDate() + parseInt(numberOfDays)));
}


Event.observe(document, 'click', function(e) {
    if (window.grossbildLayer && grossbildLayer.id != Event.element(e).parentNode.id) {
        grossbildLayer.style.display = 'none';
    }
})


Event.observe(document, 'click', function(e) {
    if (document.getElementById('Infobx_gross_body') && document.getElementById('Infobx_gross_body').id != Event.element(e).parentNode.id) {
        document.getElementById('Infobx_gross_body').style.display = 'none';
    }
}) 


