1/* 2 Dateiname: global.js 3 Zweck: Globale JavaScripts 4 Ersteller: Hakan Erci 5 Datum: 10.08.07 6 Version: 4.1.1 7 8 Aenderungen : 9 Datum Version Wer Beschreibung 10 18.11.2008 4.1.1a uo Folgende Funktionen vom contactform.js �bertragen, da diese in div. Modulen verwendet werden: 11 checkemailadr, threeway_checkeurodate, threeway_checkday, threeway_checkinteger, threeway_numberrange, threeway_checknumber, threeway_checkrange, threeway_checktime 12 13 ------------------------------------------------------------ 14 15 Kundenspezifische Anpassungen: 16 Datum Wer Beschreibung 17 18*/ 19 20<!-- 21/* E-Mail Adressen verschluesseln */ 22 function CryptMailto() 23 { 24 var n = 0; 25 var r = ""; 26 var s = "mailto:"+document.forms[0].emailField.value+"?subject="+document.forms[0].emailsubject.value; 27 var e = document.forms[0].emailField.value; 28 29 e = e.replace( /@/, " [at] "); 30 /* e = e.replace( /\./g, " [dot] "); */ 31 32 for( var i=0; i < s.length; i++) 33 { 34 n = s.charCodeAt(i); 35 if( n >= 8364 ) 36 { 37 n = 128; 38 } 39 r += String.fromCharCode(n+1); 40 } 41 document.forms[0].cyptedEmailField.value = r; 42 document.forms[0].HTMLCyptedEmailField.value = "<a href=\"javascript:linkTo_UnCryptMailto('"+ r +"');\">"+ e +"</a>"; 43 } 44 45/* E-Mail Adressen entschluesseln */ 46 function UnCryptMailto(s) 47 { 48 var n = 0; 49 var r = ""; 50 for( var i = 0; i < s.length; i++) 51 { 52 n = s.charCodeAt(i); 53 if( n >= 8364 ) 54 { 55 n = 128; 56 } 57 r += String.fromCharCode(n - 1); 58 } 59 return r; 60 } 61 62/* Aufruf von Link auf E-Mailadresse */ 63 function linkTo_UnCryptMailto(s) 64 { 65 location.href=UnCryptMailto(s); 66 } 67 68/* Tip Layer steuern */ 69 function ShowTip(fArg) 70 { 71 var tooltipOBJ = (document.getElementById) ? document.getElementById(fArg) : eval("document.all['" + fArg + "']"); 72 if (tooltipOBJ != null) { 73 var tooltipLft = (document.body.offsetWidth?document.body.offsetWidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:380)) - 30; 74 var tooltipTop = 10; 75 if (navigator.appName == 'Netscape') { 76 tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10); 77 tooltipOBJ.style.top = tooltipTop+"px"; 78 tooltipOBJ.style.left = tooltipLft+"px"; 79 } 80 else { 81 tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10); 82 tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10); 83 if ((event.clientX > tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) { 84 tooltipTop = (document.body.scrollTop?document.body.scrollTop:document.body.offsetTop) + event.clientY + 20; 85 } 86 tooltipOBJ.style.left = tooltipLft; 87 tooltipOBJ.style.top = tooltipTop; 88 } 89 tooltipOBJ.style.visibility = "visible"; 90 } 91 } 92 93 function HideTip(fArg) 94 { 95 //var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']"); 96 var tooltipOBJ = (document.getElementById) ? document.getElementById(fArg) : eval("document.all['fArg']"); 97 if (tooltipOBJ != null) { 98 tooltipOBJ.style.visibility = "hidden"; 99 } 100 } 101/* End Tip Layer steuern */ 102 103/* E-Mail pruefen */ 104 function checkemailadr(emailadr){ 105 106 // Bsp. [email protected] 107 // var validFormat = /^[a-z0-9](\.?[-_\w])*@[a-z0-9](\.?[-\w])*\.([a-z]{3}(\.[a-z]{2})?|[a-z]{2}(\.?[a-z]{2})?)$/i; 108 var validFormat = /^([0-9a-zA-Z]([-_\\.]*[0-9a-zA-Z]+)*)@([0-9a-zA-Z]([-_\\.]*[0-9a-zA-Z]+)*)[\\.]([a-zA-Z]{2,10})$/gmi; 109 // var hotName = /@hotmail\./i; 110 // var hotTopDomain = /\.com$/i; 111 var emailValid = validFormat.test(emailadr); 112 // var hotNameValid = hotName.test(emailadr); 113 // var hotTopDomainValid = hotTopDomain.test(emailadr); 114 var formatOK = true; 115 116 if(!emailValid){ 117 //alert('Bad email format !'); 118 formatOK = false; 119 //return false; 120 } 121 /* 122 if(hotNameValid && formatOK){ 123 if(!hotTopDomainValid){ 124 // alert('Hotmail allways ends with .com'); 125 formatOK = false; 126 //return false; 127 } 128 } 129 */ 130 return formatOK; 131 } 132/* End E-Mail pruefen */ 133 134/* Datum und Zeit pruefen */ 135 function threeway_checkeurodate(object_value){ 136 137 <!--- Returns true if value is a eurodate format or is NULL ---> 138 <!--- otherwise returns false ---> 139 140 if (object_value.length == 0) return true; 141 142 <!--- Returns true if value is a date in the dd/mm/yyyy format ---> 143 isplit = object_value.indexOf('/'); 144 145 if (isplit == -1) isplit = object_value.indexOf('.'); 146 147 if (isplit == -1 || isplit == object_value.length) return false; 148 149 sDay = object_value.substring(0, isplit); 150 151 monthSplit = isplit + 1; 152 153 isplit = object_value.indexOf('/', monthSplit); 154 155 if (isplit == -1) isplit = object_value.indexOf('.', monthSplit); 156 157 if (isplit == -1 || (isplit + 1 ) == object_value.length) return false; 158 159 sMonth = object_value.substring((sDay.length + 1), isplit); 160 161 sYear = object_value.substring(isplit + 1); 162 163 <!--- check month ---> 164 165 if ( 166 !threeway_checkinteger(sMonth) 167 || !threeway_checkrange(sMonth, 1, 12) // check month 168 || !threeway_checkinteger(sYear) // check year ---> 169 || !threeway_checkrange(sYear, 0, null) // check year ---> 170 || !threeway_checkinteger(sDay) // check day ---> 171 || !threeway_checkday(sYear, sMonth, sDay) // check day ---> 172 ) return false; 173 else return true; 174 } 175 176 function threeway_checkday(checkYear, checkMonth, checkDay){ 177 178 maxDay = 31; 179 if (checkMonth == 4 || checkMonth == 6 || checkMonth == 9 || checkMonth == 11){ 180 maxDay = 30; 181 }else if (checkMonth == 2){ 182 if (checkYear % 4 > 0) maxDay = 28; 183 else if (checkYear % 100 == 0 && checkYear % 400 > 0) maxDay = 28; 184 else maxDay = 29; 185 } 186 return threeway_checkrange(checkDay, 1, maxDay); <!--- check day ---> 187 } 188 189 function threeway_checkinteger(object_value){ 190 191 <!--- Returns true if value is a number or is NULL ---> 192 <!--- otherwise returns false ---> 193 194 if (object_value.length == 0) return true; 195 196 <!--- Returns true if value is an integer defined as ---> 197 <!--- having an optional leading + or -. ---> 198 <!--- otherwise containing only the characters 0-9. ---> 199 var decimal_format = "."; 200 var check_char; 201 202 <!--- The first character can be + - blank or a digit. ---> 203 check_char = object_value.indexOf(decimal_format) 204 <!--- Was it a decimal? ---> 205 if (check_char < 1) return threeway_checknumber(object_value); 206 else return false; 207 } 208 209 function threeway_numberrange(object_value, min_value, max_value){ 210 211 <!--- check minimum ---> 212 if (min_value != null && object_value < min_value) return false; 213 214 <!--- check maximum ---> 215 if (max_value != null && object_value > max_value) return false; 216 217 <!--- All tests passed, so... ---> 218 return true; 219 } 220 221 function threeway_checknumber(object_value){ 222 223 <!--- Returns true if value is a number or is NULL ---> 224 <!--- otherwise returns false ---> 225 226 if (object_value.length == 0) 227 return true; 228 229 <!--- Returns true if value is a number defined as ---> 230 <!--- having an optional leading + or -. ---> 231 <!--- having at most 1 decimal point. ---> 232 <!--- otherwise containing only the characters 0-9. ---> 233 var start_format = " .+-0123456789"; 234 var number_format = " .0123456789"; 235 var check_char; 236 var decimal = false; 237 var trailing_blank = false; 238 var digits = false; 239 240 <!--- The first character can be + - . blank or a digit. ---> 241 check_char = start_format.indexOf(object_value.charAt(0)) 242 <!--- Was it a decimal? ---> 243 if (check_char == 1) decimal = true; 244 else if (check_char < 1) return false; 245 246 <!--- Remaining characters can be only . or a digit, but only one decimal. ---> 247 for (var i = 1; i < object_value.length; i++){ 248 249 check_char = number_format.indexOf(object_value.charAt(i)) 250 if (check_char < 0){ 251 return false; 252 }else if (check_char == 1){ 253 <!--- Second decimal. ---> 254 if (decimal) return false; 255 else decimal = true; 256 257 }else if (check_char == 0){ 258 if (decimal || digits) trailing_blank = true; 259 <!--- ignore leading blanks ---> 260 261 }else if (trailing_blank){ 262 return false; 263 }else{ 264 digits = true; 265 } 266 } 267 <!--- All tests passed, so... ---> 268 return true 269 } 270 271 function threeway_checkrange(object_value, min_value, max_value) 272 { 273 <!--- if value is in range then return true else return false ---> 274 275 if (object_value.length == 0) return true; 276 277 if (!threeway_checknumber(object_value)) return false; 278 else return (threeway_numberrange((eval(object_value)), min_value, max_value)); 279 280 <!--- All tests passed, so... ---> 281 return true; 282 } 283 284 function threeway_checktime(object_value) 285 { 286 //Returns true if value is in time format or is NULL 287 //otherwise returns false 288 289 if (object_value.length == 0) return true; 290 291 //Returns true if value is a date in the mm/dd/yyyy format 292 isplit = object_value.indexOf(':'); 293 294 if (isplit == -1 || isplit == object_value.length) return false; 295 296 sHour = object_value.substring(0, isplit); 297 iminute = object_value.indexOf(':', isplit + 1); 298 299 if (iminute == -1 || iminute == object_value.length) sMin = object_value.substring((sHour.length + 1)); 300 else sMin = object_value.substring((sHour.length + 1), iminute); 301 302 303 //check hour 304 if (!threeway_checkinteger(sHour) || !threeway_checkrange(sHour, 0, 23)) return false; 305 306 //check minutes 307 if (!threeway_checkinteger(sMin) || !threeway_checkrange(sMin, 0, 59)) return false; 308 309 // did they specify seconds 310 if (iminute != -1){ 311 sSec = object_value.substring(iminute + 1); 312 // check seconds 313 if (!threeway_checkinteger(sSec) || !threeway_checkrange(sSec, 0, 59)) return false; 314 } 315 return true; 316 } 317/* End Datum und Zeit pruefen */ 318 319 320/* 321 Ajax 322 323 Aufruf
324 Ajax.startRequest(methode, url, callback [, async]) 325 326 wobei: 327 methode: "get" oder "post" 328 url: Pfad zum gew�nschten File 329 callback: Funktion, die nach erfolgreichem Abschluss des Requests ausgef�hrt wird 330 async: true oder false, wobei true = asynchron und false = synchron 331*/ 332 333 var Ajax = { 334 getTransport: function() 335 { 336 req = false; 337 //Gecko 338 if (window.XMLHttpRequest) { 339 try {req = new XMLHttpRequest();} 340 catch(e) {req = false;} 341 } 342 //IE 343 else if (window.ActiveXObject) { 344 try {req = new ActiveXObject("Msxml2.XMLHTTP");} 345 catch(e) { 346 try {req = new ActiveXObject("Microsoft.XMLHTTP");} 347 catch(e) {req = false;} 348 } 349 } 350 return req; 351 }, 352 353 startRequest: function(method, url, callback, async) 354 { 355 var url = url.replace(/&/g, "&"); 356 if (async == undefined) async = true; 357 var transport = this.getTransport(); 358 if (!transport) {alert("No Ajax possible in your Browser!")} 359 else 360 { 361 transport.onreadystatechange = function() 362 { 363 if (transport.readyState == 4) 364 { 365 if (transport.status == 200 || transport.status == 204) 366 { 367 callback(transport); 368 } 369 } 370 }; 371 transport.open(method, url, async); 372 transport.send(null); 373 } 374 return transport; 375 } 376 }; 377 378 379/* 380 addEvent 381 382 Zweck der Funktion: 383 Registriert einen Event-Listener (browser�bergreifend) 384 385 Aufruf: 386 addEvent(DOM-Element, Typ des Events, Handler-Funktion, useCaption) 387 388 Beispiel: 389 addEvent(document.body, "click", function(){alert("Auf Body geklickt!")}, false) 390*/ 391 392 function addEvent(obj, eventType, handleFunction, useCaption) 393 { 394 var useCaption = (useCaption || false); 395 if (obj.addEventListener) /* FF, Safari, etc. */ 396 { 397 obj.addEventListener(eventType, handleFunction, useCaption); 398 return true; 399 } 400 else if (obj.attachEvent) /* IE */ 401 { 402 return obj.attachEvent("on"+eventType, handleFunction); 403 } 404 else return false; 405 } 406 407/* 408 getElementsByClassName 409 410 Zweck der Funktion: 411 Gibt eine HTMLNodeList aller Elemente zur�ck, die den �bergebenen Klassennamen enthalten. 412 413 Aufruf: 414 getElementsByClassName(classname, context) 415*/ 416 417 function getElementsByClassName(classname, context) 418 { 419 var context = context || document.getElementsByTagName("body")[0]; 420 var a = []; 421 var re = new RegExp('\\b' + classname + '\\b'); 422 var els = context.getElementsByTagName("*"); 423 for (var i=0; i < els.length; i++) 424 { 425 if(re.test(els[i].className)) 426 { 427 a.push(els[i]); 428 } 429 } 430 return a; 431 } 432 433 434/* 435 getMousePos 436 437 Zweck der Funktion: 438 Gibt die aktuelle Mauszeigerposition relativ zum Dokument zur�ck. R�ckgabewert ist ein Objekt mit zwei Eigenschaften, 439 "x" und "y", die jeweils die Position des Mauszeigers in Pixel angeben. 440 441 Aufruf: 442 getMousePos(Event) 443*/ 444 445 function getMousePos(e) 446 { 447 if (!e) e = window.event; 448 var body = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ? window.document.documentElement : window.document.body; 449 return { 450 x: e.pageX ? e.pageX : e.clientX + body.scrollLeft - body.clientLeft, 451 y: e.pageY ? e.pageY : e.clientY + body.scrollTop - body.clientTop 452 }; 453 } 454 455 456/* 457 addLoadEvent 458 459 Zweck der Funktion: 460 Dieser Funktion kann eine Funktion �bergeben werden, die ausgef�hrt wird, sobald die komplette Seite geladen wurde. 461 Wird diese Funktion mehrmals aufgerufen, werden die �bergebenen Funktionen in der Reihenfolge ausgef�hrt, wie sie �bergeben wurden. 462 463 Aufruf: 464 addLoadEvent(Funktion) 465*/ 466 467 function addLoadEvent(func) 468 { 469 var oldonload = window.onload; 470 if (typeof window.onload != 'function') window.onload = func; 471 else { 472 window.onload = function() { 473 if (oldonload) oldonload(); 474 func(); 475 } 476 } 477 } 478 479 480/* 481 onDomLoaded 482 483 Zweck der Funktion: 484 Sie heisst "onDomLoaded" und erwartet ein Argument, n�mlich eine Funktion, 485 die ausgef�hrt werden soll, sobald das DOM der Seite geladen und referenzierbar ist. 486 Die window.onload-Funktion oder <body onload=... wird erst ausgef�hrt, 487 wenn s�mtliche Bilder, iFrames, Flash-Movies, ... der Seite komplett geladen sind, 488 was unter Umst�nden einige Zeit in Anspruch nehmen kann. "onDomLoaded" hingegen f�hrt die Funktion aus, 489 wenn die Dokumentstruktur geladen wurde, aber BEVOR irgendein eingebettetes Objekt 490 mit dem Ladevorgang beginnt. 491 Es ist ausserdem m�glich, die Funktion mehrmals aufzurufen und jeweils eine andere Funktion 492 als Argument zu �bergeben. Sobald das DOM geladen ist, werden die registrierten Funktion 493 in der Reihenfolge ausgef�hrt, wie sie �bergeben worden sind 494 495 Aufruf: 496 onDomLoaded(Funktionsreferenz) 497*/ 498 499 function onDomLoaded(func) 500 { 501 DOM_loaded_checkDomLoaded(); // starte die �berpr�fung 502 if (DOM_loaded_domLoaded) 503 func(); // wenn das DOM bereits geladen, f�hre Funktion sofort aus 504 else 505 { 506 if (!DOM_loaded_readyList) DOM_loaded_readyList = []; 507 DOM_loaded_readyList.push(func); // andererseits f�ge Funktion der Warteliste hinzu 508 } 509 510 function DOM_loaded_ready() 511 { 512 if (!DOM_loaded_domLoaded) // wenn DOM bereits geladen, keine weiteren Massnahmen 513 { 514 DOM_loaded_domLoaded = true;
515 // f�hre alle Funktionen in der Warteliste aus 516 for (var i = 0; i < DOM_loaded_readyList.length; i++) 517 { 518 DOM_loaded_readyList[i](); 519 } 520 DOM_loaded_readyList = null; 521 } 522 } 523 524 function DOM_loaded_checkDomLoaded() 525 { 526 if (typeof DOM_loaded_readyBound != "undefined" && DOM_loaded_readyBound == true) return; 527 DOM_loaded_readyBound = true; 528 DOM_loaded_domLoaded = false; 529 DOM_loaded_readyList = false; 530 531 // Mozilla, Opera und Webkit (Safari, Chrome) 532 if (document.addEventListener) 533 { 534 document.addEventListener("DOMContentLoaded", function() 535 { 536 document.removeEventListener("DOMContentLoaded", arguments.callee, false); 537 DOM_loaded_ready(); 538 }, false); 539 } 540 541 // Internet Explorer 542 else if (document.attachEvent) 543 { 544 // wird ausgef�hrt kurz bevor window.onload, gilt auch f�r iFrames 545 document.attachEvent("onreadystatechange", function() 546 { 547 if (document.readyState === "complete") 548 { 549 document.detachEvent("onreadystatechange", arguments.callee); 550 DOM_loaded_ready(); 551 } 552 }); 553 554 // wenn Internet Explorer, aber kein iFrame 555 if (document.documentElement.doScroll && window == window.top) 556 { 557 // gem�ss http://javascript.nwbox.com/IEContentLoaded/ 558 (function() { 559 if (DOM_loaded_domLoaded) return; 560 try { 561 document.documentElement.doScroll("left"); 562 } 563 catch(error) 564 { 565 setTimeout(arguments.callee, 0); 566 return; 567 } 568 DOM_loaded_ready(); 569 })(); 570 } 571 } 572 573 // Fallback 574 addEvent(window, "load", DOM_loaded_ready); 575 } 576 } 577 578 579 //Sch�tze Zeichen f�r Variable in RegExp 580 RegExp.escape = function(text) 581 { 582 if (!arguments.callee.sRE) 583 { 584 var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^']; 585 arguments.callee.sRE = new RegExp('(\\' + specials.join('|\\') + ')', 'g'); 586 } 587 text = text.replace("&", "&"); 588 return text.replace(arguments.callee.sRE, '\\$1'); 589 } 590 591 592/* 593 Function.prototype.bind 594 595 Zweck der Funktion: 596 Die Funktion wird im Kontext eines beliebigen Objekts ausgef�hrt. Hilfreich besonders bei Event-Listener-Funktionen, 597 die nicht im globalen Kontext ausgef�hrt werden sollen. 598 Es ist zudem m�glich, Parameter zu �bergeben, die dann bis zum effektiven Funktionsaufruf konserviert werden. 599 600 Aufruf: 601 [Funktionsname].bind(Objektinstanz) 602*/ 603 604 Function.prototype.bind = function(object) 605 { 606 var arguments2array = function(args) 607 { 608 var arr_args = []; 609 for (var i = 0; i < args.length; i++) 610 { 611 arr_args.push(args[i]); 612 } 613 return arr_args; 614 } 615 616 if (typeof object != "object") return this; 617 618 var arr_args = arguments2array(arguments); 619 var object = arr_args.shift(); 620 621 var __method = this; 622 return function() 623 { 624 var arr_args_new = arguments2array(arguments); 625 return __method.apply(object, arr_args_new.concat(arr_args)); 626 } 627 } 628 629/* 630 Webtext 631 632 Zweck der Funktionen: 633 Mit Webtext.init(prefix) werden s�mtliche Webtexte initialisiert, die mit "prefix" beginnen. 634 Mit Webtext.get(web_textcode) wird der gew�nschte Webtext zur�ckgegeben. Wenn er zuvor nicht initialisiert 635 wurde, wird das stillschweigend nachgeholt. 636 Bei wenigen Webtexten empfiehlt sich Webtext.get zu verwenden, bei vielen empfiehlt sich eine einmalige 637 Initialisierung per Webtext.init. 638 639 Aufruf: 640 Webtext.init(String prefix) 641 Webtext.get(String web_textcode) 642*/ 643 644 var Webtext = { 645 webtext: new Object(), 646 init: function(code) 647 { 648 if (!code) code = ""; 649 //var transport = Ajax.startRequest("get", "/indexXMLhttp.cfm?xmlhttpaction=getwebtext&code=" + code + "&spr=" + three_way.spr + "&mandant=" + three_way.mandant + three_way.urlparam, function(){}, false); 650 var transport = Ajax.startRequest("get", "/indexXMLhttp.cfm?xmlhttpaction=getwebtext&code=" + code + "&mandant=" + three_way.mandant + three_way.urlparam, function(){}, false); 651 // 30.04.2010 haer + "&spr=" + three_way.spr entfernt, da die Sprache in urlparam vorhanden ist 652 this.updateObject(transport.responseText); 653 }, 654 get: function(web_textcode) 655 { 656 if (!this.webtext[web_textcode]) this.init(web_textcode); 657 return this.webtext[web_textcode] || false; 658 }, 659 updateObject: function(result) 660 { 661 //erstelle Objekt basierend auf JSON 662 var obj = eval("(" + result + ")"); 663 for (var code in obj) this.webtext[code] = obj[code]; 664 } 665 }; 666 667/* 668 stripeTables 669 670 Zweck der Funktionen:
671 Ermittelt beim kompletten Laden des Dokuments alle Tabellen mit dem Klassennamen "stripes" und f�gt allen enthaltenen 672 Reihen (tr) abwechslungsweise die Klassennamen "odd" und "even" an. Per CSS l�sst sich so der Zebrastreifeneffekt 673 erzeugen. 674 675 Aufruf: 676 wird automatisch initialisiert 677*/ 678 679 function stripeTables() 680 { 681 // ermittle alle Tabellen, die den Klassennamen "stripes" aufweisen 682 var tables = getElementsByClassName("stripes"); 683 var current_classname = ""; 684 685 for (var a = 0; a < tables.length; a++) 686 { 687 if (tables[a].nodeName == "TABLE") 688 { 689 // ermittle alle Reihen dieser Tabelle 690 var rows = tables[a].getElementsByTagName("tr"); 691 for (var b = 0; b < rows.length; b++) 692 { 693 // f�ge den entsprechenden Klassennamen an 694 current_classname = (b % 2 == 0) ? "odd" : "even"; 695 rows[b].className = rows[b].className + " " + current_classname; 696 } 697 } 698 } 699 } 700 701 onDomLoaded(stripeTables); 702 703 704 /* 705 serializeForm 706 707 Zweck der Funktionen: 708 Die aktuelle Einstellung des gesamten Formulars wird als Query-String zur�ckgegeben. 709 Das selbe passiert automatisch, wenn der Browser ein Formular abschickt. 710 711 Aufruf: 712 serializeForm(Referenz zu HTML-Formular) 713 */ 714 715 function serializeForm(form) 716 { 717 if (!form.elements) return ""; // es handelt sich offenbar nicht um ein Formular 718 719 // Funktion erweitert aktuelle URL-Liste um ein key/value-Paar 720 function addValueToString(name, value) { 721 arr_key_value.push(encodeURIComponent(name) + "=" + encodeURIComponent(value)); 722 } 723 724 var elements = form.elements; 725 var arr_key_value = []; 726 var str_url = ""; 727 var name, value, a; 728 729 // loope �ber alle enthaltenen Formularelemente 730 for (var i = 0; i < elements.length; i++) 731 { 732 value = null; 733 if (!elements[i].name) continue; // ohne name-Attribute sind die value-Attribute wertlos 734 name = elements[i].name; 735 736 switch (elements[i].type) 737 { 738 case "radio": 739 case "checkbox": 740 if (elements[i].checked) value = elements[i].value; 741 break; 742 743 case "select-multiple": 744 for (a = 0; a < elements[i].options.length; a++) 745 if (elements[i].options[a].selected) 746 // kann kein value-Wert gefunden werden, wir der text-Wert verwendet (Firefox-default) 747 addValueToString(name, elements[i].options[a].value || elements[i].options[a].text); 748 break; 749 750 default: 751 // text, textarea, select, hidden 752 value = elements[i].value; 753 } 754 755 if (value !== null) addValueToString(name, value); 756 } 757 758 // setze key/value-Paare zusammen 759 str_url = arr_key_value.join("&"); 760 return str_url; 761 } 762 763/* 764 inputValidator 765 766 Zweck der Klasse: 767 Echtzeit-�berpr�fungen auf Textfelder (input und textarea) registrieren. 768 769 Aufruf: 770 var validatorInstance = new inputValidator(Referenz auf input-Element); 771 772 Methoden: 773 setCallback(Funktionsreferenz); 774 Die �bergebene Funktion wird ausgef�hrt, wenn sich der Wert im Textfeld �ndert. 775 Kann beliebig oft aufgerufen werden. 776 start(); 777 Mit dieser Funktion wird die �berpr�fung gestartet. 778*/ 779 780 function inputValidator(inputElement) 781 { 782 var currentInputValue; 783 var callback = []; 784 785 this.setCallback = function(callbackFunc) { 786 callback.push(callbackFunc); // f�ge Funktion ans Ende des callback-Arrays 787 }; 788 789 this.start = function() { 790 watchInputValue(); // starte die frequente �berpr�fung 791 }; 792 793 var watchInputValue = function() 794 { 795 // f�hre �berpr�fung nur durch, wenn sich der Wert �berhaupt ver�ndert hat 796 if (inputElement.value !== currentInputValue) check(); 797 currentInputValue = inputElement.value; 798 setTimeout(arguments.callee, 100); 799 }; 800 801 var check = function() 802 { 803 // Loope �ber das Array callback und f�hre jede Funktion aus 804 for (var i = 0; i < callback.length; i++) 805 callback[i](inputElement.value); 806 }; 807 } 808 809 /* Ort(e) zu PLZ selektieren un in Ort-Feld anzeigen */ 810 function getcity(zip,country,cityform,cityfield) { 811 var $myform = $("#"+cityform); 812 if (zip.length) { 813 $.ajax({
814 url: "/indexXMLhttp.cfm?xmlhttpaction=get_city&zip=" + zip + "&country=" + country + "&listtype=first", 815 async: false, 816 success: function(data){ 817 $myform.find("#"+cityfield).val(data); 818 } 819 }); 820 } 821 else{ 822 $myform.find("##"+cityfield).val(""); 823 } 824 }; 825 826 /* Funktionalität für innodoc - Bildwechsel wenn man mit der Maus über kleines Bild fährt 827 * innodoc:doc1=xxx;doc2=xxx;effect=3;group=test;coment=test --> doc1 kleines Bild, doc2 grosses Bild 828 * Damit dies funktioniert wird noch ein Grosses Bild zur Anzeige benötigt 829 * innodoc:doc1=xxx;group=test;comment=test 830 * Zugehörigkeit von Bildwechsel zu grossem Bild wird über die Group gesteuert 831 */ 832 $(function(){ 833 $(".imgvariant").mouseover( 834 function(){ 835 $('#'+$(this).attr('rel')).attr('src', $(this).attr('href')); 836 $('#comment'+$(this).attr('rel')).html($(this).find("img").attr('title')); 837 } 838 ); 839 840 $(".imgvariant").click( 841 function(event){ 842 event.preventDefault(); 843 } 844 ); 845 }); 846/* End Funktionalität für innodoc - Bildwechsel wenn man mit der Maus über kleines Bild fährt */ 847// --> 848 849 850/* 851 CSS-Klasse "deletable" aktivieren. 852 853 Nur für <input type="text"> möglich. 854 Zeigt am Ende des Textfeldes ein kleines Kreuz an (oder beliebiges anderes Bild, siehe CSS), 855 welches bei Klick den Inhalt des Textfeldes löscht und den Fokus auf dieses setzt. 856 Das ist ähnlich wie beim OSX für Mac sowie beim iPhone. Sieht man neuerdings immer öfters im Internet. 857 Vor allem für Suchfelder ist es geeignet. 858*/ 859var initDeletable = function() { 860 861 // Funktion, die im Interval aufgerufen wird. 862 var test_text = function($input) { 863 $delete = $input.siblings(".input_delete_button"); 864 if ($input.val() != "" && !$input.hasClass("default_text_active")) { 865 $delete.show(); 866 } else { 867 $delete.hide(); 868 } 869 }; 870 871 $(":text.deletable").each(function(){ 872 var $input = $(this); 873 874 // Erzeuge Hilfsgerüst für die Positionierung. 875 var $wrapper = $("<span/>").css({ 876 position: "relative" 877 }); 878 $input.wrap($wrapper); 879 880 // Erzeuge Löschen-Button. 881 var $delete_button = $("<a/>").addClass("input_delete_button").attr({ 882 title: "" 883 }).click(function(e){ 884 e.preventDefault(); 885 $input.val("").focus(); 886 $delete_button.hide(); 887 }).appendTo($input.parent()); 888 889 // Passe das Layout der Input-Boxen an. 890 var padding = $delete_button.width()*2; 891 $input.css("padding-right", function(i, value){return (parseInt(value) + padding) + "px"}); 892 $input.width(function(i, value){return (value - padding)}); 893 894 test_text($input); // Initialisierung 895 896 // Starte/beende Ãberprüfung der Eingabe. 897 var interval_handler; 898 899 $input.focus(function(){ 900 interval_handler = window.setInterval(function(){test_text($input)}, 50); 901 }).blur(function(){ 902 window.clearInterval(interval_handler); 903 test_text($input); // Sicherheitsüberprüfung 904 }); 905 }); 906}; 907 908 909/* 910 CSS-Klasse "default_text" aktivieren 911 912 Für <input type="text"> und <textarea> möglich. 913 Erlaubt die Anzeige eines hellgrauen Default-Textes im Textfeld. 914 Sobald der User den Fokus auf das Feld setzt, verschwindet der Text und man kann eine Eingabe machen. 915 Besonders nützlich: Wird ein Formular, welches Textfelder mit Default-Texten enthält 916 abgeschickt, werden sowohl bei einer vorgängigen Ãberprüfung der Feld-Werte mit JavaScript 917 als auch beim Senden der Werte an den Server allfällig bestehende Default-Texte mit einem leeren String ersetzt, 918 so, als ob es sie gar nicht geben würde (das, was man sonst auch erwarten würde). 919*/ 920var initDefaultText = function() { 921 922 var getDefaultText = function($input) { 923 // Wenn kein title-Attribut vorhanden, verwende leeren String als Default-Text. 924 return $input.attr("title") || ""; 925 }; 926 927 // Bei "focus" 928 var deactivate = function() { 929 $input = $(this); 930 if ($input.hasClass("default_text_active")) { 931 $input.val(""); 932 $input.removeClass("default_text_active"); 933 } 934 }; 935 936 // Bei "blur" 937 var activate = function() { 938 $input = $(this); 939 if ($input.val() == "") { 940 $input.val(getDefaultText($input)); 941 $input.addClass("default_text_active"); 942 } 943 } 944 945 // Mache die beiden Funktionen für die Aussenwelt sichtbar. 946 arguments.callee.deactivate = deactivate; 947 arguments.callee.activate = activate; 948 949 $(".default_text").each(function(){ 950 $(this).focus(deactivate).blur(activate); 951 activate.call(this); // Initialisierung simulieren 952 }); 953 954 $(window).unload(function(){ 955 // Firefox-Verhalten (schreibt bestehende Werte nach Reload wieder in Felder) umgehen. 956 $(".default_text.default_text_active").val(""); 957 }); 958}; 959 960var cleanDefaults = function(form) { 961 $(".default_text", form).each(initDefaultText.deactivate); 962}; 963 964var restoreDefaults = function(form) { 965 $(".default_text", form).each(initDefaultText.activate); 966}; 967 968$(initDefaultText); 969$(initDeletable);
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.