(function(){ /* * jQuery 1.2.6 - New Wave Javascript * * Copyright (c) 2008 John Resig (jquery.com) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ * $Rev: 5685 $ */ // Map over jQuery in case of overwrite var _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$; var jQuery = window.jQuery = window.$ = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context ); }; // A simple way to check for HTML strings or ID strings // (both of which we optimize for) var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/, // Is it a simple selector isSimple = /^.[^:#\[\.]*$/, // Will speed up references to undefined, and allows munging its name. undefined; jQuery.fn = jQuery.prototype = { init: function( selector, context ) { // Make sure that a selection was provided selector = selector || document; // Handle $(DOMElement) if ( selector.nodeType ) { this[0] = selector; this.length = 1; return this; } // Handle HTML strings if ( typeof selector == "string" ) { // Are we dealing with HTML string or an ID? var match = quickExpr.exec( selector ); // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) selector = jQuery.clean( [ match[1] ], context ); // HANDLE: $("#id") else { var elem = document.getElementById( match[3] ); // Make sure an element was located if ( elem ){ // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id != match[3] ) return jQuery().find( selector ); // Otherwise, we inject the element directly into the jQuery object return jQuery( elem ); } selector = []; } // HANDLE: $(expr, [context]) // (which is just equivalent to: $(content).find(expr) } else return jQuery( context ).find( selector ); // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector ); return this.setArray(jQuery.makeArray(selector)); }, // The current version of jQuery being used jquery: "1.2.6", // The number of elements contained in the matched element set size: function() { return this.length; }, // The number of elements contained in the matched element set length: 0, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == undefined ? // Return a 'clean' array jQuery.makeArray( this ) : // Return just the object this[ num ]; }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery( elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; // Return the newly-formed element set return ret; }, // Force the current matched set of elements to become // the specified array of elements (destroying the stack in the process) // You should use pushStack() in order to do this, but maintain the stack setArray: function( elems ) { // Resetting the length to 0, then using the native Array push // is a super-fast way to populate an object with array-like properties this.length = 0; Array.prototype.push.apply( this, elems ); return this; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { var ret = -1; // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem && elem.jquery ? elem[0] : elem , this ); }, attr: function( name, value, type ) { var options = name; // Look for the case where we're accessing a style value if ( name.constructor == String ) if ( value === undefined ) return this[0] && jQuery[ type || "attr" ]( this[0], name ); else { options = {}; options[ name ] = value; } // Check to see if we're setting style values return this.each(function(i){ // Set all the styles for ( name in options ) jQuery.attr( type ? this.style : this, name, jQuery.prop( this, options[ name ], type, i, name ) ); }); }, css: function( key, value ) { // ignore negative width and height values if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) value = undefined; return this.attr( key, value, "curCSS" ); }, text: function( text ) { if ( typeof text != "object" && text != null ) return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); var ret = ""; jQuery.each( text || this, function(){ jQuery.each( this.childNodes, function(){ if ( this.nodeType != 8 ) ret += this.nodeType != 1 ? this.nodeValue : jQuery.fn.text( [ this ] ); }); }); return ret; }, wrapAll: function( html ) { if ( this[0] ) // The elements to wrap the target around jQuery( html, this[0].ownerDocument ) .clone() .insertBefore( this[0] ) .map(function(){ var elem = this; while ( elem.firstChild ) elem = elem.firstChild; return elem; }) .append(this); return this; }, wrapInner: function( html ) { return this.each(function(){ jQuery( this ).contents().wrapAll( html ); }); }, wrap: function( html ) { return this.each(function(){ jQuery( this ).wrapAll( html ); }); }, append: function() { return this.domManip(arguments, true, false, function(elem){ if (this.nodeType == 1) this.appendChild( elem ); }); }, prepend: function() { return this.domManip(arguments, true, true, function(elem){ if (this.nodeType == 1) this.insertBefore( elem, this.firstChild ); }); }, before: function() { return this.domManip(arguments, false, false, function(elem){ this.parentNode.insertBefore( elem, this ); }); }, after: function() { return this.domManip(arguments, false, true, function(elem){ this.parentNode.insertBefore( elem, this.nextSibling ); }); }, end: function() { return this.prevObject || jQuery( [] ); }, find: function( selector ) { var elems = jQuery.map(this, function(elem){ return jQuery.find( selector, elem ); }); return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ? jQuery.unique( elems ) : elems ); }, clone: function( events ) { // Do the clone var ret = this.map(function(){ if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) { // IE copies events bound via attachEvent when // using cloneNode. Calling detachEvent on the // clone will also remove the events from the orignal // In order to get around this, we use innerHTML. // Unfortunately, this means some modifications to // attributes in IE that are actually only stored // as properties will not be copied (such as the // the name attribute on an input). var clone = this.cloneNode(true), container = document.createElement("div"); container.appendChild(clone); return jQuery.clean([container.innerHTML])[0]; } else return this.cloneNode(true); }); // Need to set the expando to null on the cloned set if it exists // removeData doesn't work here, IE removes it from the original as well // this is primarily for IE but the data expando shouldn't be copied over in any browser var clone = ret.find("*").andSelf().each(function(){ if ( this[ expando ] != undefined ) this[ expando ] = null; }); // Copy the events from the original to the clone if ( events === true ) this.find("*").andSelf().each(function(i){ if (this.nodeType == 3) return; var events = jQuery.data( this, "events" ); for ( var type in events ) for ( var handler in events[ type ] ) jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data ); }); // Return the cloned set return ret; }, filter: function( selector ) { return this.pushStack( jQuery.isFunction( selector ) && jQuery.grep(this, function(elem, i){ return selector.call( elem, i ); }) || jQuery.multiFilter( selector, this ) ); }, not: function( selector ) { if ( selector.constructor == String ) // test special case where just one selector is passed in if ( isSimple.test( selector ) ) return this.pushStack( jQuery.multiFilter( selector, this, true ) ); else selector = jQuery.multiFilter( selector, this ); var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; return this.filter(function() { return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; }); }, add: function( selector ) { return this.pushStack( jQuery.unique( jQuery.merge( this.get(), typeof selector == 'string' ? jQuery( selector ) : jQuery.makeArray( selector ) ))); }, is: function( selector ) { return !!selector && jQuery.multiFilter( selector, this ).length > 0; }, hasClass: function( selector ) { return this.is( "." + selector ); }, val: function( value ) { if ( value == undefined ) { if ( this.length ) { var elem = this[0]; // We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type == "select-one"; // Nothing was selected if ( index < 0 ) return null; // Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[ i ]; if ( option.selected ) { // Get the specifc value for the option value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; // We don't need an array for one selects if ( one ) return value; // Multi-Selects return an array values.push( value ); } } return values; // Everything else, we just grab the value } else return (this[0].value || "").replace(/\r/g, ""); } return undefined; } if( value.constructor == Number ) value += ''; return this.each(function(){ if ( this.nodeType != 1 ) return; if ( value.constructor == Array && /radio|checkbox/.test( this.type ) ) this.checked = (jQuery.inArray(this.value, value) >= 0 || jQuery.inArray(this.name, value) >= 0); else if ( jQuery.nodeName( this, "select" ) ) { var values = jQuery.makeArray(value); jQuery( "option", this ).each(function(){ this.selected = (jQuery.inArray( this.value, values ) >= 0 || jQuery.inArray( this.text, values ) >= 0); }); if ( !values.length ) this.selectedIndex = -1; } else this.value = value; }); }, html: function( value ) { return value == undefined ? (this[0] ? this[0].innerHTML : null) : this.empty().append( value ); }, replaceWith: function( value ) { return this.after( value ).remove(); }, eq: function( i ) { return this.slice( i, i + 1 ); }, slice: function() { return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function(elem, i){ return callback.call( elem, i, elem ); })); }, andSelf: function() { return this.add( this.prevObject ); }, data: function( key, value ){ var parts = key.split("."); parts[1] = parts[1] ? "." + parts[1] : ""; if ( value === undefined ) { var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); if ( data === undefined && this.length ) data = jQuery.data( this[0], key ); return data === undefined && parts[1] ? this.data( parts[0] ) : data; } else return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ jQuery.data( this, key, value ); }); }, removeData: function( key ){ return this.each(function(){ jQuery.removeData( this, key ); }); }, domManip: function( args, table, reverse, callback ) { var clone = this.length > 1, elems; return this.each(function(){ if ( !elems ) { elems = jQuery.clean( args, this.ownerDocument ); if ( reverse ) elems.reverse(); } var obj = this; if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) ) obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") ); var scripts = jQuery( [] ); jQuery.each(elems, function(){ var elem = clone ? jQuery( this ).clone( true )[0] : this; // execute all scripts after the elements have been injected if ( jQuery.nodeName( elem, "script" ) ) scripts = scripts.add( elem ); else { // Remove any inner scripts for later evaluation if ( elem.nodeType == 1 ) scripts = scripts.add( jQuery( "script", elem ).remove() ); // Inject the elements into the document callback.call( obj, elem ); } }); scripts.each( evalScript ); }); } }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; function evalScript( i, elem ) { if ( elem.src ) jQuery.ajax({ url: elem.src, async: false, dataType: "script" }); else jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); if ( elem.parentNode ) elem.parentNode.removeChild( elem ); } function now(){ return +new Date; } jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; // Handle a deep copy situation if ( target.constructor == Boolean ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target != "object" && typeof target != "function" ) target = {}; // extend jQuery itself if only one argument is passed if ( length == i ) { target = this; --i; } for ( ; i < length; i++ ) // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) // Extend the base object for ( var name in options ) { var src = target[ name ], copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) continue; // Recurse if we're merging object values if ( deep && copy && typeof copy == "object" && !copy.nodeType ) target[ name ] = jQuery.extend( deep, // Never move original objects, clone them src || ( copy.length != null ? [ ] : { } ) , copy ); // Don't bring in undefined values else if ( copy !== undefined ) target[ name ] = copy; } // Return the modified object return target; }; var expando = "jQuery" + now(), uuid = 0, windowData = {}, // exclude the following css properties to add px exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, // cache defaultView defaultView = document.defaultView || {}; jQuery.extend({ noConflict: function( deep ) { window.$ = _$; if ( deep ) window.jQuery = _jQuery; return jQuery; }, // See test/unit/core.js for details concerning this function. isFunction: function( fn ) { return !!fn && typeof fn != "string" && !fn.nodeName && fn.constructor != Array && /^[\s[]?function/.test( fn + "" ); }, // check if an element is in a (or is an) XML document isXMLDoc: function( elem ) { return elem.documentElement && !elem.body || elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; }, // Evalulates a script in a global context globalEval: function( data ) { data = jQuery.trim( data ); if ( data ) { // Inspired by code by Andrea Giammarchi // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html var head = document.getElementsByTagName("head")[0] || document.documentElement, script = document.createElement("script"); script.type = "text/javascript"; if ( jQuery.browser.msie ) script.text = data; else script.appendChild( document.createTextNode( data ) ); // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709). head.insertBefore( script, head.firstChild ); head.removeChild( script ); } }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); }, cache: {}, data: function( elem, name, data ) { elem = elem == window ? windowData : elem; var id = elem[ expando ]; // Compute a unique ID for the element if ( !id ) id = elem[ expando ] = ++uuid; // Only generate the data cache if we're // trying to access or manipulate it if ( name && !jQuery.cache[ id ] ) jQuery.cache[ id ] = {}; // Prevent overriding the named cache with undefined values if ( data !== undefined ) jQuery.cache[ id ][ name ] = data; // Return the named cache data, or the ID for the element return name ? jQuery.cache[ id ][ name ] : id; }, removeData: function( elem, name ) { elem = elem == window ? windowData : elem; var id = elem[ expando ]; // If we want to remove a specific section of the element's data if ( name ) { if ( jQuery.cache[ id ] ) { // Remove the section of cache data delete jQuery.cache[ id ][ name ]; // If we've removed all the data, remove the element's cache name = ""; for ( name in jQuery.cache[ id ] ) break; if ( !name ) jQuery.removeData( elem ); } // Otherwise, we want to remove all of the element's data } else { // Clean up the element expando try { delete elem[ expando ]; } catch(e){ // IE has trouble directly removing the expando // but it's ok with using removeAttribute if ( elem.removeAttribute ) elem.removeAttribute( expando ); } // Completely remove the data cache delete jQuery.cache[ id ]; } }, // args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length; if ( args ) { if ( length == undefined ) { for ( name in object ) if ( callback.apply( object[ name ], args ) === false ) break; } else for ( ; i < length; ) if ( callback.apply( object[ i++ ], args ) === false ) break; // A special, fast, case for the most common use of each } else { if ( length == undefined ) { for ( name in object ) if ( callback.call( object[ name ], name, object[ name ] ) === false ) break; } else for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} } return object; }, prop: function( elem, value, type, i, name ) { // Handle executable functions if ( jQuery.isFunction( value ) ) value = value.call( elem, i ); // Handle passing in a number to a CSS property return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ? value + "px" : value; }, className: { // internal only, use addClass("class") add: function( elem, classNames ) { jQuery.each((classNames || "").split(/\s+/), function(i, className){ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) elem.className += (elem.className ? " " : "") + className; }); }, // internal only, use removeClass("class") remove: function( elem, classNames ) { if (elem.nodeType == 1) elem.className = classNames != undefined ? jQuery.grep(elem.className.split(/\s+/), function(className){ return !jQuery.className.has( classNames, className ); }).join(" ") : ""; }, // internal only, use hasClass("class") has: function( elem, className ) { return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; } }, // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { var old = {}; // Remember the old values, and insert the new ones for ( var name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } callback.call( elem ); // Revert the old values for ( var name in options ) elem.style[ name ] = old[ name ]; }, css: function( elem, name, force ) { if ( name == "width" || name == "height" ) { var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; function getWH() { val = name == "width" ? elem.offsetWidth : elem.offsetHeight; var padding = 0, border = 0; jQuery.each( which, function() { padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; }); val -= Math.round(padding + border); } if ( jQuery(elem).is(":visible") ) getWH(); else jQuery.swap( elem, props, getWH ); return Math.max(0, val); } return jQuery.curCSS( elem, name, force ); }, curCSS: function( elem, name, force ) { var ret, style = elem.style; // A helper method for determining if an element's values are broken function color( elem ) { if ( !jQuery.browser.safari ) return false; // defaultView is cached var ret = defaultView.getComputedStyle( elem, null ); return !ret || ret.getPropertyValue("color") == ""; } // We need to handle opacity special in IE if ( name == "opacity" && jQuery.browser.msie ) { ret = jQuery.attr( style, "opacity" ); return ret == "" ? "1" : ret; } // Opera sometimes will give the wrong display answer, this fixes it, see #2037 if ( jQuery.browser.opera && name == "display" ) { var save = style.outline; style.outline = "0 solid black"; style.outline = save; } // Make sure we're using the right name for getting the float value if ( name.match( /float/i ) ) name = styleFloat; if ( !force && style && style[ name ] ) ret = style[ name ]; else if ( defaultView.getComputedStyle ) { // Only "float" is needed here if ( name.match( /float/i ) ) name = "float"; name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); var computedStyle = defaultView.getComputedStyle( elem, null ); if ( computedStyle && !color( elem ) ) ret = computedStyle.getPropertyValue( name ); // If the element isn't reporting its values properly in Safari // then some display: none elements are involved else { var swap = [], stack = [], a = elem, i = 0; // Locate all of the parent display: none elements for ( ; a && color(a); a = a.parentNode ) stack.unshift(a); // Go through and make them visible, but in reverse // (It would be better if we knew the exact display type that they had) for ( ; i < stack.length; i++ ) if ( color( stack[ i ] ) ) { swap[ i ] = stack[ i ].style.display; stack[ i ].style.display = "block"; } // Since we flip the display style, we have to handle that // one special, otherwise get the value ret = name == "display" && swap[ stack.length - 1 ] != null ? "none" : ( computedStyle && computedStyle.getPropertyValue( name ) ) || ""; // Finally, revert the display styles back for ( i = 0; i < swap.length; i++ ) if ( swap[ i ] != null ) stack[ i ].style.display = swap[ i ]; } // We should always get a number back from opacity if ( name == "opacity" && ret == "" ) ret = "1"; } else if ( elem.currentStyle ) { var camelCase = name.replace(/\-(\w)/g, function(all, letter){ return letter.toUpperCase(); }); ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; // From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { // Remember the original values var left = style.left, rsLeft = elem.runtimeStyle.left; // Put in the new values to get a computed value out elem.runtimeStyle.left = elem.currentStyle.left; style.left = ret || 0; ret = style.pixelLeft + "px"; // Revert the changed values style.left = left; elem.runtimeStyle.left = rsLeft; } } return ret; }, clean: function( elems, context ) { var ret = []; context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' if (typeof context.createElement == 'undefined') context = context.ownerDocument || context[0] && context[0].ownerDocument || document; jQuery.each(elems, function(i, elem){ if ( !elem ) return; if ( elem.constructor == Number ) elem += ''; // Convert html string into DOM nodes if ( typeof elem == "string" ) { // Fix "XHTML"-style tags in all browsers elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all : front + ">"; }); // Trim whitespace, otherwise indexOf won't work as expected var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); var wrap = // option or optgroup !tags.indexOf("", "" ] || !tags.indexOf("", "" ] || tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && [ 1, "", "
" ] || !tags.indexOf("", "" ] || // matched above (!tags.indexOf("", "" ] || !tags.indexOf("", "" ] || // IE can't serialize and '; }, render: function(ignoreScript) { if (!this.params.visible) { return [''].join(''); if (jAppML.utils.redrawInvalidated.controls[this.domId] === this) jAppML.utils.redrawInvalidated.controls[this.domId] = null; } else { if (!this._hasRendered) { this.fireEvent('PreFirstRender'); this._hasRendered = true; } if (this._buffer === null || this.params.disableBuffer) { this._buffer = [this.renderBeginTag(), this.renderContents(), this.renderEndTag()]; // var script = this.renderScriptContents(); // var script2 = this.renderScriptDelayContents(); // if (script || script2) { this._buffer.push(this.renderScript()); // if (script) this._buffer.push(script); // if (script2) { // this._buffer.push('setTimeout(function() {'); // this._buffer.push(script2); // this._buffer.push('}, 200);'); // } // this._buffer.push(); // // this._buffer.push(); // //} this._buffer = this._buffer.join(''); } //alert('render:' + this.id + ':' + this._buffer); if (jAppML.utils.redrawInvalidated.controls[this.domId] === this) jAppML.utils.redrawInvalidated.controls[this.domId] = null; return this._buffer; } }, renderScriptContents: function() { return null; }, renderScriptDelayContents: function() { return null; }, registerEventHandler: function(event,ctrl,func) { var list; if (this._eventListeners[event]) list = this._eventListeners[event]; else { list = new Array(); this._eventListeners[event] = list; } list.push({ctrl:ctrl,func:func}); }, fireEvent: function(event,param) { var me = this; setTimeout(function() { try { jAppML.utils.redrawInvalidated.level++; if (me._eventListeners[event]) { var list = me._eventListeners[event]; for(var i in list) { var data = list[i]; data.func.call(data.ctrl, param, me); } } jAppML.utils.redrawInvalidated.level--; if (jAppML.utils.redrawInvalidated.level === 0 && event != "PreFirstRender") jAppML.utils.redrawInvalidated(); } catch (e) { jAppML.HandleError(new jAppML.FireEventError(e, event, param)); } },1); }, renderCallback: function(func,param,cancel) { param = JSON.stringify(param); return "jAppML.utils.callback(event,this,'" + this.domId + "','" + func + "'," + (param ? param : "null") + "," + (cancel ? "true" : "false") + ");" + (cancel ? "return false;" : ""); }, renderEventlessCallback: function(func,param,cancel) { param = JSON.stringify(param); return "jAppML.utils.callback({},this,'" + this.domId + "','" + func + "'," + (param ? param : "null") + "," + (cancel ? "true" : "false") + ");" + (cancel ? "return false;" : ""); }, renderEventlessCallbackDirect: function(func,param,cancel) { return "jAppML.utils.callback({},this,'" + this.domId + "','" + func + "'," + (param ? param : "null") + "," + (cancel ? "true" : "false") + ");" + (cancel ? "return false;" : ""); }, renderCallbackUrl: function(func,param,cancel) { return 'javascript:' + this.renderCallback(func,param,cancel); }, renderEvent: function(event, param) { param = JSON.stringify(param); return "jAppML.utils.fireEvent(this,'" + this.domId + "','" + event + "'," + param + ");"; }, renderEventUrl: function(event, param) { return 'javascript:' + this.renderEvent(event,param); }, redraw: function() { var domElement = document.getElementById(this.domId); var scriptElement = document.getElementById(this.domId + "_script"); //var scriptElement = document.getElementById(this.domId + "_script"); // if (scriptElement) { // alert('found script'); // $(scriptElement).remove(); // scriptElement = document.getElementById(this.domId + "_script"); // if (scriptElement) alert('failed to remove'); // } // TRENGER KANSKJE SJEKK PÅ OM VISIBLE? if (domElement) { var newElement = document.createElement("div") //$(domElement).replace(this.render()); newElement.innerHTML = this.render(); try{domElement.parentNode.replaceChild(newElement.firstChild, domElement);}catch(ex){} if (scriptElement) { $(scriptElement).remove(); } $('#' + this.domId).after(this.renderScript()); //alert(scriptElement.innerHTML); //var newScript = document.createElement("div"); //newScript.innerHTML = this.renderScript(); //alert(JSON.stringify(newElement.childNodes[1])); //try{scriptElement.parentNode.replaceChild(newScript.firstChild, scriptElement);}catch(ex){alert(JSON.stringify(ex));} } if (jAppML.utils.redrawInvalidated.controls[this.domId]) jAppML.utils.redrawInvalidated.controls[this.domId] = null; }, popup: function(ctrl) { var me = this; return jAppML.utils.popup(ctrl, me); }, closePopup: function(param) { var me = this; if (me._popup) { me._popup.close(); me._popup = null; } me.fireEvent('PopupClose', param); }, registerControl: function(indent, ctrl) { if (indent == 0) { this.addControl(ctrl); this._registeredControls[0] = ctrl; } else { this._registeredControls[indent-1].addControl(ctrl); this._registeredControls[indent] = ctrl; } if (ctrl.id) this[ctrl.id] = ctrl; } }); jAppML.controls.UserControl = jAppML.controls.Control.extend({ init: function(params1, params2, namingContainer, tagName, preferredWidth, preferredHeight) { this._super(params1, params2, namingContainer, tagName); this.params.preferredWidth = preferredWidth; this.params.preferredHeight = preferredHeight; } }); jAppML.controls.LiteralControl = jAppML.controls.Control.extend({ init: function(text) { this._super(); this.render = function() { return text; }; } }); jAppML.controls.EvalControl = jAppML.controls.Control.extend({ init: function(ctrl,func) { this._super(); this._ctrl = ctrl; this._func = func; }, render: function() { return this._func.call(this._ctrl); } }); jAppML.controls.ListItem = jAppML.controls.Control.extend({ init: function(params1, params2, namingContainer) { this._super(params1, params2, namingContainer, "ListItem"); }, render: function() { throw "jAppML.controls.ListItem cannot render itself."; } }); jAppML.controls.Content = jAppML.controls.Control.extend({ init: function(params1, params2, namingContainer) { this._super(params1, params2, namingContainer, "Content"); }, render: function() { throw "jAppML.controls.Content cannot render itself."; } }); jAppML.controls.ContentPlaceHolder = jAppML.controls.Control.extend({ init: function(params1, params2, namingContainer) { this._super(params1, params2, namingContainer, "ContentPlaceHolder"); }, render: function() { this.namingContainer.namedChildren[this.params.name].parent = this; return this.namingContainer.namedChildren[this.params.name].renderContents(); } }); function ImagePreloader(images, callbackComplete, callbackStep) { // store the callBack this.callbackComplete = callbackComplete; this.callbackStep = callbackStep; // initialize internal state. this.nLoaded = 0; this.nProcessed = 0; this.aImages = new Array; // record the number of images. this.nImages = images.length; //alert(this.nImages); //var me = this; //var allImages = images; // for each image, call preload() for ( var i = 0; i < images.length; i++ ) { this.preload(images[i]); } } ImagePreloader.prototype.preload = function(image) { // create new Image object and add to array var oImage = new Image; this.aImages.push(oImage); // set up event handlers for the Image object oImage.onload = ImagePreloader.prototype.onload; oImage.onerror = ImagePreloader.prototype.onerror; oImage.onabort = ImagePreloader.prototype.onabort; // assign pointer back to this. oImage.oImagePreloader = this; oImage.bLoaded = false; // assign the .src property of the Image object oImage.src = image.Url; } ImagePreloader.prototype.onComplete = function() { this.nProcessed++; var me = this; me.callbackStep(); if ( me.nProcessed == me.nImages ) { me.callbackComplete(me.aImages, me.nLoaded); } } ImagePreloader.prototype.onload = function() { this.bLoaded = true; this.oImagePreloader.nLoaded++; this.oImagePreloader.onComplete(); } ImagePreloader.prototype.onerror = function() { this.bError = true; this.oImagePreloader.onComplete(); } ImagePreloader.prototype.onabort = function() { this.bAbort = true; this.oImagePreloader.onComplete(); } jAppML.controls.Button = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'input'); this._text = this.params.text ? this.params.text : ''; this.attributes['type'] = 'button'; this.fixedClass = "jmlInput jmlButton"; }, prepareAttributes: function() { this._super(); this.attributes['value'] = this._text; this.attributes['onclick'] = this.renderCallback('domOnClick', null); }, text: function(value) { if (typeof(value) !== 'undefined') { if (this._text != value) { this._text = value; try{document.getElementById(this.domId).value = value;}catch(ex){} this.invalidate(); this.fireEvent('TextChanged'); } } else return this._text; }, domOnClick: function(param, domElement) { this.fireEvent('Click'); } });jAppML.controls.GroupBox = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'div'); this.params.allowCollapse = (this.params.allowCollapse == "true" || this.params.allowCollapse === true); this.fixedClass = "jmlGroupBox"; this.params.maximized = (this.params.maximized == 'true' || this.params.maximized === true); }, prepareAttributes: function() { this._super(); if (this.maximized()) { this.attributes['style'] = (this.attributes['style'] ? this.attributes['style'] : "") + ';position:absolute;top:0px;left:0px;width:100%;height:100%;'; } if (this.collapsed()) { this.attributes['class'] = (this.attributes['class'] ? this.attributes['class'] : "") + ' jmlGroupBoxCollapsed'; } }, renderContents: function() { var out = []; out.push('
'); if (this.params.allowCollapse) { out.push(''); } out.push('
'); out.push(this.namedChildren['caption'] ? this.namedChildren['caption'].renderChildren() : (this.params.caption ? this.params.caption : '')); out.push(''); out.push(''); if (this.collapsed()) out.push(this.params.collapsedText ? this.params.collapsedText : ''); else out.push(this.params.expandedText ? this.params.expandedText : ''); out.push('
'); if (!this.collapsed()) out.push(this.namedChildren['content'] ? this.namedChildren['content'].renderChildren() : (this.params.content ? this.params.content : this.renderChildren())); out.push('
'); return out.join(''); }, domOnCollapseToggle: function() { this.collapsed(!this.collapsed()); }, content: function(value) { if (typeof(value) !== 'undefined') { if (this.params.content != value) { this.params.content = value; this.invalidate(true); this.fireEvent('ContentChanged'); } } else return this.params.content; }, maximized: function(value) { if (typeof(value) !== 'undefined') { if (this.params.maximized != value) { this.params.maximized = value; this.invalidate(true); this.fireEvent('MaximizedChanged'); } } else return this.params.maximized; }, collapsed: function(value) { if (typeof(value) !== 'undefined') { if (this.params.collapsed != value) { this.params.collapsed = value; this.invalidate(true); this.fireEvent('CollapsedChanged'); } } else return this.params.collapsed; }, caption: function(value) { if (typeof(value) !== 'undefined') { if (this.params.caption != value) { this.params.caption = value; this.invalidate(true); this.fireEvent('CaptionChanged'); } } else return this.params.caption; } });jAppML.controls.LinkButton = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'a'); this.fixedClass = "jmlInput jmlLinkButton"; }, prepareAttributes: function() { this._super(); this.attributes['href'] = "javascript:void(0);"; this.attributes['onclick'] = this.renderCallbackUrl('domOnClick', null); }, renderContents: function() { var out = []; if (this.params.text) out.push(this.params.text); else { out.push(this.renderChildren()); } return out.join(); }, text: function(value) { if (typeof(value) !== 'undefined') { if (this.params.text != value) { this.params.text = value; this.invalidate(true); this.fireEvent('TextChanged'); } } else return this.params.text; }, domOnClick: function(param, domElement) { this.fireEvent('Click'); } });jAppML.controls.Literal = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'span'); this._text = this.params.text ? this.params.text : ''; this.fixedClass = "jmlLiteral"; }, renderContents: function() { return this.text(); }, text: function(value) { if (typeof(value) !== 'undefined') { if (this._text != value) { this._text = value; try{document.getElementById(this.domId).innerHTML = value;}catch(ex){} this.invalidate(); this.fireEvent('TextChange'); } } else return this._text; }, value: function(value) { return this.text(value); }, clear: function() { this.text(""); }, display: function(value) { return jAppML.controls.Literal.display(value); } }); jAppML.controls.Literal.display = function(value) { if (value) return value; else return " "; }; jAppML.controls.View = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'view'); } }); jAppML.controls.MultiView = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'span'); this.fixedClass = ""; this.params.activeViewIndex = this.params.activeViewIndex ? parseInt(this.params.activeViewIndex) : 0; }, renderContents: function() { var out = []; out.push(this.children[this.params.activeViewIndex].renderChildren()); return out.join(''); }, addControl: function(ctrl) { if (ctrl instanceof jAppML.controls.View) this._super(ctrl); }, activeViewIndex: function(value) { if (typeof(value) !== 'undefined') { if (this.params.activeViewIndex != value) { this.params.activeViewIndex = value; this.invalidate(true); this.fireEvent('ActiveViewIndexChange'); } } else return this.params.activeViewIndex; } }); jAppML.controls.Panel = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'div'); this.fixedClass = "jmlPanel"; this.params.maximized = (this.params.maximized == 'true' || this.params.maximized === true); }, prepareAttributes: function() { this._super(); if (this.maximized()) { this.attributes['style'] = (this.attributes['style'] ? this.attributes['style'] : "") + ';position:absolute;top:0px;left:0px;width:100%;height:100%;'; } }, renderContents: function() { var out = []; out.push('
'); out.push(this.namedChildren['caption'] ? this.namedChildren['caption'].renderChildren() : (this.params.caption ? this.params.caption : '')); out.push('
'); out.push(this.namedChildren['content'] ? this.namedChildren['content'].renderChildren() : (this.params.content ? this.params.content : this.renderChildren())); out.push('
'); return out.join(''); }, content: function(value) { if (typeof(value) !== 'undefined') { if (this.params.content != value) { this.params.content = value; this.invalidate(true); this.fireEvent('ContentChanged'); } } else return this.params.content; }, maximized: function(value) { if (typeof(value) !== 'undefined') { if (this.params.maximized != value) { this.params.maximized = value; this.invalidate(true); this.fireEvent('MaximizedChanged'); } } else return this.params.maximized; }, caption: function(value) { if (typeof(value) !== 'undefined') { if (this.params.caption != value) { this.params.caption = value; this.invalidate(true); this.fireEvent('CaptionChanged'); } } else return this.params.caption; } });jAppML.utils.popup = function(ctrl,caller) { var ctrlObject = {}; ctrlObject.id = jAppML.utils.getUniqueId(); //ctrl._popup = ctrlObject; caller._popup = ctrlObject; ctrl.closePopup = function(p) { caller.closePopup(p); }; var width = ctrl.params.preferredWidth; var height = ctrl.params.preferredHeight; var oldLeft = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft; var oldTop = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop; var winScrollHeight = document.documentElement.scrollHeight ? document.documentElement.scrollHeight : document.body.scrollHeight; var winScrollWidth = document.documentElement.scrollWidth ? document.documentElement.scrollWidth : document.body.scrollWidth; var winHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight; var winWidth = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth; var coverHeight = (winHeight > winScrollHeight ? winHeight : winScrollHeight); var coverWidth = (winWidth > winScrollWidth ? winWidth : winScrollWidth); // var iframe = document.createElement('iframe'); // iframe.style.width = coverWidth + 'px'; // iframe.style.height = coverHeight + 'px'; // iframe.style.position = "absolute"; // iframe.style.top = (oldTop) + "px"; // iframe.style.left = (oldLeft) + "px"; // iframe.style.opacity = "0.0"; // iframe.style.filter = "alpha(opacity = 0)"; // iframe.id = ctrlObject.id + "_iframe"; var overlay = document.createElement('div'); overlay.style.width = coverWidth + 'px'; overlay.style.height = coverHeight + 'px'; overlay.style.position = "absolute"; overlay.style.top = "0px"; overlay.style.left = "0px"; overlay.style.opacity = "0.6"; overlay.style.filter = "alpha(opacity = 60)"; overlay.style.backgroundColor = "#AAA"; //overlay.style.cursor = "wait"; overlay.id = ctrlObject.id + "_overlay"; //alert(oldTop + " " + typeof(oldTop)); var container = document.createElement('div'); if (!width) width= 200; if (!height) height = 200; container.style.width = width+'px'; container.style.marginLeft = '' + (oldLeft - (width/2)) + 'px'; container.style.position = "absolute"; container.style.top = "50%"; container.style.left = "50%"; container.style.padding = "0px 0px 0px 0px"; container.style.backgroundColor = "Transparent"; container.id = ctrlObject.id + "_container"; container.innerHTML = ctrl.render(); // document.body.appendChild(iframe); document.body.appendChild(overlay); document.body.appendChild(container); //container.style.height = height+'px'; var fixoffset = 100 - (container.offsetHeight/2); if (fixoffset < 0) fixoffset = 0; container.style.marginTop = '' + (oldTop - (container.offsetHeight/2) - fixoffset) + 'px'; if (jAppML.utils.popup.counter === 0) { jAppML.utils.popup.oldOverflow = document.body.style.overflow; jAppML.utils.popup.oldOverflowX = document.body.style.overflowX; jAppML.utils.popup.oldOverflowY = document.body.style.overflowY; //document.body.style.overflow = "hidden"; //if (document.documentElement) document.documentElement.style.overflow = "hidden"; }; jAppML.utils.popup.counter++; // if (document.body.scrollLeft) document.body.scrollLeft = oldLeft; // else document.documentElement.scrollLeft = oldLeft; // if (document.body.scrollTop) document.body.scrollTop = oldTop; // else document.documentElement.scrollTop = oldTop; ctrlObject.close = function() { // var a = document.getElementById(iframe.id); var b = document.getElementById(overlay.id); var c = document.getElementById(container.id); c.parentNode.removeChild(c); b.parentNode.removeChild(b); // a.parentNode.removeChild(a); jAppML.utils.popup.counter--; if (jAppML.utils.popup.counter === 0) { document.body.style.overflow = jAppML.utils.popup.oldOverflow; document.body.style.overflowX = jAppML.utils.popup.oldOverflowX; document.body.style.overflowY = jAppML.utils.popup.oldOverflowY; if (document.documentElement) document.documentElement.style.overflow = ""; }; }; return ctrlObject; }; jAppML.utils.popup.counter = 0; jAppML.utils.popup.oldOverflow = ''; jAppML.utils.popup.oldOverflowX = ''; jAppML.utils.popup.oldOverflowY = ''; jAppML.controls.Tab = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'div'); } }); jAppML.controls.TabStrip = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'table'); this.fixedClass = "jmlTabStrip"; this.attributes['cellspacing'] = '0'; this.attributes['cellpadding'] = '0'; this.params.activeTabIndex = this.params.activeTabIndex ? parseInt(this.params.activeTabIndex) : 0; }, renderContents: function() { var out = []; out.push(''); out.push(''); if (this.namedChildren['left']) { out.push(''); } var index = this.activeTabIndex(); for (var i = 0; i < this.children.length; i++) { var tab = this.children[i]; var active = (i === index); var prevActive = ((i - 1) === index); var nextActive = ((i + 1) === index); var class_l = ''; var class_lh = ''; var class_m = ''; var class_mh = ''; var class_r = ''; var class_rh = ''; if (i == 0) { class_l = active ? 'tab1l' : 'tab2l'; class_lh = 'tab3l'; } else { class_l = 'tab' + (prevActive ? '1' : '2') + (active ? '1' : '2'); class_lh = 'tab' + (prevActive ? '1' : '2') + '3'; } class_m = (active ? 'tabm tab1' : 'tabm tab2') + (i == 0 ? ' tabl' : (i == this.children.length - 1 ? ' tabr' : '')); class_mh = 'tabm tab3' + (i == 0 ? ' tabl' : (i == this.children.length - 1 ? ' tabr' : '')); if (i == this.children.length - 1) { class_r = active ? 'tab1r' : 'tab2r'; class_rh = 'tab3r'; } else { class_rh = nextActive ? 'tab31' : 'tab32'; class_r = 'tab' + (active ? '1' : '2') + (nextActive ? '1' : '2'); } out.push(''); if (i == this.children.length - 1) { out.push(''); } } if (this.namedChildren['right']) { out.push(''); out.push(''); } else { out.push(''); } out.push('
'); out.push(this.namedChildren['left'].renderChildren()); out.push(''); out.push(tab.params.caption); out.push(''); out.push(this.namedChildren['right'].renderChildren()); out.push('
'); out.push('
'); out.push(this.children[index].renderChildren()); //out.push('
 
'); out.push('
                                                                                                                                                              
'); out.push('
'); return out.join(''); }, onDomTabClick: function(param) { this.activeTabIndex(param); }, onDomTabMouseOver: function(param, elem) { elem.previousSibling.setAttribute("class", param[0]); elem.previousSibling.setAttribute("className", param[0]); elem.setAttribute("class", param[1]); elem.setAttribute("className", param[1]); elem.nextSibling.setAttribute("class", param[2]); elem.nextSibling.setAttribute("className", param[2]); }, onDomTabMouseOut: function(param, elem) { elem.previousSibling.setAttribute("class", param[0]); elem.previousSibling.setAttribute("className", param[0]); elem.setAttribute("class", param[1]); elem.setAttribute("className", param[1]); elem.nextSibling.setAttribute("class", param[2]); elem.nextSibling.setAttribute("className", param[2]); }, addControl: function(ctrl) { if (ctrl instanceof jAppML.controls.Tab || ctrl instanceof jAppML.controls.Content) this._super(ctrl); }, activeTabIndex: function(value) { if (typeof (value) !== 'undefined') { if (this.params.activeTabIndex != value) { this.params.activeTabIndex = value; this.invalidate(true); this.fireEvent('ActiveTabIndexChange'); } } else return this.params.activeTabIndex; } }); jAppML.controls.CssButton = jAppML.controls.LinkButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlCssButton"; }, renderContents: function() { var out = []; out.push('
'); out.push(this._super()); out.push('
'); return out.join(''); } }); jAppML.controls.CssButton2 = jAppML.controls.LinkButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlCssButton"; }, renderContents: function() { var out = []; out.push('
'); out.push(this._super()); out.push('
'); return out.join(''); } }); jAppML.controls.LinkToggleButton = jAppML.controls.LinkButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlLinkButton jmlLinkToggleButton"; this._eventHandlerIsRegistered = false; if (!this.params.control) { if (this.params.value) this.params.value = (this.params.value === true || this.params.value === "true"); else this.params.value = true; } }, prepareAttributes: function() { if (!this._eventHandlerIsRegistered && this.params.control) { // set up eventHandler var me = this; with(this.namingContainer) { var ctrl = eval(me.params.control); var eventName = me.params.controlProperty.substr(0,1).toUpperCase() + me.params.controlProperty.substr(1, me.params.controlProperty.length -1) + "Changed"; ctrl.registerEventHandler(eventName, me, me.onPropertyChanged); } this._eventHandlerIsRegistered = true; } this._super(); var stateClass = this.value() ? this.params.classTrue : this.params.classFalse; this.attributes['class'] = this.fixedClass + (this.params['class'] ? (' ' + this.params['class']) : '') + (stateClass ? (' ' + stateClass) : ''); }, renderContents: function() { // BØR OPTIMALISERES return this.value() ? (this.params.textTrue ? this.params.textTrue : (this.namedChildren['on'] ? this.namedChildren['on'].renderChildren() : this._super())) : (this.params.textFalse ? this.params.textFalse : (this.namedChildren['off'] ? this.namedChildren['off'].renderChildren() : this._super())); }, onPropertyChanged: function(param, ctrl) { this.invalidate(true); }, value: function(value) { var me = this; if (typeof(value) !== "undefined") { if (this.params.control) { with(this.namingContainer) { var ctrl = eval(me.params.control); ctrl[me.params.controlProperty](value); } } else { if (this.params.value !== value) { this.params.value = value; this.invalidate(true); this.fireEvent("ValueChanged"); } } } else { var result = null; if (this.params.control) { with(this.namingContainer) { var ctrl = eval(me.params.control); result = ctrl[me.params.controlProperty](); } } else result = this.params.value; return result; } }, textTrue: function(value) { if (typeof(value) !== 'undefined') { if (this.params.textTrue != value) { this.params.textTrue = value; try{document.getElementById(this.domId).value = value;}catch(ex){} this.invalidate(true); this.fireEvent('TextTrueChanged'); } } else return this._textTrue; }, textFalse: function(value) { if (typeof(value) !== 'undefined') { if (this.params.textFalse != value) { this.params.textFalse = value; try{document.getElementById(this.domId).value = value;}catch(ex){} this.invalidate(true); this.fireEvent('TextFalseChanged'); } } else return this._textFalse; }, domOnClick: function(param, domElement) { this.value(!this.value()); } });jAppML.controls.ToggleButton = jAppML.controls.Button.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlButton jmlToggleButton"; this._eventHandlerIsRegistered = false; if (!this.params.control) { this.params.value = (this.params.value || this.params.value == "true"); } }, prepareAttributes: function() { if (!this._eventHandlerIsRegistered && this.params.control) { // set up eventHandler var me = this; with(this.namingContainer) { var ctrl = eval(me.params.control); var eventName = me.params.controlProperty.substr(0,1).toUpperCase() + me.params.controlProperty.substr(1, me.params.controlProperty.length -1) + "Changed"; ctrl.registerEventHandler(eventName, me, me.onPropertyChanged); } this._eventHandlerIsRegistered = true; } this._super(); this.attributes['value'] = this.value() ? (this.params.textTrue ? this.params.textTrue : (this.params.text ? this.params.text : '')) : (this.params.textFalse ? this.params.textFalse : (this.params.text ? this.params.text : '')); }, onPropertyChanged: function(param, ctrl) { this.invalidate(true); }, value: function(value) { var me = this; if (typeof(value) !== "undefined") { if (this.params.control) { with(this.namingContainer) { var ctrl = eval(me.params.control); ctrl[me.params.controlProperty](value); } } else { if (this.params.value !== value) { this.params.value = value; this.invalidate(true); this.fireEvent("ValueChanged"); } } } else { var result = null; if (this.params.control) { with(this.namingContainer) { var ctrl = eval(me.params.control); result = ctrl[me.params.controlProperty](); } } else result = this.params.value; return result; } }, textTrue: function(value) { if (typeof(value) !== 'undefined') { if (this.params.textTrue != value) { this.params.textTrue = value; try{document.getElementById(this.domId).value = value;}catch(ex){} this.invalidate(true); this.fireEvent('TextTrueChanged'); } } else return this._textTrue; }, textFalse: function(value) { if (typeof(value) !== 'undefined') { if (this.params.textFalse != value) { this.params.textFalse = value; try{document.getElementById(this.domId).value = value;}catch(ex){} this.invalidate(true); this.fireEvent('TextFalseChanged'); } } else return this._textFalse; }, domOnClick: function(param, domElement) { this.value(!this.value()); } });jAppML.controls.CheckBox = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'input'); this._checked = this.params.checked == "true" || this.params.checked == true; this.attributes['type'] = 'checkbox'; this.fixedClass = "jmlInput jmlCheckBox"; this._hasFocus = false; }, prepareAttributes: function() { this._super(); this.attributes[''] = this._checked ? "checked" : ""; this.attributes['onclick'] = this.renderCallback('domOnClick', null); this.attributes['onblur'] = this.renderCallback('domOnBlur', null); this.attributes['onmouseover'] = this.renderCallback('domOnMouseOver', null); this.attributes['onmouseout'] = this.renderCallback('domOnMouseOut', null); }, checked: function(value) { if (typeof(value) !== 'undefined') { if (this._checked != value) { this._checked = value; try{document.getElementById(this.domId).checked = value;}catch(ex){} this.invalidate(); this.fireEvent('CheckedChange'); this.fireEvent('ValueChange'); } } else { if (typeof(this._checked) === 'undefined') this._checked = false; return this._checked; } }, value: function(value) { return this.checked(value); }, clear: function() { this.value(false); }, focus: function(value) { document.getElementById(this.domId).focus(); }, domOnFocus: function(param, domElement) { $(domElement).removeClass('jmlCheckBox_hover'); $(domElement).addClass('jmlCheckBox_focus'); this._hasFocus = true; }, domOnBlur: function(param, domElement) { $(domElement).removeClass('jmlCheckBox_hover'); $(domElement).removeClass('jmlCheckBox_focus'); this._hasFocus = false; }, domOnMouseOver: function(param, domElement) { if (!this._hasFocus) $(domElement).addClass('jmlCheckBox_hover'); }, domOnMouseOut: function(param, domElement) { $(domElement).removeClass('jmlCheckBox_hover'); }, domOnClick: function(param, domElement) { this.value(domElement.checked); }, display: function(value) { return jAppML.controls.CheckBox.display(value); }, display2: function(value) { return jAppML.controls.CheckBox.display2(value); } }); jAppML.controls.CheckBox.display = function(value) { if (value == true || value == "True" || value == "true" || value == "TRUE") return "X"; else return " "; }; jAppML.controls.CheckBox.display2 = function(value) { if (value == true || value == "True" || value == "true" || value == "TRUE") return T("check_true"); else return T("check_false"); }; jAppML.controls.CssToggleButton = jAppML.controls.LinkToggleButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlCssButton jmlCssToggleButton"; }, renderContents: function() { var out = []; out.push('
'); out.push(this._super()); out.push('
'); return out.join(''); } }); jAppML.controls.CssToggleButton2 = jAppML.controls.LinkToggleButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlCssButton jmlCssToggleButton"; }, renderContents: function() { var out = []; out.push('
'); out.push(this._super()); out.push('
'); return out.join(''); } }); jAppML.controls.Div = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'div'); } });jAppML.controls.DivButton = jAppML.controls.LinkButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlDivButton"; }, renderContents: function() { out.push('
'); } }); jAppML.controls.DivToggleButton = jAppML.controls.LinkToggleButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlDivButton jmlDivToggleButton"; }, renderContents: function() { out.push('
'); } }); jAppML.controls.DropDown = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'select'); this.fixedClass = "jmlInput jmlDropDown"; if (!this.params.selectedIndex) this.params.selectedIndex = 0; else this.params.selectedIndex = parseInt(this.params.selectedIndex); this._hasResolvedSelectedIndex = false; if (this.params.possibleValues) { this.children = this.params.possibleValues; } }, prepareAttributes: function() { this._super(); this.attributes['onchange'] = this.renderCallback('domOnChange', null); }, addControl: function(ctrl) { if (ctrl instanceof jAppML.controls.ListItem) this.children.push(ctrl.params); }, renderContents: function() { var out = []; for(var i = 0; i < this.children.length; i++) { var item = this.children[i]; out.push(''); } return out.join(''); }, value: function(value) { if (typeof(value) !== 'undefined') { this.selectedValue(value); } else return this.selectedValue(); }, selectedIndex: function(value) { if (typeof(value) !== 'undefined' && !this._hasResolvedSelectedIndex) { for(var i = 0; i < this.children.length; i++) { var item = this.children[i]; if ((item.value == this.params.selectedValue && this.params.selectedValue) || (item.text == this.params.selectedText && this.params.selectedText) || item.selected) {this.params.selectedIndex = i;break;} } this._hasResolvedSelectedIndex = true; } if (typeof(value) !== 'undefined') { if (this.params.selectedIndex != value) { this.params.selectedIndex = value; try{document.getElementById(this.domId).selectedIndex = value; this.params.selectedIndex = i; this._hasResolvedSelectedIndex = true;}catch(ex){} this.invalidate(); this.fireEvent('Change'); } } else return this.params.selectedIndex; }, selectedValue: function(value) { if (typeof(value) !== 'undefined') { for(var i = 0; i < this.children.length; i++) { if (this.children[i].value == value) {this.selectedIndex(i);return;} } } else return this.children[this.selectedIndex()].value; }, selectedText: function(value) { if (typeof(value) !== 'undefined') { for(var i = 0; i < this.children.length; i++) { if (this.children[i].text == value) {this.selectedIndex(i);return;} } } else return this.children[this.selectedIndex()].text; }, domOnChange: function(param, domElement) { if (this.params.selectedIndex != domElement.selectedIndex) { this.params.selectedIndex = domElement.selectedIndex; this.invalidate(); this.fireEvent('SelectedIndexChanged'); } } }); jAppML.controls.ImageToggleButton = jAppML.controls.LinkToggleButton.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.fixedClass = "jmlInput jmlImageButton jmlImageToggleButton"; }, renderContents: function() { return ''; }, imageUrl: function(value) { if (typeof(value) !== 'undefined') { if (this.params.imageUrl != value) { this.params.imageUrl = value; this.invalidate(true); this.fireEvent('ImageUrlChanged'); } } else return this.params.imageUrl; }, imageUrlTrue: function(value) { if (typeof(value) !== 'undefined') { if (this.params.imageUrlTrue != value) { this.params.imageUrlTrue = value; this.invalidate(true); this.fireEvent('ImageUrlTrueChanged'); } } else return this.params.imageUrlTrue; }, imageUrlFalse: function(value) { if (typeof(value) !== 'undefined') { if (this.params.imageUrlFalse != value) { this.params.imageUrlFalse = value; this.invalidate(true); this.fireEvent('ImageUrlFalseChanged'); } } else return this.params.imageUrlFalse; } }); jAppML.controls.ProgressBar = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'div'); this.params.maxValue = this.params.maxValue ? parseInt(''+this.params.maxValue) : 1; this.params.minValue = this.params.minValue ? parseInt(''+this.params.minValue) : 0; this.params.defaultIncrement = this.params.defaultIncrement ? parseInt(''+this.params.defaultIncrement) : 1; this.params.value = this.params.value ? parseInt(''+this.params.value) : this.params.minValue; this.fixedClass = "jmlProgressBar"; }, renderContents: function() { var out = []; out.push('
'); return out.join(''); }, value: function(value) { if (typeof(value) !== 'undefined') { if (this.params.value != value) { this.params.value = value; var percent = ((this.params.value - this.params.minValue) / (this.params.maxValue - this.params.minValue)) * 100; document.getElementById(this.domId + '_progress').style.width = '' + percent + '%'; this.invalidate(); this.fireEvent('ValueChanged'); } } else return this.params.value; }, maxValue: function(value) { if (typeof(value) !== 'undefined') { if (this.params.maxValue != value) { this.params.maxValue = value; this.invalidate(true); this.fireEvent('MaxValueChanged'); } } else return this.params.maxValue; }, minValue: function(value) { if (typeof(value) !== 'undefined') { if (this.params.minValue != value) { this.params.minValue = value; this.invalidate(true); this.fireEvent('MinValueChanged'); } } else return this.params.minValue; }, increment: function(value) { if (typeof(value) !== 'undefined') { this.value(this.value() + this.params.defaultIncrement); } else { this.value(this.value() + value); } }, clear: function() { this.value(this.params.minValue); } }); jAppML.controls.RadioButtonList = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'span'); this.fixedClass = "jmlInput jmlRadioButtonList"; if (!this.params.selectedIndex) this.params.selectedIndex = 0; else this.params.selectedIndex = parseInt(this.params.selectedIndex); this._hasResolvedSelectedIndex = false; }, addControl: function(ctrl) { if (ctrl instanceof jAppML.controls.ListItem) this.children.push(ctrl.params); }, renderContents: function() { var out = []; for(var i = 0; i < this.children.length; i++) { var item = this.children[i]; out.push(''); out.push(text); out.push('
'); } return out.join(''); }, value: function(value) { if (typeof(value) !== 'undefined') { this.selectedValue(value); } else return this.selectedValue(); }, selectedIndex: function(value) { if (!this._hasResolvedSelectedIndex) { for(var i = 0; i < this.children.length; i++) { var item = this.children[i]; if ((item.value == this.params.selectedValue && this.params.selectedValue) || (item.text == this.params.selectedText && this.params.selectedText) || item.selected) {this.params.selectedIndex = i;break;} } this._hasResolvedSelectedIndex = true; } if (typeof(value) !== 'undefined') { if (this.params.selectedIndex != value) { this.params.selectedIndex = value; try{document.getElementById(this.domId).selectedIndex = value;}catch(ex){} this.invalidate(); this.fireEvent('Change'); } } else return this.params.selectedIndex; }, selectedValue: function(value) { if (typeof(value) !== 'undefined') { for(var i = 0; i < this.children.length; i++) { if (this.children[i].value == value) {this.selectedIndex(i);return;} } } else return this.children[this.selectedIndex()].value; }, selectedText: function(value) { if (typeof(value) !== 'undefined') { for(var i = 0; i < this.children.length; i++) { if (this.children[i].text == value) {this.selectedIndex(i);return;} } } else return this.children[this.selectedIndex()].text; }, domOnChange: function(param, domElement) { if (this.params.selectedIndex != param) { this.params.selectedIndex = param; this.invalidate(); this.fireEvent('SelectedIndexChanged'); } } }); jAppML.controls.Span = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'span'); } });jAppML.controls.TextBox = jAppML.controls.Control.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent, 'input'); this._text = this.params.text ? this.params.text : ''; this.attributes['type'] = 'text'; this.fixedClass = "jmlInput jmlTextBox"; this._hasFocus = false; }, prepareAttributes: function() { this._super(); this.attributes['value'] = (this._text ? this._text : "").replace('"','"', 'g'); this.attributes['onchange'] = this.renderCallback('domOnChange', null); this.attributes['onkeyup'] = this.renderCallback('domOnKeyUp', null); this.attributes['onfocus'] = this.renderCallback('domOnFocus', null); this.attributes['onblur'] = this.renderCallback('domOnBlur', null); this.attributes['onmouseover'] = this.renderCallback('domOnMouseOver', null); this.attributes['onmouseout'] = this.renderCallback('domOnMouseOut', null); }, text: function(value) { if (typeof(value) !== 'undefined') { if (this._text != value) { this._text = value; try{document.getElementById(this.domId).value = value;}catch(ex){} this.invalidate(); this.fireEvent('TextChange'); this.fireEvent('ValueChange'); } } else return this._text; }, value: function(value) { return this.text(value); }, clear: function() { this.text(""); }, focus: function(value) { document.getElementById(this.domId).focus(); }, select: function(value) { document.getElementById(this.domId).select(); }, domOnFocus: function(param, domElement) { $(domElement).removeClass('jmlTextBox_hover'); $(domElement).addClass('jmlTextBox_focus'); this._hasFocus = true; }, domOnBlur: function(param, domElement) { $(domElement).removeClass('jmlTextBox_hover'); $(domElement).removeClass('jmlTextBox_focus'); this._hasFocus = false; }, domOnMouseOver: function(param, domElement) { if (!this._hasFocus) $(domElement).addClass('jmlTextBox_hover'); }, domOnMouseOut: function(param, domElement) { $(domElement).removeClass('jmlTextBox_hover'); }, domOnChange: function(param, domElement) { this.text(domElement.value); }, domOnKeyUp: function(param, domElement, evt) { var keyCode = evt.keyCode ? evt.keyCode : evt.which; var shiftKey = evt.shiftKey; if (this._text != domElement.value) { this._text = domElement.value; this.fireEvent('TextChange'); this.fireEvent('ValueChange'); this.invalidate(false); } this.fireEvent('KeyUp', {keyCode:keyCode, shiftKey:shiftKey}); } }); jAppML.controls.TextBox.display = function(value) { if (value) return value; else return " "; }; jAppML.controls.PasswordBox = jAppML.controls.TextBox.extend({ init: function(params1, params2, parent) { this._super(params1, params2, parent); this.attributes['type'] = 'password'; this.fixedClass = "jmlInput jmlTextBox jmlPasswordBox"; } }); var baseControlVersion = {"LocalModifications":false,"Major":0,"Minor":0,"Name":"jAppML","Revision":660};