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( "' + id + '" ); 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( "' + id + '" ); 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( "' + group_id + '", "' + item_id + '" ); 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.