PageSourceSearch

https://www.mizumi.at/(cms)/module/static/default/content/libs/js/vnh/vnh.js?v=1

js mizumi.at collected 2026-10-08 10:44:54 UTC 39,047 bytes, 1,160 lines download raw bytes

1/*
2 * vnh - vioma information handler
3 * 
4 */
5(function($) {
6	if ( typeof window.cst_remember != 'undefined' ) {
7		return;
8	}
9	
10	if ( typeof _lib_load != 'undefined' ) {
11		_lib_load( 'Cookies' );
12		
13		if ( typeof JSON == 'undefined' ) {
14			_lib_load( 'jquery.json' );
15		}
16	}
17	
18	window.cst_remember = function (){};
19	cst_remember.debug = false;
20	
21	cst_remember.layer_show_before = function( layer ){ return true; },
22	cst_remember.layer_show_after = function( layer ){ return true; },
23	cst_remember.layer_hide_before = function( layer ){ return true; },
24	cst_remember.layer_hide_after = function( layer ){ return true; },
25	cst_remember.layer_inited = function( layer ){ return true; },
26	cst_remember.layer_has_changed = function( layer ){ return true; },
27	cst_remember.layer_updated = function( layer, item_count ){ return true; },
28	cst_remember.layer_group_added = function( layer, item_count, element ){ return true; },
29	cst_remember.layer_group_item_added = function( layer, item_count ){ return true; },
30	cst_remember.group_item_custom_amount = function( amount ){ return amount; },
31	cst_remember.strings_inited = function( strings ){ return true; }
32
33	cst_remember.utf8_encode = function( string ) {
34		if ( cst_remember.debug ) console.log( 'cst_remember.utf8_encode( ' + string + ' )' );
35		return string;
36	};
37
38	cst_remember.utf8_decode = function( string ) {
39		if ( cst_remember.debug ) console.log( 'cst_remember.utf8_decode( ' + string + ' )' );
40		
41		return string;
42	};
43
44	cst_remember.anchor_get = function() {
45		if ( cst_remember.debug ) console.log( 'cst_remember.anchor_get()' );
46		
47		var anchor = window.location.hash.substring( 1 );
48		
49		if ( anchor.indexOf( cst_remember.settings.anchorprefix ) != -1 ) {
50			return anchor.substring( anchor.indexOf( cst_remember.settings.anchorprefix ) + cst_remember.settings.anchorprefix.length );
51		}
52		
53		return false;
54	};
55	
56	/*
57	 * scroll to an element and call callback function
58	 */
59	cst_remember.scroll_to = function( id ) {
60		if ( cst_remember.debug ) console.log( 'cst_remember.scroll_to( ' + id + ' )' );
61
62		if ( cst_remember.settings._cookie[id] == undefined ) return false;
63		
64		if ( cst_remember.settings._cookie[id].type != 'site' ) {
65			jQuery( 'html,body' ).animate({ scrollTop: cst_remember.settings._cookie[id].scrollTop });
66		}
67	};
68	
69	/*
70	 * scroll to an element and call callback function
71	 */
72	cst_remember.scroll_to_current = function() {
73		if ( cst_remember.debug ) console.log( 'cst_remember.scroll_to_current()' );
74		
75		window.setInterval(function(){
76			var anchor_new = window.location.hash.substring( 1 );
77
78			if ( cst_remember._anchor != anchor_new ) {
79				cst_remember._anchor = window.location.hash.substring( 1 );
80				cst_remember.scroll_to( cst_remember.anchor_get() );
81			}
82			
83			if ( cst_remember._anchor === undefined ) {
84				cst_remember._anchor = window.location.hash.substring( 1 );
85			}
86		}, 500 );
87	};
88	
89	
90	/*
91	 * set default values
92	 */
93	cst_remember.strings_init = function() {
94		if ( cst_remember.debug ) console.log( 'cst_remember.strings_init()' );
95
96		cst_remember.strings = [];
97		
98		cst_remember.strings['de'] = [];
99		cst_remember.strings['de']['remember'] = 'Merkblatt';
100		cst_remember.strings['de']['request'] = 'Anfragen';
101		cst_remember.strings['de']['nothing'] = 'Nichts vorgemerkt';
102		cst_remember.strings['de']['delete'] = 'löschen';
103		cst_remember.strings['de']['notice_left'] = 'Das Angebot wurde dem Merkblatt hinzugefuegt. Sie finden das Merkblatt links.';
104		cst_remember.strings['de']['notice_right'] = 'Das Angebot wurde dem Merkblatt hinzugefuegt. Sie finden das Merkblatt rechts.';
105		cst_remember.strings['de']['sites_only'] = 'Sie haben kein Angebot, Zimmer oder Program auf ihrem Merkzettel.';
106
107		cst_remember.strings['it'] = [];
108		cst_remember.strings['it']['remember'] = 'Il mio promemoria';
109		cst_remember.strings['it']['request'] = 'richiesta';
110		cst_remember.strings['it']['nothing'] = 'Nessuna prenotazione';
111		cst_remember.strings['it']['delete'] = 'cancellare';
112		cst_remember.strings['it']['notice_left'] = 'L’offerta é stata aggiunta al promemoria.';
113		cst_remember.strings['it']['notice_right'] = 'L’offerta é stata aggiunta al promemoria.';
114		cst_remember.strings['it']['sites_only'] = 'Nel vostro promemoria non risultano offerte, camere o programmi.';
115
116		cst_remember.strings['fr'] = [];
117		cst_remember.strings['fr']['remember'] = 'Mon panier';
118		cst_remember.strings['fr']['request'] = 'Envoyer une demande';
119		cst_remember.strings['fr']['nothing'] = 'Aucune sélection';
120		cst_remember.strings['fr']['delete'] = 'supprimer';
121		cst_remember.strings['fr']['notice_left'] = 'Votre sélection a bien été enregistrée. Elle se trouve dans votre panier à gauche';
122		cst_remember.strings['fr']['notice_right'] = 'Votre sélection a bien été enregistrée. Elle se trouve dans votre panier à droite';
123		cst_remember.strings['fr']['sites_only'] = 'Votre panier ne contient aucune offre, chambre ou soin';
124
125		cst_remember.strings['cz'] = [];
126		cst_remember.strings['cz']['remember'] = 'Poznámky';
127		cst_remember.strings['cz']['request'] = 'Poptávky';
128		cst_remember.strings['cz']['nothing'] = 'Nebylo nic poznamenáno';
129		cst_remember.strings['cz']['delete'] = 'Smazat';
130		cst_remember.strings['cz']['notice_left'] = 'Tato nabídka byla vložena poznámkové tabulky Thurs. Tuto tabulku naleznate vlevo.';
131		cst_remember.strings['cz']['notice_right'] = 'Tato nabídka byla vložena poznámkové tabulky Thurs. Tuto tabulku naleznate vlevo.';
132		cst_remember.strings['cz']['sites_only'] = 'Sie haben kein Angebot, Zimmer oder Program auf ihrem Merkzettel.';
133
134		cst_remember.strings['pl'] = [];
135		cst_remember.strings['pl']['remember'] = 'Zapamiętać';
136		cst_remember.strings['pl']['request'] = 'Pytania';
137		cst_remember.strings['pl']['nothing'] = 'Nic nie zostało zaznaczone';
138		cst_remember.strings['pl']['delete'] = 'Skasować';
139		cst_remember.strings['pl']['notice_left'] = 'Aby zapamiętać Oferte ta, na podanej liście Prosze zaznaczyć yes. Lista znajduje się po lewej Stronie.';
140		cst_remember.strings['pl']['notice_right'] = 'Aby zapamiętać Oferte ta, na podanej liście Prosze zaznaczyć yes. Lista znajduje się po lewej Stronie.';
141		cst_remember.strings['pl']['sites_only'] = 'Lista nie zawiera żadnej oferty, pokoju i programu.';
142		
143		cst_remember.strings['nl'] = [];
144		cst_remember.strings['nl']['remember'] = 'Kattebelletje';
145		cst_remember.strings['nl']['request'] = 'Aanvragen';
146		cst_remember.strings['nl']['nothing'] = 'Niets genoteerd';
147		cst_remember.strings['nl']['delete'] = 'verwijderen';
148		cst_remember.strings['nl']['notice_left'] = 'Het aanbod werd aan uw winkelmandje toegevoegd. U kunt het links terugvinden.';
149		cst_remember.strings['nl']['notice_right'] = 'Het aanbod werd aan uw winkelmandje toegevoegd. U kunt het rechts terugvinden.';
150		cst_remember.strings['nl']['sites_only'] = 'U hebt geen aanbod, kamer of programma op uw verlanglijstje.';
151		
152		cst_remember.strings['bg'] = [];
153		cst_remember.strings['bg']['remember'] = 'Бележки';
154		cst_remember.strings['bg']['request'] = 'Запитвания';
155		cst_remember.strings['bg']['nothing'] = 'няма нищо отбелязано';
156		cst_remember.strings['bg']['delete'] = 'Изтриване';
157		cst_remember.strings['bg']['notice_left'] = 'Офертата бе добавена към Вашите бележки. В ляво ще намерите бележките.';
158		cst_remember.strings['bg']['notice_right'] = 'Офертата бе добавена към Вашите бележки. В дясно ще намерите бележките.';
159		cst_remember.strings['bg']['sites_only'] = 'Sie haben kein Angebot, Zimmer oder Program auf ihrem Merkzettel.';
160		
161		cst_remember.strings['pt'] = [];
162		cst_remember.strings['pt']['remember'] = 'Minhas anotações';
163		cst_remember.strings['pt']['request'] = 'consultar';
164		cst_remember.strings['pt']['nothing'] = 'nada marcado';
165		cst_remember.strings['pt']['delete'] = 'apagar';
166		cst_remember.strings['pt']['notice_left'] = 'A oferta foi adicionada na Memória, que se encontra ao lado esquerdo.';
167		cst_remember.strings['pt']['notice_right'] = 'A oferta foi adicionada na Memória, que se encontra ao lado direito.';
168		cst_remember.strings['pt']['sites_only'] = 'Sie haben kein Angebot, Zimmer oder Program auf ihrem Merkzettel.';
169		
170		cst_remember.strings['ru'] = [];
171		cst_remember.strings['ru']['remember'] = 'Мои заметки';
172		cst_remember.strings['ru']['request'] = 'Сделать запрос';
173		cst_remember.strings['ru']['nothing'] = 'Записей нет';
174		cst_remember.strings['ru']['delete'] = 'Удалить';
175		cst_remember.strings['ru']['notice_left'] = 'Предложение было добавлено в заметки. Вы можете найти его на левом разделе "Мои заметки".';
176		cst_remember.strings['ru']['notice_right'] = 'Предложение внесено в памятку. Памятка расположена справа.';
177		cst_remember.strings['ru']['sites_only'] = 'Ваш список не содержит предложение, номера или программы.';
178		
179		cst_remember.strings['es'] = [];
180		cst_remember.strings['es']['remember'] = 'Nota';
181		cst_remember.strings['es']['request'] = 'Solicitud';
182		cst_remember.strings['es']['nothing'] = 'No anotado';
183		cst_remember.strings['es']['delete'] = 'borrar';
184		cst_remember.strings['es']['notice_left'] = 'La oferta fue puesta en la notas. La nota se encuentra a la izquierda.';
185		cst_remember.strings['es']['notice_right'] = 'La oferta fue puesta en la nota. La nota se encuentra a la derecha.';
186		cst_remember.strings['es']['sites_only'] = 'Sie haben kein Angebot, Zimmer oder Program auf ihrem Merkzettel.';
187		
188		cst_remember.strings['ro'] = [];
189		cst_remember.strings['ro']['remember'] = 'Notite';
190		cst_remember.strings['ro']['request'] = 'Intrebari';
191		cst_remember.strings['ro']['nothing'] = 'Nimic notat';
192		cst_remember.strings['ro']['delete'] = 'Sterge';
193		cst_remember.strings['ro']['notice_left'] = 'Oferta a fost adaugata la notite. Notitele le gasiti in stanga.';
194		cst_remember.strings['ro']['notice_right'] = 'Oferta a fost adaugata la notite. Notitele le gasiti in dreapta.';
195		cst_remember.strings['ro']['sites_only'] = 'Sie haben kein Angebot, Zimmer oder Program auf ihrem Merkzettel.';
196
197		cst_remember.strings['en'] = [];
198		cst_remember.strings['en']['remember'] = 'my notes';
199		cst_remember.strings['en']['request'] = 'inquire';
200		cst_remember.strings['en']['nothing'] = 'nothing noted';
201		cst_remember.strings['en']['delete'] = 'delete';
202		cst_remember.strings['en']['notice_left'] = 'This offer has been added to your notes. You can find it on the left under "my notes".';
203		cst_remember.strings['en']['notice_right'] = 'This offer has been added to your notes. You can find it on the right under "my notes".';
204		cst_remember.strings['en']['sites_only'] = 'You have no offer, room or programme on your wishlist.';
205
206		cst_remember.strings['pt'] = [];
207		cst_remember.strings['pt']['remember'] = 'Minhas notas';
208		cst_remember.strings['pt']['request'] = 'Enviar perguntas';
209		cst_remember.strings['pt']['nothing'] = 'nothing noted';
210		cst_remember.strings['pt']['delete'] = 'Cancelar';
211		cst_remember.strings['pt']['notice_left'] = 'Esta oferta foi juntada às suas notas. Pode-a encontrar em à esquerda clicando sobre "minhas notas".';
212		cst_remember.strings['pt']['notice_right'] = 'Esta oferta foi juntada às suas notas. Pode-a encontrar em à direita clicando sobre "minhas notas".';
213		cst_remember.strings['pt']['sites_only'] = 'Sie haben kein Angebot, Zimmer oder Program auf ihrem Merkzettel.';
214		
215		cst_remember.strings_inited( cst_remember.strings );
216	};
217	
218	/*
219	 * return string
220	 */
221	cst_remember.string_get = function( name, alternative ) {
222		if ( cst_remember.debug ) console.log( 'cst_remember.string_get( ' + name + ' )' );
223		
224		var language = cst_remember.settings.language || 'en';
225		
226		if ( cst_remember.strings[ language ] ) {
227			if (cst_remember.strings[ language ][ name ]) {
228				return cst_remember.strings[ language ][ name ];
229			}
230			if ( cst_remember.strings[ language ][ alternative ] ) {
231				return cst_remember.strings[ language ][ alternative ];
232			}
233		}
234		
235		return false;
236	};
237	
238	/*
239	 * return the current language
240	 */
241	cst_remember.language_init = function() {
242		var language = cst_remember.settings.language;
243		
244		if ( !language ) {
245			var pathname = window.location.pathname.substring( 1 );
246			language = pathname.substring( 0, pathname.indexOf( '/' ) )
247			
248			if ( language.length > 2 ) {
249				language = false;
250			}
251		}
252		
253		cst_remember.settings.language_alias = language;
254		cst_remember.settings.language = cst_remember.language_make_real( language );
255	};
256
257	cst_remember.language_make_real = function( language ) {
258		switch( language ) {
259			case 'de': case 'dx': return 'de';
260			case 'fr': case 'fx': return 'fr';
261			case 'it': case 'ix': return 'it';
262			case 'cz': case 'cx': return 'cz';
263			case 'bg': case 'bx': return 'bg';
264			case 'ru': case 'rx': return 'ru';
265			case 'pl': case 'px': return 'pl';
266			case 'nl': case 'nx': return 'nl';
267			case 'es': case 'ex': return 'es';
268			case 'pt': case 'px': return 'pt';
269			default: return 'en';
270		}
271	};
272	
273	/*
274	 * split "hrt1234" into { type: 'hrt', id: '1234' }
275	 * if id is an integer, type would be set to "site"
276	 */
277	cst_remember.item_id_split = function( id ) {
278		if ( cst_remember.debug ) console.log( 'cst_remember.item_id_split( ' + id + ' )' );
279	
280		if ( id == undefined || id.length == 0 ) return false;
281		
282		var length = id.length
283			type = '';
284		
285		for( var i = 0; i < length; i++ ) {
286			var character = id.charAt( i );
287			var code = id.charCodeAt( i );
288	
289			if ( code >= 97 && code <= 122 ) {
290				type += '' + character;
291			}
292		}
293		
294		if ( type.length == 0 ) {
295			return { 'type': 'site', 'id': id };
296		}
297	
298		return { 'type': type, 'id': id.substring( type.length ) };		
299	};
300	
301	/*
302	 * add a group to notices
303	 */
304	cst_remember.group_add = function( element, id, name, url ){
305		if ( cst_remember.debug ) console.log( 'cst_remember.group_add( ' + id + ', ' + name + ' )' );
306		
307		cst_remember.current_element = element;
308		var cookie = cst_remember.cookie_get();
309	
310		if ( cookie == undefined ) {
311			cookie = {};
312		}
313		
314		if ( cookie[id] == undefined ) {
315			cookie[id] = {
316				name: cst_remember.utf8_decode( name ),
317				url: cst_remember.utf8_decode( url || window.location.pathname + window.location.search ),
318				items: {},
319				scrollTop: jQuery( document ).scrollTop()
320			};
321		}
322		
323		cst_remember.save( cookie );
324		cst_remember.layer_group_added( cst_remember.settings.container, cst_remember.settings._group_count, element );
325	};
326	
327	/*
328	 * delete a group from notices
329	 */
330	cst_remember.group_delete = function( id ){
331		if ( cst_remember.debug ) console.log( 'cst_remember.group_delete( ' + id + ' )' );
332		
333		var cookie = cst_remember.cookie_get( cst_remember.cookiename );
334		
335		if ( cookie == undefined || cookie[id] == undefined ) {
336			return false;
337		}
338		
339		delete cookie[id];
340	
341		cst_remember.save( cookie );
342	};
343	
344	/*
345	 * add a group item to notices
346	 */
347	cst_remember.group_item_add = function( id, name, group, url, price, description, amount, subitems ){
348		var amount = parseInt( cst_remember.group_item_custom_amount( amount ) ) || amount;
349		
350		if ( cst_remember.debug ) console.log( 'cst_remember.group_item_add( ' + id + ', ' + name + ', ' + group + ', ' + url + ', ' + price + ', ' + description +' )' );
351		
352		var cookie = cst_remember.cookie_get( cst_remember.cookiename ) || {},
353			type = cst_remember.item_id_split( id );
354	
355		// if we have no group informations, add item into "sites" group
356		if ( group == undefined || group.length == 0 ) {
357			group = 'sites';
358		}
359		
360		if ( cookie[group] == undefined ) {
361			cookie[group] = { items: {} };
362		}
363		
364		if( cookie[group].items[id] ) {
365			cookie[group].items[id].amount += amount;
366		} else {
367			cookie[group].items[id] = {
368				id: type.id,
369				type: type.type,
370				name: name,
371				price: price,
372				description: description,
373				url: url || window.location.pathname + window.location.search,
374				scrollTop: jQuery( document ).scrollTop(),
375				amount: amount || 1,
376				subitems: subitems || {}
377			}
378		}
379		
380		cst_remember.utf8_decode( cookie[group].items[id] );
381		
382		cst_remember.save( cookie );
383		
384		if ( cst_remember.settings.notify ) {
385			cst_remember.layer_notify();
386		}
387		cst_remember.layer_group_item_added( cst_remember.settings.container, cst_remember.settings._group_item_count );
388	};
389	
390	/*
391	 * delete a group item from notices
392	 */
393	cst_remember.group_item_delete = function( group_id, item_id ){
394		if ( cst_remember.debug ) console.log( 'cst_remember.group_item_delete( ' + group_id + ', ' + item_id + '  )' );
395		
396		var cookie = cst_remember.cookie_get(),
397			items = false;
398		
399		if ( cookie == undefined || cookie[group_id] == undefined || cookie[group_id].items[item_id] == undefined ) {
400			return false;
401		}
402		
403		delete cookie[group_id].items[item_id];
404		
405		// if group names are hidden remove empty groups
406		if ( !cst_remember.settings.groupnames ) {
407			jQuery.each( cookie[group_id].items, function(a, b){
408				items = true;
409			});
410			
411			if ( !items ) {
412				delete cookie[group_id];
413			}
414		}
415	
416		cst_remember.save( cookie );
417	};
418	
419	/*
420	 * toggle the notice layer
421	 */
422	cst_remember.layer_toggle = function(){
423		if ( cst_remember.settings.container.css( 'display' ) == 'none' ) {
424			cst_remember.layer_show();
425		}
426		else {
427			cst_remember.layer_hide();
428		}
429	};
430	
431	/*
432	 * show the notice layer
433	 */
434	cst_remember.layer_show = function(){
435		if ( cst_remember.debug ) console.log( 'cst_remember.layer_show()' );
436		if ( !cst_remember.settings.container ) cst_remember.layer_create();
437		
438		cst_remember.layer_show_before( cst_remember.settings.container );
439	
440		if ( cst_remember.settings.effect[0] == 'slide' ) {
441			cst_remember.settings.container.slideDown();
442		}
443		else if ( cst_remember.settings.effect[0] == 'fade' ) {
444			cst_remember.settings.container
445				.css({
446					opacity: 0,
447					display: 'block'
448				})
449				.fadeTo( 'fast', 0.85 );
450
451		}
452		else {
453			cst_remember.settings.container.show();
454		}
455		
456		cst_remember.layer_show_after( cst_remember.settings.container );
457	};
458	
459	/*
460	 * hide the notice layer
461	 */
462	cst_remember.layer_hide = function(){
463		if ( cst_remember.debug ) console.log( 'cst_remember.layer_hide()' );
464	
465		cst_remember.layer_hide_before( cst_remember.settings.container );
466	
467		if ( cst_remember.settings.effect[1] == 'slide' ) {
468			cst_remember.settings.container.slideUp();
469		}
470		else if ( cst_remember.settings.effect[1] == 'fade' ) {
471			cst_remember.settings.container.fadeOut();
472		}
473		else {
474			cst_remember.settings.container.hide();
475		}
476
477		cst_remember.layer_hide_after( cst_remember.settings.container );
478	};
479	
480	cst_remember.layer_init = function(){
481		if ( cst_remember.debug ) console.log( 'cst_remember.layer_init()' );
482		
483		cst_remember.strings_init();
484		
485		if ( cst_remember.settings.effect.indexOf( '|' ) == -1 ) {
486			cst_remember.settings.effect = cst_remember.settings.effect + '|' + cst_remember.settings.effect;
487		}
488		
489		cst_remember.settings.effect = cst_remember.settings.effect.split( '|' );
490
491		if ( cst_remember.settings.link.element ) {
492			cst_remember.settings.link.element
493				.unbind( 'click' )
494				.bind( 'click', function(){
495					cst_remember.layer_toggle();
496		
497					return false;
498				});
499		}
500
501		cst_remember.settings.container
502			.addClass( 'vnh-notices' )
503			.css( 'display', ( cst_remember.settings.hidden ? 'none' : 'block' ) )
504			.html( cst_remember.layer_update() );
505		
506		if ( ( id = cst_remember.anchor_get() ) ) {
507			cst_remember.scroll_to( id );		
508		}
509
510		cst_remember.layer_inited( cst_remember.settings.container, cst_remember.settings._group_item_count );
511	};
512	
513	cst_remember.layer_create = function(){
514		if ( cst_remember.debug ) console.log( 'cst_remember.layer_create()' );
515		if ( cst_remember.settings.container ) return;
516		
517		cst_remember.settings.container = jQuery( document.createElement( 'div') )
518			.css({
519				position: 'absolute'
520			})
521			.bind( 'mouseenter', function(){
522				cst_remember.settings.container.bind( 'mouseleave', function(){
523					window.setTimeout(function(){
524						cst_remember.layer_hide()
525					}, 1500 );
526				});
527			})
528			.appendTo( 'body' );
529	};
530	
531	cst_remember.layer_notify = function(){
532		if ( cst_remember.debug ) console.log( 'cst_remember.layer_notify()' );
533
534		if ( cst_remember.settings.display == 2 ) {
535			/* we need to check the position of the link,
536			 * because the container is floating around when hidden and has another width
537			 */
538			var offset = cst_remember.settings.link.element.offset();
539		}
540		else {
541			var offset = cst_remember.settings.container.offset();
542		}
543		
544		if ( cst_remember.settings.position ) {
545			alert( cst_remember.string_get( 'notice_' + cst_remember.settings.position ) );
546			return;
547		}
548		
549		
550		if ( offset.left > ( jQuery( window ).width() / 2 ) ) {
551			alert( cst_remember.string_get( 'notice_right' ) );
552		}
553		else {
554			alert( cst_remember.string_get( 'notice_left' ) );
555		}
556	};
557	
558	/*
559	 * update content of the notice layer
560	 */
561	cst_remember.layer_update = function(){
562		if ( cst_remember.debug ) console.log( 'cst_remember.layer_update()' );
563
564		var hotel_items = false,
565			notices = cst_remember.cookie_get();
566		
567		if ( notices ) {
568			var content, count = 0;
569			cst_remember.settings._group_count = 0;
570			cst_remember.settings._group_item_count = 0;
571			cst_remember.settings._cookie = {};
572			cst_remember.settings.container.empty();
573			
574			jQuery.each( notices, function( group_id, group ){
575				count++;
576				var group_item_count = 0;
577				cst_remember.settings._group_count++;
578
579				if ( group_id != 'sites' ) {
580					hotel_items = true;
581				}
582				
583				var group_title = cst_remember.layer_group_add( group_id, group );
584				cst_remember.settings.container.append( group_title );
585				
586				jQuery.each( notices[group_id].items, function( item_id, item ){
587					group_item_count++;
588					count++;
589					cst_remember.settings._group_item_count++;
590					cst_remember.settings._cookie[item_id] = item;
591					cst_remember.settings.container.append( cst_remember.layer_group_item_add( item_id, item, group_id ) );
592				});
593				if ( !group_item_count ) {
594					$(group_title).hide();
595				}
596			})
597			
598			cst_remember.settings.container
599				.find( 'div.vnh-group:last' )
600				.addClass( 'vnh-group-last' )
601				.end()
602				.find( 'div.vnh-group-item:last' )
603				.addClass( 'vnh-group-item-last' );
604			
605			if ( cst_remember.settings.container == false ) {
606				cst_remember.layer_create();
607			}
608		}
609
610		cst_remember.layer_updated( cst_remember.settings.container, cst_remember.settings._group_item_count );
611
612		if ( cst_remember.settings._group_item_count == 0 ) {
613			cst_remember.settings.container
614				.append( cst_remember.string_get( 'empty' ) )
615				.css( 'display', ( cst_remember.settings.display == 1 ? 'block' : 'none' ) );
616
617			if ( cst_remember.settings.link.empty && cst_remember.settings.link.empty == 'hidden' ) {
618				cst_remember.settings.link.element.hide();
619			}
620			
621			if ( cst_remember.settings.empty == 'hidden' || cst_remember.settings.hidden ) {
622				cst_remember.settings.container.hide();
623				
624				if ( cst_remember.settings.container_parent ) {
625					cst_remember.settings.container_parent.hide();
626				}
627			}
628		}
629		else {
630			if ( cst_remember.settings.link.empty && cst_remember.settings.link.empty == 'hidden' ) {
631				cst_remember.settings.link.element.show();
632			}
633			if ( !cst_remember.settings.hidden ) {
634				cst_remember.settings.container.show();
635			}
636			if ( cst_remember.settings.container_parent ) {
637				cst_remember.settings.container_parent.show();
638			}
639		}
640		
641		cst_remember.layer_has_changed( cst_remember.settings.container );
642	};
643	
644	/*
645	 * add a group to the notice layer
646	 */
647	cst_remember.layer_group_add = function( id, group ){
648		if ( cst_remember.debug ) console.log( 'cst_remember.layer_group_add( ' + id + ', ' + group + ' )' );
649	
650		var row = jQuery( document.createElement( 'div' ) ).addClass( 'vnh-group' );
651		if ( cst_remember.settings.groupnames != false && typeof group.name != 'undefined' ) {
652			row
653				.append(
654					jQuery( '<a>' )
655						.attr( 'href', group.url + '#' + cst_remember.settings.anchorprefix + id )
656						.attr( 'class', 'vnh-group-link' )
657						.html( cst_remember.utf8_encode( group.name ) )
658						.click( function(){
659							if ( window.location.pathname == group.url ) {
660								cst_remember.scroll_to_current();
661							}
662						})
663				)
664				.append(
665					'<a href="#" onclick="cst_remember.group_delete( &quot;' + id + '&quot; ); return false;" class="vnh-group-delete">' + cst_remember.string_get( 'delete_group', 'delete' ) + '</a>'
666				);
667		}
668		
669		return row;
670	};
671	
672	/*
673	 * add a group item to the notice layer
674	 */
675	cst_remember.layer_group_item_add = function( item_id, item, group_id ){
676		if ( cst_remember.debug ) console.log( 'cst_remember.layer_group_item_add( ' + item_id + ', ' + item + ', ' + group_id + ' )' );
677
678		var amount_str = '';
679		if( item.amount > 1 ) { amount_str = '<span class="vnh-group-item-amount">(' + item.amount + ')</span>'; }		
680
681		var link = jQuery( document.createElement( 'a' ) )
682			.attr( 'href', item.url + '#' + cst_remember.settings.anchorprefix + item_id )
683			.attr( 'class', 'vnh-group-item-link' )
684			.attr( 'rev', item_id )
685			.html( item.name + amount_str )
686			.bind( 'click', function(){
687			if ( window.location.pathname == item.url ) {
688				cst_remember.scroll_to_current();
689			}
690		})
691		
692		var link_delete = jQuery( document.createElement( 'a' ) )
693			.attr( 'href', '#' )
694			.attr( 'title', cst_remember.string_get( 'delete_group_item', 'delete' ) )
695			.addClass( 'vnh-group-item-delete vnh-group-item-option' )
696			.html( cst_remember.string_get( 'delete_group_item', 'delete' ) )
697			.click(function(){
698				cst_remember.group_item_delete( group_id,  item_id ); 
699				return false;
700			})
701		
702		if( cst_remember.settings.editable ){
703			link_delete.html('');
704		}
705			
706		var group_div = jQuery( document.createElement( 'div' ) )
707			.addClass( 'vnh-group-item vnh-group-item-' + cst_remember.item_id_split( item_id ).type )
708			.append( link, link_delete )
709		
710		if( cst_remember.settings.editable ){
711			var item_input_id = 'vnh-item-edit-' + item_id;
712			
713			var link_edit = jQuery( document.createElement( 'a' ) )
714				.attr( 'href', '#' )
715				.attr( 'rev', item_id + '-' + group_id )
716				.attr( 'title', 'Anzahl ändern')
717				.addClass( 'vnh-group-item-link-edit vnh-group-item-option' )
718				.click(function(){
719					var data = jQuery.data( jQuery(this)[0], 'toggle');
720					if( data == 1 || data == undefined ){
721						toggle = 0;
722						jQuery(this).addClass('vnh-group-item-link-accept');
723						jQuery('.'+item_input_id).show().focus();
724					} else {
725						jQuery(this).removeClass('vnh-group-item-link-accept');
726						jQuery('.'+item_input_id).hide();
727						toggle = 1;
728						if( jQuery( '.'+item_input_id ).val() != '' ){
729							var value = parseInt( jQuery( '.'+item_input_id ).val() );
730							cst_remember.layer_group_item_amount_edit( item_id, group_id, value );
731						}
732					}
733					jQuery.data( jQuery(this)[0], 'toggle', toggle );
734					return false;
735				});
736			
737			var input = jQuery('<input type="text"/>').addClass( item_input_id + ' vnh-group-item-input-edit' )
738			group_div.append(link_edit, input);
739		}
740		return group_div;
741	};
742	
743	/*
744	 * edit the amount of a item
745	 */
746	cst_remember.layer_group_item_amount_edit = function( item_id, group_id, value ){
747		var cookie = cst_remember.cookie_get();
748		cookie[group_id].items[item_id].amount += value;
749		if( cookie[group_id].items[item_id].amount > 0 ){
750			cst_remember.save( cookie );
751		} else {
752			cst_remember.group_delete( group_id );
753		} 
754		cst_remember.layer_update();
755	}
756	
757	/*
758	 * show the notice layer
759	 */
760	cst_remember.layer_detail_show = function(){
761		if ( cst_remember.debug ) console.log( 'cst_remember.layer_detail_show()' );
762	
763		cst_remember.settings.container
764			.html( cst_remember.layer_detail_update() )
765			.slideDown();
766	};
767	
768	/*
769	 * hide the notice layer
770	 */
771	cst_remember.layer_detail_hide = function(){
772		if ( cst_remember.debug ) console.log( 'cst_remember.layer_detail_hide()' );
773	
774		cst_remember.settings.container.hide();
775	};
776	
777	cst_remember.layer_detail_init = function() {
778		if ( cst_remember.debug ) console.log( 'cst_remember.layer_detail_init()' );
779		if ( cst_remember.settings.link_detail == false ) return;
780		
781		if ( cst_remember.settings.container_detail == false ) {
782			cst_remember.layer_detail_create();
783		}
784
785		var layer_detail = jQuery( cst_remember.settings.container_detail ).addClass( 'vnh-detail-view' )
786		
787		jQuery( cst_remember.settings.link_detail )
788			.unbind( 'click' )
789			.bind( 'click', function(){
790				if ( layer_detail.css( 'display' ) == 'none' ) {
791					cst_remember.layer_detail_show();
792				}
793				else {
794					cst_remember.layer_detail_hide();
795				}
796				return false;
797			});
798
799		cst_remember.on_layer_detail_init( layer_detail );
800	};
801	
802	cst_remember.layer_detail_create = function() {
803		if ( cst_remember.debug ) console.log( 'cst_remember.layer_detail_create()' );
804
805		cst_remember.settings.container_detail = jQuery( document.createElement( 'div' ) )
806			.css({
807				display: 'none',
808				position: 'absolute'
809			})
810			.appendTo( 'body' );
811	};
812
813	/*
814	 * update content of the notice layer
815	 */
816	cst_remember.layer_detail_update = function(){
817		if ( cst_remember.debug ) console.log( 'cst_remember.layer_detail_update()' );
818	
819		var count = 0,
820			content = cst_remember.string_get( 'empty' ),
821			container = jQuery( cst_remember.settings.container_detail ).empty(),
822			notices = cst_remember.cookie_get();
823		
824		if ( notices != undefined ) {
825			cst_remember.settings._cookie = {};
826			
827			jQuery.each( notices, function( group_id, group ){
828				count++;
829				content = jQuery( document.createElement( 'div' ) )
830					.addClass( 'cst-remember-group' )
831					.append( cst_remember.layer_detail_group_add( group_id, group ) );
832	
833				jQuery.each( notices[group_id].items, function( item_id, item ){
834					count++;
835					cst_remember.settings._cookie[item_id] = item;
836					
837					content
838						.addClass( 'cst-remember-group' )
839						.append( cst_remember.layer_detail_group_item_add( item_id, item, group_id ) );
840				});
841				
842				container.append( content );
843			})
844		}
845		
846		return container.html();
847	};
848	
849	/*
850	 * add a group to the notice layer
851	 */
852	cst_remember.layer_detail_group_add = function( id, group ){
853		if ( cst_remember.debug ) console.log( 'cst_remember.layer_detail_group_add( ' + id + ', ' + group + ' )' );
854		
855		var row = jQuery( document.createElement( 'div' ) ).addClass( 'cst-remember-group' );
856		
857		if ( cst_remember.settings.groupnames != false ) {
858			if ( group.name != undefined ) {
859				row.append(
860					jQuery( document.createElement( 'div' ) )
861						.addClass( 'vnh-group-name' )
862						.html( group.name )
863					);
864			}
865			
866			if ( group.url != undefined ) {
867				row = jQuery( '<a class="vnh-group-link" href="' + group.url + '#' + cst_remember.settings.anchorprefix + id + '">' + group.name + '</a>' ).html( row );
868			}
869			
870			
871			if ( row.children().size() > 0 ) {
872				row.append( '<a class="vnh-group-delete" href="#" onclick="cst_remember.group_delete( &quot;' + id + '&quot; ); return false;">' + cst_remember.string_get( 'delete_group', 'delete' ) + '</a>' );
873			}
874		}
875		
876		return row;
877	};
878	
879	/*
880	 * add a group item to the notice layer
881	 */
882	cst_remember.layer_detail_group_item_add = function( item_id, item, group_id ){
883		if ( cst_remember.debug ) console.log( 'cst_remember.layer_detail_group_item_add( ' + item_id + ', ' + item + ', ' + group_id + ' )' );
884	
885		var row = jQuery( document.createElement( 'div' ) ).addClass( 'vnh-group-item vnh-group-item-' + cst_remember.item_id_split( item_id ).type );
886		
887		if ( item.name != undefined ) {
888			row.append( '<div class="vnh-group-item-name">' + item.name + '</div>' );
889		}
890		
891		if ( item.url != undefined ) {
892			row = jQuery( '<a class="vnh-group-item-link" href="' + item.url + '#' + cst_remember.settings.anchorprefix + item_id + '">' + item.name + '</a>' ).html( row );
893		}
894
895		if ( item.price != undefined ) {
896			row.append( '<div class="vnh-group-item-price">' + item.price + '</div>' );
897		}
898		
899		row.append( '<a class="vnh-group-item-delete" href="#" onclick="cst_remember.group_item_delete( &quot;' + group_id + '&quot;, &quot;' + item_id + '&quot; ); return false;">' + cst_remember.string_get( 'delete_group_item', 'delete' ) + '</a>' );
900		
901		return row;
902	};
903	
904	/*
905	 * check if a cookie with the given name already exusts
906	 */
907	cst_remember.cookie_exist = function( name ) {
908		if ( cst_remember.debug ) console.log( 'cst_remember.cookie_exist()' );
909		
910		return ( typeof jQuery.cookie( name ) == 'string' );
911	};
912	
913	/*
914	 * writes the given value into a cookie
915	 */
916	cst_remember.cookie_write = function( data ) {
917		if ( cst_remember.debug ) console.log( 'cst_remember.cookie_write( ' + data + ' )' );
918		
919		var path = '/', cookie_data;
920		
921		if ( cst_remember.settings.cookie_path ) {
922			path = cst_remember.settings.cookie_path;
923		}
924		
925		if ( cst_remember.cookieformat == 1 ) {
926			if ( cst_remember.settings.language ) {
927				path = '/' + cst_remember.settings.language_alias + '/';
928			}
929			
930			cookie_data = data;
931		}
932		else {
933			cookie_data = {
934				path: path,
935				data: data
936			}
937		}
938		
939		var json = encodeURIComponent( cst_remember.utf8_decode( cst_remember.json_encode( cookie_data ) ) );
940		
941		jQuery.cookie( cst_remember.settings.cookiename, json, { expires: cst_remember.settings.cookie_expiry, path: path, domain: window.location.host, secure: false });
942	};
943	
944	/*
945	 * return the content of a cookie
946	 */
947	cst_remember.cookie_get = function() {
948		if ( cst_remember.debug ) console.log( 'cst_remember.cookie_get( ' + name + ' )' );
949		
950		if ( !this.cookie_exist( cst_remember.settings.cookiename ) ) {
951			return false;
952		}
953		
954		var json = jQuery.cookie( cst_remember.settings.cookiename ),
955			cookie_data;
956	
957		if ( json != null ) {
958			cookie_data = cst_remember.json_decode( decodeURIComponent( json ) );
959		}
960		
961		// support old format..
962		if ( !( 'path' in cookie_data ) ) {
963			cst_remember.cookieformat = 1;
964			return cookie_data;
965		}
966		
967		return cookie_data.data;
968	};
969	
970	/*
971	 * add the given value to an existing cookie, dont overwrite existing content
972	 */
973	cst_remember.cookie_entry_add = function( group, item, value ) {
974		if ( cst_remember.debug ) console.log( 'cst_remember.cookie_entry_add( ' + group + ', ' + item + ' )' );
975		
976		if ( value == undefined ) return false;
977		var cookie = cst_remember.cookie_get();
978	
979		if ( cookie == undefined ) {
980			cookie = {};
981		}
982	
983		if ( cookie[group] == undefined ) {
984			cookie[group] = {};
985		}
986		
987		if ( item == undefined ) {
988			cookie[group].name = value;
989		}
990		else {
991			cookie[group][item] = value;
992		}
993	
994		cookie[group][item] = value;
995		
996		cst_remember.save( cookie );
997	};
998	
999	/*
1000	 * delete the cookie with the given name
1001	 */
1002	cst_remember.cookie_delete = function( name ) {
1003		if ( cst_remember.debug ) console.log( 'cst_remember.cookie_delete()' );
1004		
1005		jQuery.cookie( ( name || cst_remember.settings.cookiename ), false, { expires: -1 } );
1006	};
1007	
1008	/*
1009	 * convert the given object into json string
1010	 */
1011	cst_remember.json_encode = function( data ) {
1012		if ( cst_remember.debug ) console.log( 'cst_remember.json_encode( ' + data + ' )' );
1013		
1014		if ( typeof JSON != 'undefined' && typeof JSON.stringify != 'undefined' ) {
1015			return JSON.stringify( data );
1016		}
1017	
1018		return jQuery.json.encode( data );
1019	};
1020	
1021	/*
1022	 * convert the given json string into an object
1023	 */
1024	cst_remember.json_decode = function( json ) {
1025		if ( cst_remember.debug ) console.log( 'cst_remember.json_decode( ' + json + ' )' );
1026		
1027		if ( typeof JSON != 'undefined' && typeof JSON.stringify != 'undefined' ) {
1028			return JSON.parse( json );
1029		}
1030	
1031		return jQuery.json.decode( json );
1032	};
1033	
1034	/*
1035	 * write data into cookie
1036	 */
1037	cst_remember.save = function( data ){
1038		if ( cst_remember.debug ) console.log( 'cst_remember.save( ' + data + ' )' );
1039		
1040		cst_remember.cookie_write( data );
1041		cst_remember.layer_update();
1042		
1043		if ( cst_remember.settings.container_detail != false ) {
1044			cst_remember.layer_detail_update();
1045		}
1046		
1047		var cookie = cst_remember.cookie_get(),
1048			items = false;
1049		
1050		if ( !cookie ) return false;
1051		
1052		jQuery.each( cookie, function(a, b){
1053			items = true;
1054		});
1055		
1056		if ( !items ) {
1057			jQuery( cst_remember.settings.empty_container ).css( 'display', 'none' );
1058		}
1059		else {
1060			jQuery( cst_remember.settings.empty_container ).css( 'display', 'block' );
1061		}
1062	};
1063	
1064	/*
1065	 * redirect to request page
1066	 */
1067	cst_remember.request = function( element ) {
1068		if ( cst_remember.debug ) console.log( 'cst_remember.request( ' + element + ' )' );
1069		
1070		var notices = cst_remember.cookie_get(),
1071			items = false;
1072
1073		jQuery.each( notices, function( group_id, group ){
1074			if ( group_id == 'sites' ) return;
1075			
1076			items = true;
1077		});
1078		
1079		if ( !items ) {
1080			alert( cst_remember.string_get( 'sites_only' ) );
1081			return;
1082		}
1083		
1084		var link = jQuery( element ).attr( 'href' );
1085
1086		window.location = link;
1087		return false;
1088	}
1089	
1090	cst_remember.book_items_str = function( group_id ) {
1091		var struct = this.cookie_get( this.cookiename );
1092		var book_url = '';
1093		try {
1094			if( typeof struct != 'undefined' && typeof group_id != 'undefined' && typeof struct[group_id] != 'undefined' && typeof struct[group_id].items != 'undefined' ) {
1095				jQuery.each( struct[group_id].items, function(i, item ) {
1096					if( item.type == 'hp' ) {
1097						var item_str = '&book_item[]=hp_' + item.id +',cart_init_auto:1,cart_amount:'+item.amount;
1098						book_url += item_str;
1099					}
1100				});
1101			}
1102		} catch(e) {};
1103		return book_url;
1104	} 
1105	
1106	$.fn.vnh = function( options ) {
1107		return this.each(function() {   
1108			$.vnh( this, options );
1109		});
1110	};
1111
1112	$.vnh = function( element, options ) {
1113		var version = '1.2',
1114			defaults = {
1115				effect: 'slide|slide',// one argument: open and close effects are the same; tow arguments for different effects, serperated by pipe (slide|fade)
1116				link: {},
1117				notify: true,
1118				position: false,
1119				container: false,
1120				container_parent: false,
1121				container_detail: false,
1122				link_detail: false,
1123				groupnames: false,
1124				empty: 'show',// 'hidden'
1125				cookiename: 'cst_remember_notices',
1126				cookieformat: 2,
1127				anchorprefix: 'vnh:',
1128				cookie_path: undefined,
1129				language: false,
1130				strings: [],
1131				_cookie: {},
1132				_group_count: 0,
1133				_group_item_count: 0,
1134				cookie_expiry: 31,
1135				editable:false
1136			};
1137		
1138		cst_remember.settings = $.extend( true, defaults, options );
1139
1140		if ( cst_remember.settings.container === false ) {
1141			cst_remember.settings.container = jQuery( element );
1142		}
1143		else {
1144			cst_remember.settings.container = jQuery( cst_remember.settings.container );
1145			jQuery( element ).remove();
1146		}
1147		
1148		if ( cst_remember.settings.container_parent != false ) {
1149			cst_remember.settings.container_parent = jQuery( cst_remember.settings.container_parent );
1150		}
1151		
1152		if ( cst_remember.settings.link.element ) {
1153			cst_remember.settings.link.element = jQuery( cst_remember.settings.link.element );
1154		}
1155		
1156		cst_remember.language_init();
1157		
1158		cst_remember.layer_init();
1159	}
1160})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.