/************************************************************************************************************************** /* IMEDFramework.tpl.js: */ { // thomas, 12.10.2012: Set the base path of CKEditor. var CKEDITOR_BASEPATH = "./include/lib/js/ckeditor/"; // thomas, 27.11.2012: Message types. var ALERT_MASK = 3; var ALERT_DEFAULT = 0; var ALERT_WARNING = 1; var ALERT_ERROR = 2; var ALERT_OK = 3; var ALERT_WIDTH_DEFAULT = 450; var ALERT_WIDTH_COMMENT = 700; var PUSHMSG_MASK = 60; var PUSHMSG_IMPORTANT = 4; var PUSHMSG_SAVE = 8; var PUSHMSG_LOAD = 16; var PUSHMSG_ALL = 32; var FRAMEWORK_ZINDEX_DIALOG = 6; var FRAMEWORK_ZINDEX_DRAGGABLE = 1; var FRAMEWORK_ZINDEX_MODULE = 2; var FRAMEWORK_ZINDEX_MODULEDIV = 3; var frameworkZIndexVal = false; // thomas, 14.11.2013: List of browsers. var BROWSER_IE7 = 1; var BROWSER_IE8 = 2; var iFrameworkLastOffsetHeight = 0; var iFrameworkLastOffsetWidth = 0; var frameworkUpdateModule_arr = []; var frameworkUpdateModuleReload_arr = []; var frameworkXAjaxError_arr = []; var frameworkXAjaxDebug_arr = []; var frameworkUpdateModuleTimer = null; var frameworkHideWaitingScreenTimer = null; var frameworkGridRowClicked = false; var frameworkPromptId = 0; var iModuleErrorCount = 0; // thomas, 24.07.2013: Message box of the framework. // This is an alternative to the default frameworkMsgAlert box and closes after 3 seconds automatically. var frameworkMsg = false; // Framework message counter. var frameworkMsgCnt = 0; // thomas, 17.10.2012: List of new modules to sort. var oFrameworkNewModules_arr = []; // thomas, 03.06.2013: Each combobox must have an id. var frameworkComboBoxID = 0; var frameworkBodyBind = false; var frameworkEnableDefaultCtx = false; var frameworkTimeoutEnd = false; var frameworkTimeout = null; var frameworkTimeoutKill = null; var frameworkTimeoutVersionKeyTmr = false; var m_frameworkKeyEventHandler_arr = []; var m_frameworkPushModule_arr = []; var m_frameworkPushIntervalHandleId = null; var m_frameworkPushLastTimestamp_arr = []; // Global context menu. var m_frameworkGlobalCtxMenu = false; // thomas, 24.06.2016: List of internal field errors. var m_frameworkFieldErrors_arr = []; // thomas, 09.05.2017: Position of the mouse. var m_frameworkMouseMoveEvent = null; /** * Object to collect the structure of modules. * @created thomas, 17.10.2012 */ function frameworkModule() { this.m_lModuleID = 0; this.m_sModuleType = ''; this.m_oChildModules_arr = []; this.m_lErrCnt = 0; this.m_lResizeTmr = false; } // Structures list of modules. var oFrameworkRootModule = new frameworkModule(); // List of dialogs to handle at module closing. */ var frameworkDialogs = []; var P_INFO = 1; var P_WARNING = 2; var P_ERROR = 3; var P_DEBUG = 4; var P_SECURITY = 5; /** * Handles a scanned QR code. * @param sQRCode * @created thomas, 15.02.2016 */ function frameworkQRCodeScannerDone( sQRCode ) { displayWaitingScreen( 0 ); window.setTimeout( function() { xajax_XCallback_QRCodeScannerDone( sQRCode ); displayWaitingScreen( 100 ); }, 0 ); } /** * Cals the central asynchronous XAJAX function. * @param lModuleID * @param sContext * @param sParams_arr * @created thomas, 16.08.2017 */ function frameworkAsyncCallModuleXajax( lModuleID, sContext, sParams_arr ) { frameworkAsyncCallModuleFunction( lModuleID, "XCallback_FrameworkXajax", [ lModuleID, sContext, sParams_arr ] ); } /** * Ruft die zentralisierte xajax-Funktion auf * @param lModuleId * @param sContext * @param sParams_arr * @returns {*} */ function frameworkCallModuleXajax(lModuleId, sContext, sParams_arr) { frameworkResetFieldErrors(); if (sParams_arr == undefined){ sParams_arr = []; } //NK, 26.01.2017: //var oParams_arr = JSON.stringify(sParams_arr); return xajax_XCallback_FrameworkXajax(lModuleId, sContext, sParams_arr); } /** * P * @description Protocol function for javascript messages. * @created thomas, 11.10.2012 */ function P( sLog, iType, sModuleType, sFunction ) { if( !global_DEBUG ) return; // thomas, 02.08.2013: Do not show empty messages. if( sLog == "" ) { return true; } if( iType == undefined ) { iType = P_INFO; } var sDebug = (new Date()).toLocaleString() + ' '; if( sModuleType != undefined ) { sDebug += sModuleType; } if( sFunction != undefined ) { sDebug += ' (' + sFunction + '): '; } if( iType == P_INFO ) { //Do nothing. * } else if( iType == P_WARNING ) { sLog = 'WARNING! ' + sDebug + sLog; } else if( iType == P_ERROR ) { sLog = 'ERROR! ' + sDebug + sLog; } else if( iType == P_DEBUG && '' == '1' ) { sLog = 'DEBUG! ' + sDebug + sLog; } else if( iType == P_SECURITY && '' == '1' ) { sLog = 'SECURITY WARNING! ' + sDebug + sLog; } else { // Invalid message type. return false; } // thomas TODO: Implement server log. */ if( typeof( console ) != "undefined" ) { if( console.log ) { console.log( sLog ); } } return true; } /** * PTmrStart * @description Starts a protocol timer. * @created thomas, 28.06.2013 */ function PTmrStart() { if( !global_DEBUG ) return; return ( new Date() ).getTime(); } /** * PTmrStop * @description Stops a protocol timer and creates a protocol entry. * @created thomas, 28.06.2013 */ function PTmrStop( sLog, lTmr, iType, sModuleType, sFunction ) { if( !global_DEBUG ) return; var lEnd = ( new Date() ).getTime(); var lDiff = ( lEnd - lTmr ) / 1000; P( "(Timer=" + lDiff + "s) " + sLog, iType, sModuleType, sFunction /*P_DEBUG*/ ); } /** * PArray * @description Protocols the content of an object. * @created thomas, 18.10.2012 */ function PObj( sLog, oObj, iType, sModuleType, sFunction ) { if( !global_DEBUG ) return; // Displays the message first. if( P( sLog, iType, sModuleType, sFunction /* P_DEBUG */ ) ) { // Displays the object. if( typeof( console ) != "undefined" ) { if( console.log ) { console.log( oObj ); } } } } //nw: New Framework JS Object function framework() { this.anim = new animation(); this.member = new member(); this.converter = new converter(); this.unmakeModal = function () { var obj = this.member.makeModal_lastObj; obj.appendTo( this.member.makeModal_lastParent ); obj.css( "top", this.member.makeModal_lastObjOffsetParent.top ); obj.css( "left", this.member.makeModal_lastObjOffsetParent.left ); obj.css( "z-index", "" ); $( "#maskContent" ).hide(); }; this.makeModal = function ( element ) { var obj = $( "#" + element ); var offset = obj.offset(); var height = obj.height(); var width = obj.width(); this.member.makeModal_lastObj = obj; this.member.makeModal_lastParent = obj.parent(); this.member.makeModal_lastObjOffsetParent = obj.position(); obj.appendTo( 'body' ); obj.width( width ); obj.height( height ); obj.offset( offset ); obj.css( "z-index", 2147483610 ); $( "#maskContent" ).show(); }; this.log = function ( msg, bAlert ) { if( bAlert ) { alert( "Frameworklog: " + msg ); } }; this.setDropdownOption = function ( element, val ) { for( var i = 0; i < element.options.length; i++ ) { if( element.options[ i ].value == val ) { element.options[ i ].selected = true; } else { element.options[ i ].selected = false; } } }; this.checkIfModuleIsActive = function ( moduleId ) { if( $( '#DIV_MODULE_' + moduleId ).length ) { return true; } else { return false; } }; } // Private Variable Holder function member() { var makeModal_lastParent; var makeModal_lastObj; var makeModal_lastObjOffsetParent; } // Converter Functions function converter() { this.base64encode = function ( str ) { var chr1, chr2, chr3, rez = '', arr = [], i = 0, j = 0, code; var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split( '' ); while( code = str.charCodeAt( j++ ) ) { if( code < 128 ) { arr[ arr.length ] = code; } else if( code < 2048 ) { arr[ arr.length ] = 192 | (code >> 6); arr[ arr.length ] = 128 | (code & 63); } else if( code < 65536 ) { arr[ arr.length ] = 224 | (code >> 12); arr[ arr.length ] = 128 | ((code >> 6) & 63); arr[ arr.length ] = 128 | (code & 63); } else { arr[ arr.length ] = 240 | (code >> 18); arr[ arr.length ] = 128 | ((code >> 12) & 63); arr[ arr.length ] = 128 | ((code >> 6) & 63); arr[ arr.length ] = 128 | (code & 63); } } while( i < arr.length ) { chr1 = arr[ i++ ]; chr2 = arr[ i++ ]; chr3 = arr[ i++ ]; rez += chars[ chr1 >> 2 ]; rez += chars[ ((chr1 & 3) << 4) | (chr2 >> 4) ]; rez += chars[ chr2 === undefined ? 64 : ((chr2 & 15) << 2) | (chr3 >> 6) ]; rez += chars[ chr3 === undefined ? 64 : chr3 & 63 ]; } return rez; }; this.base64decode = function ( s ) { var e = {}, i, v = [], r = '', w = String.fromCharCode; var n = [ [ 65, 91 ], [ 97, 123 ], [ 48, 58 ], [ 43, 44 ], [ 47, 48 ] ]; for( var z in n ) { for( i = n[ z ][ 0 ]; i < n[ z ][ 1 ]; i++ ) { v.push( w( i ) ); } } for( i = 0; i < 64; i++ ) { e[ v[ i ] ] = i; } for( i = 0; i < s.length; i += 72 ) { var b = 0, c, x, l = 0, o = s.substring( i, i + 72 ); for( x = 0; x < o.length; x++ ) { c = e[ o.charAt( x ) ]; b = (b << 6) + c; l += 6; while( l >= 8 ) { r += w( (b >>> (l -= 8)) % 256 ); } } } return r; }; } //Animation Class function animation() { this.setHoverEffect = function ( objOrId, effect ) { var wrapper, hoverClass; // validate objOrId if( typeof(objOrId) == "object" ) { wrapper = objOrId; } else if( typeof(objOrId) == "string" ) { wrapper = $( "#" + objOrId ); } else { return false; } // validate Effect if( effect == "" || typeof(effect) == "undefined" ) { hoverClass = "ui-state-active"; } wrapper.bind( 'mouseenter', function () { wrapper.addClass( hoverClass ); } ); wrapper.bind( 'mouseleave', function () { wrapper.removeClass( hoverClass ); } ); }; } /** * frameworkResizeEditor * @description Resized the text editor. * @created thomas, 26.08.2013 */ function frameworkResizeEditor( sID, lWidth, lHeight ) { var oIFrame = $( '#' + sID + '_ifr' ); var lTinyHeaderHeight = $( '#' + sID + '_parent' ).height() - oIFrame.height(); if( lTinyHeaderHeight < 0 ) { lTinyHeaderHeight = 0; } oIFrame .height( lHeight - lTinyHeaderHeight ) .width( lWidth ); } /** * frameworkConvertEditToEditor * @description Converts a textarea to tinyMCE HTML editor. * @created thomas, 11.07.2013 * @modified deb, thomas, 23.03.2017: Param sPlugins_arr added. */ function frameworkConvertEditToEditor( sID, sButtons1, sButtons2, sButtons3, sCss, sOnChange, sSetupCallback, sPlugins_arr ) { // Checks if the field is already converted into editor. var oElement = $( "#" + sID ); if( oElement.attr( "istiny" ) ) { return false; } try { tinymce.execCommand( "mceRemoveEditor", true, sID ); } catch( e ) { } if( sButtons1 == undefined ) sButtons1 = false; if( sButtons2 == undefined ) sButtons2 = false; if( sButtons3 == undefined ) sButtons3 = false; if( sCss == undefined ) sCss = false; if( sOnChange == undefined ) sOnChange = false; var sButtons = ""; if( !sButtons1 ) { sButtons += "bold,italic,underline,|,removeformat"; } else { sButtons += sButtons1; } if( sButtons2 ) { sButtons += ( sButtons == "" ? "" : ",|," ) + sButtons2; } if( sButtons3 ) { sButtons += ( sButtons == "" ? "" : ",|," ) + sButtons3; } if( !sCss ) sCss = "./framework/include/css/IMEDTinyMCE.css?time=" + ( new Date() ).getTime(); if( !sOnChange ) sOnChange = ""; var sLan = frameworkGetLanguage(); if( sLan == "sp" ) sLan = "es"; bReadonly = oElement.attr( "readonly" ) != undefined ? 1 : 0; if( sPlugins_arr == undefined ) { sPlugins_arr = []; } var oExternalPlugins = {}; oExternalPlugins[ "paste" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/paste/plugin.min.js"; $.each( sPlugins_arr, function( key, sPlugin ) { switch( sPlugin ) { case "fullscreen": oExternalPlugins[ "fullscreen" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/fullscreen/plugin.min.js"; break; case "link": oExternalPlugins[ "link" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/link/plugin.min.js"; break; case "searchreplace": oExternalPlugins[ "searchreplace" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/searchreplace/plugin.min.js"; break; case "table": oExternalPlugins[ "table" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/table/plugin.min.js"; break; case "codesample": oExternalPlugins[ "codesample" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/codesample/plugin.min.js"; break; case "code": oExternalPlugins[ "code" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/code/plugin.min.js"; break; case "colorpicker": oExternalPlugins[ "colorpicker" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/colorpicker/plugin.min.js"; break; case "insertdatetime": oExternalPlugins[ "insertdatetime" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/insertdatetime/plugin.min.js"; break; case "textcolor": oExternalPlugins[ "textcolor" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/textcolor/plugin.min.js"; break; case "textpattern": oExternalPlugins[ "textpattern" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/textpattern/plugin.min.js"; break; case "preview": oExternalPlugins[ "preview" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/preview/plugin.min.js"; break; case "print": oExternalPlugins[ "print" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/print/plugin.min.js"; break; case "wordcount": oExternalPlugins[ "wordcount" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/wordcount/plugin.min.js"; break; default: break; } }); var oSettings = { baseUrl: "./include/lib/js/tinymce4/", theme_url: "./include/lib/js/tinymce4/js/tinymce/themes/modern/theme.min.js", skin_url: "./include/lib/js/tinymce4/js/tinymce/skins/lightgray", language_url: "./include/lib/js/tinymce4/js/tinymce/langs/" + sLan + ".js", menu: false, external_plugins: oExternalPlugins, menubar: false, language: sLan, force_br_newlines: true, force_p_newlines: false, forced_root_block: false, // Needed for 3.x convert_newlines_to_brs: true, remove_linebreaks: true, style_formats: false, paste_word_valid_elements: "b,strong,i,em,u,br,p", paste_preprocess: function( plugin, args ) { args.content = args.content.replace( /<\/p>

/g, "
" ); args.content = args.content.replace( /

/g, "" ); args.content = args.content.replace( /<\/p>/g, "" ); }, formats: { bold: {inline: "strong"}, italic: {inline: "em"}, underline: {inline: "u"} }, toolbar: sButtons, content_css: sCss, setup: function ( ed ) { if( sOnChange != "" ) { ed.on( "change", function( e ) { eval( sOnChange ); } ); } if( sSetupCallback != undefined ) { eval( sSetupCallback + "(ed);" ); } }, resize: "both", entity_encoding: "named", readonly: bReadonly }; // Checks if the element has height and width css. var sEleCss = oElement.attr( "style" ); if( sEleCss !== undefined ) { var sHeight = undefined; if( sEleCss.match( /^height/ ) !== null || sEleCss.match( /[\s;]+height/ ) !== null ) { sHeight = oElement.css( "height" ); } var sWidth = undefined; if( sEleCss.match( /^width/ ) !== null || sEleCss.match( /[\s;]+width/ ) !== null ) { sWidth = oElement.css( "width" ); } if( sHeight !== undefined ) { oSettings[ "height" ] = sHeight; } if( sWidth !== undefined ) { oSettings[ "width" ] = sWidth; } var bAutoHeight = false; if( sEleCss.match( /^height[\s]*:[\s]*auto/ ) !== null || sEleCss.match( /[\s;]+height[\s]*:[\s]*auto/ ) !== null ) { oSettings[ "external_plugins" ][ "autoresize" ] = "./include/lib/js/tinymce4/js/tinymce/plugins/autoresize/plugin.min.js"; oSettings[ "autoresize_on_init" ] = true; oSettings[ "autoresize_bottom_margin" ] = 15; var sMinHeight = undefined; if( sEleCss.match( /^min-height/ ) !== null || sEleCss.match( /[\s;]+min-height/ ) !== null ) { sMinHeight = oElement.css( "min-height" ); } if( sMinHeight !== undefined ) { oSettings[ "autoresize_min_height" ] = sMinHeight.replace( /[^0-9]/g, "" ); } } } oElement.tinymce( oSettings ); oElement.attr( "istiny", "1" ); } /** * frameworkEditorSetVal * @description Sets the value of the editor field. * @created thomas, 11.07.2013 */ function frameworkEditorSetVal( sID, sValue, lCnt ) { if( lCnt == undefined ) { lCnt = 0; } if( typeof( tinymce ) == "object" ) { try { var oEle = $( '#' + sID ); if( oEle.attr( 'istiny' ) == '1' ) { oEle.tinymce().setContent( sValue ); } } catch( e ) { if( lCnt < 100 ) { lCnt++; window.setTimeout( "frameworkEditorSetVal('" + sID + "','" + sValue + "','" + lCnt + "');", 100 ); } } } else if( lCnt < 100 ) { lCnt++; window.setTimeout( "frameworkEditorSetVal('" + sID + "','" + sValue + "','" + lCnt + "');", 100 ); } } /** * frameworkEditorGetVal * @description Reads the value of the editor field. * @creates thomas, 11.07.2013 */ function frameworkEditorGetVal( sID ) { return $( '#' + sID ).tinymce().getContent(); } /** * Sets the cursor focus to the editor field. * @param sID * @created thomas, 08.03.2017 */ function frameworkEditorFocus( sID ) { if( typeof( tinymce ) == "object" ) { try { tinymce.execCommand( "mceFocus", false, sID ); } catch( e ) { } } } function frameworkConvertEditToPasswordChecker( sID, bWithResize ) { var oElementToConvert; oElementToConvert = document.getElementById( sID ); if( bWithResize === undefined ) { bWithResize = true; } if( !oElementToConvert ) { return false; } var ele = $( oElementToConvert ); // Prevent line wrap after field before icon. ele.wrap( '' ); ele.keyup(function() { if(ele.val() === "") { var color = "black"; var progress = 0; var title = "Tippen Sie bitte ein Passwort um seine Stärke zu sehen."; } else{ var PassChecker = zxcvbn( ele.val(), [] ); switch (PassChecker.score) { case 0: var color = "#A4A4A4"; var progress = 20; var title = "Sehr schwaches Passwort !"; break; case 1: var color = "#FF8080"; var progress = 40; var title = "Schwaches Passwort"; break; case 2: var color = "#ffab62"; var progress = 60; var title = "Mittelstarkes Passwort"; break; case 3: var color = "#FFFF80"; var progress = 80; var title = "Starkes Passwort"; break; case 4: var color = "#80FF80"; var progress = 100; var title = "Sehr starkes Passwort"; break; default: } } $("#progressbar_"+sID).css("background-color", color); $("#progressbar_"+sID).css("width", progress+"px"); $("#"+sProgressBoxID).attr("title", title); }); if(bWithResize) { var lMinWidth = ele.css( "min-width" ); if( lMinWidth == undefined || !lMinWidth || lMinWidth == "0px" ) { ele.css( "min-width", 50 ); } ele.width( ele.width() - 112 ); } var sProgressBoxID = "pbox_" + sID; var sProgressBox = ''+ '

 
'+ ''; $( sProgressBox ).insertAfter( ele ); } /** * Convert a HTML Table to a sortable one *@description to make a column sortable it (th) has to contain the class "sortenabled" * @created maxime 06.09.2017 */ function frameworkConvertTableToSortable(sID) { var sIconAsc = "frameworkicon-sort_up_alphanumeric"; var sIconDesc = "frameworkicon-sort_down_alphanumeric"; var table = $("#"+ sID); if( !table ) { return false; } table.find('th') .each(function(){ //check if the column is sortable if($(this).hasClass( "sortenabled" )) { var th = $(this); var thIndex = th.index(); var binverse = false; //add Sorting icons var sHTML = "" + ""; th.append(sHTML); th.click(function(){ table.find('td').filter(function(){ return $(this).index() === thIndex; }).sortElements(frameworkConvertTableToSortableCompare(binverse), function(){ return this.parentNode; }); binverse = !binverse; var oTr = $(this).parent(); oTr.find("."+sIconAsc).hide(); oTr.find("."+sIconDesc).hide(); var lindex = $(this).index(); if(binverse) { $(this).find("."+sIconAsc).show(); $(this).find("."+sIconDesc).hide(); } else { $(this).find("."+sIconAsc).hide(); $(this).find("."+sIconDesc).show(); } }); } }); } /** *@description used from frameworkConvertTableToSortable to determine the sorting order * @created maxime 06.09.2017 */ function frameworkConvertTableToSortableCompare(binverse) { if(binverse === false) { binverse = -1; }else{ binverse = 1; } return function(a, b){ if( $.text([a]) === $.text([b]) ) { return 0; } if($.text([a]).toLowerCase() > $.text([b]).toLowerCase()) { return -binverse; } return binverse; } } /** * Adds a color picker to an element. */ function frameworkConvertEditToColorpicker( sID ) { var oElementToConvert = $( '#' + sID ); if( !oElementToConvert ) { return false; } if( oElementToConvert.attr( 'data-pickericon' ) == undefined ) { var lMinWidth = oElementToConvert.css( 'min-width' ); if( lMinWidth == undefined || !lMinWidth || lMinWidth == '0px' ) { oElementToConvert.css( 'min-width', 50 ); } oElementToConvert .minicolors( { animationSpeed: 100, position : 'bottom left', swatches: ['#FFFFFF', '#000000', '#C6D9F0', '#E5B9B7', '#D7E3BC', '#CCC1D9', '#FBD5B5'] } ) .attr( 'data-pickericon', '1' ); var oPicker = oElementToConvert.next(); var lWidth = oPicker.outerWidth() + 2; oElementToConvert.width( oElementToConvert.width() - lWidth ); } } /** * Adds a time picker to an element. */ function frameworkConvertEditObjectToTimepicker( oElement ) { return frameworkConvertEditToTimepickerCtrl( "", oElement ); } /** * Adds a time picker to an element. */ function frameworkConvertEditToTimepicker( sID ) { return frameworkConvertEditToTimepickerCtrl( sID, false ); } /** * Adds a time picker to an element. */ function frameworkConvertEditToTimepickerCtrl( sID, oElement ) { var oElementToConvert; if( sID == "" && oElement ) { oElementToConvert = oElement; sID = $( oElementToConvert ).attr( "id" ); } else { oElementToConvert = document.getElementById( sID ); } if( !oElementToConvert ) { return false; } var ele = $( oElementToConvert ); frameworkTimePickerAddSymbol( ele ); ele.timepicker( { timeFormat: 'HH:mm', showSecond: false, showMillisec: false, showMicrosec: false, showTimezone: false, controlType: 'select', timeOnlyTitle: "Uhrzeit ", timeText: "Uhrzeit", hourText: "Stunde", minuteText: "Minute", currentText: "Jetzt", closeText: "Beenden", showOn:'none' } ); frameworkAddShortKeysToTimepicker( ele ); } /** * Adds shotkeys to the time picker object. * j = today * @param ele * @created thomas, 18.03.2017 */ function frameworkAddShortKeysToTimepicker( ele ) { ele.keyup( function( e ) { var oDate; var code = (e.keyCode ? e.keyCode : e.which); var bChanged = false; switch( code ) { case 74: // j oDate = new Date(); bChanged = true; break; default: break; } if( bChanged ) { ele.val( oDate.getHours() + ":" + oDate.getMinutes() ); validateTime( ele ); ele.change(); e.preventDefault(); e.stopPropagation(); } }); } /** * Opens the timepicker box. * @param sID * @created thomas, 29.11.2016 */ function frameworkOpenTimepicker( sID ) { var oEle = $( "#" + sID ); if( oEle.attr( "disabled" ) == undefined && oEle.attr( "readonly" ) == undefined ) { oEle.timepicker( "show" ); } } /** * Adds a duration (time) picker to an element. */ function frameworkConvertEditToDurationPickerCtrl( sID, oElement ) { var oElementToConvert; if( sID == "" && oElement ) { oElementToConvert = oElement; sID = $( oElementToConvert ).attr( "id" ); } else { oElementToConvert = document.getElementById( sID ); } if( !oElementToConvert ) { return false; } var ele = $( oElementToConvert ); frameworkTimePickerAddSymbol( ele ); ele.timepicker( { timeFormat: 'HH:mm', showSecond: false, showMillisec: false, showMicrosec: false, showTimezone: false, hourMax: 99, controlType: 'select', timeOnlyTitle: "Uhrzeit ", timeText: "Uhrzeit", hourText: "Stunde", minuteText: "Minute", currentText: "Jetzt", closeText: "Beenden", showOn:'none' } ); } function frameworkSetDatePickerValues(sIdSrc, sIdDest, bBeforeSrc) { var oSrc = $("#"+sIdSrc); var oDate = new Date(); if(oSrc != undefined){ oDate=oSrc.datepicker('getDate'); var ele = $( "#" + sIdDest ); if( oDate == undefined || !oDate ) { oDate = new Date(); oDate.setFullYear( 1900, 0, 1 ); ele.datepicker( "option", "minDate", oDate ); oDate = new Date(); oDate.setFullYear( global_THIS_YEAR + 120, 11, 31 ); ele.datepicker( "option", "maxDate", oDate ); ele.datepicker( "option", "yearRange", 1900 + ':' + ( global_THIS_YEAR + 120 ) ); } else { if( bBeforeSrc ) { ele.datepicker( "option", "maxDate", oDate ); ele.datepicker( "option", "yearRange", 1900 + ':' + oDate.getFullYear() ); } else { ele.datepicker( "option", "minDate", oDate ); ele.datepicker( "option", "yearRange", oDate.getFullYear() + ':' + (global_THIS_YEAR + 120) ); } } } } function frameworkSetTimePickerValues( bBeforeSrc, sIdSrcT, sIdDestT, sIdSrcD, sIdDestD ) { var oSrcT = $( "#" + sIdSrcT ); var oSrcD = $( "#" + sIdSrcD ); var oDestT = $( "#" + sIdDestT ); var oDestD = $( "#" + sIdDestD ); if( oSrcT != undefined && oDestT != undefined ) { var sDateT = oSrcT.datetimepicker( {dateFormat: 'hh:mm'} ).val(); var sOldT = oDestT.datetimepicker( {dateFormat: 'hhmm'} ).val(); var sMinT = oSrcT.datetimepicker( {dateFormat: 'hhmm'} ).val(); var sCurT = oDestT.datetimepicker( {dateFormat: 'hh:mm'} ).val(); oDestT.datetimepicker( {dateFormat: 'hh:mm'} ); oSrcT.datetimepicker( {dateFormat: 'hh:mm'} ); var sMinTime = "00:00"; var sMaxTime = "23:59"; if( bBeforeSrc ) { if( oSrcD != undefined && oDestD != undefined ) { if( oSrcD.datepicker( "getDate" ).getTime() > oDestD.datepicker( "getDate" ).getTime() ) { sMaxTime = "23:59"; } else { sMaxTime = sDateT; } } } else { if( oSrcD != undefined && oDestD != undefined ) { if( oSrcD.datepicker( "getDate" ).getTime() == oDestD.datepicker( "getDate" ).getTime() ) { sMinTime = sDateT; } } } //NK, 09.08.2016: Fehlerhaft, da Minuten falsch eingeschraenkt werden oDestT.timepicker( "destroy" ); oDestT.timepicker( { timeFormat: 'HH:mm', showSecond: false, showMillisec: false, showMicrosec: false, showTimezone: false, controlType: 'select', timeOnlyTitle: "Uhrzeit ", timeText: "Uhrzeit", hourText: "Stunde", minuteText: "Minute", currentText: "Jetzt", closeText: "Beenden", showOn: 'none', minTime: sMinTime, maxTime: sMaxTime, beforeShow: function () { eval( "frameworkSetTimePickerValues(" + bBeforeSrc + ", '" + sIdSrcT + "', '" + sIdDestT + "', '" + sIdSrcD + "', '" + sIdDestD + "');" ); } } ); var lOldT = parseInt( sOldT, 10 ); var lMinT = parseInt( sMinT, 10 ); if( lOldT < lMinT ) { oDestT.timepicker( 'setTime', sDateT ); } else { oDestT.timepicker( 'setTime', sCurT ); } oDestT.timepicker( 'refresh' ); } } /** * Use a central function to convert an edit field to date picker field. * @param ele Text element to convert. * @created thomas, 12.01.2017 */ function frameworkDatePickerAddSymbol( ele ) { ele = $( ele ); var sID = ele.attr( "id" ); if( ele.attr( "data-pickericon" ) == undefined ) { // Adds a placeholder to the field. /*if( ele.attr( "placeholder" ) == undefined ) { ele.attr( "placeholder", "TT.MM.JJJJ" ); }*/ // Prevent line wrap after field before icon. ele.wrap( '' ); //mvr,24.06.2016 Add Calendar Picture var sPictureID = "dtppic_" + sID; var sCalenderPicture = ''; $( sCalenderPicture ).insertAfter( ele ); var lMinWidth = ele.css( "min-width" ); if( lMinWidth == undefined || !lMinWidth || lMinWidth == "0px" ) { ele.css( "min-width", 65 ); } ele.width( ele.width() - 20 ).attr( "data-pickericon", "1" ); } // thomas, 25.09.2014: Check for valid date. ele.blur( function () { validateDate( this ); } ) .change( function () { validateDate( this ); } ); } /** * Selects a time from timepicker menu. * @param sID * @param oTime * @created thomas, 18.03.2017 */ function frameworkOnClickTimePickerSymbolSelect( sID, oTime ) { $( "#" + sID ).val( $( oTime ).text() ); //deb 25.04.2017 $( "#" + sID ).change(); try { $( "#frameworkTimePickerDialog" ).remove(); } catch( e ) {} } /** * Opens the timepicker menu. * @param sID * @created thomas, 18.03.2017: Moved from frameworkTimePickerAddSymbol(). */ function frameworkOnClickTimePickerSymbol( sID ) { var oEleTime = $( "#" + sID ); if( oEleTime.attr( "disabled" ) == undefined && oEleTime.attr( "readonly" ) == undefined ) { //oEleTime.timepicker( "show" ); var oDate = new Date(); var lMinutes = oDate.getMinutes(); var lHours = oDate.getHours(); var sVal = oEleTime.val(); var sSplit_arr = sVal.split( ":" ); if( sSplit_arr.length == 2 ) { lHours = parseInt( sSplit_arr[ 0 ] ); lMinutes = parseInt( sSplit_arr[ 1 ] ); } while( lMinutes % 15 != 0 ) { lMinutes--; } var sBlock = "
"; var oTimePickerDialog = $( "#frameworkTimePickerDialog" ); if( oTimePickerDialog.length > 0 ) { oTimePickerDialog.remove(); } $( sBlock ).dialog( { width: 50, height: 150, position: { my: "left top", at: "left bottom", of: oEleTime }, close: function () { $( this ).dialog( "destroy" ); } } ); frameworkRemoveDialogTitlebar( "frameworkTimePickerDialog" ); oTimePickerDialog = $( "#frameworkTimePickerDialog" ); var oSelected = $( "#timepicker_" + lHours + "_" + lMinutes ); if( oSelected.length > 0 ) { oTimePickerDialog.scrollTop( oTimePickerDialog.scrollTop() + oSelected.position().top ); oSelected.addClass( "ui-state-highlight" ); } oTimePickerDialog.bind( "mousedown", function( e ){ e.preventDefault(); e.stopPropagation(); }); oTimePickerDialog.find( "li" ).bind( "mousedown", function ( e ) { frameworkOnClickTimePickerSymbolSelect( $( this ).parent().attr( "data-parent" ), this ); } ); $( "body" ).bind( "mousedown", function ( e ) { try { $( "#frameworkTimePickerDialog" ).remove(); } catch( e ) {} }); } } /** * Use a central function to convert an edit field to time picker field. * @param ele Text element to convert. * @created thomas, 12.01.2017 */ function frameworkTimePickerAddSymbol( ele ) { ele = $( ele ); var sID = ele.attr( "id" ); if( ele.attr( "data-pickericon" ) == undefined ) { // Adds a placeholder to the field. /*if( ele.attr( "placeholder" ) == undefined ) { ele.attr( "placeholder", "SS:MM" ); }*/ // Prevent line wrap after field before icon. ele.wrap( '' ); //mvr,28.06.2016 Add Calendar Picture var sPictureID = "tppic_" + sID; var sCalenderPicture = ''; $( sCalenderPicture ).insertAfter( ele ); var lMinWidth = ele.css( "min-width" ); if( lMinWidth == undefined || !lMinWidth || lMinWidth == "0px" ) { ele.css( "min-width", 35 ); } ele.width( ele.width() - 20 ).attr( "data-pickericon", "1" ); } var bInclude = true; eval( "if( typeof( window.$( ele ).timepicker ) == 'function' ) bInclude = false;" ); if( bInclude ) addJavascript( "./framework/include/lib/js/jquery_2015/js/jquery-ui-timepicker-addon-1.5.5.min.js?VER=" + global_VERSIONKEY, "", false, global_sSID ); // thomas, 29.11.2016: Check for valid time. ele.blur( function () { validateTime( this ); } ) .change( function () { validateTime( this ); } ); } /** * Adds a date picker to an element with extended functions. */ function frameworkConvertEditToExtendedDatepicker(bBeforeDate, sID, sCallback,oDate, oElement, bCallChange) { if(bBeforeDate == undefined){ oDate = new Date(); oDate.setFullYear( parseInt( global_THIS_YEAR+120, 10 ), parseInt( global_THIS_MONTH, 10 ) - 1, parseInt( global_THIS_DAY, 10 ) ); bBeforeDate = true; } if(oDate == undefined){ oDate = new Date(); oDate.setFullYear( parseInt( global_THIS_YEAR, 10 ), parseInt( global_THIS_MONTH, 10 ) - 1, parseInt( global_THIS_DAY, 10 ) ); } var oElementToConvert; if( sID == "" && oElement ) { oElementToConvert = oElement; sID = $( oElementToConvert ).attr( "id" ); } else { oElementToConvert = document.getElementById( sID ); } if( !oElementToConvert ) { return false; } var ele = $( oElementToConvert ); frameworkDatePickerAddSymbol( ele ); var MinDate; if( bBeforeDate ) { MinDate = new Date(); MinDate.setFullYear( parseInt( 1900, 10 ), parseInt( 1, 10 ) - 1, parseInt( 1, 10 ) ); ele.datepicker( { minDate: MinDate, maxDate: oDate, changeMonth: true, changeYear: true, dateFormat: "dd.mm.yy", dayNamesMin: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], dayNamesShort: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], monthNames: [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ], monthNamesShort: [ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ], weekHeader: "W", showOn:'none', showWeek: true, yearRange: 1900 + ':' + oDate.getFullYear(), firstDay: 1, // IE Hotfix: https://gist.github.com/jeffsheets/2876765 onSelect: function() { this.lastShown = new Date().getTime(); if (bCallChange){ ele.change(); } }, beforeShow: function() { if( typeof( sCallback) == 'function'){ sCallback(this); } else{ eval( "if( typeof( window." + sCallback +") == 'function' ) " + sCallback +";" ); } } } ); } else { var maxDate = new Date(); maxDate.setFullYear( parseInt( global_THIS_YEAR+120, 10 ), parseInt( global_THIS_MONTH, 10 ) - 1, parseInt( global_THIS_DAY, 10 ) ); ele.datepicker( { minDate: oDate, maxDate: maxDate, changeMonth: true, changeYear: true, dateFormat: "dd.mm.yy", dayNames: [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag' ], dayNamesMin: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], dayNamesShort: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], monthNames: [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ], monthNamesShort: [ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ], weekHeader: "W", showWeek: true, yearRange: oDate.getFullYear() + ':' + (global_THIS_YEAR +120), showOn:'none', firstDay: 1, // IE Hotfix: https://gist.github.com/jeffsheets/2876765 onSelect: function() { this.lastShown = new Date().getTime(); if (bCallChange){ ele.change(); } }, beforeShow: function() { if( typeof( sCallback) == 'function'){ sCallback(this); } else{ eval( "if( typeof( window." + sCallback +") == 'function' ) " + sCallback +";" ); } } } ); } frameworkAddShortKeysToDatepicker( ele ); } /** * Adds a date picker to an element with extended functions. */ function frameworkConvertEditToExtendedTimepicker(bBeforeTime, sID, sCallback,oDate, oElement) { if(bBeforeTime == undefined){ oDate = new Date(); oDate.setHours(23,59); bBeforeTime = true; } if(oDate == undefined){ oDate = new Date(); } var oElementToConvert; if( sID == "" && oElement ) { oElementToConvert = oElement; sID = oElementToConvert.attr( "id" ); } else { oElementToConvert = document.getElementById( sID ); } if( !oElementToConvert ) { return false; } var ele = $( oElementToConvert ); frameworkTimePickerAddSymbol( ele ); if( bBeforeTime ) { ele.timepicker( { timeFormat: 'HH:mm', showSecond: false, showMillisec: false, showMicrosec: false, showTimezone: false, controlType: 'select', timeOnlyTitle: "Uhrzeit ", timeText: "Uhrzeit", hourText: "Stunde", minuteText: "Minute", currentText: "Jetzt", closeText: "Beenden", showOn:'none' } ); } else { ele.timepicker( { timeFormat: 'HH:mm', showSecond: false, showMillisec: false, showMicrosec: false, showTimezone: false, controlType: 'select', timeOnlyTitle: "Uhrzeit ", timeText: "Uhrzeit", hourText: "Stunde", minuteText: "Minute", currentText: "Jetzt", closeText: "Beenden", showOn: 'none', beforeShow: function () { if( typeof( sCallback) == 'function' ) { sCallback( this ); } else { eval( "if( typeof( window." + sCallback + ") == 'function' ) " + sCallback + ";" ); } } } ); } frameworkAddShortKeysToTimepicker( ele ); } /** * Adds a date picker to an element. */ function frameworkConvertEditObjectToDatepicker( bBeforeTodayOnly, MinDay, oElement ) { return frameworkConvertEditToDatepickerCtrl( "", bBeforeTodayOnly, MinDay, oElement ); } /** * Adds a date picker to an element. */ function frameworkConvertEditToDatepicker( sID, bBeforeTodayOnly, MinDay, MaxDay, YearRange, bCallChange ) { return frameworkConvertEditToDatepickerCtrl( sID, bBeforeTodayOnly, MinDay, false, MaxDay, YearRange, bCallChange ); } /** * Adds a date picker to an element. * @modified martin, 05.01.2012: * year 2012 BUG * yearRange: '1900:2011' * changed to '1900:global_THIS_YEAR' * @modified thomas, 17.05.2016: Year range modified to allow using FROM:TO syntax. */ function frameworkConvertEditToDatepickerCtrl( sID, bBeforeTodayOnly, MinDay, oElement, MaxDay, YearRange, bCallChange ) { // pmi, 25.04.2014: var oElementToConvert; var YearOffset; var YearMax = global_THIS_YEAR + 1; if( sID == "" && oElement ) { oElementToConvert = oElement; sID = $( oElementToConvert ).attr( "id" ); } else { oElementToConvert = document.getElementById( sID ); } if( !oElementToConvert ) { return false; } var ele = $( oElementToConvert ); frameworkDatePickerAddSymbol( ele ); //mvr,08.04.2016 YearRange Parameter if( YearRange == undefined ) { YearOffset = '1900'; }else{ if( YearRange.indexOf( ":" ) != -1 ) { var sSplit_arr = YearRange.split( ":" ); if( sSplit_arr.length == 2 ) { YearOffset = parseInt( sSplit_arr[ 0 ] ); YearMax = parseInt( sSplit_arr[ 1 ] ); } } else { YearOffset = YearRange; } } var MinDate; if( bBeforeTodayOnly ) { var todayDate = new Date(); MinDate = new Date(); todayDate.setFullYear( parseInt( global_THIS_YEAR, 10 ), parseInt( global_THIS_MONTH, 10 ) - 1, parseInt( global_THIS_DAY, 10 ) ); MinDate.setFullYear( parseInt( global_THIS_YEAR, 10 ), parseInt( global_THIS_MONTH, 10 ) - 1, parseInt( global_THIS_DAY, 10 ) - MinDay ); ele.datepicker( { minDate: MinDate, maxDate: todayDate, changeMonth: true, changeYear: true, dateFormat: "dd.mm.yy", dayNamesMin: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], dayNamesShort: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], monthNames: [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ], monthNamesShort: [ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ], weekHeader: "W", showOn:'none', showWeek: true, yearRange: YearOffset + ':' + YearMax, firstDay: 1, // IE Hotfix: https://gist.github.com/jeffsheets/2876765 onSelect: function() { this.lastShown = new Date().getTime(); if (bCallChange){ ele.change(); } }, beforeShow: function() { var time = new Date().getTime(); return this.lastShown === undefined || time - this.lastShown > 500; } // ==> } ); } else { MinDate = new Date(); var MaxDate = new Date(); if( MinDay != undefined ) { MinDate.setFullYear( parseInt( global_THIS_YEAR, 10 ), parseInt( global_THIS_MONTH, 10 ) - 1, parseInt( global_THIS_DAY, 10 ) - MinDay ); } else { MinDate = null; } if( MaxDay != undefined ) { MaxDate.setFullYear( parseInt( global_THIS_YEAR, 10 ), parseInt( global_THIS_MONTH, 10 ) - 1, parseInt( global_THIS_DAY, 10 ) + MaxDay ); } else { MaxDate = null; } ele.datepicker( { minDate: MinDate, maxDate: MaxDate, changeMonth: true, changeYear: true, dateFormat: "dd.mm.yy", dayNames: [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag' ], dayNamesMin: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], dayNamesShort: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], monthNames: [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ], monthNamesShort: [ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ], weekHeader: "W", showWeek: true, yearRange: YearOffset + ':' + YearMax, showOn:'none', firstDay: 1, // IE Hotfix: https://gist.github.com/jeffsheets/2876765 onSelect: function() { this.lastShown = new Date().getTime(); if (bCallChange){ ele.change(); } }, beforeShow: function() { var time = new Date().getTime(); return this.lastShown === undefined || time - this.lastShown > 500; } // ==> } ); } frameworkAddShortKeysToDatepicker( ele ); } /** * Adds shotkeys to the date picker object. * g = yesterday * h = today * m = morgen * Arrow up = +1 day * Arrow down = -1 day * Page up = +1 month * Page down = -1 month * + = today + of days * - = today - of days * @param ele */ function frameworkAddShortKeysToDatepicker( ele ) { ele.keyup( function( e ) { var sVal; var oDate; var code = (e.keyCode ? e.keyCode : e.which); var bChanged = false; switch( code ) { case 72: // h oDate = new Date(); bChanged = true; break; case 71: // g oDate = new Date(); oDate.setTime( oDate.getTime() - ( 24 * 60 * 60 * 1000 ) ); bChanged = true; break; case 77: // m oDate = new Date(); oDate.setTime( oDate.getTime() + ( 24 * 60 * 60 * 1000 ) ); bChanged = true; break; case 38: // Key up oDate = ele.datepicker( "getDate" ); oDate.setTime( oDate.getTime() + ( 24 * 60 * 60 * 1000 ) ); bChanged = true; break; case 40: // Key down oDate = ele.datepicker( "getDate" ); oDate.setTime( oDate.getTime() - ( 24 * 60 * 60 * 1000 ) ); bChanged = true; break; case 33: // Page up oDate = ele.datepicker( "getDate" ); if( oDate.getMonth() == 11 ) { oDate.setFullYear( oDate.getFullYear() + 1 ); oDate.setMonth( 0 ); } else { oDate.setMonth( oDate.getMonth() + 1 ); } bChanged = true; break; case 34: // Page down oDate = ele.datepicker( "getDate" ); if( oDate.getMonth() == 0 ) { oDate.setFullYear( oDate.getFullYear() - 1 ); oDate.setMonth( 11 ); } else { oDate.setMonth( oDate.getMonth() - 1 ); } bChanged = true; break; case 107: // + case 187: oDate = new Date(); sVal = ele.val(); if( parseInt( sVal ) == sVal ) { oDate.setTime( oDate.getTime() + ( sVal * 24 * 60 * 60 * 1000 ) ); bChanged = true; } break; case 109: // - case 189: oDate = new Date(); sVal = ele.val(); if( parseInt( sVal ) == sVal ) { oDate.setTime( oDate.getTime() - ( sVal * 24 * 60 * 60 * 1000 ) ); bChanged = true; } break; break; default: break; } if( bChanged ) { ele.val( oDate.getDate() + "." + ( oDate.getMonth() + 1 ) + "." + oDate.getFullYear() ); validateDate( ele ); ele.change(); e.preventDefault(); e.stopPropagation(); } }); } /** * Converts an input field to client search field. * @param sFieldID ID of the search field. * @param sListID ID of the list to search in * @param sSearchClass Optional class to search in. If sSearchClass==undefined the function searches in all * child elements. * @returns * @created thomas, 25.11.2016 */ function frameworkConvertEditToClientSearch( sFieldID, sListID, sSearchClass ) { var oList = $( "#" + sListID ); if( oList.length == 0 ) { return false; } var sTagName = oList.prop( "tagName" ).toLowerCase(); if( sTagName != "table" && sTagName != "ul" && sTagName != "select" ) { return false; } var oSearch = $( "#" + sFieldID ); if( oSearch.length == 0 ) { return false; } if( oSearch.attr( "placeholder" ) == undefined ) { oSearch.attr( "placeholder", "Suchen ..." ); } oSearch.on( "keyup", function() { if( typeof( sListID ) == "object" ) { $.each( sListID, function( key, val ) { frameworkDoClientSearch( sFieldID, val, sSearchClass ); }); } else { frameworkDoClientSearch( sFieldID, sListID, sSearchClass ); } }); if( typeof( sListID ) == "object" ) { $.each( sListID, function( key, val ) { frameworkDoClientSearch( sFieldID, val, sSearchClass ); }); } else { frameworkDoClientSearch( sFieldID, sListID, sSearchClass ); } return true; } /** * @param sFieldID * @param sListID * @param sSearchClass * @created thomas, 28.11.2016 */ function frameworkDoClientSearch( sFieldID, sListID, sSearchClass ) { var oList = $( "#" + sListID ); var sTagName = oList.prop( "tagName" ).toLowerCase(); var sSearch = $( "#" + sFieldID ).val().toLowerCase(); var oRows_arr; if( sTagName == "table" ) { oRows_arr = oList.find( "tr" ); } else if( sTagName == "select" ) { oRows_arr = oList.find( "option" ); } else { oRows_arr = oList.find( "li" ); } oRows_arr.each( function () { var ele = $( this ); if( sTagName == "table" ) { if( ele.find( 'th' ).length > 0 ) { return true; } } if( sSearch == "" ) { ele.show(); } else { var bShow = false; if( sSearchClass == undefined ) { if( ele.text().toLowerCase().indexOf( sSearch ) != -1 ) { bShow = true; } } else { ele.find( "." + sSearchClass ).each( function ( e ) { if( $( this ).text().toLowerCase().indexOf( sSearch ) != -1 ) { bShow = true; } } ); } if( bShow ) { ele.show(); } else { ele.hide(); } } } ); return true; } /** * Make an fieldset clickable for show/hide. * @param lModuleID ID of the module. * @param sFieldsetID ID of the fieldset. * @param sToggleAreaID ID of the area to show/hide * @param bStartClosed set to true to start with a closed Field * @param sCallback Function to call after show/hide * @param bRememberStatus * @created NK, 29.11.2016 */ function frameworkMakeFieldsetClickable( lModuleID, sFieldsetID, sToggleAreaID, bStartClosed, sCallback, bRememberStatus ) { if( bRememberStatus == undefined ) { bRememberStatus = true; } var lPos = sFieldsetID.lastIndexOf( "_" + lModuleID ); if( lPos == -1 ) { return; } var sFieldsetName = sFieldsetID.substr( 0, lPos ); if( $( "#" + sFieldsetName + "_" + lModuleID).length <= 0 ) { return; } var bStatusInit = undefined; eval( "bStatusInit = getFieldSetStatus_" + lModuleID + "('" + sFieldsetName + "');" ); if( bStatusInit == undefined ) { if( bStartClosed == undefined ) { bStartClosed = false; } } else { if( bRememberStatus ) { bStartClosed = !bStatusInit; } } var eleFieldset = $( '#' + sFieldsetID ); eleFieldset .attr( "data-togglecallback", sCallback ) .attr( "data-togglerememberstatus", bRememberStatus ? "1" : "0" ) .attr( "data-togglearea", sToggleAreaID ) .attr( "data-togglemoduleid", lModuleID ) .attr( "data-togglename", sFieldsetName ); var eleLegend = eleFieldset.children( 'legend' ); var eleToggle = eleFieldset.find( '#' + sToggleAreaID ); var text = eleLegend.html(); var sIcon = 'imedicon11 imedicon-11-info-close'; if( bStartClosed ) { eleToggle.hide(); sIcon = 'imedicon11 imedicon-11-info-open'; } eleLegend.html( text + ' ' ).css( 'cursor', 'pointer' ).attr( 'title', 'Klicken Sie hier, um den Block auf oder zu zuklappen.' ); var eleIcon = eleLegend.children( '.toggleicon' ); eleLegend.bind( 'click', function () { var eleFieldset = eleLegend.parent(); var eleToggle = $( "#" + eleFieldset.attr( "data-togglearea" ) ); if( eleToggle.is( ':visible' ) ) { frameworkHideFieldsetClickable( sFieldsetID ); } else { frameworkShowFieldsetClickable( sFieldsetID ); } } ); } /** * @param sFieldsetID * @created thomas, 23.08.2017 */ function frameworkShowFieldsetClickable( sFieldsetID ) { var eleFieldset = $( '#' + sFieldsetID ); var eleToggle = $( '#' + eleFieldset.attr( "data-togglearea" ) ); var eleLegend = eleFieldset.children( 'legend' ); var eleIcon = eleLegend.children( '.toggleicon' ); var sCallback = eleFieldset.attr( "data-togglecallback" ); var bRememberStatus = eleFieldset.attr( "data-togglerememberstatus" ); var sFieldsetName = eleFieldset.attr( "data-togglename" ); var lModuleID = eleFieldset.attr( "data-togglemoduleid" ); eleToggle.show( 200, function ( e ) { if( sCallback != undefined ) { eval( "if( typeof( window." + sCallback + " ) == 'function' ) " + sCallback + "( '" + sFieldsetID + "', '" + sToggleAreaID + "' ); " + "else alert( 'no callback function <" + sCallback + "> found to call!' );" ); } eleIcon.removeClass( 'imedicon-11-info-open' ).addClass( 'imedicon-11-info-close' ); if( bRememberStatus ) { eval( "setFieldSetStatus_" + lModuleID + "('" + sFieldsetName + "',true);" ); } } ); } /** * @param sFieldsetID * @created thomas, 23.08.2017 */ function frameworkHideFieldsetClickable( sFieldsetID ) { var eleFieldset = $( '#' + sFieldsetID ); var eleToggle = $( '#' + eleFieldset.attr( "data-togglearea" ) ); var eleLegend = eleFieldset.children( 'legend' ); var eleIcon = eleLegend.children( '.toggleicon' ); var sCallback = eleFieldset.attr( "data-togglecallback" ); var bRememberStatus = eleFieldset.attr( "data-togglerememberstatus" ); var sFieldsetName = eleFieldset.attr( "data-togglename" ); var lModuleID = eleFieldset.attr( "data-togglemoduleid" ); eleToggle.hide( 200, function ( e ) { if( sCallback != undefined ) { eval( "if( typeof( window." + sCallback + " ) == 'function' ) " + sCallback + "( '" + sFieldsetID + "', '" + sToggleAreaID + "' ); " + "else alert( 'no callback function <" + sCallback + "> found to call!' );" ); } eleIcon.removeClass( 'imedicon-11-info-close' ).addClass( 'imedicon-11-info-open' ); if( bRememberStatus ) { eval( "setFieldSetStatus_" + lModuleID + "('" + sFieldsetName + "',false);" ); } } ); } /** * Sets the date of a datepicker. * @param oField * @param oDate * @created thomas, 20.10.2016 */ function frameworkSetDatepickerDate( oField, oDate ) { if( oDate == undefined ) { oDate = new Date(); } $( oField ).datepicker( "setDate", oDate ); } /** * Sets the time of a timepicker. * @param oField * @param oDate * @created thomas, 20.10.2016 */ function frameworkSetTimepickerTime( oField, oDate ) { if( oDate == undefined ) { oDate = new Date(); } $( oField ).timepicker( "setDate", oDate ); } /** * Search function of icon picker. * @param sVal Search text. * @param sID ID of the icon picker element. */ function frameworkIconPickerSearch( sVal, sID ) { sVal = sVal.toUpperCase(); var oFieldset_arr = $( "#" + sID + "_dialog" ).find( "fieldset" ); for( var j = 0;j < oFieldset_arr.length;j++ ) { var oIcons_arr = $( oFieldset_arr[ j ] ).find( ".iconpicker" ); var bFound = false; for( var i = 0; i < oIcons_arr.length; i++ ) { if( sVal == "" ) { $( oIcons_arr[ i ] ).show(); bFound = true; } else { var sTitle = $( oIcons_arr[ i ] ).attr( "title" ).toUpperCase(); if( sTitle.indexOf( sVal ) >= 0 ) { $( oIcons_arr[ i ] ).show(); bFound = true; } else { $( oIcons_arr[ i ] ).hide(); } } } if( bFound ) { $( oFieldset_arr[ j ] ).show(); } else { $( oFieldset_arr[ j ] ).hide(); } } } /** * Converts an input field to an icon picker. * @param sID ID of the field. * @param sIconset_arr List of icon files to handle. * @param bOverlay * @param lSize */ function frameworkConvertEditToIconPicker( sID, sIconset_arr, bOverlay, lSize ) { if( sIconset_arr == undefined ) { sIconset_arr = {}; } if( bOverlay == undefined ) { bOverlay = false; } if( lSize == undefined ) { lSize = 16; } var oEle = $( "#" + sID ); var oBtn = $( "" ) .attr( "value", "Auswählen" ) .attr( "type", "button" ) .click( function () { var oIcons = xajax_XCallback_OnClickIconPicker( sIconset_arr, bOverlay ); var sCat_arr = Object.keys( oIcons ); var sDialogContent = ""; var lCntLoop = sCat_arr.length; for( var i = 0; i < lCntLoop; i++ ) { if( sCat_arr.length > 1 ) { sDialogContent += "
" + oIcons[ sCat_arr[ i ] ][ "NAME" ] + ""; } else { sDialogContent += "
Symbole"; } var sKeys_arr = Object.keys( oIcons[ sCat_arr[ i ] ][ "ICONS" ] ); for( var j = 0; j < sKeys_arr.length;j++ ) { sDialogContent += ""; } sDialogContent += "
"; } $( "#" + sID + "_dialog" ).remove(); if( sDialogContent == "" ) { sDialogContent = "Es stehen keine Icon-Sets zur Verfügung."; } else { sDialogContent = "
" + sDialogContent; } var oDiv = $( "
" + sDialogContent + "
" ).appendTo( "body" ); $( oDiv ) .attr( "id", sID + "_dialog" ) .dialog( { width: 800, height: 600, modal: true, buttons: { 'Leeren': function () { $( "#" + sID ) .val( "" ) .change(); $( "#" + sID + "_dialog" ).dialog( "close" ); }, 'Schließen': function () { $( this ).dialog( 'close' ) } }, close: function () { $( this ).dialog( 'destroy' ); $( this ).remove(); } } ); } ) .button() .insertAfter( oEle ); $( "" ) .attr( "id", sID + "_iconpreview" ) .attr( "readonly", "readonly" ) .width( lSize ) .height( lSize ) .attr( "class", oEle.val() ) .css( "margin-left", "3px" ) .insertAfter( oBtn ); oEle .attr( "type", "hidden" ) .attr( "readonly", "readonly" ) .css( "cursor", "pointer" ) .change( function () { $( "#" + sID + "_iconpreview" ) .attr( "class", $( "#" + sID ).val() ) .attr( "title", $( "#" + sID ).val() ) } ); } /** * validateDate * @description Validates the input of a date picker field. * @created thomas, 01.10.2014 */ function validateDate( ele ) { var bValid = true; ele = $( ele ); try { var sDate = ele.val(); if( sDate != "" ) { var oTimestampDelay = new Date(); oTimestampDelay.setFullYear( oTimestampDelay.getFullYear() + 1 ); var oNow, sDay, sMonth, sYear; var sDate_arr = sDate.split( "." ); var lCnt = sDate.length; if( sDate_arr.length == 2 ) { // dd.mm sDay = parseInt( sDate_arr[ 0 ], 10 ); sMonth = parseInt( sDate_arr[ 1 ], 10 ); sYear = ( new Date() ).getFullYear(); } else if( sDate_arr.length == 3 ) { sDay = parseInt( sDate_arr[ 0 ], 10 ); sMonth = parseInt( sDate_arr[ 1 ], 10 ); if( sDate_arr[ 2 ] == "" ) { // dd.mm. sYear = ( new Date() ).getFullYear(); } else { // dd.mm.YYYY sYear = parseInt( sDate_arr[ 2 ], 10 ); } } else { sDate_arr = sDate.split( "-" ); if( sDate_arr.length == 2 ) { // YYYY-mm-dd sDay = parseInt( sDate_arr[ 2 ], 10 ); sMonth = parseInt( sDate_arr[ 1 ], 10 ); sYear = parseInt( sDate_arr[ 0 ], 10 ); } else if( lCnt == 4 ) { // ddmm sDay = parseInt( sDate.substr( 0, 2 ), 10 ); sMonth = parseInt( sDate.substr( 2, 2 ), 10 ); sYear = ( new Date() ).getFullYear(); } else if( lCnt == 6 ) { // ddmmYY sDay = parseInt( sDate.substr( 0, 2 ), 10 ); sMonth = parseInt( sDate.substr( 2, 2 ), 10 ); sYear = parseInt( sDate.substr( 4, 2 ), 10 ); } else if( lCnt == 8 ) { // ddmmYYYY sDay = parseInt( sDate.substr( 0, 2 ), 10 ); sMonth = parseInt( sDate.substr( 2, 2 ), 10 ); sYear = parseInt( sDate.substr( 4, 4 ), 10 ); } } if( sYear >= 1000 ) { // Do nothing. } else if( sYear >= 100 ) { // Error: Invalid date. bValid = false; } else { var lOffset = 2000; var oTimestamp = new Date( lOffset + sYear, sMonth, sDay ); if( oTimestamp.getTime() > oTimestampDelay.getTime() ) { lOffset = 1900; } sYear += lOffset; } if( bValid ) { var oDate = new Date( sYear, sMonth - 1, sDay ); if( oDate.getFullYear() == sYear && oDate.getMonth() + 1 == sMonth && oDate.getDate() == sDay ) { sDate = ( ( sDay < 10 ) ? "0" : "" ) + sDay + "." + ( ( sMonth < 10 ) ? "0" : "" ) + sMonth + "." + sYear; ele.val( sDate ); //.addClass( bModified ? "ui-datecheck-warning" : "" ); } else { bValid = false; } } } } catch( e ) { bValid = false; } frameworkSetFieldError( ele.attr( "id" ), !bValid, "", false ); return bValid; } /** * Validates the input of a time picker field. * @param ele * @created thomas, 29.11.2016 */ function validateTime( ele ) { var bValid = true; ele = $( ele ); try { var sTime = ele.val(); sTime = sTime.replace( ",", ":" ); sTime = sTime.replace( ".", ":" ); if( sTime != "" ) { var lLength; if( sTime.indexOf( ":" ) == -1 ) { lLength = sTime.length; if( lLength == 1 ) { // 1 => 01:00 if( isNaN( sTime ) ) { bValid = false; } sTime = "0" + parseInt( sTime, 10 ) + ":00"; } else if( lLength == 2 ) { // 15 => 15:00 if( isNaN( sTime ) ) { bValid = false; } sTime = parseInt( sTime, 10 ) + ":00"; } else if( lLength == 3 ) { // 153 => 01:53 if( isNaN( sTime.substr( 0, 1 ) ) ) { bValid = false; } if( isNaN( sTime.substr( 1, 2 ) ) ) { bValid = false; } sTime = parseInt( sTime.substr( 0, 1 ), 10 ) + ":" + parseInt( sTime.substr( 1, 2 ), 10 ); } else if( lLength == 4 ) { // 1537 => 15:37 if( isNaN( sTime.substr( 0, 2 ) ) ) { bValid = false; } if( isNaN( sTime.substr( 2, 2 ) ) ) { bValid = false; } sTime = parseInt( sTime.substr( 0, 2 ), 10 ) + ":" + parseInt( sTime.substr( 2, 2 ), 10 ); } } else { var sSplit_arr = sTime.split( ":" ); lLength = sSplit_arr[ 0 ].length; if( lLength == 0 ) { // :xx => 00:xx sTime = "00:"; } else if( lLength == 1 ) { // 1:xx => 01:xx if( isNaN( sSplit_arr[ 0 ] ) ) { bValid = false; } sTime = "0" + parseInt( sSplit_arr[ 0 ], 10 ) + ":"; } else { // 12:xx => 12:xx if( isNaN( sSplit_arr[ 0 ] ) ) { bValid = false; } sTime = parseInt( sSplit_arr[ 0 ], 10 ) + ":"; } lLength = sSplit_arr[ 1 ].length; if( lLength == 0 ) { // xx: => xx:00 sTime += "00"; } else if( lLength == 1 ) { // xx:1 => xx:01 if( isNaN( sSplit_arr[ 1 ] ) ) { bValid = false; } sTime += "0" + parseInt( sSplit_arr[ 1 ], 10 ); } else { // xx:12 => xx:12 if( isNaN( sSplit_arr[ 1 ] ) ) { bValid = false; } sTime += parseInt( sSplit_arr[ 1 ], 10 ); } } } if( bValid && sTime != "" ) { var sDate_arr = sTime.split( ":" ); var lCnt = sDate_arr.length; if( lCnt == 2 ) { var lHours = parseInt( sDate_arr[ 0 ], 10 ); var lMinutes = parseInt( sDate_arr[ 1 ], 10 ); var oDate = new Date( 2016, 1, 1, lHours, lMinutes, 0 ); // Date is not needed, so use default date. if( oDate.getHours() == lHours && oDate.getMinutes() == lMinutes ) { sTime = ( ( lHours < 10 ) ? "0" : "" ) + lHours + ":" + ( ( lMinutes < 10 ) ? "0" : "" ) + lMinutes; ele.val( sTime ); } else { bValid = false; } } else { bValid = false; } } } catch( e ) { bValid = false; } frameworkSetFieldError( ele.attr( "id" ), !bValid, "", false ); return bValid; } /** * Updates the text counter of an element. */ function frameworkTextCounter( sId ) { var oEle = $( "#" + sId ); var lLength = oEle.attr( 'maxlength' ); if( lLength == '' ) { // Set default length. lLength = 1024; } var sText = oEle.val(); var lCnt = sText.length; if( lCnt > lLength ) { oEle.val( sText.substring( 0, lLength ) ); } var oEleCnt = $( '#' + sId + '_FRAMEWORKTEXTCOUNTER' ); oEleCnt.html( lLength - lCnt ); if( lLength - lCnt == 0 ) { oEleCnt.css( 'color', 'red' ); } else { oEleCnt.css( 'color', '' ); } } /** * Adds a text counter to an element. * @modified thomas, 03.06.2016: Param oEle and bShowNum added. */ function frameworkAddTextcounterToTextarea( sId, oEle, bShowNum ) { //var sFunction = "frameworkTextCounter('" + sId + "');"; if( oEle == undefined ) { oEle = $( "#" + sId ); } else { oEle = $( oEle ); sId = oEle.attr( "id" ); } if( bShowNum == undefined ) { bShowNum = true; } if( oEle.length > 0 ) { // thomas, 30.10.2012: Bug fixed with multiple adding to the same field. if( !oEle.attr( "FRAMEWORKTXTCNT" ) ) { oEle.attr( "FRAMEWORKTXTCNT", "1" ); var sText = "
Es stehen noch 0 Zeichen zur Verfügung."; oEle.after( ); oEle.change( function () { frameworkTextCounter( sId ); } ); oEle.focus( function () { frameworkTextCounter( sId ); } ); oEle.click( function () { frameworkTextCounter( sId ); } ); oEle.keydown( function () { frameworkTextCounter( sId ); } ); oEle.keyup( function () { frameworkTextCounter( sId ); } ); frameworkTextCounter( sId ); } } } /** * Checks if a module is initialized and all its functions are available. */ function frameworkIsModuleAvailable( iModuleID ) { var bRet = false; eval( "if( typeof( window.doModal_" + iModuleID + " ) == 'function' ) bRet = true;" ); return bRet; } /** * Shows a framework error occured at creating modules. */ function showFrameworkError( sModuleType ) { if( frameworkXAjaxError_arr.length > 0 ) { var errors_arr = frameworkXAjaxError_arr; frameworkXAjaxError_arr = []; if( sModuleType ) { for( var i = 0; i < errors_arr.length; ++i ) { errors_arr[ i ] = sModuleType + "|" + errors_arr[ i ]; } } xajax_XCallback_DebugXAjaxErrors( errors_arr ); iModuleErrorCount++; } if( iModuleErrorCount > 0 ) { window.open( "framework.php?SID=" + global_sSID + "&OUTPUTERROR=1" ); iModuleErrorCount = 0; } } /** * Cancels an asynchronous ajax call. */ function frameworkOnClickProgressCancel( oInput ) { oInput.disabled = true; //xajax_XCallback_OnCancelAsynchroniousCalls(); frameworkAsyncCallModuleFunction( 1, "XCallback_OnCancelAsynchroniousCalls" ); } /** * Executes an asynchronous axjax call. */ function frameworkAsyncCallModuleFunction( iModuleID, sPHPFunctionName, params_arr ) { var new_params_arr; if( Object.prototype.toString.call( params_arr ) !== '[object Array]' ) { new_params_arr = new Array( iModuleID ); new_params_arr.unshift( iModuleID ); } else { new_params_arr = params_arr; } new_params_arr.unshift( "ASYNC_" + iModuleID ); //NK, 03.11.2014: undefined params_arr var requestURIBefore = xajax.config.requestURI; var sSID = requestURIBefore.slice( requestURIBefore.search( /SID=/ ) + 4 ); var iPos = sSID.search( /&/ ); if( iPos != -1 ) { sSID = sSID.substring( 0, iPos ); } xajax.config.requestURI = "frameworkXajax.php?SID=" + sSID; var bReturn = true; try { xajax.call( sPHPFunctionName, { mode: 'asynchronous', requestRetry: 1, parameters: new_params_arr } ); } catch( e ) { bReturn = false; } xajax.config.requestURI = requestURIBefore; return bReturn; } /** * frameworkModuleListDisplayAll * @description Displays a module and all submodules. * @created thomas, 18.10.2012 */ function frameworkModuleListDisplayAll( oModule ) { var sJSIncludeList_arr = []; // The root module must not be handled. if( oModule.m_lModuleID != 0 ) { //P( 'Display module ' + oModule.m_lModuleID + ' (' + oModule.m_sModuleType + ')', P_DEBUG, 'IMEDFramework', 'frameworkModuleListDisplayAll' ); var oEleDiv = $( '#DIV_MODULE_' + oModule.m_lModuleID ); if( oEleDiv.length > 0 ) { // Set the module visible. oEleDiv.css( 'display', '' ); var bGetJSFirst = false; eval( "if( typeof( window.Module_Init_" + oModule.m_lModuleID + " ) == 'function' ) { /*Module_Init_" + oModule.m_lModuleID + "();*/ } else { bGetJSFirst = true; }" ); //eval( "if( typeof( window.initModuleGrid_" + oModule.m_lModuleID + " ) == 'function' ) initModuleGrid_" + oModule.m_lModuleID + "();" ); //eval( "if( typeof( window.includeChildModulesJS_" + oModule.m_lModuleID + " ) == 'function' ) includeChildModulesJS_" + oModule.m_lModuleID + "();" ); if( bGetJSFirst ) { sJSIncludeList_arr.push( oModule.m_lModuleID ); } } } // Handles all child modules. for( var i = 0; i < oModule.m_oChildModules_arr.length; i++ ) { var sTmp_arr = frameworkModuleListDisplayAll( oModule.m_oChildModules_arr[ i ] ); sJSIncludeList_arr = sJSIncludeList_arr.concat( sTmp_arr ); } return sJSIncludeList_arr; } /** * Displays a module and all sub modules. */ function frameworkDisplayModuleAndSubmodules( iModuleID ) { // Update module array first. frameworkModuleListUpdate(); // Load the parent element. var oParent = frameworkModuleListGetParent( iModuleID ); if( oParent ) { var sJSIncludeList_arr = frameworkModuleListDisplayAll( oParent ); if( sJSIncludeList_arr.length > 0 ) { //pmi, 27.09.2012 I expect that this position is never reached in any case var sJSFileUrl = "framework.php?SID=" + global_sSID + "&JSINCLUDELIST=" + sJSIncludeList_arr.join( '-' ) + "&JQUERY=1"; addJavascript( sJSFileUrl, '', true ); for( var i = 0; i < sJSIncludeList_arr.length; ++i ) { eval( "if( typeof( window.Module_Init_" + sJSIncludeList_arr[ i ] + " ) == 'function' ) Module_Init_" + sJSIncludeList_arr[ i ] + "();" ); eval( "if( typeof( window.initModuleGrid_" + sJSIncludeList_arr[ i ] + " ) == 'function' ) initModuleGrid_" + sJSIncludeList_arr[ i ] + "();" ); eval( "if( typeof( window.includeChildModulesJS_" + sJSIncludeList_arr[ i ] + " ) == 'function' ) includeChildModulesJS_" + sJSIncludeList_arr[ i ] + "();" ); } } return true; } else { return false; } } /** * Reads the width of a module. */ function frameworkGetModuleWidth( iModuleID ) { var objEl = $( "#DIV_MODULE_" + iModuleID ); if( objEl.length > 0 ) { var oDialog = $( "#modalDiv_" + iModuleID ); if( oDialog.dialog( "isOpen" ) === true ) { return parseInt( oDialog.width(), 10 ); } return parseInt( objEl.width(), 10 ); } return 0; } /** * Reads the height of a module. */ function frameworkGetModuleHeight( iModuleID ) { var objEl = $( "#DIV_MODULE_" + iModuleID ); if( objEl.length > 0 ) { var lDif = 0; var oModalButtons = $( "#notmodalbutton_" + iModuleID ); var oDialog = $( "#modalDiv_" + iModuleID ); if( oDialog.dialog( "isOpen" ) === true ) { if( oModalButtons.length > 0 ) { oModalButtons.hide(); } return parseInt( oDialog.height() - 3, 10 ) - lDif; } if( oModalButtons.length > 0 ) { oModalButtons.show(); lDif = oModalButtons.outerHeight(); } return parseInt( objEl.height(), 10 ) - lDif; } return 0; } function getModuleFrameNode( iModuleID ) { var objEl = document.getElementById( "DIV_MODULE_" + iModuleID ); if( !objEl ) { return null; } while( (objEl.tagName.toUpperCase() != "IFRAME") && (objEl.tagName.toUpperCase() != "FRAME") && (objEl.parentNode) && (objEl.parentNode.tagName) ) { objEl = objEl.parentNode; } if( objEl.tagName.toUpperCase() == "HTML" ) { objEl = top; } return objEl; } function frameworkXBrowserAddHandler( target, eventName, handlerName ) { if( target.addEventListener ) { target.addEventListener( eventName, function ( e ) { target[ handlerName ]( e ); }, false ); } else if( target.attachEvent ) { target.attachEvent( "on" + eventName, function ( e ) { target[ handlerName ]( e ); } ); } else { var originalHandler = target[ "on" + eventName ]; if( originalHandler ) { target[ "on" + eventName ] = function ( e ) { originalHandler( e ); target[ handlerName ]( e ); }; } else { target[ "on" + eventName ] = target[ handlerName ]; } } } /** * onModuleGridSaveEdit * @description This function is called at saving a cell value. * @created thomas, 05.05.2014 */ function onModuleGridSaveEdit( lModuleID, e ) { var sID = $( e ).attr( "id" ); var sVal = $( e ).val(); xajax_XCallback_OnSaveModuleGridCell( lModuleID, sID, sVal ); } function onModuleGridClickDel( e ) { if( confirm( "Wollen Sie diesen Eintrag wirklich löschen?" ) == false ) { return false; } xajax_XCallback_OnClickModuleGridDelRow( this.id ); } function onModuleGridClickEdit( e ) { xajax_XCallback_OnClickModuleGridEditRow( this.id ); } function onModuleGridMouseOutOption( e ) { this.width = 14; } function onModuleGridMouseOverOption( e ) { this.width = 15; } function frameworkModuleGridDropRow( sGridID, sID ) { $( "#" + sGridID ).jqGrid( "delRowData", sID ); return true; } function frameworkModuleGridAddRow( sGridID, sID, row_data, iUseClass ) { var sRowID = sID; $( "#" + sGridID ).jqGrid( "addRowData", sID, row_data ); return afterInsertFrameworkGridRow( sRowID, iUseClass ); } //NK, 29.09.2015: Callback for Module-Grids function frameworkModuleGridCallbackBeforeClickDel( lModuleID, sID ) { var bReturn = true; var sFuncName = 'beforeOnClickModuleGridDelRow_' + lModuleID; if( typeof window[ sFuncName ] == 'function' ) { bReturn = window[ sFuncName ]( sID ); } if( bReturn ) { xajax_XCallback_OnClickModuleGridDelRow( sID ); } } function frameworkModuleGridOnClickDel( sImgID ) { if( confirm( "Wollen Sie diesen Eintrag wirklich löschen?" ) == false ) { return false; } return xajax_XCallback_OnClickModuleGridDelRow( sImgID ); } function frameworkGridSetCheckRow( sGridID, sRowID, bChecked ) { var checkBox = document.getElementById( "jqg_" + sGridID + "_" + sRowID ); if( checkBox && checkBox.checked != bChecked ) { $( "#" + sGridID ).jqGrid( "setSelection", sRowID, false ); } } function frameworkModuleEditRow( sGridID, sID ) { $( "#" + sGridID ).jqGrid( "editRow", sID ); return true; } function setFrameworkGridRowClass( sRowID, bRemove ) { var oTr = document.getElementById( sRowID ); if( !oTr ) { return false; } var sRowClass = oTr.parentNode.parentNode.getAttribute( "specialRowClass" ); var class_arr; if( sRowClass ) { if( oTr ) { for( var i = 0; i < oTr.cells.length; ++i ) { if( bRemove ) { class_arr = oTr.cells[ i ].className.split( sRowClass ); oTr.cells[ i ].className = class_arr.join( " " ); } else { oTr.cells[ i ].className += " " + sRowClass; } } } } } function afterInsertFrameworkGridRow( sRowID, iUseClass ) { //NK, 09.09.2015: Set Buttons on Tablecreate //var id_arr = sRowID.split( "_" ); //var lModuleID = parseInt( id_arr[ 1 ], 10 ); //var sID = id_arr[ 3 ]; //frameworkModuleGridConvertEdit( "EDIT_GRID_ROW_MODULE_" + lModuleID + "_KEY_" + sID + "_MODULE_" + lModuleID ); //frameworkModuleGridConvertDel( "DEL_GRID_ROW_MODULE_" + lModuleID + "_KEY_" + sID + "_MODULE_" + lModuleID ); setFrameworkGridRowClass( sRowID, (iUseClass == 0) ); } function frameworkModuleGridUpdateRow( sGridID, sRowID, data_arr ) { $( "#" + sGridID ).jqGrid( "setRowData", sRowID, data_arr ); return true; } function insertAfterNode( parentNode, newNode, refNode ) { if( refNode.nextSibling ) { return parentNode.insertBefore( newNode, refNode.nextSibling ); } else { return parentNode.appendChild( newNode ); } } // pmi, 25.04.2014: // special edit option in cells of framework grids function frameworkGridCellType( value, options ) { var el = document.createElement( "input" ); el.type = "text"; el.value = value; return el; } // pmi, 25.04.2014: // special edit option in cells of framework grids function frameworkGridCellTypeDate( value, options ) { var el = document.createElement( "input" ); el.type = "text"; el.value = value; return el; } // pmi, 25.04.2014: // special edit option in cells of framework grids function frameworkGridCellValue( elem, operation, value ) { if( operation === 'get' ) { return $( elem ).val(); } else if( operation === 'set' ) { $( 'input', elem ).val( value ); } } /** * initFrameworkGrid * @description * @modified thomas, 15.11.2013: Parameter lRowNum added. */ function initFrameworkGrid( sGridID, lModuleID, head_title_arr, head_idx_arr, head_width_arr, head_sortable_arr, head_editable_arr, head_edittype_arr, head_editoptions_arr, iEnableSearch, iEnableDragNDrop, iEnableMultiselect, iEnableOnClickModuleGridRow, sSearch, sRowClass, bReloadOnResize, sSortName, sSortOrder, bAll, lRowNum, iEnableColSearch ) { if( lRowNum == undefined ) { lRowNum = 10; } var newColModel = []; var newColNames = []; var i; var bSort = false; var bCellEditing = false; var EditedValues = []; var iEditedValuesCurrentIndex = 0; for( i = 0; i < head_editable_arr.length; ++i ) { if( head_editable_arr[ i ] > 0 ) { bCellEditing = true; break; } } var oTable = $( "#" + sGridID ); if( oTable ) { if( oTable.attr( "initialized" ) == true ) { return true; } oTable.attr( "initialized", true ); oTable.attr( "specialRowClass", sRowClass ); } for( i = 0; i < head_title_arr.length; ++i ) { newColNames[ newColNames.length ] = "" + head_title_arr[ i ] + ""; bSort = (head_sortable_arr[ i ] > 0) ? true : false; var bEditable = (head_editable_arr[ i ] > 0) ? true : false; var sEditType = ""; if( head_edittype_arr[ i ] != "date" && head_edittype_arr[ i ] != "time" && head_edittype_arr[ i ] != "autocomplete" ) { // ignore this edittype if we want to dsplay an special imed-ctrl sEditType = head_edittype_arr[ i ]; } if( sEditType == "combobox" ) { sEditType = "select"; } //newColModel[newColModel.length] = { name:head_idx_arr[i], index:head_idx_arr[i], width:head_width_arr[i], sortable:bSort, editable:bEditable, edittype:head_edittype_arr[i], editoptions:head_editoptions_arr[i] }; // pmi, 25.04.2014: added functionality to use our standard imed converted controls to edit row data in grid newColModel[ newColModel.length ] = { name: head_idx_arr[ i ], index: head_idx_arr[ i ], width: head_width_arr[ i ], editable: bEditable, sortable: bSort, //searchtype:"date", //sorttype: "datetime", //formatter: sFormatter, edittype: sEditType, /* editrules: { custom:true, //custom_func: frameworkValidateGridField }, searchoptions:{ dataInit:function(elb){ $(elb).datepicker({ dateFormat:'yy-mm-dd' }); } }, */ editoptions: head_editoptions_arr[ i ] }; } var bMultiselect = false; if( iEnableMultiselect ) { bMultiselect = true; } var myRowList = [ 10, 20, 30, 100, 200, 500, 1000 ]; if( bAll ) { myRowList = [ 999999 ]; } var outerTableDiv = document.getElementById( sGridID ); if( !outerTableDiv ) { return; } var divGridBar = document.getElementById( "GRID_BAR_" + sGridID ); if( !divGridBar ) { divGridBar = document.createElement( "div" ); divGridBar.id = "GRID_BAR_" + sGridID; insertAfterNode( outerTableDiv.parentNode, divGridBar, outerTableDiv ); //outerTableDiv.parentNode.insertAfter( divGridBar, outerTableDiv ); } var oEleGrid = $( "#" + sGridID ); oEleGrid.jqGrid( { url: "framework.php?SID=" + global_sSID + "&MODULEID=" + lModuleID + "&JQGRID=1", cellurl: "framework.php?SID=" + global_sSID + "&MODULEID=" + lModuleID + "&JQGRID=1&ONEDIT=1", celledit: bCellEditing, editurl: "framework.php?SID=" + global_sSID + "&MODULEID=" + lModuleID + "&JQGRID=1&ONEDIT=1", datatype: "xml", colNames: newColNames, colModel: newColModel, rowNum: lRowNum, rowList: myRowList, //height: "auto", //loadonce: false, width: "auto", //height: 200, autowidth: true, gridview: false, multiselect: bMultiselect, scrollrows: true, //scroll: 1, //altRows: true, shrinkToFit: false, pager: '#GRID_BAR_' + sGridID, //viewrecords: true, sortname: sSortName, sortorder: sSortOrder, afterSubmitCell: function ( rowid, celname, value, iRow, iCol ) { alert( "rowid=" + rowid + "\n" + "celname=" + celname + "\n" + "value=" + value + "\n" + "iRow=" + iRow + "\n" + "iCol=" + iCol ); }, beforeSelectRow: function ( rowid, e ) { var link = $( 'IMG', e.target ); var sID = e.target.id; var oImg = e.target; //if( sID.length == 0 ) { // oImg = e.srcElement; //} if( oImg.tagName.toUpperCase() === "SPAN" || link.length > 0 ) { // link exist in the item which is clicked var sOnClickCode = oImg.getAttribute( "onclickgridactionimg" ); if( sOnClickCode != null ) { if( sOnClickCode.length > 0 ) { eval( sOnClickCode ); } } // do not highlight this line -> false return false; } return true; }, errorCell: function ( serverresponse, status ) { if( bCellEditing ) { alert( serverresponse.responseText ); } }, onSelectRow: function ( id, status ) { frameworkModuleEditRow( sGridID, id ); if( frameworkGridRowClicked ) { frameworkGridRowClicked = false; xajax_XCallback_OnDblClickModuleGridRow( lModuleID, id ); return; } frameworkGridRowClicked = true; iEditedValuesCurrentIndex = '#' + id; if( typeof EditedValues[ iEditedValuesCurrentIndex ] == 'undefined' ) { EditedValues[ iEditedValuesCurrentIndex ] = []; } if( frameworkGridRowClicked ) { frameworkGridRowClicked = false; xajax_XCallback_OnClickModuleGridRow( lModuleID, id, status ); } /* setTimeout(function(){ if(frameworkGridRowClicked){ frameworkGridRowClicked = false; xajax_XCallback_OnClickModuleGridRow( lModuleID, id, status ); } }, 250); */ }, gridComplete: function ( id ) { }, resizeStop: function ( newwidth, index ) { //column resizes ... var cm = $( "#" + sGridID ).jqGrid( 'getGridParam', 'colModel' ); var colName = cm[ index ][ 'name' ]; xajax_XCallback_OnResizeModuleGridCol( lModuleID, colName, newwidth ); }, afterInsertRow: function ( id, row ) { var row_id_arr = id.split( "_" ); var iSelected = row_id_arr[ row_id_arr.length - 2 ]; var iUseClass = row_id_arr[ row_id_arr.length - 1 ]; row_id_arr.splice( row_id_arr.length - 1, 1 ); row_id_arr.splice( row_id_arr.length - 1, 1 ); var newID = row_id_arr.join( "_" ); var checkBox = document.getElementById( "jqg_" + sGridID + "_" + id ); if( checkBox ) { checkBox.id = "jqg_" + sGridID + "_" + newID; checkBox.name = checkBox.id; checkBox.checked = false; if( iSelected > 0 ) { checkBox.checked = true; } } if( document.getElementById( id ) != null ) { document.getElementById( id ).id = newID; } if( iEnableMultiselect > 0 ) { if( iSelected > 0 ) { $( "#" + sGridID ).jqGrid( "setSelection", newID, false ); //set initial selection from PHP } } if( iEnableDragNDrop > 0 ) { addSource( newID ); } eval( "if( typeof( onJqgridAfterInsertRow_" + lModuleID + " ) == 'function' ){ onJqgridAfterInsertRow_" + lModuleID + "(id, row); }" ); afterInsertFrameworkGridRow( newID, iUseClass ); }, loadComplete: function () { frameworkAsyncCallModuleFunction( lModuleID, 'XCallback_onJqgridLoadComplete', [ lModuleID ] ); jQuery( "#lui_" + sGridID ).hide(); jQuery( "#load_" + sGridID ).hide(); eval( "if( typeof( onJqgridLoadComplete_" + lModuleID + " ) == 'function' ){ onJqgridLoadComplete_" + lModuleID + "(); }" ); }, loadError: function () { jQuery( "#lui_" + sGridID ).hide(); jQuery( "#load_" + sGridID ).hide(); } } ); if( bAll ) { $( "#" + sGridID ) .setGridParam( {rowNum: 999999} ) .attr( "imedall", "1" ); $( "#GRID_BAR_" + sGridID ).find( ".ui-pg-selbox" ).hide(); } else { $( "#" + sGridID ).attr( "imedall", "0" ); } if( iEnableOnClickModuleGridRow != 0 || bMultiselect ) { $( "#" + sGridID ).jqGrid( 'setGridParam', { onSelectRow: function ( id, status ) { if( frameworkGridRowClicked ) { frameworkGridRowClicked = false; xajax_XCallback_OnDblClickModuleGridRow( lModuleID, id ); return } frameworkGridRowClicked = true; setTimeout( function () { if( frameworkGridRowClicked ) { frameworkGridRowClicked = false; xajax_XCallback_OnClickModuleGridRow( lModuleID, id, status ); } }, 250 ); } } ); } $( "#" + divGridBar.id ).jqGrid( 'navGrid', "#" + divGridBar.id, { edit: false, add: false, del: false } ); oEleGrid.attr( "ReloadOnResize", bReloadOnResize ); outerTableDiv = document.getElementById( "gbox_" + sGridID ); var divOuterGrid = document.getElementById( "DIV_OUTER_MODULE_GRID_" + lModuleID ); if( !divOuterGrid && outerTableDiv ) { divOuterGrid = document.createElement( "div" ); divOuterGrid.id = "DIV_OUTER_MODULE_GRID_" + lModuleID; divOuterGrid.setAttribute( "GRID_ID", sGridID ); //divOuterGrid.style.height = "100%"; outerTableDiv.parentNode.insertBefore( divOuterGrid, outerTableDiv ); outerTableDiv.parentNode.removeChild( outerTableDiv ); divOuterGrid.appendChild( outerTableDiv ); if( bReloadOnResize == 1 ) { // pmi, 24.09.2015: do not reload by GridSize: frameworkModuleGridRecalcNumRows( sGridID, $( divOuterGrid ).height() ); } var oEleDiv = $( "#DIV_MODULE_" + lModuleID ); var iHeight = parseInt( oEleDiv.height(), 10 ) - 100; // - 115; if( iHeight < 50 ) { iHeight = 50; } var iWidth = parseInt( oEleDiv.width(), 10 ) + 10; if( iWidth < 50 ) { iWidth = 50; } oEleGrid.setGridWidth( iWidth ); oEleGrid.setGridHeight( iHeight ); } // additional searchfield ... if( iEnableSearch > 0 ) { if( outerTableDiv ) { var iWidthSearch = 100; var iWidthColSearch = 120; var selectSearch = false; var editSearch = document.getElementById( "EDIT_SEARCH_" + sGridID ); if( !editSearch ) { editSearch = document.createElement( "input" ); editSearch.type = "text"; editSearch.id = "EDIT_SEARCH_" + sGridID; editSearch.name = editSearch.id; editSearch.style.width = iWidthSearch + "px"; editSearch.value = sSearch; //maxime 17.03.2016 if( iEnableColSearch > 0 ) { var selectSearch = document.getElementById( "SELECT_SEARCH_" + sGridID ); if(!selectSearch) { selectSearch = document.createElement( "select" ); selectSearch.id = "SELECT_SEARCH_" + sGridID + "_" + lModuleID; selectSearch.name = selectSearch.id; selectSearch.style.width = iWidthColSearch + "px"; selectSearch.multiple = "multiple"; for( i = 0; i < head_title_arr.length; ++i ) { if( head_title_arr[i] == "")continue; var opt = document.createElement('option'); opt.value = head_idx_arr[i]; opt.innerHTML = head_title_arr[i]; selectSearch.appendChild(opt); } } } var btnSearch = document.createElement( "input" ); btnSearch.id = "BTN_SEARCH_" + sGridID + "_" + lModuleID; btnSearch.value = "Suchen"; btnSearch.type = "button"; if( document.all ) { btnSearch.attachEvent( "onclick", function () { onBtnSearchFrameworkGrid( "BTN_SEARCH_" + sGridID + "_" + lModuleID ); } ); } else { btnSearch.addEventListener( "click", function ( evt ) { onBtnSearchFrameworkGrid( this.id ); }, false ); } } var textBetween = document.createTextNode( " " ); if( outerTableDiv.parentNode ) { if( editSearch ) outerTableDiv.parentNode.insertBefore( editSearch, outerTableDiv ); if( selectSearch ) { var textBetween2 = document.createTextNode( " " ); if( textBetween2 ) outerTableDiv.parentNode.insertBefore( textBetween2, outerTableDiv ); outerTableDiv.parentNode.insertBefore( selectSearch, outerTableDiv ); frameworkConvertSelectToMulti("SELECT_SEARCH_" + sGridID + "_" + lModuleID ,sGridID,"#","Suchspalten"); } if( textBetween ) outerTableDiv.parentNode.insertBefore( textBetween, outerTableDiv ); //NK, 17.08.2015: Buttons schoen machen if( btnSearch ) { outerTableDiv.parentNode.insertBefore( btnSearch, outerTableDiv ); $( "#" + btnSearch.id ).button(); } } $( "#" + editSearch.id ).bind( 'keydown', function ( e ) { var code = (e.keyCode ? e.keyCode : e.which); if( code == 13 ) { // Enter btnSearch.click(); } } ); } } return true; } /** * frameworkGetGridRowNum * @description Calculates the new number of rows. * This function combines the algorithms from frameworkModuleGridRecalcNumRowsAndClear and * frameworkModuleGridRecalcNumRows to have only one function withing the caluclation algorithm. * @created thomas, 14.11.2013 */ function frameworkGetGridRowNum( sIDTable, iNewHeight ) { // thomas, 14.11.2013: Reduce one line for scroll bar. var iGlobalHeight = iNewHeight - 55 - 22; var iRowNum = 0; var oEleTable = $( "#" + sIDTable ); if( oEleTable.attr( "imedall" ) == "1" ) { iRowNum = oEleTable.getGridParam( "rowNum" ); } else { iRowNum = Math.floor( iGlobalHeight / 22 ) - 1; } if( iRowNum < 1 ) { iRowNum = 1; } return iRowNum; } function frameworkModuleGridRecalcNumRowsAndClear( sIDTable, lModuleID ) { // Resize the parent module NOW. callResizeSingleModule( lModuleID, "", 0 ); var divOuterGrid = document.getElementById( "DIV_OUTER_MODULE_GRID_" + lModuleID ); if( !divOuterGrid ) { eval( "Module_Init_" + lModuleID + "();" ); divOuterGrid = document.getElementById( "DIV_OUTER_MODULE_GRID_" + lModuleID ); if( !divOuterGrid ) { return false; } } var iNewHeight = $( divOuterGrid ).height(); var iRowNum = frameworkGetGridRowNum( sIDTable, iNewHeight ); var oEleTable = $( "#" + sIDTable ); var iOldRowNum = oEleTable.getGridParam( "rowNum" ); if( iOldRowNum != iRowNum ) { oEleTable.jqGrid( "clearGridData" ).setGridParam( {rowNum: iRowNum} ); frameworkModuleGridReloadData( sIDTable ); } else { oEleTable.setGridParam( {rowNum: iRowNum} ); frameworkModuleGridReloadData( sIDTable ); } } function frameworkModuleGridRecalcNumRows( sIDTable, iNewHEight ) { var iRowNum = frameworkGetGridRowNum( sIDTable, iNewHEight ); var oEleTable = $( "#" + sIDTable ); var iOldRowNum = oEleTable.getGridParam( "rowNum" ); //if( iOldRowNum != iRowNum ) //pmi 27.09.2012: avoid reloading grids just because of calculating a single line more or less (with or without scrollbar) if( (iOldRowNum != iRowNum) && (iOldRowNum != iRowNum + 1) && (iOldRowNum != iRowNum - 1) ) { oEleTable.setGridParam( {rowNum: iRowNum} ); //P( "Update GRID " + sIDTable + " with " + iRowNum ); frameworkModuleGridReloadData( sIDTable ); } } function frameworkModuleGridReloadData( sIDTable ) { //P( "Reload GRID " + sIDTable ); $( "#" + sIDTable ).jqGrid( "clearGridData" ).trigger( "reloadGrid" ); } function onBtnSearchFrameworkGrid( sID ) { if( !sID ) { return false; } var sID_arr = sID.split( "_" ); sID_arr[ 0 ] = "EDIT"; var sIDEdit = sID_arr.slice( 0, -1 ).join( "_" ); sID_arr[ 0 ] = "SELECT"; var sIDSelect = sID_arr.join( "_" ); var oSearchSelect = document.getElementById(sIDSelect); var sSearchCol_arr; if(oSearchSelect) { sSearchCol_arr = []; for (var i = 0; i < oSearchSelect.length; i++) { if (oSearchSelect.options[i].selected) sSearchCol_arr.push(oSearchSelect.options[i].value); } }else { sSearchCol_arr = ""; } if( xajax_XCallback_OnClickModuleGridSearch( sID, document.getElementById( sIDEdit ).value, sSearchCol_arr) ) { var sIDTable = sID_arr.slice( 2, -1 ).join( "_" ); frameworkModuleGridReloadData( sIDTable ); } } function initFrameworkUploadForm( sIDUploadForm, iModuleID ) { if( parseInt( iModuleID, 10 ) < 0 ) { return false; } //setup sumbmit form using separate iframe to upload files ... jQuery( "#" + sIDUploadForm ).submit( function ( data ) { var submittingForm = jQuery( this ); var frameName = "upload" + (new Date()).getTime(); var uploadFrame = jQuery( "