/** * CMS main JavaScript library, needed by the CMSForms php class * * @author Markus Klein * @version $Id: CMSServer forms.js.php v1.00.14 (Uploaded 2008-05-08 14:22:56 by admin_mk, installed here 2008-05-13 10:07:14 by admin_mk) $ * @package cms * @subpackage javascript */ // GLOBALE VARS var intervalID, execInterval; // 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 // ALLGEMEINE FUNKTIONEN 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)); } 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 disarm(s, disarmLevel) { 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) { s = req.responseText; } } else { debug_print("disarm error: "+req.status); } return s; } // Cross-Browser Erfassen des Tastendrucks function get_keycode(ev) { var key_num=0; if(!ev) { ev = window.event; } if(ev.which) { key_num = ev.which; } else if (ev.keyCode) { key_num = ev.keyCode; } return key_num; } // Dom-Objekt leeren/loeschen function empty_node(dom_id) { document.getElementById(dom_id).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(); } // Oeffnen einer Hilfe-Box function help_page(pageid) { popwin("/"+pageid+".html?print=1", 640, 480, "cmshelp", "yes"); } // Duplizieren eines Eingabebereichs mit fortlaufend nummeriertem Array function auto_expand(thisnode) { var src_range; var trg_range; if((thisnode.value != "")||(thisnode.tagName=="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 s; for(var i = 0; i < nodeobj.childNodes.length; i++) { if(nodeobj.childNodes[i]) { 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].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.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); var nw=750; var nh=700; var imgWin; 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+""); if(imgArch) { 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; } ///// "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; } } // Synchroner Aufruf einer URI function exec_request(url, async, params) { var meth='POST'; if(!async) { async=false; } if(!params) { 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) { document.body.style.cursor = (stats ? "wait" : "auto") + " ! important"; } // 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); } } // Auslesen des HTML Blocks aus der Response, und Uebertragung in Block-Element function ajax_parent_push(req) { var root; if(req.responseXML) { if(root = req.responseXML.getElementsByTagName("body")[0]) { var dom_id=ajax_return_value(root, "domid"); var html=ajax_content_reassemble(root); document.getElementById(dom_id).innerHTML=html; } else { debug_print("No XML body!"); } } else { debug_print("No XML response!"); } } // 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=''; while(chunk=root.getElementsByTagName("div")[cnt]) { if(chunk.firstChild) { ret = ret + chunk.firstChild.data; } cnt++; } 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=""; while(elems[c]) { if(elems[c].name && elems[c].value) { params+=elems[c].name +"=" + encodeURIComponent(elems[c].value) + "&"; } c++; } return params; } // Aufruf einer Lookup-Box 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 document.getElementById(dom_id+'_select').focus(); } } else if(key_num==9) // Tab { lookup_hide_now(); ajax_destroy(dom_id); } else if(lookupRequest == false) // Nur wenn vorheriger Lookup beendet { clearInterval(intervalID); intervalID=setTimeout('ajax_lookup_now();',300); } } // Lookup-Rahmenbedingungen erzeugen, AJAX Request absetzen function ajax_lookup_now(offs) { var dom_id=lookupDomId; if(!offs) {offs=0;} clearInterval(intervalID); var 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 lookie=root.getElementsByTagName("lookup")[0]; var dom_id=lookie.getAttribute("dom_id"); var offs=lookie.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=""; } else { xt=selc.lastChild; xt.id = opts[curs].getAttribute("id"); xt.value = opts[curs].getAttribute("value"); xt.innerHTML = opts[curs].firstChild.data; curs++; } 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); } curs++; } if(offs > 0) { lookup_onchange(); } } } else { lookup_hide_now(); } } 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'; if(document.attachEvent) { ajax_sel.attachEvent ("onchange", lookup_onchange); ajax_sel.attachEvent ("onkeyup", lookup_onkey); ajax_sel.attachEvent ("onblur", lookup_hide_now); } else { ajax_sel.addEventListener ("change", lookup_onchange, false); ajax_sel.addEventListener ("keyup", lookup_onkey, false); ajax_sel.addEventListener ("blur", lookup_hide_now, false); } 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); if(selc.value.substr(0,8)=="_extend_") { ajax_in.value=lookupLastVal; lookupLastVal=""; ajax_lookup_now(selc.value.substr(8)); } 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) { 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; } } } // 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); } ///// Tab-Navigation /////////////////////////////////////////////////////////////////// function tab_open(tab_nr, targ, reloadTab) { var tabs; var bord, wght, topbord, topimg; var tab_id="cmstab_"+tab_nr; var div_id="cmstab_div_"+tab_nr; tabs=document.getElementsByTagName("td"); /* Highlight the tab */ for(var i=0; i < tabs.length; i++) { if(tabs[i].id.substr(0,6)=="cmstab") { if(tabs[i].id == tab_id) { bord="none"; wght="bold"; topbord="2px solid orange"; topimg="2px"; } else { bord="solid"; wght="normal"; topbord="0 none"; topimg="0"; } tabs[i].style.borderBottomStyle=bord; document.getElementById(tabs[i].id+"_label").style.fontWeight=wght; document.getElementById(tabs[i].id+"_label").style.borderTop=topbord; document.getElementById(tabs[i].id+"_img").style.top=topimg; } } /* Select the tab page */ var divs=document.getElementById("tabcontainer").getElementsByTagName("div"); for(var i=0; i < divs.length; i++) { if(divs[i].id.substr(0,10)=="cmstab_div") { 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 */ if(targ != '') { var ifr=document.getElementById("tab_iframe_"+tab_nr); if((ifr.src == 'about:blank') || reloadTab) { ifr.src = 'about:blank'; ifr.src = targ; } } } // Firebug Debugging function debug_print(str) { if(typeof(console) != "undefined") { console.debug(str); } } // 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_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=' + 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 ); }