/** * CMS main JavaScript library, needed by the CMSForms php class * * @version $Id: CMSServer forms.js.php v1.00.86 (Uploaded 2011-12-15 12:46:30 by admin_mk, installed here 2011-12-15 12:46:42 by unknown) $ * @package cms * @subpackage javascript */ // GLOBALE VARS var intervalID = 0, execInterval = 0; // Timer IDs var lookupVisible = false; // Lookup-Dropdown Sichtbarkeit var lookupRequest = false; // Request-Objekt fuer Lookups var lookupTask; // Task-Schluessel var lookupLastVal; // Vorheriger Wert im Lookup var lookupDomId; // DOM-ID des aktuellen Lookup var script_path = ""; // Initialisieren var shiftPressed = false; var altPressed = false; var ctrlPressed = false; var formFocus = ''; // JSON.parse for older browsers if (typeof(JSON) == "undefined") { JSON = {}; } if (typeof(JSON.parse) == "undefined") { JSON.parse = function(json_string) { return eval('('+json_string+')'); }} // ALLGEMEINE FUNKTIONEN function getElementsByClassName(classname, node) { if(!node) node = document.getElementsByTagName("body")[0]; var a = []; var all_elems = node.getElementsByTagName("*"); var i; var addcount = -1; for (i in all_elems) { if (all_elems[i].className && all_elems[i].className.indexOf(classname) != -1) { addcount++; a[addcount] = all_elems[i]; } } return a; } function str_replace(wht, wth, in_strg) { var strg=new String(in_strg); return strg.split(wht).join(wth); } function strtr(instr, searchstring, replacestring) { for(var i = 0; i < searchstring.length; i++) { instr=str_replace(searchstring[i], replacestring[i], instr); } return instr; } function check_url(identifier) { var urlst=document.getElementById(identifier).value; if(urlst.substring(0,4)=="www.") { document.getElementById(identifier).value="http://"+urlst; } } function encode_utf8(s) { return unescape(encodeURIComponent(s)); } function decode_utf8(s) { return decodeURIComponent(escape(s)); } /** * Simulate clicking a submit button. Will try onsubmit first. * Requires reference to any element within the form. */ function form_submit(elem) { var is_form = get_parent_by_tag_name(elem, 'form'); if (is_form) { if (typeof(is_form.onsubmit) != 'undefined' && is_form.onsubmit != null) { if (is_form.onsubmit()) { return is_form.submit(); } } else { return is_form.submit(); } } else { debug_print('Form not found'); } } /** * Return an element's parent by its tag name * * This example could find an input fields's form: * * form_elem = get_parent_by_tag_name(this, 'form'); * */ function get_parent_by_tag_name(elem, tagname) { tagname = tagname.toUpperCase(); while (typeof(elem.parentNode) != 'undefined' && elem.parentNode != null) { elem = elem.parentNode; if (typeof(elem.tagName != 'undefined') && elem.tagName != null && elem.tagName == tagname) { return elem; } else if (typeof(elem.parentNode) == 'undefined') { return false; } } } /** * Convert & to & for proper calls in js * * @param string url * @return string fixed url */ function url_amp_remove(url) { return str_replace('&', '&', url); } function add_classname(dom_object, classname) { if (typeof(dom_object.className) != 'string') { dom_object.className = ''; } if (dom_object.className.indexOf(classname) == -1) { dom_object.className = trim(dom_object.className + ' ' + classname); } } function strip_classname(dom_object, classname) { if (typeof(dom_object.className) == 'string') { dom_object.className = trim(str_replace(' '+classname+' ', ' ', ' '+dom_object.className+' ')); } } function check_digits(identifier,maxvalue) { var str=document.getElementById(identifier).value; var valu=parseInt(str); if (valu > maxvalue) {valu=maxvalue;} str="" + valu; if (str=="NaN") str=""; document.getElementById(identifier).value=str; } function select_gethtml(selecter, targetid) { var srcid=document.getElementById(selecter).value; var tarelem=document.getElementById(targetid); var htmlcode=document.getElementById(srcid).innerHTML; tarelem.innerHTML=htmlcode; } function cms_html_cleanup(htmlString, cleanLevel) { var req = exec_request('/ajax_handler.php', false, 'task=htmlcleanup&cleanlevel='+encodeURIComponent(cleanLevel)+'&value='+encodeURIComponent(htmlString)); if(typeof(cleanLevel) == 'undefined') { disarmLevel = 0; } if(req.status == 200) { if(req.responseText) { // is there any response htmlString = req.responseText; } } else { debug_print("cms_html_cleanup error: "+req.status); } return htmlString; } function disarm(s, disarmLevel, defaultifresponseempty) { if (typeof(defaultifresponseempty) == 'undefined') { // if no default value for empty responses is supplied, use the input string defaultifresponseempty = s; } if(typeof(disarmLevel) == 'undefined') { disarmLevel = 5; } var req = exec_request('/ajax_handler.php?task=disarm&value='+encodeURIComponent(s)+'&level='+disarmLevel); if(req.status == 200) { if(req.responseText) { // is ther any response s = req.responseText; } else { // if not, apply default value s = defaultifresponseempty; } } else { debug_print("disarm error: "+req.status); } return s; } function setURLTitle(defaultvalue) { var linktitle = document.getElementById('obj_obj_linktitle'); var headline = document.getElementById('obj_obj_headline'); if (trim(linktitle.value) == '') { linktitle.value = disarm(headline.value, 5, defaultvalue); } } /** * Detect mouse position (cross browser) * * @param e event reference * @return array x => x position, y => y position */ function get_mouse_position(e) { e = e || window.event; var cursor = {x:0, y:0}; if (e.pageX || e.pageY) { cursor.x = e.pageX; cursor.y = e.pageY; } else { cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft; cursor.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop; } return cursor; } function trim (str) { // trim leading and following whitespaces return str.replace (/^\s+/, '').replace (/\s+$/, ''); } /** * Detect keycode * * @param evt event reference * @return integer keycode */ function get_keycode(evt) { var keyCode; if(!evt) evt = window.event; if ("which" in evt) { keyCode = evt.which; // modern } else if ("keyCode" in evt) { keyCode = evt.keyCode; // legacy } shiftPressed = evt.shiftKey; altPressed = evt.altKey; ctrlPressed = evt.ctrlKey; return keyCode; } // Dom-Objekt leeren/loeschen function empty_node(dom_id) { var clearDom; if(clearDom = document.getElementById(dom_id)) { clearDom.innerHTML=''; } } function kill_node(dom_id) { var killme = document.getElementById(dom_id); killme.parentNode.removeChild(killme); } // Ersetzen einer Text-Box Auswahl, bzw. Einfassen function selection_replace(tid, repl, wrap_st, wrap_nd) { var ta, sel_text; if(ta = document.getElementById(tid)) { if(typeof wrap_st == 'undefined') { wrap_st = ''; } if(typeof wrap_nd == 'undefined') { wrap_nd = ''; } ta.focus(); // IE if(typeof document.selection != 'undefined') { var range = document.selection.createRange(); sel_text = range.text; if(repl != null) { sel_text = repl; } range.text = wrap_st + sel_text + wrap_nd; range = document.selection.createRange(); if(sel_text.length == 0) { range.move('character', -wrap_nd.length); } else { range.moveStart('character', wrap_st.length + sel_text.length + wrap_nd.length); } range.select(); // Gecko } else if(typeof ta.selectionStart != 'undefined') { var start = ta.selectionStart; var end = ta.selectionEnd; sel_text = ta.value.substring(start, end); if(repl != null) { sel_text = repl; } ta.value = ta.value.substr(0, start) + wrap_st + sel_text + wrap_nd + ta.value.substr(end); var pos; if (sel_text.length == 0) { pos = start + wrap_st.length; } else { pos = start + wrap_st.length + sel_text.length + wrap_nd.length; } ta.selectionStart = pos; ta.selectionEnd = pos; } } } // Herausloesen einer Seite function flyout(winid, w, h) { var theWin = popwin("", w, h, winid); document.getElementById("flyoutlink").innerHTML=""; theWin.document.write(document.documentElement.innerHTML) document.body.innerHTML=" "; theWin.focus(); } /** * Maximise window */ function maximize_window() { window.moveTo(0,0); window.resizeTo(screen.availWidth, screen.availHeight); } // Oeffnen einer Hilfe-Box function help_page(linktitle_or_url) { if ((linktitle_or_url.indexOf('download.php') >= 0) || (linktitle_or_url.indexOf('services/files') >= 0)) { window.location.href = linktitle_or_url; } else if (linktitle_or_url.indexOf('/') >= 0) { popwin(linktitle_or_url, 640, 480, "cmshelp", "yes"); } else { popwin("/"+linktitle_or_url+".html?print=1", 640, 480, "cmshelp", "yes"); } } // Duplizieren eines Eingabebereichs mit fortlaufend nummeriertem Array function auto_expand(thisnode) { setTimeout('auto_expand_now("'+ thisnode.id +'")', 15); } function auto_expand_now(thisnodeId) { var src_range; var trg_range; var thisnode; thisnode = document.getElementById(thisnodeId); if((thisnode.value != "")||(thisnode.value=="SELECT")) if(src_range=auto_expand_detect_frame(thisnode)) { var range_id=src_range.id; var range_nr=range_id; range_nr=range_nr.replace(/(.*__)([0-9]+)(.*)/, "$2"); range_nr=parseInt(range_nr); var new_nr=range_nr+1; new_id=str_replace("__"+range_nr, "__"+new_nr, range_id); if(trg_range=document.getElementById(new_id)) { // Existiert, Event entfernen thisnode.onChange=null; thisnode.onKeyDown=null; } else { trg_range=src_range.cloneNode(true); trg_range.id=new_id; auto_expand_recursive_repl(trg_range, "__"+range_nr, "__"+new_nr); src_range.parentNode.insertBefore(trg_range, src_range.nextSibling); } } } function auto_expand_detect_frame(nod) { var par; while(par=nod.parentNode) { nod=par; if(typeof(nod.id) != "undefined") { var s = new String; s=nod.id; if(s.substring(s.length-6)=="_frame") { return(nod); } } } return(false); } // Rekursiver String-Replace innerhalb eines Knotens ueber id, value, name function auto_expand_recursive_repl(nodeobj, strwhat, strwith) { var tagTyp; for(var i = 0; i < nodeobj.childNodes.length; i++) { if(typeof(nodeobj.childNodes[i].tagName) != "undefined") { tagTyp = nodeobj.childNodes[i].tagName; if(nodeobj.childNodes[i].hasChildNodes()) { auto_expand_recursive_repl(nodeobj.childNodes[i], strwhat, strwith); } if(nodeobj.childNodes[i].id) { nodeobj.childNodes[i].id = str_replace(strwhat, strwith, nodeobj.childNodes[i].id); } if(nodeobj.childNodes[i].name) { nodeobj.childNodes[i].name = str_replace(strwhat, strwith, nodeobj.childNodes[i].name); } if(nodeobj.childNodes[i].href) { nodeobj.childNodes[i].href = str_replace(strwhat, strwith, nodeobj.childNodes[i].href); } if(tagTyp != "OPTION" && nodeobj.childNodes[i].type != "button") { if(nodeobj.childNodes[i].value) {nodeobj.childNodes[i].value = ""; } } } } } // Klassisches Popup function popwin(targeturl, w, h, winid, scrlbars) { var nw = 30 + w; var nh = 55 + h; var theWin; if(typeof winid == 'undefined') { winid="theWin"; } if(typeof scrlbars == 'undefined') { scrlbars="no"; } if(theWin = window.open(targeturl, winid, "toolbar=no,location=no,status=no,menubar=no,scrollbars="+scrlbars+",resizable=yes,width="+nw+",height="+nh+"")) { theWin.opener = this; theWin.resizeTo(nw,nh); theWin.focus(); } if(winid != "theWin") { return theWin; } } // Zaehler und Maxlength-Funktion fuer Textareas function textarea_count(span_id, maxlen, count_text) { var inp=document.getElementById(span_id); var span=document.getElementById(span_id + "_counter"); var lft=maxlen - inp.value.length; if(lft < 0) { lft=0; inp.value = inp.value.substring(0,maxlen); } count_text=str_replace("%", lft, count_text); span.innerHTML = "
" + count_text + "
"; } // Bild / Downloaduebersicht starten function open_archive(dom_id, overview_type) { elem=document.getElementById(dom_id); //old overview var nw=750; var nh=700; imgArch = window.open("/admin/overview.php?item_nr="+elem.value+"&dom_id="+dom_id+"&displaymode=2&imgselect=1&type="+overview_type, "imgArch","toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width="+nw+",height="+nh+""); //new overview // var nw=screen.availWidth-10; // var nh=screen.availHeight-55; // imgArch = window.open("/admin/overview/archive_overview.php?root="+overview_type, "imgArch","toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width="+nw+",height="+nh+""); if(imgArch) { imgArch.opener = this; imgArch.focus(); imgArch.resizeTo(nw,nh); } } // Bildvorschau Swap function preview_image(dom_id) { var imgpath=document.getElementById(dom_id).value; var ext=imgpath.substring(imgpath.length-4); if((ext==".gif")||(ext==".jpg")||(ext==".png")) { var prev=document.getElementById(dom_id+"_preview"); var oldsrc=prev.src; var thumb=imgpath; var check=thumb.lastIndexOf("/")+1; thumb="/images/"+thumb.substring(0,check)+"th_"+thumb.substring(check); if(oldsrc.indexOf(thumb) == -1) { prev.src=(thumb); } } } // Bildauswahl wiederherstellen function preview_restore(dom_id) { document.getElementById(dom_id+"_preview").src="/gfx/nopic.gif"; } // Dokument-Charset ermitteln function get_charset() { var ret="", s=new String; if(document.charset) { ret=document.charset; } // Simpel in IE else { var metas=document.getElementsByTagName("meta"); var c=0, cont; while(metas[c]) { if(s=metas[c].getAttribute("http-equiv")) if(s.toLowerCase() == "content-type") { cont=metas[c].getAttribute("content")+";charset=;"; cont=cont.split("charset=")[1]; cont=cont.split(";")[0]; return cont; } c++; } } return ret; } /** * Return div displaying ajax clock */ function get_ajaxclock_html() { return '
 
'; } ///// "AJAX" Funktionen basierend auf HTTP-Request Objekt ////////////////////////////// // Request Objekt laden function get_request() { var req; if(window.XMLHttpRequest) // Moz { req = new XMLHttpRequest(); //if(req.overrideMimeType) { req.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) // IE { try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} } } if(!req) { return false; } else { return req; } } // Ajax Aufruf einer URI function exec_request(url, async, params) { var meth='POST'; if(typeof(async) == "undefined") { async = false; } if(typeof(params) == "undefined") { params = ''; } // meth='GET'; } var req; if(req = get_request()) { req.open(meth, url, async); if(meth == 'POST') { req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); req.setRequestHeader("Content-length", params.length); req.setRequestHeader("Connection", "close"); req.send("charset=UTF-8&"+params); } else { req.send(null); } hourglass(false); return req; } else { return false; } } // Hourglass-Cursor an/aus function hourglass(stats) { if (typeof(document.body) != 'undefined' && document.body != null) { if(typeof(document.body.style.cursor) != 'undefined') { document.body.style.cursor = (stats ? "wait" : "auto"); } } } // Synchroner Aufruf einer URI und Annahme von Daten function ajax_call(url) { var req=exec_request(url, false); if(req.status == 200) { ajax_parent_push(req); } else { debug_print("Ajax Call error: "+req.status); } } // Asynchroner Aufruf einer URI und Annahme von Daten var async_acall; function ajax_call_async(url) { var async_call = exec_request(url, true); async_call.onreadystatechange = function () { ajax_call_async_receive(async_call); }; } function ajax_call_async_delayed(url, delay) { setTimeout('ajax_call_async("'+url+'")', delay); } function ajax_call_async_receive(async_call) { if(typeof(async_call)!="undefined") if(async_call.readyState == 4) { if(async_call.status == 200) { ajax_parent_push(async_call); } } } /** * Place an ajax call and return the plain response text */ function ajax_get_value(url) { var req=exec_request(url, false); if(req.status == 200) { if (req.responseText) { return req.responseText; } else { return false; } } else { return false; } } // Auslesen des HTML Blocks aus der Response, und Uebertragung in Block-Element function ajax_parent_push(req) { var root = false; if(req.responseXML || req.responseText) { /* XML */ if (req.responseXML && (root = req.responseXML.getElementsByTagName("body")[0])) { var dom_id=ajax_return_value(root, "domid"); var html=ajax_content_reassemble(root); fill_dom_innerhtml(dom_id, html); /* JSON */ } else if(req.responseText) { try { root = JSON.parse(req.responseText); } catch(err) { debug_print('ajax_parent_push JSON error: '+req.responseText); } if (root) { if (typeof(root.resp) != 'undefined') { /* Response from ajax_response.class.php */ if (typeof(root.set_innerhtml) == 'object') { var key; for (key in root.set_innerhtml) { fill_dom_innerhtml(key, root.set_innerhtml[key]); } } } else if(typeof(root.body) != 'undefined') { /* Response from ajax_parent_push() */ fill_dom_innerhtml(root.domid, root.body); } if(typeof(root.jsexec) != "undefined") { eval(root.jsexec); } } } else { debug_print("No XML / JSON body!"); } } else { debug_print("No ajax response!"); } } /** * Put some contents into an element identified by dom_id. * If the element is not found, do nothing. */ function fill_dom_innerhtml(dom_id, inner_html) { var elem; if (dom_id) { elem = document.getElementById(dom_id); if (elem) { elem.innerHTML = inner_html; } } } // Rueckgabewert aus XML Textknoten extrahieren function ajax_return_value(obj, tagnam) { var elem; if(elem = obj.getElementsByTagName(tagnam)[0].firstChild) { return elem.data; } else { return ''; } } // Inhalte aller enthaltener DIVs aneinanderreihen function ajax_content_reassemble(root) { var cnt=0, chunk, ret=''; var divs = root.getElementsByTagName("div"); var chunk; var conts; for(var k=0, chunk; chunk=divs[k++];) { if(conts = chunk.firstChild) { ret = ret + conts.data; } else { debug_print('nofirstchild:'+chunk); } } return ret; } // Formularinhalt per AJAX Aufruf uebermittlen function ajax_form_submit(frm, async) { var params="", act; if(frm) { act=frm.action; params+=ajax_form_submit_assemble(frm.getElementsByTagName("input")); params+=ajax_form_submit_assemble(frm.getElementsByTagName("select")); params+=ajax_form_submit_assemble(frm.getElementsByTagName("textarea")); return exec_request(act, async, params); } } function ajax_form_submit_assemble(elems) { var c = 0, params = '', value = ''; while(elems[c]) { if(elems[c].name && elems[c].value) { if(elems[c].type == 'checkbox') { value = elems[c].checked ? elems[c].value : ''; } else { value = elems[c].value; } params+=elems[c].name +"=" + encodeURIComponent(value) + "&"; } c++; } return params; } // Aufruf einer Lookup-Box var ajax_lookup_response_interval = 200; function ajax_lookup(task, dom_id, e) { lookupTask=task; lookupDomId=dom_id; var key_num=get_keycode(e); if (key_num==40) { // Down if(lookupVisible) { lookupRequest = false; // AJAX Abbruch var selbox = document.getElementById(dom_id+'_select'); selbox.selectedIndex = 0; selbox.focus(); lookup_onchange(e); } } else if(key_num==9) { // Tab lookup_hide_now(); ajax_destroy(dom_id); } else if(typeof(intervalId) == "undefined" || intervalID < 1) { clearInterval(intervalID); intervalID = setTimeout('ajax_lookup_now();',ajax_lookup_response_interval); ajax_lookup_response_interval = 500; } } // Lookup-Rahmenbedingungen erzeugen, AJAX Request absetzen function ajax_lookup_now(offs) { lookupRequest = false; var dom_id=lookupDomId; if(!offs) {offs=0;} clearInterval(intervalID); intervalID = 0; var ajax_in; if(ajax_in=document.getElementById(dom_id)) { var ajax_div; if(!(ajax_div=document.getElementById(dom_id+'_ajaxdiv'))) { var divcontainer=document.createElement("div"); divcontainer.style.position="relative"; ajax_in.parentNode.appendChild(divcontainer); ajax_div=document.createElement("div"); ajax_div.id=dom_id+'_ajaxdiv'; ajax_div.style.zIndex="100"; ajax_div.style.position="absolute"; ajax_div.style.width="100%"; ajax_div.style.left="0"; ajax_div.style.top="0"; ajax_div.style.padding="0"; ajax_div.style.margin="0"; ajax_div.style.overflow="hidden"; ajax_div.style.visibility="visible"; divcontainer.appendChild(ajax_div); } if(ajax_in.value.length >= 1) { if((ajax_in.value != lookupLastVal) && (!lookupRequest)) { lookupLastVal=ajax_in.value; lookupRequest=get_request(); lookupRequest.onreadystatechange = lookup_receive; lookupRequest.open("GET", "/ajax_handler.php?task="+lookupTask+"&dom_id="+dom_id+"&value="+encodeURIComponent(lookupLastVal)+"&offset="+offs, true); lookupRequest.send(null); } } else { lookup_hide_now(); } } } // Antwort fuer Lookup- AJAX Request entgegennehmen function lookup_receive() { if(typeof(lookupRequest)!="undefined") if(lookupRequest.readyState == 4) { if(lookupRequest.status == 200) { var root=lookupRequest.responseXML; var htmlcontents; var lookup_elem; if (lookup_elem = root.getElementsByTagName("lookup")[0]) { var dom_id=lookup_elem.getAttribute("dom_id"); var offs=lookup_elem.getAttribute("offset"); var content=root.getElementsByTagName('div')[0]; var opts=root.getElementsByTagName('option'); var cnt; if(opts.length) { cnt=opts.length } else { cnt=0; } if(cnt > 0) { lookup_show(); var selc, xt, curs, newopt; if(selc=document.getElementById(dom_id+'_select')) { curs=0; if(offs == 0) { selc.innerHTML=""; } while(curs < cnt) { if(opts[curs]) { newopt = document.createElement("option"); newopt.id = opts[curs].getAttribute("id"); newopt.value = opts[curs].getAttribute("value"); newopt.innerHTML = opts[curs].firstChild.data; selc.appendChild(newopt); if (curs == 0) { selc.value = newopt.value; } } curs++; } if(offs > 0) { lookup_onchange(); } } } else { lookup_hide_now(); } } else { lookupRequest = false; debug_print('lookup_receive(): invalid ajax response'); } ajax_lookup_response_interval = 200; } lookupRequest=false; } } // Lookup-Selectbox ggf. erzeugen function lookup_show() { var dom_id=lookupDomId; if(lookupVisible != true) { var ajax_in=document.getElementById(dom_id); var ajax_div=document.getElementById(dom_id+'_ajaxdiv'); ajax_div.style.top=ajax_in.style.top; ajax_div.style.visibility='visible'; ajax_div.style.overflow='visible'; var ajax_sel; if(!(ajax_sel=document.getElementById(dom_id+'_select'))) { ajax_sel = document.createElement("select"); ajax_div.appendChild(ajax_sel); ajax_sel.id=dom_id+'_select'; add_event_listener(ajax_sel, 'change', lookup_onchange); add_event_listener(ajax_sel, 'click', lookup_onchange); add_event_listener(ajax_sel, 'keyup', lookup_onkey); add_event_listener(ajax_sel, 'blur', lookup_hide_now); add_event_listener(ajax_sel, 'dblclick', lookup_accept); ajax_sel.size=6; ajax_sel.style.margin="0"; ajax_sel.style.width="100%"; ajax_sel.style.height="100pt"; } ajax_in.focus(); lookupVisible=true; } return false; } // Wert aus Lookup-Box uebertragen, oder Listenerweiterung ausloesen function lookup_onchange(e) { var selc=document.getElementById(lookupDomId+'_select'); var ajax_in=document.getElementById(lookupDomId); var chld; var offset; if(selc.value.substr(0,8)=="_extend_") { ajax_in.value=lookupLastVal; lookupLastVal=""; offset = selc.value.substr(8); if (chld = document.getElementById(lookupDomId+'_extender')) { selc.removeChild(chld); } ajax_lookup_now(offset); } else { ajax_in.value=selc.value; if(ajax_in.onchange) ajax_in.onchange(); } return true; } // Tastendruck im Lookup entgegennehmen function lookup_onkey(e) { var key_num=get_keycode(e); if(key_num==13) lookup_accept(); } function lookup_accept() { debug_print('accept'); document.getElementById(lookupDomId).focus(); lookup_hide_now(); ajax_destroy(lookupDomId); } // Lookup nach 100ms ausblenden function lookup_hide() { intervalID=setTimeout('lookup_hide_now();',100); } // Lookup sofort ausblenden function lookup_hide_now() { if(lookupVisible) { var ac; if(ac=document.getElementById(lookupDomId+'_ajaxdiv')) { ac.style.overflow="hidden"; ac.style.visibility='hidden'; lookupVisible=false; } } } function get_errorbubble() { errorbubble = document.getElementById('errorbubble'); if (!errorbubble) { errorbubble = document.createElement('div'); errorbubble.id = 'errorbubble'; errorbubble.setAttribute('name', 'none'); errorbubble.onmousemove = errorbubble_hide; document.getElementsByTagName('body')[0].appendChild(errorbubble); } return errorbubble; } /* * Set and position error bubble */ function forms_errorbubble_position(dom_id, hasError) { var errorbubble; var errorbiframe; var fldnode; var useIeHack = false; var currentErrorBubble; // Detect IE6 if(typeof(navigator.appVersion) != 'undefined') { useIeHack = (navigator.appVersion.indexOf('MSIE 6') >= 0); } // Get or create errorbubble errorbubble = get_errorbubble(); if (errorbubble) { currentErrorBubble = errorbubble.getAttribute('name'); if(fldnode = document.getElementById(dom_id)) { // Parent node var prnt = fldnode.parentNode; if(hasError) { currentErrorbubble = dom_id; prnt.setAttribute('class', 'favalError'); prnt.setAttribute('className', 'favalError'); if(currentErrorBubble == "" || currentErrorBubble == "none") { // Allocate error bubble in page body var body = document.getElementsByTagName('body')[0]; body.insertBefore(errorbubble, body.firstChild); // Find field position var fldPos = find_object_position(fldnode); // Move bubble to field errorbubble.style.top = (fldPos[1] - 81) + 'px'; errorbubble.style.left = (fldPos[0] - 10) + 'px'; errorbubble.style.zIndex = '101'; // IE 6 Hack: no element can be shown in front of select boxes // except iframes. So we overlay the error bubble with an invisible // iframe, which will block out any underlying select boxes if(useIeHack) { if(!(errorbiframe = document.getElementById('errorbiframe'))) { errorbiframe = document.createElement('iframe'); errorbiframe.id = 'errorbiframe'; errorbiframe.style.position = 'absolute'; errorbiframe.style.display = 'none'; errorbiframe.setAttribute('frameBorder', 0); body.insertBefore(errorbiframe, errorbubble); } // copy style for (var i in errorbubble.style) { try { errorbiframe.style[i] = errorbubble.style[i]; } catch (e) {}} } // Show the bubble errorbubble.style.display = 'block'; errorbubble.setAttribute('name', dom_id); if(useIeHack) { errorbiframe.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'; errorbiframe.style.display = 'block'; errorbiframe.style.height = '60px'; } } setTimeout('errorbubble_avoid_view_blocking("'+formFocus+'")', 100); } else { prnt.setAttribute('class', ''); prnt.setAttribute('className', ''); if(currentErrorBubble == dom_id) { errorbubble_hide(); } } } } } /** * Detect if current focussed element lies covered behind the error bubble. * If so, hide error bubble. */ function errorbubble_avoid_view_blocking(favalId) { var errorbubble, errorpos; var currentelem, currentpos; var maxtop; errorbubble = get_errorbubble(); if(errorbubble) { if (currentelem = document.getElementById(favalId)) { currentpos = find_object_position(currentelem); errorpos = find_object_position(errorbubble); maxtop = errorpos[1]; maxtop = maxtop + 81; if (currentpos[1] < maxtop) { errorbubble_hide(); } } } } /** * Remember focussed element */ function forms_faval_focus(dom_id) { formFocus = dom_id; } /* * Hide the error bubble */ function errorbubble_hide() { var errorbubble, errorbiframe; errorbubble = get_errorbubble(); if (errorbubble) { errorbubble.setAttribute('name', ''); errorbubble.style.display = 'none'; if(errorbiframe = document.getElementById('errorbiframe')) { errorbiframe.style.display = 'none'; } } } /* * Do forms class validation call */ function forms_faval(favalUrl, favalId, favalFtype, favalVtype, favalMand) { var favalField, errorbubble; errorbubble = get_errorbubble(); if((favalField = document.getElementById(favalId)) && errorbubble) { var currentErrorBubble = errorbubble.getAttribute('name'); if(currentErrorBubble == favalId) { errorbubble_hide(); } if (favalUrl.indexOf('?') >= 0) { favalUrl += '&'; } else { favalUrl += '?'; } setTimeout('ajax_call_async("'+favalUrl+'faval='+favalId+'&ftype='+favalFtype+'&vtype='+favalVtype+'&mand='+favalMand+'&value='+encodeURIComponent(favalField.value)+'")', 15); } } function find_object_position(obj) { var curleft = curtop = 0; if (obj.offsetParent) { do { curleft += obj.offsetLeft; curtop += obj.offsetTop; } while (obj = obj.offsetParent); } return [curleft,curtop]; } /** * Cross browser add-event-listener functionality * * Example: * * add_event_listener(window, "load", function() { lb_init(); }); * add_event_listener(window, "resize", function() { alert("foo!"); }); */ function add_event_listener(elem, event_name, function_reference) { if (elem.addEventListener) { // W3C DOM elem.addEventListener(event_name, function_reference, false); return true; } else if (elem.attachEvent) { var r = elem.attachEvent("on" + event_name, function_reference); return r; } else { elem['on' + event_name] = function_reference; return true; } } // AJAX-Div leeren function ajax_destroy(dom_id) { empty_node(dom_id+'_ajaxdiv'); } // Timer anhalten function ajax_keep() { clearInterval(intervalID); } // AJAX Loader iframe erstellen / wiederfinden function get_portal(frameid) { var iframe_obj; if(!(iframe_obj=document.getElementById(frameid))) { iframe_obj = document.createElement("iframe"); iframe_obj.id=frameid; iframe_obj.name=frameid; iframe_obj.style.position = 'absolute'; iframe_obj.style.top = '-10px'; iframe_obj.width = '1px'; iframe_obj.height = '1px'; iframe_obj.frameborder = '0'; document.body.appendChild(iframe_obj) } return(iframe_obj); } /** * Fade out an element after duration x */ function blink_message(dom_id, duration) { if (typeof(duration) != "number") { duration = 1500; } setTimeout("elem_fadeout(\"" + dom_id + "\")", duration); } /** * Create a tooltip like bubble */ function create_blink_message(message_html, append_to_element, classname, duration) { if (typeof(classname) != "string") { classname = "ok"; } var elem = get_or_create_element('cmsblinkmessage', 'div'); elem.className = 'cmstooltip '+classname; elem.style.position = 'absolute'; elem.style.zIndex = 200; elem.style.opacity = 1; elem.style.top = '5px'; elem.style.display = 'block'; elem.innerHTML = message_html; /* Find element to attach the message bubble to */ var attach_elem; if (typeof(append_to_element) == 'string') { attach_elem = document.getElementById(append_to_element); } /* Fallback to body */ if (typeof(attach_elem) != 'object') { alert('neh'); attach_elem = document.body; } attach_elem.appendChild(elem); blink_message('cmsblinkmessage', duration); } /** * Get an element by ID, if it doesn't exist, create one of the given type */ function get_or_create_element(dom_id, element_type) { var elem = document.getElementById(dom_id); if (!elem) { elem = document.createElement(element_type); elem.id = dom_id; } return elem; } /** * Fade out an element */ var elem_fadeout_timer; function elem_fadeout(dom_id) { clearInterval(elem_fadeout_timer); var fadeOut = document.getElementById(dom_id); var opac = fadeOut.style.opacity; if (opac == "") { opac = fadeOut.style.opacity = 1; } if (opac > 0.02) { fadeOut.style.opacity -= 0.02; elem_fadeout_timer = setTimeout("elem_fadeout('" + dom_id + "');", 10); } else { fadeOut.style.display = "none"; fadeOut.style.opacity = 1; } } function elem_fade_cancel() { clearInterval(elem_fadeout_timer); } /** * CMS Tab Navigation Functions */ /** * Open a tab */ function tab_open(tab_nr, targetUrl, reloadTab, instanceId) { var tabs; var bord, wght, topbord, topimg; var instId = instanceId + '_'; var tab_id = instId + 'body_' + tab_nr; var div_id = instId + 'body_div_' + tab_nr; /* Store current tab nr */ document.getElementById(instId + 'current').value = tab_nr; targetUrl = url_amp_remove(targetUrl); tabs = document.getElementsByTagName("td"); /* Highlight the tab */ var check = instId + 'body'; var checkStrLen = check.length; for(var i=0; i < tabs.length; i++) { if(tabs[i].id.substr(0, checkStrLen) == check) { if(tabs[i].id == tab_id) { tabs[i].className = 'cmstab_selected'; } else { tabs[i].className = 'cmstab_unselected'; } } } /* Select the tab page */ var divs=document.getElementById(instId + "tabcontainer").getElementsByTagName("div"); check = instId + 'body_div'; checkStrLen = check.length; for(var i=0; i < divs.length; i++) { if(divs[i].id.substr(0, checkStrLen) == check) { if(divs[i].id == div_id) { divs[i].style.visibility="visible"; divs[i].style.display="block"; } else { divs[i].style.visibility="hidden"; divs[i].style.display="none"; } } } /* Open desired location in tab */ tab_load(tab_nr, targetUrl, reloadTab, instanceId); } /** * Refresh current open tab location */ function tab_refresh(instanceId) { var tab_nr = document.getElementById(instanceId + '_current').value; var target_url = document.getElementById(instanceId + '_body_' + tab_nr + '_url').value; if (target_url) { tab_load(tab_nr, target_url, true, instanceId); } } /** * Change Tab iframe location without opening it */ function tab_load(tab_nr, targetUrl, reloadTab, instanceId) { if((typeof(targetUrl) != "undefined") && targetUrl != '') { var ifrId = instanceId + "_tab_iframe_" + tab_nr; var ifr=document.getElementById(ifrId); var currentUrl = ifr.src; currentUrl = currentUrl.substring(currentUrl.length - targetUrl.length); if((currentUrl != targetUrl) || reloadTab) { ifr.src = '/gfx/ajaxclock.gif'; setTimeout('tab_open_switch_iframe("'+ifrId+'", "'+targetUrl+'");',15); } } } /* * Delayed opening of an iframe tab (for hourglass display) */ function tab_open_switch_iframe(ifrId, targetUrl) { document.getElementById(ifrId).src = targetUrl; } // SELECTPLUS function selectpluscomplete(fieldvalue, feld, keycode) { fieldvalue=fieldvalue.toLowerCase(); mom=-1; for (i = 0; i < feld.length; i++) if (feld.options[i].selected) { mom = i; break; } if (keycode==38) { if ((!mom)||(mom<=0)) return; else feld.options[mom-1].selected = true; return; } if (keycode==40) { if ((!mom)||(mom<=0)) return; if (mom>=feld.length-1) return; else feld.options[mom+1].selected = true; return; } neu = 0; if (!fieldvalue || fieldvalue=="") { feld.options[0].selected = true; return; } for (i = 0; i < feld.length; i++) { nohit=1; current = feld.options[i].text.toLowerCase(); for (j = 0; j=0) { feld.options[mom].selected = false; } feld.options[neu].selected = true; } // f_SELECTMOVER function move_highlighted_select_options(sourceObjId, targetObjId) { var childOption; var IEPreserveWidth; var sourceObj = document.getElementById(sourceObjId); var targetObj = document.getElementById(targetObjId); IEPreserveWidth = sourceObj.offsetWidth; for(var i = 0; i < sourceObj.options.length; ++i) { if (sourceObj.options[i].selected) { childOption = sourceObj.removeChild(sourceObj.options[i]); childOption.ondblclick = function(){ move_highlighted_select_options(targetObjId, sourceObjId); } targetObj.appendChild(childOption); i--; } } sourceObj.style.width = IEPreserveWidth + 'px'; } function smoAdd(fieldId) { move_highlighted_select_options(fieldId+'_source', fieldId+'_list'); smaUpdateValues(fieldId); } function smoRemove(fieldId) { move_highlighted_select_options(fieldId+'_list', fieldId+'_source'); smaUpdateValues(fieldId); } // f_SELECTMULTI function smaRemove( fieldId ) { // remove text item if ($(fieldId+'_search')) for(i=0;i<$(fieldId+'_list').options.length;++i) { if ($(fieldId+'_list').options[i].text == $(fieldId+'_search').value) { $(fieldId+'_list').removeChild($(fieldId+'_list').options[i]); } } // remove selected items for(i=0;i<$(fieldId+'_list').options.length;++i) { if (!$(fieldId+'_list').options[i].selected) continue; $(fieldId+'_list').removeChild($(fieldId+'_list').options[i]); } smaUpdateValues( fieldId ); } function smaUpdateValues( fieldId ) { if (!$(fieldId+'_values')) return; if (!$(fieldId+'_list')) return; $(fieldId+'_values').value=''; var len = $(fieldId+'_list').options.length; for(i=0;i 0 ? '|' : '') + $(fieldId+'_list').options[i].value; } } function smaAdd( fieldId, url, error ) { var searchStr = $(fieldId+'_search').value; if (!searchStr || searchStr.length < 1 ) return; $(fieldId+'_indicator').style.display = 'inline'; new Ajax.Request(url, { method: 'post', parameters: 'smai=' + encodeURIComponent(searchStr), onComplete:function(smaRequest) { if(smaRequest.responseText && smaRequest.responseText!='undefined') { var responseArr = smaRequest.responseText.split('|'); // Check if value does not exist for (i = 0; i < $(fieldId+'_list').options.length; i++) { if ($(fieldId+'_list').options[i].value == responseArr[0]) { $(fieldId+'_indicator').style.display = 'none'; return; } } opt = new Option(responseArr[1], responseArr[0]); try { $(fieldId+'_list').options[$(fieldId+'_list').options.length]=opt; $(fieldId+'_search').value=''; smaUpdateValues( fieldId ); } catch(ex) { return; } } else { alert(error); } $(fieldId+'_indicator').style.display = 'none'; } } ); } function smaKey(e, add, fieldId, url, error) { var keynum; keynum = (e.keyCode) ? e.keyCode : e.which; if (keynum==13 && add && $(fieldId+'_search').value) { smaAdd(fieldId,url,error); return false; } return true; } // Init EditArea, needs to have the editArea lib loaded function init_editarea(dom_id, the_syntax) { editAreaLoader.init({ id: dom_id, start_highlight: true, allow_resize: "both", allow_toggle: false, replace_tab_by_spaces: 4, language: "en", font_size: "9", syntax: the_syntax }); } // datumshelfer // Only allows certain keys to be used in the date field function DateDigitsOnly(e) { var KeyCode = (e.keyCode) ? e.keyCode : e.which; return ((KeyCode == 8) // backspace || (KeyCode == 9) // tab || (KeyCode == 37) // left arrow || (KeyCode == 39) // right arrow || (KeyCode == 46) // delete || (KeyCode == 59) // : || (KeyCode == 190) // . || (KeyCode == 191) // / || (KeyCode == 13) // Enter || ((KeyCode > 47) && (KeyCode < 58)) // 0 - 9 Keyboard || ((KeyCode > 95) && (KeyCode < 106)) // 0 - 9 NUM Pad ); } // Adds an option to a select box specified by selectId // can e.g. be called from within xajax with $xajaxresponse->AddScript() so that // you don't need to refer to element ids in xajax responses directly function addOption(selectId, txt, val) { var objOption = new Option(txt, val); document.getElementById(selectId).options.add(objOption); } // deletes all options of a given selectbox element function clearAllOptions(selectId) { var objSelectbox = document.getElementById(selectId); for(var i=(objSelectbox.options.length - 1);i>=0;i--) { objSelectbox.options[i] = null; } } // Returns the version of Internet Explorer or a -1 // (indicating the use of another browser). function get_ie_version() { var rv = -1; // Return value assumes failure. if (navigator.appName == 'Microsoft Internet Explorer') { var ua = navigator.userAgent; var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) rv = parseFloat( RegExp.$1 ); } return rv; } function cmstab_auto_size(instanceid) { var tabelem = document.getElementById(instanceid + '_table'); if (tabelem) { var prnt = tabelem.parentNode; var h = prnt.clientHeight; if (typeof(h) != 'undefined' && h) { if (navigator.appVersion.indexOf("MSIE") != -1) { // IE Hack h = h - 40; } if (tabelem.height) { tabelem.height = h; } tabelem.style.height = h + 'px'; } } } var watch_timer; var last_time = 0; var last_action_domain_key = ''; var last_action_rnd_ignore_key = 0; function watch_session_action(action_domain_key, unixtime, rnd_ignore_key) { clearInterval(watch_timer); if (last_action_domain_key == '' && typeof(action_domain_key) != 'undefined') { last_action_domain_key = action_domain_key; } if (last_time == 0 && typeof(unixtime) != 'undefined') { last_time = unixtime; } if (last_action_rnd_ignore_key == 0 && typeof(rnd_ignore_key) != 'undefined') { last_action_rnd_ignore_key = rnd_ignore_key; } //debug_print('watch_'+last_action_domain_key+','+last_time); var url = '/ajax_handler.php?task=sessionaction&value='+last_action_domain_key+'&time='+last_time+'&rnd_ignore_key='+last_action_rnd_ignore_key; async_acall = exec_request(url, true); async_acall.onreadystatechange = watch_session_action_receive; watch_timer = setTimeout('watch_session_action("'+last_action_domain_key+'")', 5000); } function watch_session_action_receive() { if(typeof(async_acall) != "undefined") if(async_acall.readyState == 4) { if(async_acall.status == 200) { if(root = JSON.parse(async_acall.responseText)) { if(typeof(root.javascript) != "undefined") { debug_print(root.javascript); eval(root.javascript); } if(typeof(root.lasttime) != "undefined") { last_time = root.lasttime; clearInterval(watch_timer); watch_timer = setTimeout('watch_session_action("'+root.action_domain_key+'")', 5000); } } } } } /** * LoginBox label overlay Init */ function login_box_init_overlabels() { if (!document.getElementById) return; var labels, id, field; // Set focus and blur handlers to hide and show // LABELs with 'overlabel' class names. labels = document.getElementsByTagName('label'); for (var i = 0; i < labels.length; i++) { if (labels[i].className == 'overlabel') { // Skip labels that do not have a named association // with another field. id = labels[i].htmlFor || labels[i].getAttribute('for'); if (!id || !(field = document.getElementById(id))) { continue; } // Change the applied class to hover the label // over the form field. labels[i].className = 'overlabel-apply'; // Hide any fields having an initial value. if (field.value !== '') { login_box_hide_label(field.getAttribute('id'), true); } // Set handlers to show and hide labels. field.onfocus = function () { login_box_hide_label(this.getAttribute('id'), true); }; field.onblur = function () { if (this.value === '') { login_box_hide_label(this.getAttribute('id'), false); } }; // Handle clicks to LABEL elements (for Safari). labels[i].onclick = function () { var id, field; id = this.getAttribute('for'); if (id && (field = document.getElementById(id))) { field.focus(); } }; } } } function login_box_hide_label(field_id, hide) { var field_for; var labels = document.getElementsByTagName('label'); for (var i = 0; i < labels.length; i++) { field_for = labels[i].htmlFor || labels[i].getAttribute('for'); if (field_for == field_id) { labels[i].style.display = (hide) ? 'none' : 'block'; return true; } } } /** * Display a tooltip */ function tooltip_show(event, tooltiphtml) { var mousepos = get_mouse_position(event); var tooltip; if (!(tooltip = document.getElementById('cmstooltip'))) { /* Create tooltip */ tooltip = document.createElement('div'); tooltip.id = 'cmstooltip'; tooltip.className = 'cmstooltip'; tooltip.style.position = 'absolute'; tooltip.style.zIndex = 200; document.body.appendChild(tooltip) } if (tooltip.innerHTML == '') { tooltip.innerHTML = tooltiphtml; tooltip.style.display = 'block'; } tooltip.style.left = (mousepos['x'] + 10)+'px'; tooltip.style.top = (mousepos['y'] + 10)+'px'; } /** * Hide the tooltip */ function tooltip_hide() { var tooltip; if (tooltip = document.getElementById('cmstooltip')) { tooltip.innerHTML = ''; tooltip.style.display = 'none'; } } function show_social_networking_list(soc_instance_id) { var soc_nw_lst = document.getElementById(soc_instance_id); soc_nw_lst.style.visibility = 'visible'; } function hide_social_networking_list(soc_instance_id) { var soc_nw_lst = document.getElementById(soc_instance_id); soc_nw_lst.style.visibility = 'hidden'; } /** * Get viewport height */ function get_viewport_height() { var viewportheight; if (typeof window.innerWidth != "undefined") { viewportheight = window.innerHeight; // modern } else if (typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0) { viewportheight = document.documentElement.clientHeight; // IE6 compliant } else { viewportheight = document.getElementsByTagName("body")[0].clientHeight // Older / Quirks } return viewportheight; } /** * Resize iframe to match contents * * Example usage: * * */ function auto_resize_iframe(frameId) { try { frame = document.getElementById(frameId); innerDoc = (frame.contentDocument) ? frame.contentDocument : frame.contentWindow.document; if (innerDoc == null){ // Google Chrome frame.height = document.all[frameId].clientHeight + document.all[frameId].offsetHeight + document.all[frameId].offsetTop; } else { if (frame.style) { frame.style.height = (innerDoc.body.scrollHeight + 18) + 'px'; } else { frame.height = (innerDoc.body.scrollHeight + 18); } } } catch(err) { debug_print('auto_resize_iframe: ' + err.message); } } /** * Send debug message to console */ function debug_print(str) { if(typeof(console) != "undefined" && str) { console.info(str); } }