<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,13 +1,53 @@
 TestMonkey
-Automated Javascript Unit Test Framework
+Automated HTML and Javascript Unit Test Framework
 
+WARNING: This is brand new spanking code and is not yet stable and should be used with precaution. 
 
-This is brand new spanking code and is not yet stable and should be used with precaution. 
+Look in the tests folder for the manifest.js file for an example of a set of suites.
 
+Each test suite has one or more tests.  Each test has one or more test assertions.
 
+For each assertion, there are some built-in assertion helpers:
 
+- assert: generic assertion
+- assertVisible: assert that visibility:visible
+- assertHidden: assert that visibility:hidden
+- assertDisabled: assert that the element is disabled
+- assertEnabled: assert that the element is enabled
+- assertCSS: assert a CSS value, for example a border
+- assertValue: assert the value of an element, usually a form element
+- assertText: assert the text value of an element
+- assertAttr: assert an element's attribute value
+- assertClass: assert that an element has a specific CSS class
+- assertHTML: assert that an element's HTML equals a specific value
+- assertEmpty: assert that an element is empty (no children)
+- assertChecked: assert that a checkbox is checked
+- assertUnchecked: assert that a checkbox is unchecked
 
-Copyright 2006-2008 Appcelerator, Inc.
+You use the assertions with a jQuery selector.  For example:
+
+$('#my_div').assertHidden();
+
+or
+
+$('#my_div').assertCSS('border','1px solid red');
+
+
+You can introduce your own new assertion types by calling the function 
+TestMonkey.installAssertionType.  Example for empty:
+
+TestMonkey.installAssertionType('Empty',function(testcase,assertion,args)
+{
+	return [this.text()=='',this.text()];
+});
+
+
+
+Interested in helping out?  Email me at jhaynie@gmail.com.
+
+
+
+Copyright 2008 Appcelerator, Inc.
 
    Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
    you may not use this file except in compliance with the License.</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 /*!(c) 2006-2008 Appcelerator, Inc. http://appcelerator.org
  * Licensed under the Apache License, Version 2.0. Please visit
  * http://license.appcelerator.com for full copy of the License.
- * Version: 3.0.0, Released: 10/24/2008
+ * Version: 3.0.0, Released: 11/04/2008
  **/
 
 /*- The following file(s) are subject to license agreements by their respective license owners. Ends at text: END THIRD PARTY SOURCE */
@@ -3843,7 +3843,7 @@ AppC.Version =
 	major: parseInt('3'),
 	minor: parseInt('0'),
 	revision: parseInt('0'),
-	date: '10/24/2008',
+	date: '11/04/2008',
 	toString:function()
 	{
 		return this.value;
@@ -3875,8 +3875,8 @@ AppC.config =
 //
 AppC.params = 
 {
-	debug: 0   /* set to 1 to turn on verbose logging, 2 to turn on only pub/sub logging */,
-	delayCompile: false, /* generally don't touch this unless you really know why */
+	debug: 0                 /* set to 1 to turn on verbose logging, 2 to turn on only pub/sub logging */,
+	delayCompile: false      /* generally don't touch this unless you really know why */
 };
 
 function queryString(uri,params)
@@ -3895,12 +3895,14 @@ function queryString(uri,params)
 			{
 				case '1':
 				case 'true':
+				case 'yes':
 				{
 					v = true;
 					break;
 				}
 				case '0':
 				case 'false':
+				case 'no':
 				{
 					v = false;
 					break;
@@ -3914,7 +3916,7 @@ function queryString(uri,params)
 
 
 // get config parameters for app from the URI of the page
-queryString(top.window.document.location.href,AppC.params);
+queryString(window.document.location.href,AppC.params);
 
 var removeLastElement = function(uri) {
     var idx = uri.lastIndexOf('/');
@@ -3938,6 +3940,7 @@ jsLocation = jsLocation ? URI.absolutizeURI(jsLocation, documentRoot) : &quot;&quot;;
 
 if (jsLocation)
 {
+	AppC.sdkJS = URI.absolutizeURI(jsLocation,documentRoot);
     AppC.sdkRoot = removeLastElement(jsLocation); // parent directory of js
     var docHost = URI.splitUriRef(documentRoot)[1];
     var jsHost = URI.splitUriRef(jsLocation)[1];
@@ -3958,7 +3961,8 @@ if (jsLocation)
 }
 else
 {
-    console.error(&quot;Can't find appcelerator.js or appcelerator-debug.js&quot;);
+    $.error(&quot;Can't find appcelerator.js or appcelerator-debug.js&quot;);
+	return false;
 }
 
 // add a slash if the path is missing one
@@ -7697,7 +7701,7 @@ App.UUID =
 		var t = this.base16(this.dateSeed - dg.getTime());
         var a = this.base16(Math.floor(999999999999 * Math.random()));
         var _b = App.MD5.hex_md5(window.location.pathname);
-		var b = (_b.length &gt; 10 ? _b.substring(0,10) : _b).gsub(/[^a-zA-Z0-9]/,'0');
+		var b = $.gsub((_b.length &gt; 10 ? _b.substring(0,10) : _b),/[^a-zA-Z0-9]/,'0');
         var c = this.base16(Math.round(this.dateSeed * Math.random()));
         return t + '-' + a + '-' + b + '-' + c;
     }
@@ -7923,6 +7927,7 @@ $.fn.bind = function()
 	}
 	else
 	{
+		alert('foo')
 		var obj = arguments[0];
 		$.each(this,function(idx)
 		{
@@ -8417,252 +8422,6 @@ App.dynregAction('history');
 
 //--------------------------------------------------------------------------------
 
-/* hotkeys.js */
-
-/*!
-(c) Copyrights 2007 - 2008
-
-Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
- 
-jQuery Plugin by Tzury Bar Yochay 
-tzury.by@gmail.com
-http://evalinux.wordpress.com
-http://facebook.com/profile.php?id=513676303
-
-Project's sites: 
-http://code.google.com/p/js-hotkeys/
-http://github.com/tzuryby/hotkeys/tree/master
-
-License: same as jQuery license. 
-
-USAGE:
-    // simple usage
-    $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');});
-    
-    // special options such as disableInIput
-    $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {});
-    
-Note:
-    This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind
-    
-*/
-
-
-// keep reference to the original $.fn.bind and $.fn.unbind
-jQuery.fn.__bind__ = jQuery.fn.bind;
-jQuery.fn.__unbind__ = jQuery.fn.unbind;
-jQuery.fn.__find__ = jQuery.fn.find;
-
-var hotkeys = {
-    version: '0.7.8',
-    override: /keydown|keypress|keyup/g,
-    triggersMap: {},
-    
-    specialKeys: { 27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 
-        20: 'capslock', 144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',
-        35:'end', 33: 'pageup', 34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 
-        112:'f1',113:'f2', 114:'f3', 115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 
-        120:'f9', 121:'f10', 122:'f11', 123:'f12' },
-    
-    shiftNums: { &quot;`&quot;:&quot;~&quot;, &quot;1&quot;:&quot;!&quot;, &quot;2&quot;:&quot;@&quot;, &quot;3&quot;:&quot;#&quot;, &quot;4&quot;:&quot;$&quot;, &quot;5&quot;:&quot;%&quot;, &quot;6&quot;:&quot;^&quot;, &quot;7&quot;:&quot;&amp;&quot;, 
-        &quot;8&quot;:&quot;*&quot;, &quot;9&quot;:&quot;(&quot;, &quot;0&quot;:&quot;)&quot;, &quot;-&quot;:&quot;_&quot;, &quot;=&quot;:&quot;+&quot;, &quot;;&quot;:&quot;:&quot;, &quot;'&quot;:&quot;\&quot;&quot;, &quot;,&quot;:&quot;&lt;&quot;, 
-        &quot;.&quot;:&quot;&gt;&quot;,  &quot;/&quot;:&quot;?&quot;,  &quot;\\&quot;:&quot;|&quot; },
-    
-    newTrigger: function (type, combi, callback) { 
-        // i.e. {'keyup': {'ctrl': {cb: callback, disableInInput: false}}}
-        var result = {};
-        result[type] = {};
-        result[type][combi] = {cb: callback, disableInInput: false};
-        return result;
-    }
-};
-// add firefox num pad char codes
-if (jQuery.browser.mozilla){
-    hotkeys.specialKeys = jQuery.extend(hotkeys.specialKeys, { 96: '0', 97:'1', 98: '2', 99: 
-        '3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9' });
-}
-
-// a wrapper around of $.fn.find 
-// see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d
-jQuery.fn.find = function( selector ) {
-    this.query=selector;
-    return jQuery.fn.__find__.apply(this, arguments);
-};
-
-jQuery.fn.unbind = function (type, combi, fn){
-    if (jQuery.isFunction(combi)){
-        fn = combi;
-        combi = null;
-    }
-    if (combi &amp;&amp; typeof combi === 'string'){
-        var selectorId = ((this.prevObject &amp;&amp; this.prevObject.query) || (this[0].id &amp;&amp; this[0].id) || this[0]).toString();
-        var hkTypes = type.split(' ');
-        for (var x=0; x&lt;hkTypes.length; x++){
-            delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];
-        }
-    }
-    // call jQuery original unbind
-    return  this.__unbind__(type, fn);
-};
-
-jQuery.fn.bind = function(type, data, fn){
-    // grab keyup,keydown,keypress
-    var handle = type.match(hotkeys.override);
-    
-    if (jQuery.isFunction(data) || !handle){
-        // call jQuery.bind only
-        return this.__bind__(type, data, fn);
-    }
-    else{
-        // split the job
-        var result = null,            
-        // pass the rest to the original $.fn.bind
-        pass2jq = jQuery.trim(type.replace(hotkeys.override, ''));
-        
-        // see if there are other types, pass them to the original $.fn.bind
-        if (pass2jq){
-            // call original jQuery.bind()
-            result = this.__bind__(pass2jq, data, fn);
-        }            
-        
-        if (typeof data === &quot;string&quot;){
-            data = {'combi': data};
-        }
-        if(data.combi){
-            for (var x=0; x &lt; handle.length; x++){
-                var eventType = handle[x];
-                var combi = data.combi.toLowerCase(),
-                    trigger = hotkeys.newTrigger(eventType, combi, fn),
-                    selectorId = ((this.prevObject &amp;&amp; this.prevObject.query) || (this[0].id &amp;&amp; this[0].id) || this[0]).toString();
-                    
-                //trigger[eventType][combi].propagate = data.propagate;
-                trigger[eventType][combi].disableInInput = data.disableInInput;
-                
-                // first time selector is bounded
-                if (!hotkeys.triggersMap[selectorId]) {
-                    hotkeys.triggersMap[selectorId] = trigger;
-                }
-                // first time selector is bounded with this type
-                else if (!hotkeys.triggersMap[selectorId][eventType]) {
-                    hotkeys.triggersMap[selectorId][eventType] = trigger[eventType];
-                }
-                // make trigger point as array so more than one handler can be bound
-                var mapPoint = hotkeys.triggersMap[selectorId][eventType][combi];
-                if (!mapPoint){
-                    hotkeys.triggersMap[selectorId][eventType][combi] = [trigger[eventType][combi]];
-                }
-                else if (mapPoint.constructor !== Array){
-                    hotkeys.triggersMap[selectorId][eventType][combi] = [mapPoint];
-                }
-                else {
-                    hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length] = trigger[eventType][combi];
-                }
-                
-                // add attribute and call $.event.add per matched element
-                this.each(function(){
-                    // jQuery wrapper for the current element
-                    var jqElem = jQuery(this);
-                    
-                    // element already associated with another collection
-                    if (jqElem.attr('hkId') &amp;&amp; jqElem.attr('hkId') !== selectorId){
-                        selectorId = jqElem.attr('hkId') + &quot;;&quot; + selectorId;
-                    }
-                    jqElem.attr('hkId', selectorId);
-                });
-                result = this.__bind__(handle.join(' '), data, hotkeys.handler)
-            }
-        }
-        return result;
-    }
-};
-// work-around for opera and safari where (sometimes) the target is the element which was last 
-// clicked with the mouse and not the document event it would make sense to get the document
-hotkeys.findElement = function (elem){
-    if (!jQuery(elem).attr('hkId')){
-        if (jQuery.browser.opera || jQuery.browser.safari){
-            while (!jQuery(elem).attr('hkId') &amp;&amp; elem.parentNode){
-                elem = elem.parentNode;
-            }
-        }
-    }
-    return elem;
-};
-// the event handler
-hotkeys.handler = function(event) {
-    var target = hotkeys.findElement(event.currentTarget), 
-        jTarget = jQuery(target),
-        ids = jTarget.attr('hkId');
-    
-    if(ids){
-        ids = ids.split(';');
-        var code = event.which,
-            type = event.type,
-            special = hotkeys.specialKeys[code],
-            // prevent f5 overlapping with 't' (or f4 with 's', etc.)
-            character = !special &amp;&amp; String.fromCharCode(code).toLowerCase(),
-            shift = event.shiftKey,
-            ctrl = event.ctrlKey,            
-            // patch for jquery 1.2.5 &amp;&amp; 1.2.6 see more at:  
-            // http://groups.google.com/group/jquery-en/browse_thread/thread/83e10b3bb1f1c32b
-            alt = event.altKey || event.originalEvent.altKey,
-            mapPoint = null;
-
-        for (var x=0; x &lt; ids.length; x++){
-            if (hotkeys.triggersMap[ids[x]][type]){
-                mapPoint = hotkeys.triggersMap[ids[x]][type];
-                break;
-            }
-        }
-        
-        //find by: id.type.combi.options            
-        if (mapPoint){ 
-            var trigger;
-            // event type is associated with the hkId
-            if(!shift &amp;&amp; !ctrl &amp;&amp; !alt) { // No Modifiers
-                trigger = mapPoint[special] ||  (character &amp;&amp; mapPoint[character]);
-            }
-            else{
-                // check combinations (alt|ctrl|shift+anything)
-                var modif = '';
-                if(alt) modif +='alt+';
-                if(ctrl) modif+= 'ctrl+';
-                if(shift) modif += 'shift+';
-                
-                // modifiers + special keys or modifiers + character or modifiers + shift character or just shift character
-                trigger = mapPoint[modif+special];
-                if (!trigger){
-                    if (character){
-                        trigger = mapPoint[modif+character] 
-                            || mapPoint[modif+hotkeys.shiftNums[character]]
-                            // '$' can be triggered as 'Shift+4' or 'Shift+$' or just '$'
-                            || (modif === 'shift+' &amp;&amp; mapPoint[hotkeys.shiftNums[character]]);
-                    }
-                }
-            }
-            if (trigger){
-                var result = false;
-                for (var x=0; x &lt; trigger.length; x++){
-                    if(trigger[x].disableInInput){
-                        // double check event.currentTarget and event.target
-                        var elem = jQuery(event.target);
-                        if (jTarget.is(&quot;input&quot;) || jTarget.is(&quot;textarea&quot;) 
-                            || elem.is(&quot;input&quot;) || elem.is(&quot;textarea&quot;)) {
-                            return true;
-                        }
-                    }
-                    // call the registered callback function
-                    result = result || trigger[x].cb.apply(this, [event]);
-                }
-                return result;
-            }
-        }
-    }
-};
-// place it under window so it can be extended and overridden by others
-window.hotkeys = hotkeys;
-
-//--------------------------------------------------------------------------------
-
 /* locale.js */
 
 
@@ -8842,7 +8601,7 @@ $.fn.move = function(params)
 
 $.fn.on = function(value,state)
 {
-	var el = $(this);
+	var el = this;
 	var isFn = typeof(state)=='function';
 	if (isFn)
 	{
@@ -8907,7 +8666,7 @@ regCSSAction('opacity',function(params)
 var subs = {local:[], remote:[]};
 var re = /^(l|local|both|r|remote|\*)\:(.*)$/;
 var localRe = /^l|local|both|\*/;
-var pubdebug = AppC.params.debug=='2' || AppC.params.debug == '1';
+var pubdebug = AppC.params.debug=='2' || AppC.params.debug==true;
 var queue = [];
 var remoteDisabled = true;
 var queueInit = false;
@@ -9002,8 +8761,8 @@ App.normalizePub = function(name)
 
 App.pubQueue = function(name,data,local,scope,version)
 {
-	if (pubdebug) $.info('publish '+name+' with '+$.toJSON(data));
-
+	if (pubdebug) $.info('publish '+(local?'l:':'r:')+name+' with '+$.toJSON(data)+', local:'+subs.local.length+'/remote:'+subs.remote.length);
+	
 	// optimize if no listeners at all
 	if (subs.local.length == 0 &amp;&amp; subs.remote.length == 0) return;
 
@@ -9023,6 +8782,9 @@ App.pubQueue = function(name,data,local,scope,version)
 
 $.fn.pub = function(name,data,scope,version)
 {
+	var p = App.extractParameters(name,data||{});
+	data = data || p.params;
+	name = p.name;
 	var m = re.exec(name);
 	var isLocal = localRe.test(m[1]);
 	data = data || {};
@@ -9231,6 +8993,11 @@ function processQueue()
 		{
 			if ((a[j].regexp &amp;&amp; a[j].regexp.test(name)) || (!a[j].regexp &amp;&amp; a[j].name == name))
 			{
+				if (pubdebug) $.info('dispatching '+(queue[i].local?'l:':'r:')+name+' to '+a[j].scope.attr('id'));
+				a[j].scope.direction = direction;
+				a[j].scope.version = version;
+				a[j].scope.scope = scope;
+				a[j].scope.name = name;
 				a[j].fn.apply(a[j].scope,[data,scope,version,name,direction,a[j].params]);
 			}
 		}
@@ -9425,24 +9192,26 @@ $.each(['script','function','javascript'],function()
 {
 	$.fn[this]=function(code,scope)
 	{
+		scope = scope || {};
 		var js = code;
 		if (typeof(js)=='string')
 		{
-			js = $.toFunction(js);
+			js = $.toFunction(js,true);
 		}
 		else if (code.nodeType==1)
 		{
-			js = $.toFunction($(code).html());
+			js = $.toFunction($(code).html(),true);
 		}
 		else if (typeof(code.jquery)=='string')
 		{
-			js = $.toFunction(code.get(0).html());
+			js = $.toFunction(code.get(0).html(),true);
 		}
 		else
 		{
 			throw &quot;I don't know what this object is: &quot;+(typeof(code))+&quot; for &quot;+$(this).attr('id');
 		}
-		js.call(scope||window);
+		scope.window = window;
+		this.result = js.call(scope);
 		return this;
 	};
 });
@@ -10211,7 +9980,17 @@ $.fn.toggle = function(params)
 
 $.fn.value = function(object,property,defValue)
 {
-	var value = $.getNestedProperty(object,property,defValue||property);
+	var value = $.getNestedProperty(object,property);
+
+	if (!value)
+	{
+		value = $.getNestedProperty(object,'value');
+	}
+
+	if (!value)
+	{
+		value = defValue||property;
+	}
 	
 	if (this.is(':input'))
 	{
@@ -10269,7 +10048,6 @@ App.regAction(evtRegex('cookie'),function(params)
 	$.cookie(params.name,params.value,params);
 });
 
-
 App.regAction(evtRegex('disable'),function(params)
 {
 	return getTarget(params,this).disable();
@@ -10391,26 +10169,41 @@ $.each(['script','function','javascript'],function()
 	var type = this;
 	App.regAction(evtRegex(this),function(params,name,data)
 	{
+		if (this.direction)
+		{
+			params.direction = this.direction;
+			params.version = this.version;
+			params.type = params.name = this.name;
+		}
 		return getTarget(params,this)[type](data,params);
 	},true);
 });
 
 App.regAction(evtRegex('value'),function(params,name,data)
 {
-	return getTarget(params,this).value(params,data);
+	if (this.direction)
+	{
+		params.direction = this.direction;
+		params.version = this.version;
+		params.type = params.name = this.name;
+	}
+	var p = App.extractParameters('['+data+']',params);
+	return getTarget(params,this).value(p.params,data);
 },true);
 
 
 App.regAction(evtRegex('bind'),function(params)
 {
 	var target = getTarget(params,this);
-	var fieldset = target.attr('fieldset');
-	if (!fieldset)
-	{
-		$.error('bind action requires fieldset attribute');
-		return this;
-	}
-	this.find('[fieldset='+fieldset+']').bind(params);
+//	var fieldset = target.attr('fieldset');
+//	if (!fieldset)
+//	{
+//		$.error('bind action requires fieldset attribute');
+//		return this;
+//	}
+//	this.find('[fieldset='+fieldset+']').bind(params);
+	this.bind(params);
+
 	return this;
 });
 </diff>
      <filename>public/javascripts/appcelerator-debug.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,12 @@
 /*!(c) 2006-2008 Appcelerator, Inc. http://appcelerator.org
  * Licensed under the Apache License, Version 2.0. Please visit
  * http://license.appcelerator.com for full copy of the License.
- * Version: 3.0.0, Released: 10/24/2008
+ * Version: 3.0.0, Released: 11/04/2008
  **/
 /*(c) 2006-2008 Appcelerator, Inc. http://appcelerator.org
  * Licensed under the Apache License, Version 2.0. Please visit
  * http://license.appcelerator.com for full copy of the License.
- * Version: 3.0.0, Released: 10/24/2008
+ * Version: 3.0.0, Released: 11/04/2008
  **/
 if(typeof (jQuery)==&quot;undefined&quot;){(function(){
 /*
@@ -35,7 +35,7 @@ var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function
   and used under the terms of their licenses.
 
 *******************************************************************************/
-var absoluteUriRefRegex=/^[A-Z][0-9A-Z+\-\.]*:/i;var splitUriRefRegex=/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/;var reMissingGroupSupport=(typeof &quot;&quot;.match(/(a)?/)[1]!=&quot;string&quot;);URI={};URI.isAbsolute=function(uriRef){return absoluteUriRefRegex.test(uriRef)};URI.splitUriRef=function(uriRef){var parts=uriRef.match(splitUriRefRegex);parts.shift();var scheme=parts[1],auth=parts[3],path=parts[4],query=parts[6],frag=parts[8];if(!reMissingGroupSupport){var undef;if(parts[0]==&quot;&quot;){scheme=undef}if(parts[2]==&quot;&quot;){auth=undef}if(parts[5]==&quot;&quot;){query=undef}if(parts[7]==&quot;&quot;){frag=undef}}parts=[scheme,auth,this.uriPathRemoveDotSegments(path),query,frag];return parts};URI.unsplitUriRef=function(uriRefSeq){var uriRef=&quot;&quot;;if(typeof uriRefSeq[0]!=&quot;undefined&quot;){uriRef+=uriRefSeq[0]+&quot;:&quot;}if(typeof uriRefSeq[1]!=&quot;undefined&quot;){uriRef+=&quot;//&quot;+uriRefSeq[1]}uriRef+=uriRefSeq[2];if(typeof uriRefSeq[3]!=&quot;undefined&quot;){uriRef+=&quot;?&quot;+uriRefSeq[3]}if(typeof uriRefSeq[4]!=&quot;undefined&quot;){uriRef+=&quot;#&quot;+uriRefSeq[4]}return uriRef};URI.uriPathRemoveDotSegments=function(path){if(path==&quot;.&quot;||path==&quot;..&quot;){return&quot;&quot;}while(path){if(path.substring(0,2)==&quot;./&quot;){path=path.substring(2)}else{if(path.substring(0,3)==&quot;../&quot;){path=path.substring(3)}else{if(path.substring(0,2)==&quot;//&quot;){path=path.substring(1)}else{break}}}}var leading_slash=false;if(path.charAt(0)==&quot;/&quot;){path=path.substring(1);if(path.charAt(0)==&quot;/&quot;){path=path.substring(1)}leading_slash=true}if(path.substring(path.length-2)==&quot;/.&quot;){path=path.substring(0,path.length-1)}var segments=path.split(&quot;/&quot;);var keepers=[];segments=segments.reverse();while(segments.length){var seg=segments.pop();if(seg==&quot;..&quot;){if(keepers.length){keepers.pop()}else{if(!leading_slash){keepers.push(seg)}}if(!segments.length){keepers.push(&quot;&quot;)}}else{if(seg!=&quot;.&quot;){keepers.push(seg)}}}return(leading_slash&amp;&amp;&quot;/&quot;||&quot;&quot;)+keepers.join(&quot;/&quot;)};URI.absolutizeURI=function(uriRef,baseUri){if(!baseUri||!URI.isAbsolute(baseUri)){throw Error(&quot;baseUri '&quot;+baseUri+&quot;' is not absolute&quot;)}if(uriRef==&quot;&quot;||uriRef.charAt(0)==&quot;#&quot;){return baseUri.split(&quot;#&quot;)[0]+uriRef}var tScheme,tAuth,tPath,tQuery;var parts=URI.splitUriRef(uriRef);var rScheme=parts[0],rAuth=parts[1],rPath=parts[2],rQuery=parts[3],rFrag=parts[4];if(typeof rScheme!=&quot;undefined&quot;){var tScheme=rScheme;var tAuth=rAuth;var tPath=URI.uriPathRemoveDotSegments(rPath);var tQuery=rQuery}else{parts=URI.splitUriRef(baseUri);var bScheme=parts[0],bAuth=parts[1],bPath=parts[2],bQuery=parts[3],bFrag=parts[4];if(typeof rAuth!=&quot;undefined&quot;){tAuth=rAuth;tPath=URI.uriPathRemoveDotSegments(rPath);tQuery=rQuery}else{if(!rPath){tPath=bPath;tQuery=(typeof rQuery!=&quot;undefined&quot;&amp;&amp;rQuery||bQuery)}else{if(rPath.charAt(0)==&quot;/&quot;){tPath=URI.uriPathRemoveDotSegments(rPath)}else{if(typeof bAuth!=&quot;undefined&quot;&amp;&amp;!bPath){tPath=&quot;/&quot;+rPath}else{tPath=bPath.substring(0,bPath.lastIndexOf(&quot;/&quot;)+1)+rPath}tPath=URI.uriPathRemoveDotSegments(tPath)}tQuery=rQuery}tAuth=bAuth}tScheme=bScheme}var result=URI.unsplitUriRef([tScheme,tAuth,tPath,tQuery,rFrag]);return result};App=AppC={};AppC.Version={value:&quot;3.0.0&quot;,major:parseInt(&quot;3&quot;),minor:parseInt(&quot;0&quot;),revision:parseInt(&quot;0&quot;),date:&quot;10/24/2008&quot;,toString:function(){return this.value}};var started=new Date;var compileTime;var loadTime;AppC.LicenseType=&quot;Apache License Version 2.0 - see http://license.appcelerator.org&quot;;AppC.Copyright=&quot;Copyright (c) 2006-&quot;+(1900+started.getYear())+&quot; by Appcelerator, Inc. All Rights Reserved.&quot;;AppC.LicenseMessage=&quot;Appcelerator is licensed under &quot;+AppC.LicenseType;AppC.config={track_stats:true,report_stats:true,browser_check:true,auto_locale:false};AppC.params={debug:0,delayCompile:false,};function queryString(uri,params){idx=uri.indexOf(&quot;?&quot;);params=params||{};if(idx&gt;0){var qs=uri.substring(idx+1);$.each(qs.split(&quot;&amp;&quot;),function(){var e=this.split(&quot;=&quot;);var v=decodeURIComponent(e[1]||&quot;&quot;);var k=decodeURIComponent(e[0]);switch(v){case&quot;1&quot;:case&quot;true&quot;:v=true;break;case&quot;0&quot;:case&quot;false&quot;:v=false;break}params[k]=v})}return params}queryString(top.window.document.location.href,AppC.params);var removeLastElement=function(uri){var idx=uri.lastIndexOf(&quot;/&quot;);if(idx!=1){uri=uri.substring(0,idx)+&quot;/&quot;}return uri};var documentRoot=removeLastElement(top.window.document.location.href);var jsLocation=$(&quot;script[@src~=appcelerator]&quot;).get(0).src;var baseLocation=$(&quot;base[@href]&quot;).attr(&quot;href&quot;);baseLocation=baseLocation?URI.absolutizeURI(baseLocation,documentRoot):&quot;&quot;;jsLocation=jsLocation?URI.absolutizeURI(jsLocation,documentRoot):&quot;&quot;;if(jsLocation){AppC.sdkRoot=removeLastElement(jsLocation);var docHost=URI.splitUriRef(documentRoot)[1];var jsHost=URI.splitUriRef(jsLocation)[1];if(docHost==jsHost){AppC.docRoot=URI.absolutizeURI(&quot;.&quot;,AppC.sdkRoot+&quot;..&quot;)}else{if(docHost!=jsHost&amp;&amp;baseLocation){AppC.docRoot=baseLocation}else{AppC.docRoot=URI.absolutizeURI(&quot;.&quot;,documentRoot)}}}else{console.error(&quot;Can't find appcelerator.js or appcelerator-debug.js&quot;)}if(!AppC.sdkRoot.charAt(AppC.sdkRoot.length-1)==&quot;/&quot;){AppC.sdkRoot+=&quot;/&quot;}if(!AppC.docRoot.charAt(AppC.docRoot.length-1)==&quot;/&quot;){AppC.docRoot+=&quot;/&quot;}AppC.compRoot=AppC.sdkRoot+&quot;components/&quot;;AppC.pluginRoot=AppC.sdkRoot+&quot;plugins/&quot;;queryString(jsLocation,AppC.config);var appid=0;App.ensureId=function(el){var rootEl=el.nodeType?el:$(el).get(0);var id=rootEl.id;if(!id){rootEl.id=rootEl.nodeName==&quot;BODY&quot;?&quot;app_body&quot;:&quot;app_&quot;+(appid++)}return el};$.fn.compile=function(){if(arguments.length==2&amp;&amp;typeof (arguments[0])==&quot;object&quot;){var state=arguments[1];$.each(arguments[0],function(){$(this).compile(state)})}else{if(arguments.length==1&amp;&amp;typeof (arguments[0].count)==&quot;number&quot;){var state=arguments[0];var node=$(this).get(0);var el=App.ensureId(node);var e=$(el);App.incState(state);var myid=e.attr(&quot;id&quot;);var compiled=App.runProcessors(el,state);$.debug(&quot; + compiled #&quot;+myid+&quot; (&quot;+getTagName(node)+&quot;) =&gt; &quot;+compiled);if(compiled){App.checkState(state,el)}}}return this};$.fn.compileChildren=function(state,self){var node=$(this).get(0);App.ensureId(node);var set=getTargetCompileSet(node,self);this.compile(set,state);return this};var state=function(el){this.count=1;this.el=el;this.completed=[]};App.createState=function(el){return new state(el)};App.incState=function(state){if(state){var count=++state.count;return count}};var bodyCompiled=false;App.checkState=function(state,el){if(state){if(el){state.completed.push($(el).get(0))}var count=--state.count;if(count==0){$.each($.unique(state.completed),function(){if(this!=document.body){$(this).trigger(&quot;compiled&quot;)}});if(!bodyCompiled){bodyCompiled=true;$(document.body).trigger(&quot;compiled&quot;)}}}};function getTargetCompileSet(node,self){var expr=null,filter=null;if(node!=null){node=typeof (node.nodeType)==&quot;undefined&quot;?node.get(0):node;var parent=node.nodeName==&quot;BODY&quot;?&quot;body&quot;:&quot;#&quot;+node.id;expr=(self?(parent+&quot;,&quot;):&quot;&quot;)+parent+&quot; &quot;+App.selectors.join(&quot;, &quot;+parent+&quot; &quot;)}else{expr=App.selectors.join(&quot;,&quot;);filter=function(){var exclude=App.delegateCompilers.join(&quot;,&quot;);return !$(this).parents(exclude).length}}if(filter){return $.unique($(expr).filter(filter))}return $.unique($(expr))}var beforeCompilers=[];AppC.beforeCompile=function(f){if(!beforeCompilers){f()}else{beforeCompilers.push(f)}return AppC};AppC.compileDocument=function(){var compileStarted=new Date;var body=$(document.body);if(beforeCompilers){$.each(beforeCompilers,function(){this(body)});beforeCompilers=null}body.bind(&quot;compiled&quot;,function(){body.pub(&quot;l:app.compiled&quot;,{event:{id:document.body.id||&quot;body&quot;}});$(document).trigger(&quot;compiled&quot;);compileFinished=new Date;loadTime=compileFinished-started;compileTime=compileFinished-compileStarted;if(top.window===window){$.info(AppC.Copyright);$.info(AppC.LicenseMessage);$.info(&quot;loaded in &quot;+(loadTime)+&quot; ms, compiler took ~&quot;+(compileTime)+&quot; ms&quot;);$.info(&quot;Appcelerator is ready!&quot;)}});var s=new state(body);$(document).compile(getTargetCompileSet(),s);App.checkState(s)};if(!AppC.params.delayCompile){$(document).ready(AppC.compileDocument)}var debug=AppC.params.debug&amp;&amp;AppC.params.debug==&quot;1&quot;||AppC.params.debug==true;var hasConsole=typeof (console)!=&quot;undefined&quot;;var keyStr=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=&quot;;$.extend({domText:function(dom){var str=&quot;&quot;;for(var c=0;c&lt;dom.childNodes.length;c++){str+=dom.childNodes[c].nodeValue||&quot;&quot;}return $.trim(str)},gsub:function(source,pattern,replacement){if(typeof (replacement)==&quot;string&quot;){var r=String(replacement);replacement=function(){return r}}var result=&quot;&quot;,match;while(source.length&gt;0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=this.string(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=&quot;&quot;}}return result},camel:function(value){var parts=value.split(&quot;-&quot;),len=parts.length;if(len==1){return parts[0]}var camelized=value.charAt(0)==&quot;-&quot;?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i&lt;len;i++){camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1)}return camelized},string:function(value){return value==null?&quot;&quot;:String(value)},proper:function(value){return value.charAt(0).toUpperCase()+value.substring(1)},smartSplit:function(value,splitter){if(typeof (value)!=&quot;string&quot;){$.error(&quot;Invalid parameter passed to smartSplit: &quot;+typeof (value)+&quot;, value: &quot;+value)}value=this.trim(value);var tokens=value.split(splitter);if(tokens.length==1){return tokens}var array=[];var current=null;for(var c=0;c&lt;tokens.length;c++){var line=tokens[c];if(!current&amp;&amp;line.charAt(0)==&quot;(&quot;){current=line+&quot; or &quot;;continue}else{if(current&amp;&amp;current.charAt(0)==&quot;(&quot;){if(line.indexOf(&quot;) &quot;)!=-1){array.push(current+line);current=null}else{current+=line+&quot; or &quot;}continue}}if(!current&amp;&amp;line.indexOf(&quot;[&quot;)&gt;=0&amp;&amp;line.indexOf(&quot;]&quot;)==-1){if(current){current+=splitter+line}else{current=line}}else{if(current&amp;&amp;line.indexOf(&quot;]&quot;)==-1){current+=splitter+line}else{if(current){array.push(current+splitter+line);current=null}else{array.push(line)}}}}return array},escapeHTML:function(value){var div=document.createElement(&quot;div&quot;);var text=document.createTextNode(value);div.appendChild(text);return div.innerHTML},escapeXML:function(value){if(!value){return null}return value.replace(/&amp;/g,&quot;&amp;amp;&quot;).replace(/&lt;/g,&quot;&amp;lt;&quot;).replace(/&gt;/g,&quot;&amp;gt;&quot;).replace(/&quot;/g,&quot;&amp;quot;&quot;).replace(/'/g,&quot;&amp;apos;&quot;)},unescapeXML:function(value){if(!value){return null}return value.replace(/&amp;lt;/g,&quot;&lt;&quot;).replace(/&amp;gt;/g,&quot;&gt;&quot;).replace(/&amp;apos;/g,&quot;'&quot;).replace(/&amp;amp;/g,&quot;&amp;&quot;).replace(/&amp;quot;/g,'&quot;')},emptyFunction:function(){},toFunction:function(str,dontPreProcess){var str=$.trim(str);if(str.length==0){return this.emptyFunction}if(!dontPreProcess){if(str.match(/^function\(/)){str=&quot;return &quot;+this.unescapeXML(str)+&quot;()&quot;}else{if(!str.match(/return/)){str=&quot;return &quot;+this.unescapeXML(str)}else{if(str.match(/^return function/)){str=this.unescapeXML(str)+&quot; ();&quot;}}}}var code=&quot;var f = function(){ var args = $.makeArray(arguments); &quot;+str+&quot;}; f;&quot;;var func=eval(code);if(this.isFunction(func)){return func}throw Error(&quot;code was not a function: &quot;+this)},getNestedProperty:function(obj,prop,def){if(obj!=null&amp;&amp;prop!=null){var props=prop.split(&quot;.&quot;);if(props.length!=-1){var cur=obj;this.each(props,function(){var p=this;if(null!=cur[p]){cur=cur[p]}else{cur=null;return false}});return cur==null?def:cur}else{return obj[prop]==null?def:obj[prop]}}return def},startsWith:function(a,b){return a.indexOf(b)===0},error:function(){var log=$.makeArray(arguments).join(&quot; &quot;);if(hasConsole){if($.isFunction(console.error)){console.error(log)}else{if($.isFunction(console.log)){console.log(log)}}}},info:function(){var log=$.makeArray(arguments).join(&quot; &quot;);if(hasConsole){if($.isFunction(console.info)){console.info(log)}else{if($.isFunction(console.log)){console.log(log)}}}},debug:function(){if(debug){var log=$.makeArray(arguments).join(&quot; &quot;);if(hasConsole){if($.isFunction(console.debug)){console.debug(log)}else{if($.isFunction(console.log)){console.log(log)}}}}},encode64:function(input){var output=&quot;&quot;;var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1&gt;&gt;2;enc2=((chr1&amp;3)&lt;&lt;4)|(chr2&gt;&gt;4);enc3=((chr2&amp;15)&lt;&lt;2)|(chr3&gt;&gt;6);enc4=chr3&amp;63;if(isNaN(chr2)){enc3=enc4=64}else{if(isNaN(chr3)){enc4=64}}output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4)}while(i&lt;input.length);return output},decode64:function(input){var output=&quot;&quot;;var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,&quot;&quot;);do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=(enc1&lt;&lt;2)|(enc2&gt;&gt;4);chr2=((enc2&amp;15)&lt;&lt;4)|(enc3&gt;&gt;2);chr3=((enc3&amp;3)&lt;&lt;6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}while(i&lt;input.length);return output},toQueryString:function(obj){var qs=[];for(var k in obj){var v=obj[k];var t=typeof (v);switch(t){case&quot;number&quot;:case&quot;string&quot;:case&quot;boolean&quot;:qs.push(encodeURIComponent(k)+&quot;=&quot;+encodeURIComponent(String(v)));break;case&quot;object&quot;:qs.push(encodeURIComponent(k)+&quot;=&quot;+encodeURIComponent($.toJSON(v)));break}}return qs.join(&quot;&amp;&quot;)},loadCSS:function(url){var head=document.getElementsByTagName(&quot;head&quot;)[0];var link=document.createElement(&quot;link&quot;);link.rel=&quot;stylesheet&quot;;link.type=&quot;text/css&quot;;link.href=url;head.appendChild(link)}});$.Class={create:function(){var parent=null,properties=$.makeArray(arguments);if($.isFunction(properties[0])){parent=properties.shift()}function klass(){this.initialize.apply(this,arguments)}$.Class.extend(klass,$.Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){var subclass=function(){};subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0;i&lt;properties.length;i++){klass.addMethods(properties[i])}if(!klass.prototype.initialize){klass.prototype.initialize=$.emptyFunction}klass.prototype.constructor=klass;return klass}};$.Class.Methods={addMethods:function(source){var ancestor=this.superclass&amp;&amp;this.superclass.prototype;var properties=[];for(var key in source){properties.push(key)}for(var i=0,length=properties.length;i&lt;length;i++){var property=properties[i],value=source[property];this.prototype[property]=value}return this}};$.Class.extend=function(destination,source){for(var property in source){destination[property]=source[property]}return destination};AppC.create=$.Class.create;AppC.extend=$.Class.extend;$.fn.delay=function(fn,delay){var scope=this;var f=typeof (fn)==&quot;number&quot;?delay:fn;var n=typeof (fn)==&quot;function&quot;?delay:fn;setTimeout(function(){f.call(scope)},(n||0.1)*1000);return this};$.fn.defer=function(fn,delay){$(this).delay(fn,0.001);return this};AppC.Types={};AppC.Types.enumeration=function(){var pattern=&quot;^(&quot;+$.makeArray(arguments).join(&quot;)|(&quot;)+&quot;)$&quot;;return{name:&quot;Enumeration&quot;,values:$.makeArray(arguments),regex:RegExp(pattern)}};AppC.Types.openEnumeration=function(){var pattern=&quot;^(&quot;+$.makeArray(arguments).join(&quot;)|(&quot;)+&quot;)|(.*)$&quot;;return{name:&quot;Enumeration&quot;,values:$.makeArray(arguments),regex:RegExp(pattern)}};AppC.Types.pattern=function(regex,name){name=name||&quot;pattern&quot;;return{name:name,regex:regex}};AppC.Types.bool=AppC.Types.enumeration(&quot;true&quot;,&quot;false&quot;);AppC.Types.bool.name=&quot;Boolean&quot;;AppC.Types.number=AppC.Types.pattern(/^-?[0-9]+(\.[0-9]+)$/,&quot;Number&quot;);AppC.Types.naturalNumber=AppC.Types.pattern(/[0-9]+/,&quot;Natural Number&quot;);AppC.Types.cssDimension=AppC.Types.pattern(/^-?[0-9]+(\.[0-9]+)(%|(em)|(en)|(px)|(pc)|(pt))?$/,&quot;CSS Dimension&quot;);AppC.Types.identifier=AppC.Types.pattern(/^[a-zA-Z_][a-zA-Z0-9_.]*$/,&quot;Identifier&quot;);AppC.Types.messageSend=AppC.Types.pattern(/^((l:)|(r:)|(local:)|(remote:))[a-zA-Z0-9_.]+/,&quot;AppC Message Send&quot;);AppC.Types.messageReceive=AppC.Types.pattern(/^((l:)|(r:)|(local:)|(remote:))((~.+)|([a-zA-Z0-9_.]+))/,&quot;AppC Message Reception&quot;);AppC.Types.onExpr={name:&quot;On Expression&quot;};AppC.Types.fieldset={name:&quot;Fieldset&quot;};AppC.Types.json={name:&quot;JSON Object&quot;};AppC.Types.javascriptExpr={name:&quot;Javascript Expression&quot;};AppC.Types.pathOrUrl={name:&quot;Path or url to resource&quot;};AppC.Types.cssClass={name:&quot;CSS Class name&quot;};AppC.Types.color={name:&quot;Color value&quot;};AppC.Types.time={name:&quot;Time value&quot;};AppC.Types.elementId={name:&quot;Element Id&quot;};AppC.Types.commaSeparated={name:&quot;Comma Separated Values&quot;};AppC.Types.languageId={name:&quot;Localization String Id&quot;};AppC.Types.string={name:&quot;Javascript String&quot;};AppC.Types.object={name:&quot;Javascript Object&quot;};AppC.Types.condition={name:&quot;Component Condition&quot;};AppC.Types.action={name:&quot;Component Action&quot;};AppC.Types.isInstance=function(value,type){if(type.regex){return type.regex.test(value)}switch(type){case AppC.Types.onExpr:try{var thens=App.parseExpression(value);return thens&amp;&amp;thens.length&gt;0}catch(e){return false}case AppC.Types.time:return value&amp;&amp;!isNaN(App.timeFormat(value));case AppC.Types.fieldset:return true;default:return true}};AppC.Types.getTypeId=function(type){throw new Error(&quot;this method is no longer supported&quot;)};App.selectors=[];App.delegateCompilers=[];var actions={};function addProcessor(tag,attr,handler,delegate,priority){var wildcard=tag==&quot;*&quot;;tag=wildcard?tag.toLowerCase():tag;var found=actions[tag];if(!found){found=[];actions[tag]=found}var isExpr=attr.indexOf(&quot;=&quot;)&gt;0;found[priority?&quot;unshift&quot;:&quot;push&quot;]({tag:tag,wildcard:wildcard,attr:attr,expr:isExpr,fn:handler,delegate:delegate});var expr=tag+&quot;[&quot;+(!isExpr?&quot;@&quot;:&quot;&quot;)+attr+&quot;]&quot;;App.selectors[priority?&quot;unshift&quot;:&quot;push&quot;](expr);if(delegate){App.delegateCompilers[priority?&quot;unshift&quot;:&quot;push&quot;](expr)}}function getTagName(el){var element=$(el).get(0);if(AppC.UA.IE){if(element.scopeName&amp;&amp;element.tagUrn){return(element.scopeName+&quot;:&quot;+element.nodeName).toLowerCase()}}return element.nodeName.toLowerCase()}function iterateProcessors(f,el,tag,state){if(f){var e=$(el);var delegateCompile=false;$.each(f,function(){if(this.wildcard||tag==this.tag){if(!this.expr){var v=e.attr(this.attr);if(v){var r=this.fn.apply(e,[v,state,tag]);if(typeof (r)==&quot;undefined&quot;){r=true}if(r&amp;&amp;this.delegate){delegateCompile=true}}}else{var r=this.fn.apply(e,[tag,state]);if(typeof (r)==&quot;undefined&quot;){r=true}if(r&amp;&amp;this.delegate){delegateCompile=true}}}if(delegateCompile){return false}});return delegateCompile}return false}function getTarget(params,t){if(!params){return t}if(params.target){return $(params.target)}var nt=params.id?$(&quot;#&quot;+params.id):null;return nt&amp;&amp;nt.length&gt;0?nt:t}function regCSSAction(name,key,value){App.regAction(evtRegex(name),function(params){if(typeof (key)==&quot;function&quot;){key.call(getTarget(params,this),params)}else{return getTarget(params,this).css(key,value||name)}})}App.runProcessors=function(el,state){var tag=getTagName(el);var r1=iterateProcessors(actions[tag],el,tag,state);var r2=iterateProcessors(actions[&quot;*&quot;],el,tag,state);return !(r1||r2)};App.reg=function(name,el,handler,delegateCompile,priority){if(typeof (el)==&quot;string&quot;){el=$.makeArray(el)}$.each(el,function(){addProcessor(this,name,handler,delegateCompile,priority)})};var regp={conds:{},actions:{},ractions:[]};var dyn={conds:{},actions:{}};App.dynloadAction=function(name,fn){App.regAction(name,fn);$.each(dyn.actions[name],function(){App.invokeAction(this.scope,name,this.params)});try{delete dyn.actions[name]}catch(E){dyn.actions[name]=null}};var actionRE=/\^([\w]+)\(/;var actionUnparsers={};App.parseParams=function(name){var f=actionUnparsers[name];return typeof (f)==&quot;undefined&quot;};App.regAction=function(name,fn,dontparse){dontparse=typeof (dontparse)==&quot;undefined&quot;?false:(dontparse===true);$.debug(&quot;adding action &quot;+name+&quot;, dontparse = &quot;+dontparse);var m=actionRE.exec(String(name));if(m&amp;&amp;m.length&gt;1||typeof (name)==&quot;string&quot;){var fnName=m.length&gt;1?m[1]:name;if(dontparse){actionUnparsers[fnName]=1}var f=$.fn[fnName];if(typeof (f)!=&quot;function&quot;){}if(f){var mapFnName=&quot;_&quot;+fnName;$.fn[mapFnName]=f;$.fn[fnName]=function(){if(!f){return }var r=f.apply(this,arguments);this.trigger(fnName);return r||this}}}regp.ractions.push({re:name,fn:fn,dontparse:dontparse})};App.makeCustomAction=function(el,value){var p=App.extractParameters(value);var meta={action:p.name,actionParams:p.params,delay:0,ifCond:null};actions[meta.action]=meta;return meta};App.invokeAction=function(name,data,params){$.debug(&quot;invokeAction called with &quot;+name);var scope=this;var found=false;$.each(regp.ractions,function(){if(this.re.test(name)){found=true;var newparams=params||{};if(data&amp;&amp;!this.dontparse){for(var x=0;x&lt;data.length;x++){var entry=data[x];var key=entry.key,value=entry.value;if(entry.keyExpression){key=App.getEvaluatedValue(entry.key,null,params,entry.keyExpression)}else{if(entry.valueExpression){value=App.getEvaluatedValue(entry.value,null,params,entry.valueExpression)}else{if(entry.empty){value=App.getEvaluatedValue(entry.key,null,params)}else{key=App.getEvaluatedValue(entry.key);value=App.getEvaluatedValue(entry.value,null,params)}}}newparams[key]=value}}else{if(data&amp;&amp;this.donparse){newparams=params}}$.debug(&quot;invoking action: &quot;+name+&quot; with: &quot;+$.toJSON(newparams)+&quot;, scope=&quot;+$(scope).attr(&quot;id&quot;));this.fn.apply(scope,[newparams,name,data]);return false}});if(!found){var fn=typeof (name)==&quot;function&quot;?name:$(this)[name];if(fn){var newparams=params||{};if(data){for(var x=0;x&lt;data.length;x++){var entry=data[x];var key=entry.key,value=entry.value;if(entry.keyExpression){key=App.getEvaluatedValue(entry.key,null,params,entry.keyExpression)}else{if(entry.valueExpression){value=App.getEvaluatedValue(entry.value,null,params,entry.valueExpression)}else{if(entry.empty){value=App.getEvaluatedValue(entry.key,null,params)}else{key=App.getEvaluatedValue(entry.key);value=App.getEvaluatedValue(entry.value,null,params)}}}newparams[key]=value}}$.debug(&quot;invoking action: &quot;+name+&quot; with: &quot;+$.toJSON(newparams)+&quot;, scope=&quot;+$(scope).attr(&quot;id&quot;));fn.apply(scope,[newparams,name,params])}else{$.error(&quot;couldn't find an action named: &quot;+name+&quot; for target: &quot;+$(this).attr(&quot;id&quot;))}}};App.triggerElseAction=function(scope,params,meta){App.triggerAction(scope,params,{action:meta.elseAction,actionParams:meta.elseActionParams,delay:0})};App.triggerAction=function(scope,params,meta){var data=meta.actionParams;var action=meta.action;if(meta.ifCond){var r=eval(meta.ifCond);if(r){if(typeof (r)==&quot;boolean&quot;){r=(r===true)}}if(!r){action=meta.elseAction;data=meta.elseActionParams}}if(action){if(meta.delay&gt;0){$(scope).delay(function(){App.invokeAction.apply(scope,[action,data,params])},meta.delay/1000)}else{App.invokeAction.apply(scope,[action,data,params])}}};App.dynregAction=function(actions){$.each($.makeArray(actions),function(){var name=$.string(this);var path=AppC.pluginRoot+&quot;/&quot;+name+&quot;_action.js&quot;;var found=regp.actions[path];if(found){return App.regAction(name,found)}App.regAction(evtRegex(name),function(params){var c=dyn.actions[name];var scope=getTarget(params,this);if(c){return c.push({scope:scope,params:params})}dyn.actions[name]=[{scope:scope,params:params}];$.debug(&quot;remote loading action = &quot;+path);$.getScript(path)})})};function convertParams(params){if(arguments.length==2&amp;&amp;typeof (params)==&quot;string&quot;){var key=arguments[0];var value=arguments[1];params={key:value}}return params}var parameterSeparatorRE=/[\$=:&gt;&lt;!]+/;var parameterRE=/(.*?)\[(.*)?\]/i;var expressionRE=/^expr\((.*?)\)$/;var numberRe=/^[-+]{0,1}[0-9]+$/;var floatRe=/^[0-9]*[\.][0-9]*[f]{0,1}$/;var booleanRe=/^(true|false)$/;var quotedRe=/^['&quot;]{1}|['&quot;]{1}$/;var jsonRe=/^\{(.*)?\}$/;var STATE_LOOKING_FOR_VARIABLE_BEGIN=0;var STATE_LOOKING_FOR_VARIABLE_END=1;var STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER=2;var STATE_LOOKING_FOR_VALUE_BEGIN=3;var STATE_LOOKING_FOR_VALUE_END=4;var STATE_LOOKING_FOR_VALUE_AS_JSON_END=5;function dequote(value){if(value&amp;&amp;typeof value==&quot;string&quot;){if(value.charAt(0)==&quot;'&quot;||value.charAt(0)=='&quot;'){value=value.substring(1)}if(value.charAt(value.length-1)==&quot;'&quot;||value.charAt(value.length-1)=='&quot;'){value=value.substring(0,value.length-1)}}return value}function convertInt(value){if(value.charAt(0)==&quot;0&quot;){if(value.length==1){return 0}return convertInt(value.substring(1))}return parseInt(value)}function decodeParameterValue(token,wasquoted){var value=null;if(token!=null&amp;&amp;token.length&gt;0&amp;&amp;!wasquoted){var match=jsonRe.exec(token);if(match){value=$.evalJSON(match[0])}if(!value){var quoted=quotedRe.test(token);if(quoted){value=dequote(token)}else{if(floatRe.test(token)){value=parseFloat(token)}else{if(numberRe.test(token)){value=convertInt(token)}else{if(booleanRe.test(token)){value=(token==&quot;true&quot;)}else{value=token}}}}}}if(token==&quot;null&quot;||value==&quot;null&quot;){return null}return value==null?token:value}App.getTagname=function(element){if(!element){throw&quot;element cannot be null&quot;}if(element.jquery){element=$(element).get(0)}if(element.nodeType!=1){throw&quot;node: &quot;+element.nodeName+&quot; is not an element, was nodeType: &quot;+element.nodeType+&quot;, type=&quot;+(typeof element)}if(element._tagName){return element._tagName}if($.browser.msie){if(element.scopeName&amp;&amp;element.tagUrn){return element.scopeName+&quot;:&quot;+element.nodeName.toLowerCase()}}return String(element.nodeName.toLowerCase())};function formatValue(value,quote){quote=(quote==null)?true:quote;if(value!=null){var type=typeof (value);if(type==&quot;boolean&quot;||type==&quot;array&quot;||type==&quot;object&quot;){return value}if(value==&quot;true&quot;||value==&quot;false&quot;){return value==&quot;true&quot;}if(value.charAt(0)==&quot;'&quot;&amp;&amp;quote){return value}if(value.charAt(0)=='&quot;'){value=value.substring(1,value.length-1)}if(quote){return&quot;'&quot;+value+&quot;'&quot;}return value}return&quot;&quot;}function getInputFieldValue(elem,dequote,local){elem=$(elem);var tagname=App.getTagname(elem);if(tagname!=&quot;input&quot;&amp;&amp;tagname!=&quot;textarea&quot;&amp;&amp;tagname!=&quot;select&quot;){return null}local=local==null?true:local;dequote=(dequote==null)?false:dequote;var type=elem.attr(&quot;type&quot;)||&quot;text&quot;;var v=elem.val();switch(type){case&quot;checkbox&quot;:return(v==&quot;on&quot;||v==&quot;checked&quot;)}return formatValue(v,!dequote)}function getElementValue(element,dequote,local){var el=typeof (element)==&quot;string&quot;?$(&quot;#&quot;+element):$(element);dequote=(dequote==null)?true:dequote;var elem=el.get(0);if(el.is(&quot;:input&quot;)){return el.val()}else{if(el.is(&quot;form&quot;)){var obj={};$.each(el.find(&quot;:input&quot;).filter(function(){return !this.disabled&amp;&amp;(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(i,elem){var val=$(this).val();return val==null?null:val.constructor==Array?$.map(val,function(val,i){return{name:elem.name||elem.id,value:val}}):{name:elem.name||elem.id,value:val}}).get(),function(){obj[this.name]=this.value});return obj}else{if(el.is(&quot;img,iframe&quot;)){return elem.src}}}if(elem.value!=undefined){return elem.value}return elem.html()}App.getEvaluatedValue=function(v,data,scope,isExpression){if(v&amp;&amp;typeof (v)==&quot;string&quot;){if(!isExpression&amp;&amp;v.charAt(0)==&quot;$&quot;){var varName=v.substring(1);var elem=$(&quot;#&quot;+varName);if(elem){return getElementValue(elem,true)}}else{if(!isExpression&amp;&amp;!isNaN(parseFloat(v))){return v}else{var match=isExpression||expressionRE.exec(v);if(match){var expr=isExpression?v:match[1];var func=$.toFunction(expr);var s=scope?scope:{};if(data){for(var k in data){if(typeof (k)==&quot;string&quot;){s[k]=data[k]}}}return func.call(s)}if(scope){var result=$.getNestedProperty(scope,v,null);if(result){return result}}if(data){return $.getNestedProperty(data,v,v)}}}}return v};App.extractParameters=function(value,scope){var idx=value.indexOf(&quot;[&quot;);if(idx!=-1){var endidx=value.lastIndexOf(&quot;]&quot;);var p=value.substring(idx+1,endidx);var action=value.substring(0,idx);var canParse=App.parseParams(action);var params=null;if(canParse){params=App.getParameters(p,false);if(params&amp;&amp;scope){var newparams={};for(var x=0;x&lt;params.length;x++){var entry=params[x];var key=entry.key,value=entry.value;if(entry.keyExpression){key=App.getEvaluatedValue(entry.key,null,scope,entry.keyExpression)}else{if(entry.valueExpression){value=App.getEvaluatedValue(entry.value,null,scope,entry.valueExpression)}else{if(entry.empty){value=App.getEvaluatedValue(entry.key,null,scope)}else{key=App.getEvaluatedValue(entry.key);value=App.getEvaluatedValue(entry.value,null,scope)}}}newparams[key]=value}params=newparams}}return{name:action,params:params||p}}return{name:value,params:null}};App.getParameters=function(str,asjson){if(str==null||str.length==0){return asjson?{}:[]}var exprRE=/expr\((.*?)\)/;var containsExpr=exprRE.test(str);if(!parameterSeparatorRE.test(str)&amp;&amp;!containsExpr){if(asjson){var valueless_key={};valueless_key[str]=&quot;&quot;;return valueless_key}else{return[{key:str,value:&quot;&quot;,empty:true}]}}var state=0;var currentstr=&quot;&quot;;var key=null;var data=asjson?{}:[];var quotedStart=false,tickStart=false;var operator=null;var expressions=containsExpr?{}:null;if(containsExpr){var expressionExtractor=function(e){var start=e.indexOf(&quot;expr(&quot;);if(start&lt;0){return null}var p=start+5;var end=e.length-1;var value=&quot;&quot;;while(true){var idx=e.indexOf(&quot;)&quot;,p);if(idx&lt;0){break}value+=e.substring(p,idx);if(idx==e.length-1){end=idx+1;break}var b=false;var x=idx+1;for(;x&lt;e.length;x++){switch(e.charAt(x)){case&quot;,&quot;:end=x;b=true;break;case&quot; &quot;:break;default:p=idx+1;break}}if(x==e.length-1){end=x;break}if(b){break}value+=&quot;)&quot;}var fullexpr=e.substring(start,end);return[fullexpr,value]};var ec=0;while(true){var m=expressionExtractor(str);if(!m){break}var k=&quot;__E__&quot;+(ec++);expressions[k]=m[1];str=str.replace(m[0],k)}}function transformValue(k,v,tick){if(k&amp;&amp;$.startsWith(k,&quot;__E__&quot;)){if(!asjson){return{key:expressions[k],value:v,keyExpression:true,valueExpression:false}}else{return eval(expressions[k])}}if(v&amp;&amp;$.startsWith(v,&quot;__E__&quot;)){if(!asjson){return{key:k,value:expressions[v],valueExpression:true,keyExpression:false}}else{return eval(expressions[v])}}var s=decodeParameterValue(v,tick);if(!asjson){return{key:k,value:s}}return s}for(var c=0,len=str.length;c&lt;len;c++){var ch=str.charAt(c);var append=true;switch(ch){case'&quot;':case&quot;'&quot;:switch(state){case STATE_LOOKING_FOR_VARIABLE_BEGIN:quoted=true;append=false;state=STATE_LOOKING_FOR_VARIABLE_END;quotedStart=ch=='&quot;';tickStart=ch==&quot;'&quot;;break;case STATE_LOOKING_FOR_VARIABLE_END:var previous=str.charAt(c-1);if(quotedStart&amp;&amp;ch==&quot;'&quot;||tickStart&amp;&amp;ch=='&quot;'){}else{if(previous!=&quot;\\&quot;){state=STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER;append=false;key=$.trim(currentstr);currentstr=&quot;&quot;}}break;case STATE_LOOKING_FOR_VALUE_BEGIN:append=false;quotedStart=ch=='&quot;';tickStart=ch==&quot;'&quot;;state=STATE_LOOKING_FOR_VALUE_END;break;case STATE_LOOKING_FOR_VALUE_END:var previous=str.charAt(c-1);if(quotedStart&amp;&amp;ch==&quot;'&quot;||tickStart&amp;&amp;ch=='&quot;'){}else{if(previous!=&quot;\\&quot;){state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{data.push(transformValue(key,currentstr,quotedStart||tickStart))}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;}}break}break;case&quot;&gt;&quot;:case&quot;&lt;&quot;:case&quot;=&quot;:case&quot;:&quot;:if(state==STATE_LOOKING_FOR_VARIABLE_END){if(ch==&quot;&lt;&quot;||ch==&quot;&gt;&quot;){key=$.trim(currentstr);currentstr=&quot;&quot;;state=STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER}}switch(state){case STATE_LOOKING_FOR_VARIABLE_END:append=false;state=STATE_LOOKING_FOR_VALUE_BEGIN;key=$.trim(currentstr);currentstr=&quot;&quot;;operator=ch;break;case STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER:append=false;state=STATE_LOOKING_FOR_VALUE_BEGIN;operator=ch;break}break;case&quot;,&quot;:switch(state){case STATE_LOOKING_FOR_VARIABLE_BEGIN:append=false;state=STATE_LOOKING_FOR_VARIABLE_BEGIN;break;case STATE_LOOKING_FOR_VARIABLE_END:state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;if(asjson){data[currentstr]=null}else{var entry=transformValue(key,currentstr);entry.operator=operator;entry.key=entry.value;entry.empty=true;data.push(entry)}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;;break;case STATE_LOOKING_FOR_VALUE_END:if(!quotedStart&amp;&amp;!tickStart){state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{var entry=transformValue(key,currentstr);entry.operator=operator;data.push(entry)}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;}break}break;case&quot; &quot;:break;case&quot;\n&quot;:case&quot;\t&quot;:case&quot;\r&quot;:append=false;break;case&quot;{&quot;:switch(state){case STATE_LOOKING_FOR_VALUE_BEGIN:state=STATE_LOOKING_FOR_VALUE_AS_JSON_END}break;case&quot;}&quot;:if(state==STATE_LOOKING_FOR_VALUE_AS_JSON_END){state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;currentstr+=&quot;}&quot;;if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{var entry=transformValue(key,currentstr);entry.operator=operator;data.push(entry)}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;}break;default:switch(state){case STATE_LOOKING_FOR_VARIABLE_BEGIN:state=STATE_LOOKING_FOR_VARIABLE_END;break;case STATE_LOOKING_FOR_VALUE_BEGIN:state=STATE_LOOKING_FOR_VALUE_END;break}}if(append){currentstr+=ch}if(c+1==len&amp;&amp;key){currentstr=$.trim(currentstr);if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{var entry=transformValue(key,currentstr);entry.operator=operator;data.push(entry)}}}if(currentstr&amp;&amp;!key){if(asjson){data[key]=null}else{var entry=transformValue(key,currentstr);entry.empty=true;entry.key=entry.value;entry.operator=operator;data.push(entry)}}return data};function isIDRef(value){if(value){if(typeof (value)==&quot;string&quot;){return value.charAt(0)==&quot;$&quot;}}return false}App.parseConditionCondition=function(actionParams,data){var ok=true;if(actionParams){for(var c=0,len=actionParams.length;c&lt;len;c++){var p=actionParams[c];var negate=false,regex=false;if(p.empty&amp;&amp;p.value){p.key=p.value;p.keyExpression=p.valueExpression;p.value=null}var lhs=p.key,rhs=p.value,operator=p.operator||&quot;&quot;;if(p.key&amp;&amp;p.key.charAt(0)==&quot;!&quot;){negate=true;lhs=p.key.substring(1)}else{if(p.key&amp;&amp;p.key.charAt(p.key.length-1)==&quot;!&quot;){negate=true;lhs=p.key.substring(0,p.key.length-1)}}var preLHS=lhs;if(p.keyExpression||isIDRef(lhs)){var out=App.getEvaluatedValue(lhs,data,data,p.keyExpression);if(!p.keyExpression&amp;&amp;isIDRef(lhs)&amp;&amp;lhs==out){lhs=null}else{lhs=out}}else{lhs=App.getEvaluatedValue(lhs,data)}if(lhs==preLHS){lhs=null}if((operator==&quot;&lt;&quot;||operator==&quot;&gt;&quot;)&amp;&amp;(rhs&amp;&amp;typeof (rhs)==&quot;string&quot;&amp;&amp;rhs.charAt(0)==&quot;=&quot;)){operator+=&quot;=&quot;;rhs=rhs.substring(1)}if(rhs&amp;&amp;typeof (rhs)==&quot;string&quot;&amp;&amp;rhs.charAt(0)==&quot;~&quot;){regex=true;rhs=rhs.substring(1)}if(p.empty){rhs=lhs}else{if(p.keyExpression||isIDRef(rhs)){var out=App.getEvaluatedValue(rhs,data,data,p.valueExpression);if(!p.valueExpression&amp;&amp;isIDRef(rhs)&amp;&amp;rhs==out){rhs=null}else{rhs=out}}else{rhs=App.getEvaluatedValue(rhs,data)}}if(regex){var r=new RegExp(rhs);ok=r.test(lhs)}else{if(!operator&amp;&amp;p.empty&amp;&amp;rhs==null){ok=lhs}else{switch(operator||&quot;=&quot;){case&quot;&lt;&quot;:ok=parseInt(lhs)&lt;parseInt(rhs);break;case&quot;&gt;&quot;:ok=parseInt(lhs)&gt;parseInt(rhs);break;case&quot;&lt;=&quot;:ok=parseInt(lhs)&lt;=parseInt(rhs);break;case&quot;&gt;=&quot;:ok=parseInt(lhs)&gt;=parseInt(rhs);break;default:ok=String(lhs)==String(rhs);break}}}if(negate){ok=!ok}if(!ok){break}}}return ok};App.getJsonTemplateVar=function(namespace,var_expr,template_var){var def={};var o=$.getNestedProperty(namespace,var_expr,def);if(o==def){try{with(namespace){o=eval(var_expr)}}catch(e){return template_var}}if(typeof (o)==&quot;object&quot;){o=$.toJSON(o).replace(/&quot;/g,&quot;&amp;quot;&quot;)}return o};var templateRE=/#\{(.*?)\}/g;AppC.compileTemplate=function(html,htmlonly,varname,re){html=html||&quot;&quot;;varname=varname==null?&quot;f&quot;:varname;re=re||templateRE;var fn=function(m,name,format,args){return&quot;', jtv(values,'&quot;+name+&quot;','#{&quot;+name+&quot;}'),'&quot;};var body=&quot;var &quot;+varname+&quot; = function(values){ var jtv = App.getJsonTemplateVar; return ['&quot;+html.replace(/(\r\n|\n)/g,&quot;&quot;).replace(/\t/g,&quot; &quot;).replace(/'/g,&quot;\\'&quot;).replace(re,fn)+&quot;'].join('');};&quot;+(htmlonly?&quot;&quot;:varname);var result=htmlonly?body:eval(body);return result};App.componentData={};App.getData=function(id,key){var d=App.componentData[id];if(!d){return null}if(!key){return d}return d[key]};App.setData=function(id,data){var d=App.componentData[id];if(!d){App.componentData[id]=data}else{for(var p in data){d[p]=data[p]}}};var conds=[];App.regCond=function(re,fn){conds.push({re:re,fn:fn})};App.processCond=function(el,info){var f=false;$.each(conds,function(){if(this.re.test(info.cond)){f=true;this.fn.call(el,info);return false}});if(!f){$.error(&quot;not match for cond = &quot;+info.cond+&quot; for element with id: &quot;+$(el).attr(&quot;id&quot;))}};function smartTokenSearch(searchString,value){var validx=-1;if(searchString.indexOf(&quot;[&quot;)&gt;-1&amp;&amp;searchString.indexOf(&quot;]&quot;)&gt;-1){var possibleValuePosition=searchString.indexOf(value);if(possibleValuePosition&gt;-1){var in_left_bracket=false;for(var i=possibleValuePosition;i&gt;-1;i--){if(searchString.charAt(i)==&quot;]&quot;){break}if(searchString.charAt(i)==&quot;[&quot;){in_left_bracket=true;break}}var in_right_bracket=false;for(var i=possibleValuePosition;i&lt;searchString.length;i++){if(searchString.charAt(i)==&quot;[&quot;){break}if(searchString.charAt(i)==&quot;]&quot;){in_right_bracket=true;break}}if(in_left_bracket&amp;&amp;in_right_bracket){validx=-1}else{validx=searchString.indexOf(value)}}else{validx=possibleValuePosition}}else{validx=searchString.indexOf(value)}return validx}var compoundCondRE=/^\((.*)?\) then$/;App.parseExpression=function(value,element){if(!value){return[]}if(typeof (value)!=&quot;string&quot;){alert(&quot;framework error: value was &quot;+value+&quot; -- unexpected type: &quot;+typeof (value));throw&quot;value: &quot;+value+&quot; is not a string!&quot;}value=$.gsub(value,&quot;\n&quot;,&quot; &quot;);value=$.gsub(value,&quot;\r&quot;,&quot; &quot;);value=$.gsub(value,&quot;\t&quot;,&quot; &quot;);value=$.trim(value);var thens=[];var ors=$.smartSplit(value,&quot; or &quot;);for(var c=0,len=ors.length;c&lt;len;c++){var expression=$.trim(ors[c]);var thenidx=expression.indexOf(&quot; then &quot;);if(thenidx&lt;=0){throw&quot;syntax error: expected 'then' for expression: &quot;+expression}var condition=expression.substring(0,thenidx);var testExpr=expression.substring(0,thenidx+5);var condMatch=compoundCondRE.exec(testExpr);if(condMatch){var expressions=condMatch[1];condition=$.smartSplit(expressions,&quot; or &quot;)}var elseAction=null;var nextstr=expression.substring(thenidx+6);var elseidx=smartTokenSearch(nextstr,&quot;else&quot;);var increment=5;if(elseidx==-1){elseidx=nextstr.indexOf(&quot;otherwise&quot;);increment=10}var action=null;if(elseidx&gt;0){action=nextstr.substring(0,elseidx-1);elseAction=nextstr.substring(elseidx+increment)}else{action=nextstr}var nextStr=elseAction||action;var ifCond=null;var ifIdx=nextStr.indexOf(&quot; if expr[&quot;);if(ifIdx!=-1){var ifStr=nextStr.substring(ifIdx+9);var endP=ifStr.indexOf(&quot;]&quot;);if(endP==-1){throw&quot;error in if expression, missing end parenthesis at: &quot;+action}ifCond=ifStr.substring(0,endP);if(elseAction){elseAction=nextStr.substring(0,ifIdx)}else{action=nextStr.substring(0,ifIdx)}nextStr=ifStr.substring(endP+2)}var delay=0;var afterIdx=smartTokenSearch(nextstr,&quot;after &quot;);if(afterIdx!=-1){var afterStr=nextstr.substring(afterIdx+6);delay=App.timeFormat(afterStr);if(!ifCond){if(elseAction){elseAction=nextStr.substring(0,afterIdx-1)}else{action=nextStr.substring(0,afterIdx-1)}}}thens.push([null,condition,action,elseAction,delay,ifCond])}return thens};var ONE_SECOND=1000;var ONE_MINUTE=60000;var ONE_HOUR=3600000;var ONE_DAY=86400000;var ONE_WEEK=604800000;var ONE_MONTH=18748800000;var ONE_YEAR=31536000000;App.timeFormat=function(value){if(typeof (value)==&quot;number&quot;){return value}var str=&quot;&quot;;var time=0;for(var c=0,len=value.length;c&lt;len;c++){var ch=value.charAt(c);switch(ch){case&quot;,&quot;:case&quot; &quot;:str=&quot;&quot;;break;case&quot;m&quot;:if(c+1&lt;len){var nextch=value.charAt(c+1);if(nextch==&quot;s&quot;){time+=parseInt(str);c++}}else{time+=parseInt(str)*ONE_MINUTE}str=&quot;&quot;;break;case&quot;s&quot;:time+=parseInt(str)*ONE_SECOND;str=&quot;&quot;;break;case&quot;h&quot;:time+=parseInt(str)*ONE_HOUR;str=&quot;&quot;;break;case&quot;d&quot;:time+=parseInt(str)*ONE_DAY;str=&quot;&quot;;break;case&quot;w&quot;:time+=parseInt(str)*ONE_WEEK;str=&quot;&quot;;break;case&quot;y&quot;:time+=parseInt(str)*ONE_YEAR;str=&quot;&quot;;break;default:str+=ch;break}}if(str.length&gt;0){time+=parseInt(str)}return time};var events=[&quot;blur&quot;,&quot;click&quot;,&quot;change&quot;,&quot;dblclick&quot;,&quot;focus&quot;,&quot;keydown&quot;,&quot;keyup&quot;,&quot;keypress&quot;,&quot;mousedown&quot;,&quot;mousemove&quot;,&quot;mouseout&quot;,&quot;mouseover&quot;,&quot;mouseup&quot;,&quot;resize&quot;,&quot;scroll&quot;,&quot;select&quot;,&quot;submit&quot;];function evtRegex(name){return new RegExp(&quot;^&quot;+name+&quot;(\\[(.*)?\\])?$&quot;)}App.regCond(new RegExp(&quot;^(&quot;+events.join(&quot;|&quot;)+&quot;)[!]?$&quot;),function(meta){var stop=false;var cond=meta.cond;if(cond.charAt(cond.length-1)==&quot;!&quot;){cond=cond.substring(0,cond.length-1);stop=true}var fn=function(e){var scope=$(this);var data=App.getFieldsetData(scope);data.event={id:$(this).attr(&quot;id&quot;),x:e.pageX,y:e.pageY};$.debug(&quot;sending &quot;+cond+&quot;, data = &quot;+$.toJSON(data));App.triggerAction(scope,data,meta);if(stop){e.stopPropagation();return false}};this.bind(cond,fn);this.trash(function(){this.unbind(cond,fn)})});App.regCond(/^compiled$/,function(meta){var fn=function(){var scope=$(this);var data={event:{id:$(this).attr(&quot;id&quot;)}};App.triggerAction(scope,data,meta)};this.bind(&quot;compiled&quot;,fn);this.trash(function(){this.unbind(&quot;compiled&quot;,fn)})});
+var absoluteUriRefRegex=/^[A-Z][0-9A-Z+\-\.]*:/i;var splitUriRefRegex=/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/;var reMissingGroupSupport=(typeof &quot;&quot;.match(/(a)?/)[1]!=&quot;string&quot;);URI={};URI.isAbsolute=function(uriRef){return absoluteUriRefRegex.test(uriRef)};URI.splitUriRef=function(uriRef){var parts=uriRef.match(splitUriRefRegex);parts.shift();var scheme=parts[1],auth=parts[3],path=parts[4],query=parts[6],frag=parts[8];if(!reMissingGroupSupport){var undef;if(parts[0]==&quot;&quot;){scheme=undef}if(parts[2]==&quot;&quot;){auth=undef}if(parts[5]==&quot;&quot;){query=undef}if(parts[7]==&quot;&quot;){frag=undef}}parts=[scheme,auth,this.uriPathRemoveDotSegments(path),query,frag];return parts};URI.unsplitUriRef=function(uriRefSeq){var uriRef=&quot;&quot;;if(typeof uriRefSeq[0]!=&quot;undefined&quot;){uriRef+=uriRefSeq[0]+&quot;:&quot;}if(typeof uriRefSeq[1]!=&quot;undefined&quot;){uriRef+=&quot;//&quot;+uriRefSeq[1]}uriRef+=uriRefSeq[2];if(typeof uriRefSeq[3]!=&quot;undefined&quot;){uriRef+=&quot;?&quot;+uriRefSeq[3]}if(typeof uriRefSeq[4]!=&quot;undefined&quot;){uriRef+=&quot;#&quot;+uriRefSeq[4]}return uriRef};URI.uriPathRemoveDotSegments=function(path){if(path==&quot;.&quot;||path==&quot;..&quot;){return&quot;&quot;}while(path){if(path.substring(0,2)==&quot;./&quot;){path=path.substring(2)}else{if(path.substring(0,3)==&quot;../&quot;){path=path.substring(3)}else{if(path.substring(0,2)==&quot;//&quot;){path=path.substring(1)}else{break}}}}var leading_slash=false;if(path.charAt(0)==&quot;/&quot;){path=path.substring(1);if(path.charAt(0)==&quot;/&quot;){path=path.substring(1)}leading_slash=true}if(path.substring(path.length-2)==&quot;/.&quot;){path=path.substring(0,path.length-1)}var segments=path.split(&quot;/&quot;);var keepers=[];segments=segments.reverse();while(segments.length){var seg=segments.pop();if(seg==&quot;..&quot;){if(keepers.length){keepers.pop()}else{if(!leading_slash){keepers.push(seg)}}if(!segments.length){keepers.push(&quot;&quot;)}}else{if(seg!=&quot;.&quot;){keepers.push(seg)}}}return(leading_slash&amp;&amp;&quot;/&quot;||&quot;&quot;)+keepers.join(&quot;/&quot;)};URI.absolutizeURI=function(uriRef,baseUri){if(!baseUri||!URI.isAbsolute(baseUri)){throw Error(&quot;baseUri '&quot;+baseUri+&quot;' is not absolute&quot;)}if(uriRef==&quot;&quot;||uriRef.charAt(0)==&quot;#&quot;){return baseUri.split(&quot;#&quot;)[0]+uriRef}var tScheme,tAuth,tPath,tQuery;var parts=URI.splitUriRef(uriRef);var rScheme=parts[0],rAuth=parts[1],rPath=parts[2],rQuery=parts[3],rFrag=parts[4];if(typeof rScheme!=&quot;undefined&quot;){var tScheme=rScheme;var tAuth=rAuth;var tPath=URI.uriPathRemoveDotSegments(rPath);var tQuery=rQuery}else{parts=URI.splitUriRef(baseUri);var bScheme=parts[0],bAuth=parts[1],bPath=parts[2],bQuery=parts[3],bFrag=parts[4];if(typeof rAuth!=&quot;undefined&quot;){tAuth=rAuth;tPath=URI.uriPathRemoveDotSegments(rPath);tQuery=rQuery}else{if(!rPath){tPath=bPath;tQuery=(typeof rQuery!=&quot;undefined&quot;&amp;&amp;rQuery||bQuery)}else{if(rPath.charAt(0)==&quot;/&quot;){tPath=URI.uriPathRemoveDotSegments(rPath)}else{if(typeof bAuth!=&quot;undefined&quot;&amp;&amp;!bPath){tPath=&quot;/&quot;+rPath}else{tPath=bPath.substring(0,bPath.lastIndexOf(&quot;/&quot;)+1)+rPath}tPath=URI.uriPathRemoveDotSegments(tPath)}tQuery=rQuery}tAuth=bAuth}tScheme=bScheme}var result=URI.unsplitUriRef([tScheme,tAuth,tPath,tQuery,rFrag]);return result};App=AppC={};AppC.Version={value:&quot;3.0.0&quot;,major:parseInt(&quot;3&quot;),minor:parseInt(&quot;0&quot;),revision:parseInt(&quot;0&quot;),date:&quot;11/04/2008&quot;,toString:function(){return this.value}};var started=new Date;var compileTime;var loadTime;AppC.LicenseType=&quot;Apache License Version 2.0 - see http://license.appcelerator.org&quot;;AppC.Copyright=&quot;Copyright (c) 2006-&quot;+(1900+started.getYear())+&quot; by Appcelerator, Inc. All Rights Reserved.&quot;;AppC.LicenseMessage=&quot;Appcelerator is licensed under &quot;+AppC.LicenseType;AppC.config={track_stats:true,report_stats:true,browser_check:true,auto_locale:false};AppC.params={debug:0,delayCompile:false};function queryString(uri,params){idx=uri.indexOf(&quot;?&quot;);params=params||{};if(idx&gt;0){var qs=uri.substring(idx+1);$.each(qs.split(&quot;&amp;&quot;),function(){var e=this.split(&quot;=&quot;);var v=decodeURIComponent(e[1]||&quot;&quot;);var k=decodeURIComponent(e[0]);switch(v){case&quot;1&quot;:case&quot;true&quot;:case&quot;yes&quot;:v=true;break;case&quot;0&quot;:case&quot;false&quot;:case&quot;no&quot;:v=false;break}params[k]=v})}return params}queryString(window.document.location.href,AppC.params);var removeLastElement=function(uri){var idx=uri.lastIndexOf(&quot;/&quot;);if(idx!=1){uri=uri.substring(0,idx)+&quot;/&quot;}return uri};var documentRoot=removeLastElement(top.window.document.location.href);var jsLocation=$(&quot;script[@src~=appcelerator]&quot;).get(0).src;var baseLocation=$(&quot;base[@href]&quot;).attr(&quot;href&quot;);baseLocation=baseLocation?URI.absolutizeURI(baseLocation,documentRoot):&quot;&quot;;jsLocation=jsLocation?URI.absolutizeURI(jsLocation,documentRoot):&quot;&quot;;if(jsLocation){AppC.sdkJS=URI.absolutizeURI(jsLocation,documentRoot);AppC.sdkRoot=removeLastElement(jsLocation);var docHost=URI.splitUriRef(documentRoot)[1];var jsHost=URI.splitUriRef(jsLocation)[1];if(docHost==jsHost){AppC.docRoot=URI.absolutizeURI(&quot;.&quot;,AppC.sdkRoot+&quot;..&quot;)}else{if(docHost!=jsHost&amp;&amp;baseLocation){AppC.docRoot=baseLocation}else{AppC.docRoot=URI.absolutizeURI(&quot;.&quot;,documentRoot)}}}else{$.error(&quot;Can't find appcelerator.js or appcelerator-debug.js&quot;);return false}if(!AppC.sdkRoot.charAt(AppC.sdkRoot.length-1)==&quot;/&quot;){AppC.sdkRoot+=&quot;/&quot;}if(!AppC.docRoot.charAt(AppC.docRoot.length-1)==&quot;/&quot;){AppC.docRoot+=&quot;/&quot;}AppC.compRoot=AppC.sdkRoot+&quot;components/&quot;;AppC.pluginRoot=AppC.sdkRoot+&quot;plugins/&quot;;queryString(jsLocation,AppC.config);var appid=0;App.ensureId=function(el){var rootEl=el.nodeType?el:$(el).get(0);var id=rootEl.id;if(!id){rootEl.id=rootEl.nodeName==&quot;BODY&quot;?&quot;app_body&quot;:&quot;app_&quot;+(appid++)}return el};$.fn.compile=function(){if(arguments.length==2&amp;&amp;typeof (arguments[0])==&quot;object&quot;){var state=arguments[1];$.each(arguments[0],function(){$(this).compile(state)})}else{if(arguments.length==1&amp;&amp;typeof (arguments[0].count)==&quot;number&quot;){var state=arguments[0];var node=$(this).get(0);var el=App.ensureId(node);var e=$(el);App.incState(state);var myid=e.attr(&quot;id&quot;);var compiled=App.runProcessors(el,state);$.debug(&quot; + compiled #&quot;+myid+&quot; (&quot;+getTagName(node)+&quot;) =&gt; &quot;+compiled);if(compiled){App.checkState(state,el)}}}return this};$.fn.compileChildren=function(state,self){var node=$(this).get(0);App.ensureId(node);var set=getTargetCompileSet(node,self);this.compile(set,state);return this};var state=function(el){this.count=1;this.el=el;this.completed=[]};App.createState=function(el){return new state(el)};App.incState=function(state){if(state){var count=++state.count;return count}};var bodyCompiled=false;App.checkState=function(state,el){if(state){if(el){state.completed.push($(el).get(0))}var count=--state.count;if(count==0){$.each($.unique(state.completed),function(){if(this!=document.body){$(this).trigger(&quot;compiled&quot;)}});if(!bodyCompiled){bodyCompiled=true;$(document.body).trigger(&quot;compiled&quot;)}}}};function getTargetCompileSet(node,self){var expr=null,filter=null;if(node!=null){node=typeof (node.nodeType)==&quot;undefined&quot;?node.get(0):node;var parent=node.nodeName==&quot;BODY&quot;?&quot;body&quot;:&quot;#&quot;+node.id;expr=(self?(parent+&quot;,&quot;):&quot;&quot;)+parent+&quot; &quot;+App.selectors.join(&quot;, &quot;+parent+&quot; &quot;)}else{expr=App.selectors.join(&quot;,&quot;);filter=function(){var exclude=App.delegateCompilers.join(&quot;,&quot;);return !$(this).parents(exclude).length}}if(filter){return $.unique($(expr).filter(filter))}return $.unique($(expr))}var beforeCompilers=[];AppC.beforeCompile=function(f){if(!beforeCompilers){f()}else{beforeCompilers.push(f)}return AppC};AppC.compileDocument=function(){var compileStarted=new Date;var body=$(document.body);if(beforeCompilers){$.each(beforeCompilers,function(){this(body)});beforeCompilers=null}body.bind(&quot;compiled&quot;,function(){body.pub(&quot;l:app.compiled&quot;,{event:{id:document.body.id||&quot;body&quot;}});$(document).trigger(&quot;compiled&quot;);compileFinished=new Date;loadTime=compileFinished-started;compileTime=compileFinished-compileStarted;if(top.window===window){$.info(AppC.Copyright);$.info(AppC.LicenseMessage);$.info(&quot;loaded in &quot;+(loadTime)+&quot; ms, compiler took ~&quot;+(compileTime)+&quot; ms&quot;);$.info(&quot;Appcelerator is ready!&quot;)}});var s=new state(body);$(document).compile(getTargetCompileSet(),s);App.checkState(s)};if(!AppC.params.delayCompile){$(document).ready(AppC.compileDocument)}var debug=AppC.params.debug&amp;&amp;AppC.params.debug==&quot;1&quot;||AppC.params.debug==true;var hasConsole=typeof (console)!=&quot;undefined&quot;;var keyStr=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=&quot;;$.extend({domText:function(dom){var str=&quot;&quot;;for(var c=0;c&lt;dom.childNodes.length;c++){str+=dom.childNodes[c].nodeValue||&quot;&quot;}return $.trim(str)},gsub:function(source,pattern,replacement){if(typeof (replacement)==&quot;string&quot;){var r=String(replacement);replacement=function(){return r}}var result=&quot;&quot;,match;while(source.length&gt;0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=this.string(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=&quot;&quot;}}return result},camel:function(value){var parts=value.split(&quot;-&quot;),len=parts.length;if(len==1){return parts[0]}var camelized=value.charAt(0)==&quot;-&quot;?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i&lt;len;i++){camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1)}return camelized},string:function(value){return value==null?&quot;&quot;:String(value)},proper:function(value){return value.charAt(0).toUpperCase()+value.substring(1)},smartSplit:function(value,splitter){if(typeof (value)!=&quot;string&quot;){$.error(&quot;Invalid parameter passed to smartSplit: &quot;+typeof (value)+&quot;, value: &quot;+value)}value=this.trim(value);var tokens=value.split(splitter);if(tokens.length==1){return tokens}var array=[];var current=null;for(var c=0;c&lt;tokens.length;c++){var line=tokens[c];if(!current&amp;&amp;line.charAt(0)==&quot;(&quot;){current=line+&quot; or &quot;;continue}else{if(current&amp;&amp;current.charAt(0)==&quot;(&quot;){if(line.indexOf(&quot;) &quot;)!=-1){array.push(current+line);current=null}else{current+=line+&quot; or &quot;}continue}}if(!current&amp;&amp;line.indexOf(&quot;[&quot;)&gt;=0&amp;&amp;line.indexOf(&quot;]&quot;)==-1){if(current){current+=splitter+line}else{current=line}}else{if(current&amp;&amp;line.indexOf(&quot;]&quot;)==-1){current+=splitter+line}else{if(current){array.push(current+splitter+line);current=null}else{array.push(line)}}}}return array},escapeHTML:function(value){var div=document.createElement(&quot;div&quot;);var text=document.createTextNode(value);div.appendChild(text);return div.innerHTML},escapeXML:function(value){if(!value){return null}return value.replace(/&amp;/g,&quot;&amp;amp;&quot;).replace(/&lt;/g,&quot;&amp;lt;&quot;).replace(/&gt;/g,&quot;&amp;gt;&quot;).replace(/&quot;/g,&quot;&amp;quot;&quot;).replace(/'/g,&quot;&amp;apos;&quot;)},unescapeXML:function(value){if(!value){return null}return value.replace(/&amp;lt;/g,&quot;&lt;&quot;).replace(/&amp;gt;/g,&quot;&gt;&quot;).replace(/&amp;apos;/g,&quot;'&quot;).replace(/&amp;amp;/g,&quot;&amp;&quot;).replace(/&amp;quot;/g,'&quot;')},emptyFunction:function(){},toFunction:function(str,dontPreProcess){var str=$.trim(str);if(str.length==0){return this.emptyFunction}if(!dontPreProcess){if(str.match(/^function\(/)){str=&quot;return &quot;+this.unescapeXML(str)+&quot;()&quot;}else{if(!str.match(/return/)){str=&quot;return &quot;+this.unescapeXML(str)}else{if(str.match(/^return function/)){str=this.unescapeXML(str)+&quot; ();&quot;}}}}var code=&quot;var f = function(){ var args = $.makeArray(arguments); &quot;+str+&quot;}; f;&quot;;var func=eval(code);if(this.isFunction(func)){return func}throw Error(&quot;code was not a function: &quot;+this)},getNestedProperty:function(obj,prop,def){if(obj!=null&amp;&amp;prop!=null){var props=prop.split(&quot;.&quot;);if(props.length!=-1){var cur=obj;this.each(props,function(){var p=this;if(null!=cur[p]){cur=cur[p]}else{cur=null;return false}});return cur==null?def:cur}else{return obj[prop]==null?def:obj[prop]}}return def},startsWith:function(a,b){return a.indexOf(b)===0},error:function(){var log=$.makeArray(arguments).join(&quot; &quot;);if(hasConsole){if($.isFunction(console.error)){console.error(log)}else{if($.isFunction(console.log)){console.log(log)}}}},info:function(){var log=$.makeArray(arguments).join(&quot; &quot;);if(hasConsole){if($.isFunction(console.info)){console.info(log)}else{if($.isFunction(console.log)){console.log(log)}}}},debug:function(){if(debug){var log=$.makeArray(arguments).join(&quot; &quot;);if(hasConsole){if($.isFunction(console.debug)){console.debug(log)}else{if($.isFunction(console.log)){console.log(log)}}}}},encode64:function(input){var output=&quot;&quot;;var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1&gt;&gt;2;enc2=((chr1&amp;3)&lt;&lt;4)|(chr2&gt;&gt;4);enc3=((chr2&amp;15)&lt;&lt;2)|(chr3&gt;&gt;6);enc4=chr3&amp;63;if(isNaN(chr2)){enc3=enc4=64}else{if(isNaN(chr3)){enc4=64}}output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4)}while(i&lt;input.length);return output},decode64:function(input){var output=&quot;&quot;;var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,&quot;&quot;);do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=(enc1&lt;&lt;2)|(enc2&gt;&gt;4);chr2=((enc2&amp;15)&lt;&lt;4)|(enc3&gt;&gt;2);chr3=((enc3&amp;3)&lt;&lt;6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}while(i&lt;input.length);return output},toQueryString:function(obj){var qs=[];for(var k in obj){var v=obj[k];var t=typeof (v);switch(t){case&quot;number&quot;:case&quot;string&quot;:case&quot;boolean&quot;:qs.push(encodeURIComponent(k)+&quot;=&quot;+encodeURIComponent(String(v)));break;case&quot;object&quot;:qs.push(encodeURIComponent(k)+&quot;=&quot;+encodeURIComponent($.toJSON(v)));break}}return qs.join(&quot;&amp;&quot;)},loadCSS:function(url){var head=document.getElementsByTagName(&quot;head&quot;)[0];var link=document.createElement(&quot;link&quot;);link.rel=&quot;stylesheet&quot;;link.type=&quot;text/css&quot;;link.href=url;head.appendChild(link)}});$.Class={create:function(){var parent=null,properties=$.makeArray(arguments);if($.isFunction(properties[0])){parent=properties.shift()}function klass(){this.initialize.apply(this,arguments)}$.Class.extend(klass,$.Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){var subclass=function(){};subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0;i&lt;properties.length;i++){klass.addMethods(properties[i])}if(!klass.prototype.initialize){klass.prototype.initialize=$.emptyFunction}klass.prototype.constructor=klass;return klass}};$.Class.Methods={addMethods:function(source){var ancestor=this.superclass&amp;&amp;this.superclass.prototype;var properties=[];for(var key in source){properties.push(key)}for(var i=0,length=properties.length;i&lt;length;i++){var property=properties[i],value=source[property];this.prototype[property]=value}return this}};$.Class.extend=function(destination,source){for(var property in source){destination[property]=source[property]}return destination};AppC.create=$.Class.create;AppC.extend=$.Class.extend;$.fn.delay=function(fn,delay){var scope=this;var f=typeof (fn)==&quot;number&quot;?delay:fn;var n=typeof (fn)==&quot;function&quot;?delay:fn;setTimeout(function(){f.call(scope)},(n||0.1)*1000);return this};$.fn.defer=function(fn,delay){$(this).delay(fn,0.001);return this};AppC.Types={};AppC.Types.enumeration=function(){var pattern=&quot;^(&quot;+$.makeArray(arguments).join(&quot;)|(&quot;)+&quot;)$&quot;;return{name:&quot;Enumeration&quot;,values:$.makeArray(arguments),regex:RegExp(pattern)}};AppC.Types.openEnumeration=function(){var pattern=&quot;^(&quot;+$.makeArray(arguments).join(&quot;)|(&quot;)+&quot;)|(.*)$&quot;;return{name:&quot;Enumeration&quot;,values:$.makeArray(arguments),regex:RegExp(pattern)}};AppC.Types.pattern=function(regex,name){name=name||&quot;pattern&quot;;return{name:name,regex:regex}};AppC.Types.bool=AppC.Types.enumeration(&quot;true&quot;,&quot;false&quot;);AppC.Types.bool.name=&quot;Boolean&quot;;AppC.Types.number=AppC.Types.pattern(/^-?[0-9]+(\.[0-9]+)$/,&quot;Number&quot;);AppC.Types.naturalNumber=AppC.Types.pattern(/[0-9]+/,&quot;Natural Number&quot;);AppC.Types.cssDimension=AppC.Types.pattern(/^-?[0-9]+(\.[0-9]+)(%|(em)|(en)|(px)|(pc)|(pt))?$/,&quot;CSS Dimension&quot;);AppC.Types.identifier=AppC.Types.pattern(/^[a-zA-Z_][a-zA-Z0-9_.]*$/,&quot;Identifier&quot;);AppC.Types.messageSend=AppC.Types.pattern(/^((l:)|(r:)|(local:)|(remote:))[a-zA-Z0-9_.]+/,&quot;AppC Message Send&quot;);AppC.Types.messageReceive=AppC.Types.pattern(/^((l:)|(r:)|(local:)|(remote:))((~.+)|([a-zA-Z0-9_.]+))/,&quot;AppC Message Reception&quot;);AppC.Types.onExpr={name:&quot;On Expression&quot;};AppC.Types.fieldset={name:&quot;Fieldset&quot;};AppC.Types.json={name:&quot;JSON Object&quot;};AppC.Types.javascriptExpr={name:&quot;Javascript Expression&quot;};AppC.Types.pathOrUrl={name:&quot;Path or url to resource&quot;};AppC.Types.cssClass={name:&quot;CSS Class name&quot;};AppC.Types.color={name:&quot;Color value&quot;};AppC.Types.time={name:&quot;Time value&quot;};AppC.Types.elementId={name:&quot;Element Id&quot;};AppC.Types.commaSeparated={name:&quot;Comma Separated Values&quot;};AppC.Types.languageId={name:&quot;Localization String Id&quot;};AppC.Types.string={name:&quot;Javascript String&quot;};AppC.Types.object={name:&quot;Javascript Object&quot;};AppC.Types.condition={name:&quot;Component Condition&quot;};AppC.Types.action={name:&quot;Component Action&quot;};AppC.Types.isInstance=function(value,type){if(type.regex){return type.regex.test(value)}switch(type){case AppC.Types.onExpr:try{var thens=App.parseExpression(value);return thens&amp;&amp;thens.length&gt;0}catch(e){return false}case AppC.Types.time:return value&amp;&amp;!isNaN(App.timeFormat(value));case AppC.Types.fieldset:return true;default:return true}};AppC.Types.getTypeId=function(type){throw new Error(&quot;this method is no longer supported&quot;)};App.selectors=[];App.delegateCompilers=[];var actions={};function addProcessor(tag,attr,handler,delegate,priority){var wildcard=tag==&quot;*&quot;;tag=wildcard?tag.toLowerCase():tag;var found=actions[tag];if(!found){found=[];actions[tag]=found}var isExpr=attr.indexOf(&quot;=&quot;)&gt;0;found[priority?&quot;unshift&quot;:&quot;push&quot;]({tag:tag,wildcard:wildcard,attr:attr,expr:isExpr,fn:handler,delegate:delegate});var expr=tag+&quot;[&quot;+(!isExpr?&quot;@&quot;:&quot;&quot;)+attr+&quot;]&quot;;App.selectors[priority?&quot;unshift&quot;:&quot;push&quot;](expr);if(delegate){App.delegateCompilers[priority?&quot;unshift&quot;:&quot;push&quot;](expr)}}function getTagName(el){var element=$(el).get(0);if(AppC.UA.IE){if(element.scopeName&amp;&amp;element.tagUrn){return(element.scopeName+&quot;:&quot;+element.nodeName).toLowerCase()}}return element.nodeName.toLowerCase()}function iterateProcessors(f,el,tag,state){if(f){var e=$(el);var delegateCompile=false;$.each(f,function(){if(this.wildcard||tag==this.tag){if(!this.expr){var v=e.attr(this.attr);if(v){var r=this.fn.apply(e,[v,state,tag]);if(typeof (r)==&quot;undefined&quot;){r=true}if(r&amp;&amp;this.delegate){delegateCompile=true}}}else{var r=this.fn.apply(e,[tag,state]);if(typeof (r)==&quot;undefined&quot;){r=true}if(r&amp;&amp;this.delegate){delegateCompile=true}}}if(delegateCompile){return false}});return delegateCompile}return false}function getTarget(params,t){if(!params){return t}if(params.target){return $(params.target)}var nt=params.id?$(&quot;#&quot;+params.id):null;return nt&amp;&amp;nt.length&gt;0?nt:t}function regCSSAction(name,key,value){App.regAction(evtRegex(name),function(params){if(typeof (key)==&quot;function&quot;){key.call(getTarget(params,this),params)}else{return getTarget(params,this).css(key,value||name)}})}App.runProcessors=function(el,state){var tag=getTagName(el);var r1=iterateProcessors(actions[tag],el,tag,state);var r2=iterateProcessors(actions[&quot;*&quot;],el,tag,state);return !(r1||r2)};App.reg=function(name,el,handler,delegateCompile,priority){if(typeof (el)==&quot;string&quot;){el=$.makeArray(el)}$.each(el,function(){addProcessor(this,name,handler,delegateCompile,priority)})};var regp={conds:{},actions:{},ractions:[]};var dyn={conds:{},actions:{}};App.dynloadAction=function(name,fn){App.regAction(name,fn);$.each(dyn.actions[name],function(){App.invokeAction(this.scope,name,this.params)});try{delete dyn.actions[name]}catch(E){dyn.actions[name]=null}};var actionRE=/\^([\w]+)\(/;var actionUnparsers={};App.parseParams=function(name){var f=actionUnparsers[name];return typeof (f)==&quot;undefined&quot;};App.regAction=function(name,fn,dontparse){dontparse=typeof (dontparse)==&quot;undefined&quot;?false:(dontparse===true);$.debug(&quot;adding action &quot;+name+&quot;, dontparse = &quot;+dontparse);var m=actionRE.exec(String(name));if(m&amp;&amp;m.length&gt;1||typeof (name)==&quot;string&quot;){var fnName=m.length&gt;1?m[1]:name;if(dontparse){actionUnparsers[fnName]=1}var f=$.fn[fnName];if(typeof (f)!=&quot;function&quot;){}if(f){var mapFnName=&quot;_&quot;+fnName;$.fn[mapFnName]=f;$.fn[fnName]=function(){if(!f){return }var r=f.apply(this,arguments);this.trigger(fnName);return r||this}}}regp.ractions.push({re:name,fn:fn,dontparse:dontparse})};App.makeCustomAction=function(el,value){var p=App.extractParameters(value);var meta={action:p.name,actionParams:p.params,delay:0,ifCond:null};actions[meta.action]=meta;return meta};App.invokeAction=function(name,data,params){$.debug(&quot;invokeAction called with &quot;+name);var scope=this;var found=false;$.each(regp.ractions,function(){if(this.re.test(name)){found=true;var newparams=params||{};if(data&amp;&amp;!this.dontparse){for(var x=0;x&lt;data.length;x++){var entry=data[x];var key=entry.key,value=entry.value;if(entry.keyExpression){key=App.getEvaluatedValue(entry.key,null,params,entry.keyExpression)}else{if(entry.valueExpression){value=App.getEvaluatedValue(entry.value,null,params,entry.valueExpression)}else{if(entry.empty){value=App.getEvaluatedValue(entry.key,null,params)}else{key=App.getEvaluatedValue(entry.key);value=App.getEvaluatedValue(entry.value,null,params)}}}newparams[key]=value}}else{if(data&amp;&amp;this.donparse){newparams=params}}$.debug(&quot;invoking action: &quot;+name+&quot; with: &quot;+$.toJSON(newparams)+&quot;, scope=&quot;+$(scope).attr(&quot;id&quot;));this.fn.apply(scope,[newparams,name,data]);return false}});if(!found){var fn=typeof (name)==&quot;function&quot;?name:$(this)[name];if(fn){var newparams=params||{};if(data){for(var x=0;x&lt;data.length;x++){var entry=data[x];var key=entry.key,value=entry.value;if(entry.keyExpression){key=App.getEvaluatedValue(entry.key,null,params,entry.keyExpression)}else{if(entry.valueExpression){value=App.getEvaluatedValue(entry.value,null,params,entry.valueExpression)}else{if(entry.empty){value=App.getEvaluatedValue(entry.key,null,params)}else{key=App.getEvaluatedValue(entry.key);value=App.getEvaluatedValue(entry.value,null,params)}}}newparams[key]=value}}$.debug(&quot;invoking action: &quot;+name+&quot; with: &quot;+$.toJSON(newparams)+&quot;, scope=&quot;+$(scope).attr(&quot;id&quot;));fn.apply(scope,[newparams,name,params])}else{$.error(&quot;couldn't find an action named: &quot;+name+&quot; for target: &quot;+$(this).attr(&quot;id&quot;))}}};App.triggerElseAction=function(scope,params,meta){App.triggerAction(scope,params,{action:meta.elseAction,actionParams:meta.elseActionParams,delay:0})};App.triggerAction=function(scope,params,meta){var data=meta.actionParams;var action=meta.action;if(meta.ifCond){var r=eval(meta.ifCond);if(r){if(typeof (r)==&quot;boolean&quot;){r=(r===true)}}if(!r){action=meta.elseAction;data=meta.elseActionParams}}if(action){if(meta.delay&gt;0){$(scope).delay(function(){App.invokeAction.apply(scope,[action,data,params])},meta.delay/1000)}else{App.invokeAction.apply(scope,[action,data,params])}}};App.dynregAction=function(actions){$.each($.makeArray(actions),function(){var name=$.string(this);var path=AppC.pluginRoot+&quot;/&quot;+name+&quot;_action.js&quot;;var found=regp.actions[path];if(found){return App.regAction(name,found)}App.regAction(evtRegex(name),function(params){var c=dyn.actions[name];var scope=getTarget(params,this);if(c){return c.push({scope:scope,params:params})}dyn.actions[name]=[{scope:scope,params:params}];$.debug(&quot;remote loading action = &quot;+path);$.getScript(path)})})};function convertParams(params){if(arguments.length==2&amp;&amp;typeof (params)==&quot;string&quot;){var key=arguments[0];var value=arguments[1];params={key:value}}return params}var parameterSeparatorRE=/[\$=:&gt;&lt;!]+/;var parameterRE=/(.*?)\[(.*)?\]/i;var expressionRE=/^expr\((.*?)\)$/;var numberRe=/^[-+]{0,1}[0-9]+$/;var floatRe=/^[0-9]*[\.][0-9]*[f]{0,1}$/;var booleanRe=/^(true|false)$/;var quotedRe=/^['&quot;]{1}|['&quot;]{1}$/;var jsonRe=/^\{(.*)?\}$/;var STATE_LOOKING_FOR_VARIABLE_BEGIN=0;var STATE_LOOKING_FOR_VARIABLE_END=1;var STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER=2;var STATE_LOOKING_FOR_VALUE_BEGIN=3;var STATE_LOOKING_FOR_VALUE_END=4;var STATE_LOOKING_FOR_VALUE_AS_JSON_END=5;function dequote(value){if(value&amp;&amp;typeof value==&quot;string&quot;){if(value.charAt(0)==&quot;'&quot;||value.charAt(0)=='&quot;'){value=value.substring(1)}if(value.charAt(value.length-1)==&quot;'&quot;||value.charAt(value.length-1)=='&quot;'){value=value.substring(0,value.length-1)}}return value}function convertInt(value){if(value.charAt(0)==&quot;0&quot;){if(value.length==1){return 0}return convertInt(value.substring(1))}return parseInt(value)}function decodeParameterValue(token,wasquoted){var value=null;if(token!=null&amp;&amp;token.length&gt;0&amp;&amp;!wasquoted){var match=jsonRe.exec(token);if(match){value=$.evalJSON(match[0])}if(!value){var quoted=quotedRe.test(token);if(quoted){value=dequote(token)}else{if(floatRe.test(token)){value=parseFloat(token)}else{if(numberRe.test(token)){value=convertInt(token)}else{if(booleanRe.test(token)){value=(token==&quot;true&quot;)}else{value=token}}}}}}if(token==&quot;null&quot;||value==&quot;null&quot;){return null}return value==null?token:value}App.getTagname=function(element){if(!element){throw&quot;element cannot be null&quot;}if(element.jquery){element=$(element).get(0)}if(element.nodeType!=1){throw&quot;node: &quot;+element.nodeName+&quot; is not an element, was nodeType: &quot;+element.nodeType+&quot;, type=&quot;+(typeof element)}if(element._tagName){return element._tagName}if($.browser.msie){if(element.scopeName&amp;&amp;element.tagUrn){return element.scopeName+&quot;:&quot;+element.nodeName.toLowerCase()}}return String(element.nodeName.toLowerCase())};function formatValue(value,quote){quote=(quote==null)?true:quote;if(value!=null){var type=typeof (value);if(type==&quot;boolean&quot;||type==&quot;array&quot;||type==&quot;object&quot;){return value}if(value==&quot;true&quot;||value==&quot;false&quot;){return value==&quot;true&quot;}if(value.charAt(0)==&quot;'&quot;&amp;&amp;quote){return value}if(value.charAt(0)=='&quot;'){value=value.substring(1,value.length-1)}if(quote){return&quot;'&quot;+value+&quot;'&quot;}return value}return&quot;&quot;}function getInputFieldValue(elem,dequote,local){elem=$(elem);var tagname=App.getTagname(elem);if(tagname!=&quot;input&quot;&amp;&amp;tagname!=&quot;textarea&quot;&amp;&amp;tagname!=&quot;select&quot;){return null}local=local==null?true:local;dequote=(dequote==null)?false:dequote;var type=elem.attr(&quot;type&quot;)||&quot;text&quot;;var v=elem.val();switch(type){case&quot;checkbox&quot;:return(v==&quot;on&quot;||v==&quot;checked&quot;)}return formatValue(v,!dequote)}function getElementValue(element,dequote,local){var el=typeof (element)==&quot;string&quot;?$(&quot;#&quot;+element):$(element);dequote=(dequote==null)?true:dequote;var elem=el.get(0);if(el.is(&quot;:input&quot;)){return el.val()}else{if(el.is(&quot;form&quot;)){var obj={};$.each(el.find(&quot;:input&quot;).filter(function(){return !this.disabled&amp;&amp;(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(i,elem){var val=$(this).val();return val==null?null:val.constructor==Array?$.map(val,function(val,i){return{name:elem.name||elem.id,value:val}}):{name:elem.name||elem.id,value:val}}).get(),function(){obj[this.name]=this.value});return obj}else{if(el.is(&quot;img,iframe&quot;)){return elem.src}}}if(elem.value!=undefined){return elem.value}return elem.html()}App.getEvaluatedValue=function(v,data,scope,isExpression){if(v&amp;&amp;typeof (v)==&quot;string&quot;){if(!isExpression&amp;&amp;v.charAt(0)==&quot;$&quot;){var varName=v.substring(1);var elem=$(&quot;#&quot;+varName);if(elem){return getElementValue(elem,true)}}else{if(!isExpression&amp;&amp;!isNaN(parseFloat(v))){return v}else{var match=isExpression||expressionRE.exec(v);if(match){var expr=isExpression?v:match[1];var func=$.toFunction(expr);var s=scope?scope:{};if(data){for(var k in data){if(typeof (k)==&quot;string&quot;){s[k]=data[k]}}}return func.call(s)}if(scope){var result=$.getNestedProperty(scope,v,null);if(result){return result}}if(data){return $.getNestedProperty(data,v,v)}}}}return v};App.extractParameters=function(value,scope){var idx=value.indexOf(&quot;[&quot;);if(idx!=-1){var endidx=value.lastIndexOf(&quot;]&quot;);var p=value.substring(idx+1,endidx);var action=value.substring(0,idx);var canParse=App.parseParams(action);var params=null;if(canParse){params=App.getParameters(p,false);if(params&amp;&amp;scope){var newparams={};for(var x=0;x&lt;params.length;x++){var entry=params[x];var key=entry.key,value=entry.value;if(entry.keyExpression){key=App.getEvaluatedValue(entry.key,null,scope,entry.keyExpression)}else{if(entry.valueExpression){value=App.getEvaluatedValue(entry.value,null,scope,entry.valueExpression)}else{if(entry.empty){value=App.getEvaluatedValue(entry.key,null,scope)}else{key=App.getEvaluatedValue(entry.key);value=App.getEvaluatedValue(entry.value,null,scope)}}}newparams[key]=value}params=newparams}}return{name:action,params:params||p}}return{name:value,params:null}};App.getParameters=function(str,asjson){if(str==null||str.length==0){return asjson?{}:[]}var exprRE=/expr\((.*?)\)/;var containsExpr=exprRE.test(str);if(!parameterSeparatorRE.test(str)&amp;&amp;!containsExpr){if(asjson){var valueless_key={};valueless_key[str]=&quot;&quot;;return valueless_key}else{return[{key:str,value:&quot;&quot;,empty:true}]}}var state=0;var currentstr=&quot;&quot;;var key=null;var data=asjson?{}:[];var quotedStart=false,tickStart=false;var operator=null;var expressions=containsExpr?{}:null;if(containsExpr){var expressionExtractor=function(e){var start=e.indexOf(&quot;expr(&quot;);if(start&lt;0){return null}var p=start+5;var end=e.length-1;var value=&quot;&quot;;while(true){var idx=e.indexOf(&quot;)&quot;,p);if(idx&lt;0){break}value+=e.substring(p,idx);if(idx==e.length-1){end=idx+1;break}var b=false;var x=idx+1;for(;x&lt;e.length;x++){switch(e.charAt(x)){case&quot;,&quot;:end=x;b=true;break;case&quot; &quot;:break;default:p=idx+1;break}}if(x==e.length-1){end=x;break}if(b){break}value+=&quot;)&quot;}var fullexpr=e.substring(start,end);return[fullexpr,value]};var ec=0;while(true){var m=expressionExtractor(str);if(!m){break}var k=&quot;__E__&quot;+(ec++);expressions[k]=m[1];str=str.replace(m[0],k)}}function transformValue(k,v,tick){if(k&amp;&amp;$.startsWith(k,&quot;__E__&quot;)){if(!asjson){return{key:expressions[k],value:v,keyExpression:true,valueExpression:false}}else{return eval(expressions[k])}}if(v&amp;&amp;$.startsWith(v,&quot;__E__&quot;)){if(!asjson){return{key:k,value:expressions[v],valueExpression:true,keyExpression:false}}else{return eval(expressions[v])}}var s=decodeParameterValue(v,tick);if(!asjson){return{key:k,value:s}}return s}for(var c=0,len=str.length;c&lt;len;c++){var ch=str.charAt(c);var append=true;switch(ch){case'&quot;':case&quot;'&quot;:switch(state){case STATE_LOOKING_FOR_VARIABLE_BEGIN:quoted=true;append=false;state=STATE_LOOKING_FOR_VARIABLE_END;quotedStart=ch=='&quot;';tickStart=ch==&quot;'&quot;;break;case STATE_LOOKING_FOR_VARIABLE_END:var previous=str.charAt(c-1);if(quotedStart&amp;&amp;ch==&quot;'&quot;||tickStart&amp;&amp;ch=='&quot;'){}else{if(previous!=&quot;\\&quot;){state=STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER;append=false;key=$.trim(currentstr);currentstr=&quot;&quot;}}break;case STATE_LOOKING_FOR_VALUE_BEGIN:append=false;quotedStart=ch=='&quot;';tickStart=ch==&quot;'&quot;;state=STATE_LOOKING_FOR_VALUE_END;break;case STATE_LOOKING_FOR_VALUE_END:var previous=str.charAt(c-1);if(quotedStart&amp;&amp;ch==&quot;'&quot;||tickStart&amp;&amp;ch=='&quot;'){}else{if(previous!=&quot;\\&quot;){state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{data.push(transformValue(key,currentstr,quotedStart||tickStart))}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;}}break}break;case&quot;&gt;&quot;:case&quot;&lt;&quot;:case&quot;=&quot;:case&quot;:&quot;:if(state==STATE_LOOKING_FOR_VARIABLE_END){if(ch==&quot;&lt;&quot;||ch==&quot;&gt;&quot;){key=$.trim(currentstr);currentstr=&quot;&quot;;state=STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER}}switch(state){case STATE_LOOKING_FOR_VARIABLE_END:append=false;state=STATE_LOOKING_FOR_VALUE_BEGIN;key=$.trim(currentstr);currentstr=&quot;&quot;;operator=ch;break;case STATE_LOOKING_FOR_VARIABLE_VALUE_MARKER:append=false;state=STATE_LOOKING_FOR_VALUE_BEGIN;operator=ch;break}break;case&quot;,&quot;:switch(state){case STATE_LOOKING_FOR_VARIABLE_BEGIN:append=false;state=STATE_LOOKING_FOR_VARIABLE_BEGIN;break;case STATE_LOOKING_FOR_VARIABLE_END:state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;if(asjson){data[currentstr]=null}else{var entry=transformValue(key,currentstr);entry.operator=operator;entry.key=entry.value;entry.empty=true;data.push(entry)}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;;break;case STATE_LOOKING_FOR_VALUE_END:if(!quotedStart&amp;&amp;!tickStart){state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{var entry=transformValue(key,currentstr);entry.operator=operator;data.push(entry)}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;}break}break;case&quot; &quot;:break;case&quot;\n&quot;:case&quot;\t&quot;:case&quot;\r&quot;:append=false;break;case&quot;{&quot;:switch(state){case STATE_LOOKING_FOR_VALUE_BEGIN:state=STATE_LOOKING_FOR_VALUE_AS_JSON_END}break;case&quot;}&quot;:if(state==STATE_LOOKING_FOR_VALUE_AS_JSON_END){state=STATE_LOOKING_FOR_VARIABLE_BEGIN;append=false;currentstr+=&quot;}&quot;;if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{var entry=transformValue(key,currentstr);entry.operator=operator;data.push(entry)}key=null;quotedStart=false,tickStart=false;currentstr=&quot;&quot;}break;default:switch(state){case STATE_LOOKING_FOR_VARIABLE_BEGIN:state=STATE_LOOKING_FOR_VARIABLE_END;break;case STATE_LOOKING_FOR_VALUE_BEGIN:state=STATE_LOOKING_FOR_VALUE_END;break}}if(append){currentstr+=ch}if(c+1==len&amp;&amp;key){currentstr=$.trim(currentstr);if(asjson){data[key]=transformValue(key,currentstr,quotedStart||tickStart)}else{var entry=transformValue(key,currentstr);entry.operator=operator;data.push(entry)}}}if(currentstr&amp;&amp;!key){if(asjson){data[key]=null}else{var entry=transformValue(key,currentstr);entry.empty=true;entry.key=entry.value;entry.operator=operator;data.push(entry)}}return data};function isIDRef(value){if(value){if(typeof (value)==&quot;string&quot;){return value.charAt(0)==&quot;$&quot;}}return false}App.parseConditionCondition=function(actionParams,data){var ok=true;if(actionParams){for(var c=0,len=actionParams.length;c&lt;len;c++){var p=actionParams[c];var negate=false,regex=false;if(p.empty&amp;&amp;p.value){p.key=p.value;p.keyExpression=p.valueExpression;p.value=null}var lhs=p.key,rhs=p.value,operator=p.operator||&quot;&quot;;if(p.key&amp;&amp;p.key.charAt(0)==&quot;!&quot;){negate=true;lhs=p.key.substring(1)}else{if(p.key&amp;&amp;p.key.charAt(p.key.length-1)==&quot;!&quot;){negate=true;lhs=p.key.substring(0,p.key.length-1)}}var preLHS=lhs;if(p.keyExpression||isIDRef(lhs)){var out=App.getEvaluatedValue(lhs,data,data,p.keyExpression);if(!p.keyExpression&amp;&amp;isIDRef(lhs)&amp;&amp;lhs==out){lhs=null}else{lhs=out}}else{lhs=App.getEvaluatedValue(lhs,data)}if(lhs==preLHS){lhs=null}if((operator==&quot;&lt;&quot;||operator==&quot;&gt;&quot;)&amp;&amp;(rhs&amp;&amp;typeof (rhs)==&quot;string&quot;&amp;&amp;rhs.charAt(0)==&quot;=&quot;)){operator+=&quot;=&quot;;rhs=rhs.substring(1)}if(rhs&amp;&amp;typeof (rhs)==&quot;string&quot;&amp;&amp;rhs.charAt(0)==&quot;~&quot;){regex=true;rhs=rhs.substring(1)}if(p.empty){rhs=lhs}else{if(p.keyExpression||isIDRef(rhs)){var out=App.getEvaluatedValue(rhs,data,data,p.valueExpression);if(!p.valueExpression&amp;&amp;isIDRef(rhs)&amp;&amp;rhs==out){rhs=null}else{rhs=out}}else{rhs=App.getEvaluatedValue(rhs,data)}}if(regex){var r=new RegExp(rhs);ok=r.test(lhs)}else{if(!operator&amp;&amp;p.empty&amp;&amp;rhs==null){ok=lhs}else{switch(operator||&quot;=&quot;){case&quot;&lt;&quot;:ok=parseInt(lhs)&lt;parseInt(rhs);break;case&quot;&gt;&quot;:ok=parseInt(lhs)&gt;parseInt(rhs);break;case&quot;&lt;=&quot;:ok=parseInt(lhs)&lt;=parseInt(rhs);break;case&quot;&gt;=&quot;:ok=parseInt(lhs)&gt;=parseInt(rhs);break;default:ok=String(lhs)==String(rhs);break}}}if(negate){ok=!ok}if(!ok){break}}}return ok};App.getJsonTemplateVar=function(namespace,var_expr,template_var){var def={};var o=$.getNestedProperty(namespace,var_expr,def);if(o==def){try{with(namespace){o=eval(var_expr)}}catch(e){return template_var}}if(typeof (o)==&quot;object&quot;){o=$.toJSON(o).replace(/&quot;/g,&quot;&amp;quot;&quot;)}return o};var templateRE=/#\{(.*?)\}/g;AppC.compileTemplate=function(html,htmlonly,varname,re){html=html||&quot;&quot;;varname=varname==null?&quot;f&quot;:varname;re=re||templateRE;var fn=function(m,name,format,args){return&quot;', jtv(values,'&quot;+name+&quot;','#{&quot;+name+&quot;}'),'&quot;};var body=&quot;var &quot;+varname+&quot; = function(values){ var jtv = App.getJsonTemplateVar; return ['&quot;+html.replace(/(\r\n|\n)/g,&quot;&quot;).replace(/\t/g,&quot; &quot;).replace(/'/g,&quot;\\'&quot;).replace(re,fn)+&quot;'].join('');};&quot;+(htmlonly?&quot;&quot;:varname);var result=htmlonly?body:eval(body);return result};App.componentData={};App.getData=function(id,key){var d=App.componentData[id];if(!d){return null}if(!key){return d}return d[key]};App.setData=function(id,data){var d=App.componentData[id];if(!d){App.componentData[id]=data}else{for(var p in data){d[p]=data[p]}}};var conds=[];App.regCond=function(re,fn){conds.push({re:re,fn:fn})};App.processCond=function(el,info){var f=false;$.each(conds,function(){if(this.re.test(info.cond)){f=true;this.fn.call(el,info);return false}});if(!f){$.error(&quot;not match for cond = &quot;+info.cond+&quot; for element with id: &quot;+$(el).attr(&quot;id&quot;))}};function smartTokenSearch(searchString,value){var validx=-1;if(searchString.indexOf(&quot;[&quot;)&gt;-1&amp;&amp;searchString.indexOf(&quot;]&quot;)&gt;-1){var possibleValuePosition=searchString.indexOf(value);if(possibleValuePosition&gt;-1){var in_left_bracket=false;for(var i=possibleValuePosition;i&gt;-1;i--){if(searchString.charAt(i)==&quot;]&quot;){break}if(searchString.charAt(i)==&quot;[&quot;){in_left_bracket=true;break}}var in_right_bracket=false;for(var i=possibleValuePosition;i&lt;searchString.length;i++){if(searchString.charAt(i)==&quot;[&quot;){break}if(searchString.charAt(i)==&quot;]&quot;){in_right_bracket=true;break}}if(in_left_bracket&amp;&amp;in_right_bracket){validx=-1}else{validx=searchString.indexOf(value)}}else{validx=possibleValuePosition}}else{validx=searchString.indexOf(value)}return validx}var compoundCondRE=/^\((.*)?\) then$/;App.parseExpression=function(value,element){if(!value){return[]}if(typeof (value)!=&quot;string&quot;){alert(&quot;framework error: value was &quot;+value+&quot; -- unexpected type: &quot;+typeof (value));throw&quot;value: &quot;+value+&quot; is not a string!&quot;}value=$.gsub(value,&quot;\n&quot;,&quot; &quot;);value=$.gsub(value,&quot;\r&quot;,&quot; &quot;);value=$.gsub(value,&quot;\t&quot;,&quot; &quot;);value=$.trim(value);var thens=[];var ors=$.smartSplit(value,&quot; or &quot;);for(var c=0,len=ors.length;c&lt;len;c++){var expression=$.trim(ors[c]);var thenidx=expression.indexOf(&quot; then &quot;);if(thenidx&lt;=0){throw&quot;syntax error: expected 'then' for expression: &quot;+expression}var condition=expression.substring(0,thenidx);var testExpr=expression.substring(0,thenidx+5);var condMatch=compoundCondRE.exec(testExpr);if(condMatch){var expressions=condMatch[1];condition=$.smartSplit(expressions,&quot; or &quot;)}var elseAction=null;var nextstr=expression.substring(thenidx+6);var elseidx=smartTokenSearch(nextstr,&quot;else&quot;);var increment=5;if(elseidx==-1){elseidx=nextstr.indexOf(&quot;otherwise&quot;);increment=10}var action=null;if(elseidx&gt;0){action=nextstr.substring(0,elseidx-1);elseAction=nextstr.substring(elseidx+increment)}else{action=nextstr}var nextStr=elseAction||action;var ifCond=null;var ifIdx=nextStr.indexOf(&quot; if expr[&quot;);if(ifIdx!=-1){var ifStr=nextStr.substring(ifIdx+9);var endP=ifStr.indexOf(&quot;]&quot;);if(endP==-1){throw&quot;error in if expression, missing end parenthesis at: &quot;+action}ifCond=ifStr.substring(0,endP);if(elseAction){elseAction=nextStr.substring(0,ifIdx)}else{action=nextStr.substring(0,ifIdx)}nextStr=ifStr.substring(endP+2)}var delay=0;var afterIdx=smartTokenSearch(nextstr,&quot;after &quot;);if(afterIdx!=-1){var afterStr=nextstr.substring(afterIdx+6);delay=App.timeFormat(afterStr);if(!ifCond){if(elseAction){elseAction=nextStr.substring(0,afterIdx-1)}else{action=nextStr.substring(0,afterIdx-1)}}}thens.push([null,condition,action,elseAction,delay,ifCond])}return thens};var ONE_SECOND=1000;var ONE_MINUTE=60000;var ONE_HOUR=3600000;var ONE_DAY=86400000;var ONE_WEEK=604800000;var ONE_MONTH=18748800000;var ONE_YEAR=31536000000;App.timeFormat=function(value){if(typeof (value)==&quot;number&quot;){return value}var str=&quot;&quot;;var time=0;for(var c=0,len=value.length;c&lt;len;c++){var ch=value.charAt(c);switch(ch){case&quot;,&quot;:case&quot; &quot;:str=&quot;&quot;;break;case&quot;m&quot;:if(c+1&lt;len){var nextch=value.charAt(c+1);if(nextch==&quot;s&quot;){time+=parseInt(str);c++}}else{time+=parseInt(str)*ONE_MINUTE}str=&quot;&quot;;break;case&quot;s&quot;:time+=parseInt(str)*ONE_SECOND;str=&quot;&quot;;break;case&quot;h&quot;:time+=parseInt(str)*ONE_HOUR;str=&quot;&quot;;break;case&quot;d&quot;:time+=parseInt(str)*ONE_DAY;str=&quot;&quot;;break;case&quot;w&quot;:time+=parseInt(str)*ONE_WEEK;str=&quot;&quot;;break;case&quot;y&quot;:time+=parseInt(str)*ONE_YEAR;str=&quot;&quot;;break;default:str+=ch;break}}if(str.length&gt;0){time+=parseInt(str)}return time};var events=[&quot;blur&quot;,&quot;click&quot;,&quot;change&quot;,&quot;dblclick&quot;,&quot;focus&quot;,&quot;keydown&quot;,&quot;keyup&quot;,&quot;keypress&quot;,&quot;mousedown&quot;,&quot;mousemove&quot;,&quot;mouseout&quot;,&quot;mouseover&quot;,&quot;mouseup&quot;,&quot;resize&quot;,&quot;scroll&quot;,&quot;select&quot;,&quot;submit&quot;];function evtRegex(name){return new RegExp(&quot;^&quot;+name+&quot;(\\[(.*)?\\])?$&quot;)}App.regCond(new RegExp(&quot;^(&quot;+events.join(&quot;|&quot;)+&quot;)[!]?$&quot;),function(meta){var stop=false;var cond=meta.cond;if(cond.charAt(cond.length-1)==&quot;!&quot;){cond=cond.substring(0,cond.length-1);stop=true}var fn=function(e){var scope=$(this);var data=App.getFieldsetData(scope);data.event={id:$(this).attr(&quot;id&quot;),x:e.pageX,y:e.pageY};$.debug(&quot;sending &quot;+cond+&quot;, data = &quot;+$.toJSON(data));App.triggerAction(scope,data,meta);if(stop){e.stopPropagation();return false}};this.bind(cond,fn);this.trash(function(){this.unbind(cond,fn)})});App.regCond(/^compiled$/,function(meta){var fn=function(){var scope=$(this);var data={event:{id:$(this).attr(&quot;id&quot;)}};App.triggerAction(scope,data,meta)};this.bind(&quot;compiled&quot;,fn);this.trash(function(){this.unbind(&quot;compiled&quot;,fn)})});
 /*
  * Cookie plugin
  *
@@ -45,69 +45,10 @@ var absoluteUriRefRegex=/^[A-Z][0-9A-Z+\-\.]*:/i;var splitUriRefRegex=/^(([^:\/?
  * http://www.gnu.org/licenses/gpl.html
  *
  */
-$.cookie=function(name,value,options){if(typeof value!=&quot;undefined&quot;){options=options||{};if(value===null){value=&quot;&quot;;options.expires=-1}var expires=&quot;&quot;;if(options.expires&amp;&amp;(typeof options.expires==&quot;number&quot;||options.expires.toUTCString)){var date;if(typeof options.expires==&quot;number&quot;){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires=&quot;; expires=&quot;+date.toUTCString()}var path=options.path?&quot;; path=&quot;+(options.path):&quot;&quot;;var domain=options.domain?&quot;; domain=&quot;+(options.domain):&quot;&quot;;var secure=options.secure?&quot;; secure&quot;:&quot;&quot;;document.cookie=[name,&quot;=&quot;,encodeURIComponent(value),expires,path,domain,secure].join(&quot;&quot;)}else{var cookieValue=null;if(document.cookie&amp;&amp;document.cookie!=&quot;&quot;){var cookies=document.cookie.split(&quot;;&quot;);for(var i=0;i&lt;cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+&quot;=&quot;)){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};$.fn.cookie=$.cookie;$.fn.trash=function(fn){var trash=this.data(&quot;trash&quot;);if(!trash){trash=[];this.data(&quot;trash&quot;,trash)}if(arguments.length==0||typeof (fn)==&quot;undefined&quot;){return trash}trash.push(fn);return this};$.fn.destroy=function(){var scope=$(this);if(!scope.attr(&quot;id&quot;)){return this}$.each(this,function(){var el=$(this);var trash=el.trash();if(trash&amp;&amp;trash.length&gt;0){$.each(trash,function(){try{this.call(scope)}catch(E){}});el.trigger(&quot;destroyed&quot;)}el.removeData(&quot;trash&quot;)});return this};var oldEmpty=$.fn.empty;$.fn.empty=function(){var el=$(this).get(0);if(el){var set=getTargetCompileSet(el,true);$.each(set,function(){$(this).destroy()})}return oldEmpty.apply(this,arguments)};var oldRemove=$.fn.remove;
-/*
-(c) Copyrights 2007 - 2008
-
-Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
- 
-jQuery Plugin by Tzury Bar Yochay 
-tzury.by@gmail.com
-http://evalinux.wordpress.com
-http://facebook.com/profile.php?id=513676303
-
-Project's sites: 
-http://code.google.com/p/js-hotkeys/
-http://github.com/tzuryby/hotkeys/tree/master
-
-License: same as jQuery license. 
-
-USAGE:
-    // simple usage
-    $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');});
-    
-    // special options such as disableInIput
-    $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {});
-    
-Note:
-    This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind
-
-
-UPDATES: changes by Jeff Haynie to support different methods that don't cause issues... (keymap)
-    
-*/
-(function(jQuery){jQuery.fn.__find__=jQuery.fn.find;var hotkeys={version:&quot;0.7.8&quot;,override:/keydown|keypress|keyup/g,triggersMap:{},specialKeys:{27:&quot;esc&quot;,9:&quot;tab&quot;,32:&quot;space&quot;,13:&quot;return&quot;,8:&quot;backspace&quot;,145:&quot;scroll&quot;,20:&quot;capslock&quot;,144:&quot;numlock&quot;,19:&quot;pause&quot;,45:&quot;insert&quot;,36:&quot;home&quot;,46:&quot;del&quot;,35:&quot;end&quot;,33:&quot;pageup&quot;,34:&quot;pagedown&quot;,37:&quot;left&quot;,38:&quot;up&quot;,39:&quot;right&quot;,40:&quot;down&quot;,112:&quot;f1&quot;,113:&quot;f2&quot;,114:&quot;f3&quot;,115:&quot;f4&quot;,116:&quot;f5&quot;,117:&quot;f6&quot;,118:&quot;f7&quot;,119:&quot;f8&quot;,120:&quot;f9&quot;,121:&quot;f10&quot;,122:&quot;f11&quot;,123:&quot;f12&quot;},shiftNums:{&quot;`&quot;:&quot;~&quot;,&quot;1&quot;:&quot;!&quot;,&quot;2&quot;:&quot;@&quot;,&quot;3&quot;:&quot;#&quot;,&quot;4&quot;:&quot;$&quot;,&quot;5&quot;:&quot;%&quot;,&quot;6&quot;:&quot;^&quot;,&quot;7&quot;:&quot;&amp;&quot;,&quot;8&quot;:&quot;*&quot;,&quot;9&quot;:&quot;(&quot;,&quot;0&quot;:&quot;)&quot;,&quot;-&quot;:&quot;_&quot;,&quot;=&quot;:&quot;+&quot;,&quot;;&quot;:&quot;:&quot;,&quot;'&quot;:'&quot;',&quot;,&quot;:&quot;&lt;&quot;,&quot;.&quot;:&quot;&gt;&quot;,&quot;/&quot;:&quot;?&quot;,&quot;\\&quot;:&quot;|&quot;},newTrigger:function(type,combi,callback){var result={};result[type]={};result[type][combi]={cb:callback,disableInInput:false};return result}};if(jQuery.browser.mozilla){hotkeys.specialKeys=jQuery.extend(hotkeys.specialKeys,{96:&quot;0&quot;,97:&quot;1&quot;,98:&quot;2&quot;,99:&quot;3&quot;,100:&quot;4&quot;,101:&quot;5&quot;,102:&quot;6&quot;,103:&quot;7&quot;,104:&quot;8&quot;,105:&quot;9&quot;})}jQuery.fn.find=function(selector){this.query=selector;return jQuery.fn.__find__.apply(this,arguments)};jQuery.fn.keyunmap=function(type,combi,fn){if(jQuery.isFunction(combi)){fn=combi;combi=null}if(combi&amp;&amp;typeof combi===&quot;string&quot;){var selectorId=((this.prevObject&amp;&amp;this.prevObject.query)||(this[0].id&amp;&amp;this[0].id)||this[0]).toString();var hkTypes=type.split(&quot; &quot;);for(var x=0;x&lt;hkTypes.length;x++){delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi]}}return this.unbind(type,fn)};jQuery.fn.keymap=function(type,data,fn){var handle=type.match(hotkeys.override);var result=null;if(typeof data===&quot;string&quot;){data={combi:data}}if(data.combi){for(var x=0;x&lt;handle.length;x++){var eventType=handle[x];var combi=data.combi.toLowerCase(),trigger=hotkeys.newTrigger(eventType,combi,fn),selectorId=((this.prevObject&amp;&amp;this.prevObject.query)||(this[0].id&amp;&amp;this[0].id)||this[0]).toString();trigger[eventType][combi].disableInInput=data.disableInInput;if(!hotkeys.triggersMap[selectorId]){hotkeys.triggersMap[selectorId]=trigger}else{if(!hotkeys.triggersMap[selectorId][eventType]){hotkeys.triggersMap[selectorId][eventType]=trigger[eventType]}}var mapPoint=hotkeys.triggersMap[selectorId][eventType][combi];if(!mapPoint){hotkeys.triggersMap[selectorId][eventType][combi]=[trigger[eventType][combi]]}else{if(mapPoint.constructor!==Array){hotkeys.triggersMap[selectorId][eventType][combi]=[mapPoint]}else{hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length]=trigger[eventType][combi]}}this.each(function(){var jqElem=jQuery(this);if(jqElem.attr(&quot;hkId&quot;)&amp;&amp;jqElem.attr(&quot;hkId&quot;)!==selectorId){selectorId=jqElem.attr(&quot;hkId&quot;)+&quot;;&quot;+selectorId}jqElem.attr(&quot;hkId&quot;,selectorId)});result=this.bind(handle.join(&quot; &quot;),data,hotkeys.handler)}}return result};hotkeys.findElement=function(elem){if(!jQuery(elem).attr(&quot;hkId&quot;)){if(jQuery.browser.opera||jQuery.browser.safari){while(!jQuery(elem).attr(&quot;hkId&quot;)&amp;&amp;elem.parentNode){elem=elem.parentNode}}}return elem};hotkeys.handler=function(event){var target=hotkeys.findElement(event.currentTarget),jTarget=jQuery(target),ids=jTarget.attr(&quot;hkId&quot;);if(ids){ids=ids.split(&quot;;&quot;);var code=event.which,type=event.type,special=hotkeys.specialKeys[code],character=!special&amp;&amp;String.fromCharCode(code).toLowerCase(),shift=event.shiftKey,ctrl=event.ctrlKey,alt=event.altKey||event.originalEvent.altKey,mapPoint=null;for(var x=0;x&lt;ids.length;x++){if(hotkeys.triggersMap[ids[x]][type]){mapPoint=hotkeys.triggersMap[ids[x]][type];break}}if(mapPoint){var trigger;if(!shift&amp;&amp;!ctrl&amp;&amp;!alt){trigger=mapPoint[special]||(character&amp;&amp;mapPoint[character])}else{var modif=&quot;&quot;;if(alt){modif+=&quot;alt+&quot;}if(ctrl){modif+=&quot;ctrl+&quot;}if(shift){modif+=&quot;shift+&quot;}trigger=mapPoint[modif+special];if(!trigger){if(character){trigger=mapPoint[modif+character]||mapPoint[modif+hotkeys.shiftNums[character]]||(modif===&quot;shift+&quot;&amp;&amp;mapPoint[hotkeys.shiftNums[character]])}}}if(trigger){var result=false;for(var x=0;x&lt;trigger.length;x++){if(trigger[x].disableInInput){var elem=jQuery(event.target);if(jTarget.is(&quot;input&quot;)||jTarget.is(&quot;textarea&quot;)||elem.is(&quot;input&quot;)||elem.is(&quot;textarea&quot;)){return true}}result=result||trigger[x].cb.apply(this,[event])}return result}}}};window.hotkeys=hotkeys;return jQuery})(jQuery);App.reg(&quot;srcexpr&quot;,&quot;img&quot;,function(params){var value=null;for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;default:value=params[p];break}}getTarget(params,this).srcexpr(value)});
+$.cookie=function(name,value,options){if(typeof value!=&quot;undefined&quot;){options=options||{};if(value===null){value=&quot;&quot;;options.expires=-1}var expires=&quot;&quot;;if(options.expires&amp;&amp;(typeof options.expires==&quot;number&quot;||options.expires.toUTCString)){var date;if(typeof options.expires==&quot;number&quot;){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires=&quot;; expires=&quot;+date.toUTCString()}var path=options.path?&quot;; path=&quot;+(options.path):&quot;&quot;;var domain=options.domain?&quot;; domain=&quot;+(options.domain):&quot;&quot;;var secure=options.secure?&quot;; secure&quot;:&quot;&quot;;document.cookie=[name,&quot;=&quot;,encodeURIComponent(value),expires,path,domain,secure].join(&quot;&quot;)}else{var cookieValue=null;if(document.cookie&amp;&amp;document.cookie!=&quot;&quot;){var cookies=document.cookie.split(&quot;;&quot;);for(var i=0;i&lt;cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+&quot;=&quot;)){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};$.fn.cookie=$.cookie;$.fn.trash=function(fn){var trash=this.data(&quot;trash&quot;);if(!trash){trash=[];this.data(&quot;trash&quot;,trash)}if(arguments.length==0||typeof (fn)==&quot;undefined&quot;){return trash}trash.push(fn);return this};$.fn.destroy=function(){var scope=$(this);if(!scope.attr(&quot;id&quot;)){return this}$.each(this,function(){var el=$(this);var trash=el.trash();if(trash&amp;&amp;trash.length&gt;0){$.each(trash,function(){try{this.call(scope)}catch(E){}});el.trigger(&quot;destroyed&quot;)}el.removeData(&quot;trash&quot;)});return this};var oldEmpty=$.fn.empty;$.fn.empty=function(){var el=$(this).get(0);if(el){var set=getTargetCompileSet(el,true);$.each(set,function(){$(this).destroy()})}return oldEmpty.apply(this,arguments)};var oldRemove=$.fn.remove;App.reg(&quot;srcexpr&quot;,&quot;img&quot;,function(params){var value=null;for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;default:value=params[p];break}}getTarget(params,this).srcexpr(value)});
 /* some of this code came from Prototype and has been adapted to jQuery
 *  Prototype is (c) 2005-2007 Sam Stephenson
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *--------------------------------------------------------------------------*/
-Date.prototype.toJSON=function(){return'&quot;'+this.getUTCFullYear()+&quot;-&quot;+(this.getUTCMonth()+1).toPaddedString(2)+&quot;-&quot;+this.getUTCDate().toPaddedString(2)+&quot;T&quot;+this.getUTCHours().toPaddedString(2)+&quot;:&quot;+this.getUTCMinutes().toPaddedString(2)+&quot;:&quot;+this.getUTCSeconds().toPaddedString(2)+'Z&quot;'};String.specialChar={&quot;\b&quot;:&quot;\\b&quot;,&quot;\t&quot;:&quot;\\t&quot;,&quot;\n&quot;:&quot;\\n&quot;,&quot;\f&quot;:&quot;\\f&quot;,&quot;\r&quot;:&quot;\\r&quot;,&quot;\\&quot;:&quot;\\\\&quot;};$.times=function(ch,len){var str=&quot;&quot;;for(var c=0;c&lt;len;c++){str+=ch}return str};Number.prototype.toPaddedString=function(length,radix){var string=this.toString(radix||10);return $.times(&quot;0&quot;,length-string.length)+string};String.prototype.toJSON=function(){var useDoubleQuotes=true;var escapedString=$.gsub(this,/[\x00-\x1f\\]/,function(match){var character=String.specialChar[match[0]];return character?character:&quot;\\u00&quot;+match[0].charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes){return'&quot;'+escapedString.replace(/&quot;/g,'\\&quot;')+'&quot;'}return&quot;'&quot;+escapedString.replace(/'/g,&quot;\\'&quot;)+&quot;'&quot;};Array.prototype.toJSON=function(){var results=[];$.each(this,function(object){var value=$.toJSON(this);if(value!==undefined){results.push(value)}});return&quot;[&quot;+results.join(&quot;, &quot;)+&quot;]&quot;};Number.prototype.toJSON=function(){return isFinite(this)?this.toString():&quot;null&quot;};Boolean.prototype.toJSON=function(){return String(this)};$.extend({toJSON:function(object){var type=typeof object;switch(type){case&quot;undefined&quot;:case&quot;function&quot;:case&quot;unknown&quot;:return&quot;null&quot;}if(object===null){return&quot;null&quot;}if(typeof (object.jquery)==&quot;string&quot;){return null}if(object.toJSON){return object.toJSON()}if(object.nodeType==1){return }var results=[];for(var property in object){var value=object[property];if(value!==undefined){results.push($.toJSON(property)+&quot;: &quot;+$.toJSON(value))}}return&quot;{&quot;+results.join(&quot;, &quot;)+&quot;}&quot;},JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,unfilterJSON:function(str,filter){var m=(filter||this.JSONFilter).exec(str);return m?m[1]:str},isJSON:function(s){var str=s.replace(/\\./g,&quot;@&quot;).replace(/&quot;[^&quot;\\\n\r]*&quot;/g,&quot;&quot;);return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str)},evalJSON:function(str,sanitize){var json=this.unfilterJSON(str);try{if(!sanitize||$.isJSON(json)){return eval(&quot;(&quot;+json+&quot;)&quot;)}}catch(e){}throw new SyntaxError(&quot;Badly formed JSON string: &quot;+str)}});App.MD5={hexcase:0,b64pad:&quot;&quot;,chrsz:8,hex_md5:function(s){return this.binl2hex(this.core_md5(this.str2binl(s),s.length*this.chrsz))},b64_md5:function(s){return this.binl2b64(this.core_md5(this.str2binl(s),s.length*this.chrsz))},str_md5:function(s){return this.binl2str(this.core_md5(this.str2binl(s),s.length*this.chrsz))},hex_hmac_md5:function(key,data){return this.binl2hex(this.core_hmac_md5(key,data))},b64_hmac_md5:function(key,data){return this.binl2b64(this.core_hmac_md5(key,data))},str_hmac_md5:function(key,data){return this.binl2str(this.core_hmac_md5(key,data))},md5_vm_test:function(){return this.hex_md5(&quot;abc&quot;)==&quot;900150983cd24fb0d6963f7d28e17f72&quot;},core_md5:function(x,len){x[len&gt;&gt;5]|=128&lt;&lt;((len)%32);x[(((len+64)&gt;&gt;&gt;9)&lt;&lt;4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i&lt;x.length;i+=16){var olda=a;var oldb=b;var oldc=c;var oldd=d;a=this.md5_ff(a,b,c,d,x[i+0],7,-680876936);d=this.md5_ff(d,a,b,c,x[i+1],12,-389564586);c=this.md5_ff(c,d,a,b,x[i+2],17,606105819);b=this.md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=this.md5_ff(a,b,c,d,x[i+4],7,-176418897);d=this.md5_ff(d,a,b,c,x[i+5],12,1200080426);c=this.md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=this.md5_ff(b,c,d,a,x[i+7],22,-45705983);a=this.md5_ff(a,b,c,d,x[i+8],7,1770035416);d=this.md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=this.md5_ff(c,d,a,b,x[i+10],17,-42063);b=this.md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=this.md5_ff(a,b,c,d,x[i+12],7,1804603682);d=this.md5_ff(d,a,b,c,x[i+13],12,-40341101);c=this.md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=this.md5_ff(b,c,d,a,x[i+15],22,1236535329);a=this.md5_gg(a,b,c,d,x[i+1],5,-165796510);d=this.md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=this.md5_gg(c,d,a,b,x[i+11],14,643717713);b=this.md5_gg(b,c,d,a,x[i+0],20,-373897302);a=this.md5_gg(a,b,c,d,x[i+5],5,-701558691);d=this.md5_gg(d,a,b,c,x[i+10],9,38016083);c=this.md5_gg(c,d,a,b,x[i+15],14,-660478335);b=this.md5_gg(b,c,d,a,x[i+4],20,-405537848);a=this.md5_gg(a,b,c,d,x[i+9],5,568446438);d=this.md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=this.md5_gg(c,d,a,b,x[i+3],14,-187363961);b=this.md5_gg(b,c,d,a,x[i+8],20,1163531501);a=this.md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=this.md5_gg(d,a,b,c,x[i+2],9,-51403784);c=this.md5_gg(c,d,a,b,x[i+7],14,1735328473);b=this.md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=this.md5_hh(a,b,c,d,x[i+5],4,-378558);d=this.md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=this.md5_hh(c,d,a,b,x[i+11],16,1839030562);b=this.md5_hh(b,c,d,a,x[i+14],23,-35309556);a=this.md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=this.md5_hh(d,a,b,c,x[i+4],11,1272893353);c=this.md5_hh(c,d,a,b,x[i+7],16,-155497632);b=this.md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=this.md5_hh(a,b,c,d,x[i+13],4,681279174);d=this.md5_hh(d,a,b,c,x[i+0],11,-358537222);c=this.md5_hh(c,d,a,b,x[i+3],16,-722521979);b=this.md5_hh(b,c,d,a,x[i+6],23,76029189);a=this.md5_hh(a,b,c,d,x[i+9],4,-640364487);d=this.md5_hh(d,a,b,c,x[i+12],11,-421815835);c=this.md5_hh(c,d,a,b,x[i+15],16,530742520);b=this.md5_hh(b,c,d,a,x[i+2],23,-995338651);a=this.md5_ii(a,b,c,d,x[i+0],6,-198630844);d=this.md5_ii(d,a,b,c,x[i+7],10,1126891415);c=this.md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=this.md5_ii(b,c,d,a,x[i+5],21,-57434055);a=this.md5_ii(a,b,c,d,x[i+12],6,1700485571);d=this.md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=this.md5_ii(c,d,a,b,x[i+10],15,-1051523);b=this.md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=this.md5_ii(a,b,c,d,x[i+8],6,1873313359);d=this.md5_ii(d,a,b,c,x[i+15],10,-30611744);c=this.md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=this.md5_ii(b,c,d,a,x[i+13],21,1309151649);a=this.md5_ii(a,b,c,d,x[i+4],6,-145523070);d=this.md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=this.md5_ii(c,d,a,b,x[i+2],15,718787259);b=this.md5_ii(b,c,d,a,x[i+9],21,-343485551);a=this.safe_add(a,olda);b=this.safe_add(b,oldb);c=this.safe_add(c,oldc);d=this.safe_add(d,oldd)}return Array(a,b,c,d)},md5_cmn:function(q,a,b,x,s,t){return this.safe_add(this.bit_rol(this.safe_add(this.safe_add(a,q),this.safe_add(x,t)),s),b)},md5_ff:function(a,b,c,d,x,s,t){return this.md5_cmn((b&amp;c)|((~b)&amp;d),a,b,x,s,t)},md5_gg:function(a,b,c,d,x,s,t){return this.md5_cmn((b&amp;d)|(c&amp;(~d)),a,b,x,s,t)},md5_hh:function(a,b,c,d,x,s,t){return this.md5_cmn(b^c^d,a,b,x,s,t)},md5_ii:function(a,b,c,d,x,s,t){return this.md5_cmn(c^(b|(~d)),a,b,x,s,t)},core_hmac_md5:function(key,data){var bkey=this.str2binl(key);if(bkey.length&gt;16){bkey=this.core_md5(bkey,key.length*this.chrsz)}var ipad=Array(16),opad=Array(16);for(var i=0;i&lt;16;i++){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}var hash=this.core_md5(ipad.concat(this.str2binl(data)),512+data.length*this.chrsz);return this.core_md5(opad.concat(hash),512+128)},safe_add:function(x,y){var lsw=(x&amp;65535)+(y&amp;65535);var msw=(x&gt;&gt;16)+(y&gt;&gt;16)+(lsw&gt;&gt;16);return(msw&lt;&lt;16)|(lsw&amp;65535)},bit_rol:function(num,cnt){return(num&lt;&lt;cnt)|(num&gt;&gt;&gt;(32-cnt))},str2binl:function(str){var bin=Array();var mask=(1&lt;&lt;this.chrsz)-1;for(var i=0;i&lt;str.length*this.chrsz;i+=this.chrsz){bin[i&gt;&gt;5]|=(str.charCodeAt(i/this.chrsz)&amp;mask)&lt;&lt;(i%32)}return bin},binl2str:function(bin){var str=&quot;&quot;;var mask=(1&lt;&lt;this.chrsz)-1;for(var i=0;i&lt;bin.length*32;i+=this.chrsz){str+=String.fromCharCode((bin[i&gt;&gt;5]&gt;&gt;&gt;(i%32))&amp;mask)}return str},binl2hex:function(binarray){var hex_tab=this.hexcase?&quot;0123456789ABCDEF&quot;:&quot;0123456789abcdef&quot;;var str=&quot;&quot;;for(var i=0;i&lt;binarray.length*4;i++){str+=hex_tab.charAt((binarray[i&gt;&gt;2]&gt;&gt;((i%4)*8+4))&amp;15)+hex_tab.charAt((binarray[i&gt;&gt;2]&gt;&gt;((i%4)*8))&amp;15)}return str},binl2b64:function(binarray){var tab=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;;var str=&quot;&quot;;for(var i=0;i&lt;binarray.length*4;i+=3){var triplet=(((binarray[i&gt;&gt;2]&gt;&gt;8*(i%4))&amp;255)&lt;&lt;16)|(((binarray[i+1&gt;&gt;2]&gt;&gt;8*((i+1)%4))&amp;255)&lt;&lt;8)|((binarray[i+2&gt;&gt;2]&gt;&gt;8*((i+2)%4))&amp;255);for(var j=0;j&lt;4;j++){if(i*8+j*6&gt;binarray.length*32){str+=this.b64pad}else{str+=tab.charAt((triplet&gt;&gt;6*(3-j))&amp;63)}}}return str}};var loadedPlugins={};var dynamicPlugins={example:null};function installDynPlugin(name,fn){var l=loadedPlugins[name];if(l){return fn()}var path=AppC.pluginRoot+name+&quot;.js&quot;;$.getScript(path,function(){loadedPlugins[name]=1;fn()})}for(var name in dynamicPlugins){(function(){var found=$.fn[name];if(typeof (found)==&quot;function&quot;){return }$.fn[name]=function(){var arguments=arguments;var scope=this;var depends=dynamicPlugins[name]||[];depends.push(name);var length=depends.length;var count=0;var f=function(){var n=depends[count];if(count++&lt;length){installDynPlugin(n,f)}else{$.fn[name].apply(scope,arguments)}};f();return this}})()}(function(){var cache={};$.scriptlet=function scriptlet(str,data){var fn=!/\W/.test(str)?cache[str]=cache[str]||scriptlet($(str).html()):new Function(&quot;obj&quot;,&quot;var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('&quot;+str.replace(/[\r\t\n]/g,&quot; &quot;).split(&quot;&lt;%&quot;).join(&quot;\t&quot;).replace(/((^|%&gt;)[^\t]*)'/g,&quot;$1\r&quot;).replace(/\t=(.*?)%&gt;/g,&quot;',$1,'&quot;).split(&quot;\t&quot;).join(&quot;');&quot;).split(&quot;%&gt;&quot;).join(&quot;p.push('&quot;).split(&quot;\r&quot;).join(&quot;\\'&quot;)+&quot;');}return p.join('');&quot;);return data?fn(data):fn}})(jQuery);var components={controls:{},themes:{},behaviors:{},layouts:{}};AppC.register=function(type,name,fn){var e=components[type+&quot;s&quot;][name];if(!e){e={pend:[],factory:fn};components[type+&quot;s&quot;][name]=e}e.factory=fn;$.each(e.pend,function(){var instance=createControl(this.el,name,this.opts,this.fn);if(!instance){$.error(&quot;framework error - instance not returned from factory for: &quot;+name)}var render=instance.render;var el=this.el;var opts=this.opts;instance.render=function(){if(arguments.length==1){render.apply(instance,[el,arguments[0]])}else{render.apply(instance,arguments)}el.trigger(&quot;rendered&quot;,instance)};el.data(&quot;control&quot;,instance);el.trigger(&quot;created&quot;,[instance,this.opts]);$.each(instance.getAttributes(),function(){switch(this.type){case AppC.Types.condition:var name=&quot;on&quot;+$.proper(this.name);App.regCond(new RegExp(&quot;^(&quot;+this.name+&quot;)$&quot;),function(meta){var bindFn=function(args){var scope=$(this);args=args||{};args.id=$(this).attr(&quot;id&quot;);App.triggerAction(scope,args,meta)};el.bind(name,bindFn);el.trash(function(){el.unbind(name,bindFn)})});break;case AppC.Types.action:break;default:var v=opts[this.name]||this.defaultValue;if(typeof (v)==&quot;undefined&quot;&amp;&amp;!this.optional){el.trigger(&quot;onError&quot;,&quot;required property '&quot;+this.name+&quot;' not found or missing value&quot;)}opts[this.name]=v}});if(this.fn){this.fn.call(instance,opts)}instance.render.apply(instance,[this.el,opts])})};function createControl(el,name,opts,fn){var e=components.controls[name];opts=opts||{};if(e){if(!e.factory){e.pend.push({el:el,fn:fn,opts:opts});return }var instance=e.factory.create();return instance}e={pend:[{el:el,fn:fn,opts:opts}],factory:null};components.controls[name]=e;load(&quot;control&quot;,name,e)}function load(type,name,e){var uri=AppC.sdkPath+&quot;components/&quot;+type+&quot;s/&quot;+name+&quot;/&quot;+name+&quot;.js&quot;;$.getScript(uri)}$.fn.control=function(name,opts,fn){if(arguments.length==0){return this.data(&quot;control&quot;)}if(typeof (opts)==&quot;function&quot;){fn=opts;opts={}}createControl($(this),name,opts,fn);return this};$.fn.theme=function(name,options){return this};$.fn.behavior=function(name,options){return this};$.fn.layout=function(name,options){return this};App.reg(&quot;set&quot;,&quot;*&quot;,function(value,state){var el=$(this);var visibility=el.css(&quot;visibility&quot;)||&quot;visible&quot;;var show=false,initial=true;if(visibility==&quot;visible&quot;){el.css(&quot;visibility&quot;,&quot;hidden&quot;);show=true}el.addClass(&quot;container&quot;);var bindFn=function(){el.compileChildren(state,false);if(show){$(this).css(&quot;visibility&quot;,visibility);show=false}if(initial){initial=false;App.checkState(state,el)}};el.bind(&quot;rendered&quot;,bindFn);el.trash(function(){el.unbind(&quot;rendered&quot;,bindFn)});$.each($.smartSplit(value,&quot; and &quot;),function(){var idx=this.indexOf(&quot;[&quot;);if(idx&lt;0){throw new &quot;invalid set expression. must be in the form: control[type]&quot;}var lastIdx=this.lastIndexOf(&quot;]&quot;);var ui=this.substring(0,idx);var params=this.substring(idx+1,lastIdx);var comma=params.indexOf(&quot;,&quot;);var type=null,args={};if(comma&lt;0){type=params}else{type=params.substring(0,comma);args=App.getParameters(params.substring(comma+1),true);for(var p in args){args[p]=App.getEvaluatedValue(args[p])}}$.info(&quot;creating component of type=&quot;+type+&quot;,ui=&quot;+ui+&quot;,args=&quot;+$.toJSON(args));el[ui](type,args)})},true);var ua=navigator.userAgent.toLowerCase();AppC.UA={supported:false,opera:(ua.indexOf(&quot;opera&quot;)&gt;-1),safari:(ua.indexOf(&quot;safari&quot;)&gt;-1),safari2:false,safari3:false,IE:!!(window.ActiveXObject),IE6:false,IE7:false,IE8:false,windows:false,mac:false,linux:false,sunOS:false,platform:&quot;unknown&quot;,flash:false,flashVersion:0,silverlight:false,sliverlightVersion:0};if(AppC.UA.IE){var arVersion=navigator.appVersion.split(&quot;MSIE&quot;);var version=parseFloat(arVersion[1]);AppC.UA.IE6=version&gt;=6&amp;&amp;version&lt;7;AppC.UA.IE7=version&gt;=7&amp;&amp;version&lt;8;AppC.UA.IE8=version&gt;=8&amp;&amp;version&lt;9}else{if(AppC.UA.safari){var webKitFields=RegExp(&quot;( applewebkit/)([^ ]+)&quot;).exec(ua);if(webKitFields[2]&gt;400&amp;&amp;webKitFields[2]&lt;500){AppC.UA.safari2=true}else{if(webKitFields[2]&gt;500&amp;&amp;webKitFields[2]&lt;600){AppC.UA.safari3=true}}}}AppC.UA.gecko=!AppC.UA.safari&amp;&amp;(ua.indexOf(&quot;gecko&quot;)&gt;-1);AppC.UA.camino=AppC.UA.gecko&amp;&amp;ua.indexOf(&quot;camino&quot;)&gt;-1;AppC.UA.firefox=AppC.UA.gecko&amp;&amp;(ua.indexOf(&quot;firefox&quot;)&gt;-1||AppC.UA.camino||ua.indexOf(&quot;minefield&quot;)&gt;-1||ua.indexOf(&quot;granparadiso&quot;)&gt;-1||ua.indexOf(&quot;bonecho&quot;)&gt;-1);AppC.UA.IPhone=AppC.UA.safari&amp;&amp;ua.indexOf(&quot;iphone&quot;)&gt;-1;AppC.UA.mozilla=AppC.UA.gecko&amp;&amp;ua.indexOf(&quot;mozilla/&quot;)&gt;-1;AppC.UA.webkit=AppC.UA.mozilla&amp;&amp;AppC.UA.gecko&amp;&amp;ua.indexOf(&quot;applewebkit&quot;)&gt;0;AppC.UA.seamonkey=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;seamonkey&quot;)&gt;-1;AppC.UA.prism=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;prism/&quot;)&gt;0;AppC.UA.iceweasel=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;iceweasel&quot;)&gt;0;AppC.UA.epiphany=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;epiphany&quot;)&gt;0;AppC.UA.fluid=(window.fluid!=null);AppC.UA.gears=(window.google&amp;&amp;google.gears)!=null;AppC.UA.chromium=AppC.UA.webkit&amp;&amp;ua.indexOf(&quot;chrome/&quot;)&gt;0;if(ua.indexOf(&quot;windows&quot;)!=-1||ua.indexOf(&quot;win32&quot;)!=-1){AppC.UA.windows=true;AppC.UA.platform=&quot;win32&quot;}else{if(ua.indexOf(&quot;macintosh&quot;)!=-1||ua.indexOf(&quot;mac os x&quot;)!=-1){AppC.UA.mac=true;AppC.UA.platform=&quot;mac&quot;}else{if(ua.indexOf(&quot;linux&quot;)!=-1){AppC.UA.linux=true;AppC.UA.platform=&quot;linux&quot;}else{if(ua.indexOf(&quot;sunos&quot;)!=-1){AppC.UA.sunOS=true;AppC.UA.platform=&quot;sun&quot;}}}}AppC.UA.silverlight=false;AppC.UA.silverlightVersion=0;function checkForSilverlight(){var container=null;try{var control=null;if(window.ActiveXObject){control=new ActiveXObject(&quot;AgControl.AgControl&quot;)}else{if(navigator.plugins[&quot;Silverlight Plug-In&quot;]){container=document.createElement(&quot;div&quot;);document.body.appendChild(container);container.innerHTML='&lt;embed type=&quot;application/x-silverlight&quot; src=&quot;data:,&quot; /&gt;';control=container.childNodes[0]}}if(control){if(control.isVersionSupported(&quot;2.0&quot;)){AppC.UA.silverlightVersion=2}else{if(control.isVersionSupported(&quot;1.0&quot;)){AppC.UA.silverlightVersion=1}}AppC.UA.silverlight=AppC.UA.silverlightVersion&gt;0}}catch(e){}if(container){try{document.body.removeChild(container)}catch(E){}}}if(AppC.UA.IE){try{var flash=new ActiveXObject(&quot;ShockwaveFlash.ShockwaveFlash.7&quot;);var ver=flash.GetVariable(&quot;$version&quot;);var idx=ver.indexOf(&quot; &quot;);var tokens=ver.substring(idx+1).split(&quot;,&quot;);var version=tokens[0];AppC.UA.flashVersion=parseInt(version);AppC.UA.flash=true}catch(e){}}else{var plugin=navigator.plugins&amp;&amp;navigator.plugins.length;if(plugin){plugin=navigator.plugins[&quot;Shockwave Flash&quot;]||navigator.plugins[&quot;Shockwave Flash 2.0&quot;];if(plugin){if(plugin.description){var ver=plugin.description;AppC.UA.flashVersion=parseInt(ver.charAt(ver.indexOf(&quot;.&quot;)-1));AppC.UA.flash=true}else{AppC.UA.flashVersion=7;AppC.UA.flash=true}}}else{plugin=(navigator.mimeTypes&amp;&amp;navigator.mimeTypes[&quot;application/x-shockwave-flash&quot;]&amp;&amp;navigator.mimeTypes[&quot;application/x-shockwave-flash&quot;].enabledPlugin)?navigator.mimeTypes[&quot;application/x-shockwave-flash&quot;].enabledPlugin:0;if(plugin&amp;&amp;plugin.description){AppC.UA.flash=true;AppC.UA.flashVersion=parseInt(plugin.description.substring(plugin.description.indexOf(&quot;.&quot;)-1))}}}$.each(&quot;firefox IE6 IE7 IE8 safari chromium webkit opera camino seamonkey prism fluid iceweasel epiphany&quot;.split(&quot; &quot;),function(){if(AppC.UA[this]===true){AppC.UA.supported=true;var name=this.toLowerCase();AppC.beforeCompile(function(body){checkForSilverlight();if(AppC.UA.platform){body.addClass(AppC.platform)}body.addClass(name);for(var p in AppC.UA){var v=AppC.UA[p];if(typeof (v)==&quot;boolean&quot;&amp;&amp;v===true&amp;&amp;p!=&quot;supported&quot;&amp;&amp;p!=&quot;flash&quot;&amp;&amp;p!=&quot;silverlight&quot;){body.addClass(p.toLowerCase())}}if(AppC.UA.IPhone){body.addClass(&quot;width_narrow&quot;);body.addClass(&quot;height_short&quot;)}else{function calcDim(){var cn=body.attr(&quot;class&quot;);if(cn){$.each(cn.split(&quot; &quot;),function(){if(/^(height|width)_/.test(this)){body.removeClass(this)}})}var width=$(document).width();var height=$(document).height();if(height&lt;480){body.addClass(&quot;height_tiny&quot;)}else{if(height&gt;=480&amp;&amp;height&lt;=768){body.addClass(&quot;height_small&quot;)}else{if(height&gt;768&amp;&amp;height&lt;1100){body.addClass(&quot;height_medium&quot;)}else{if(height&gt;=1100){body.addClass(&quot;height_large&quot;)}}}}if(width&lt;=640){body.addClass(&quot;width_tiny&quot;)}else{if(width&gt;640&amp;&amp;width&lt;=1024){body.addClass(&quot;width_small&quot;)}else{if(width&gt;1024&amp;&amp;width&lt;=1280){body.addClass(&quot;width_medium&quot;)}else{if(width&gt;1280){body.addClass(&quot;width_large&quot;)}}}}}$(window).bind(&quot;resize&quot;,calcDim);calcDim()}});return false}});App.UUID={dateSeed:(started||new Date).getTime(),convert:[&quot;0&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;,&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;D&quot;,&quot;E&quot;,&quot;F&quot;,&quot;G&quot;,&quot;H&quot;,&quot;I&quot;,&quot;J&quot;,&quot;K&quot;,&quot;L&quot;,&quot;M&quot;,&quot;N&quot;,&quot;O&quot;,&quot;P&quot;,&quot;Q&quot;,&quot;R&quot;,&quot;S&quot;,&quot;T&quot;,&quot;U&quot;,&quot;V&quot;,&quot;W&quot;,&quot;X&quot;,&quot;Y&quot;,&quot;Z&quot;],base16:function(number){var output=null;if(number&lt;16){output=this.convert[number]}else{var MSD=&quot;&quot;+Math.floor(number/16);var LSD=number-MSD*16;if(MSD&gt;=16){output=this.base16(MSD)+this.convert[LSD]}else{output=this.convert[MSD]+this.convert[LSD]}}return output},newID:function(){var dg=new Date(1970,9,22,0,0,0,0);var t=this.base16(this.dateSeed-dg.getTime());var a=this.base16(Math.floor(999999999999*Math.random()));var _b=App.MD5.hex_md5(window.location.pathname);var b=(_b.length&gt;10?_b.substring(0,10):_b).gsub(/[^a-zA-Z0-9]/,&quot;0&quot;);var c=this.base16(Math.round(this.dateSeed*Math.random()));return t+&quot;-&quot;+a+&quot;-&quot;+b+&quot;-&quot;+c}};var currentAddFn=$.fn.add;$.fn.add=function(prop,value){if(arguments.length==2&amp;&amp;typeof (prop)==&quot;string&quot;){switch(prop){case&quot;class&quot;:case&quot;className&quot;:this.addClass(value);break;default:this.attr(prop,value)}return this}else{return currentAddFn.apply(this,arguments)}};var currentRemoveFn=$.fn.remove;$.fn.remove=function(prop,value){if(!prop){return currentRemoveFn.apply(this,arguments)}$.each(this,function(){switch(prop){case&quot;class&quot;:case&quot;className&quot;:$(this).removeClass(value);break;default:if($(prop).length==0){$(this).removeAttr(prop)}else{currentRemoveFn.apply(this,arguments)}}});return this};$.fn.after=function(t,f){var time=App.timeFormat(t);var scope=this;setTimeout(function(){f.call(scope)},time);return this};(function(jQuery){jQuery.each([&quot;backgroundColor&quot;,&quot;borderBottomColor&quot;,&quot;borderLeftColor&quot;,&quot;borderRightColor&quot;,&quot;borderTopColor&quot;,&quot;color&quot;,&quot;outlineColor&quot;],function(i,attr){jQuery.fx.step[attr]=function(fx){if(fx.state==0){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end)}fx.elem.style[attr]=&quot;rgb(&quot;+[Math.max(Math.min(parseInt((fx.pos*(fx.end[0]-fx.start[0]))+fx.start[0]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[1]-fx.start[1]))+fx.start[1]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[2]-fx.start[2]))+fx.start[2]),255),0)].join(&quot;,&quot;)+&quot;)&quot;}});function getRGB(color){var result;if(color&amp;&amp;color.constructor==Array&amp;&amp;color.length==3){return color}if(color==&quot;transparent&quot;){return[255,255,255]}if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)){return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3])]}if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)){return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55]}if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)){return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)]}if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)){return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)]}return colors[jQuery.trim(color).toLowerCase()]}function getColor(elem,attr){var color;do{color=jQuery.curCSS(elem,attr);if(color!=&quot;&quot;&amp;&amp;color!=&quot;transparent&quot;||jQuery.nodeName(elem,&quot;body&quot;)){break}attr=&quot;backgroundColor&quot;}while(elem=elem.parentNode);return getRGB(color)}var colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})($);var oldBind=$.fn.bind;$.fn.bind=function(){if(arguments.length&gt;1){return oldBind.apply(this,arguments)}else{var obj=arguments[0];$.each(this,function(idx){var t=$(this).get(idx);$.each($(t).children(),function(){var child=$(this);var name=child.attr(&quot;name&quot;);var value=name?obj[name]:obj[child.attr(&quot;id&quot;)];if(value){child.val(value)}})})}return this};$.fn.disable=function(){$.each(this,function(idx){$(this).attr(&quot;disabled&quot;,true)})};$.fn.enable=function(){$.each(this,function(){$(this).removeAttr(&quot;disabled&quot;)})};var validators={},decorators={},fieldsets={};var validatorMonitor=null;var validatorMonitors=null;var validatorMonitorRate=250;AppC.setFieldMonitorInterval=function(rate){validatorMonitorRate=rate;if(validatorMonitor){clearInterval(validatorMonitor);validatorMonitor=setInterval(fieldMonitor,validatorMonitorRate)}};AppC.addValidator=function(name,fn){validators[name]=fn};AppC.getValidator=function(name){if(name){return validators[name]}};AppC.validators=function(iter){for(var p in validators){iter.call({name:p,fn:validators[p]})}};AppC.addDecorator=function(name,fn){decorators[name]=fn};App.getDecorator=function(name){if(name){return decorators[name]}};AppC.decorators=function(iter){for(var p in decorators){iter.call({name:p,fn:decorators[p]})}};AppC.addValidator(&quot;required&quot;,function(el,value){return(typeof (value)!=&quot;undefined&quot;&amp;&amp;value)});function installDecorator(el,target){if(!target){var img=AppC.sdkRoot+&quot;images/exclamation.png&quot;;var id=el.attr(&quot;id&quot;)+&quot;_decorator&quot;;var html='&lt;span id=&quot;'+id+'&quot; class=&quot;decorator&quot;&gt;&lt;img src=&quot;'+img+'&quot;/&gt;&lt;/span&gt;';el.after(html);target=$(&quot;#&quot;+id);el.data(&quot;decoratorTarget&quot;,target)}return target}AppC.addDecorator(&quot;required&quot;,function(el,valid,value,target){target=installDecorator(el,target);if(valid){el.css(&quot;background-color&quot;,&quot;&quot;);target.css(&quot;visibility&quot;,&quot;hidden&quot;)}else{el.css(&quot;background-color&quot;,&quot;#FFEEEE&quot;);target.css(&quot;visibility&quot;,&quot;visible&quot;)}});AppC.addDecorator(&quot;custom&quot;,function(el,valid,value,target){target.css(&quot;visibility&quot;,valid?&quot;hidden&quot;:&quot;visible&quot;)});function fieldMonitor(){if(validatorMonitors&amp;&amp;validatorMonitors.length&gt;0){$.each(validatorMonitors,function(){$(this).revalidate(true)})}}function startFieldMonitor(el){if(!validatorMonitors){validatorMonitors=[];validatorMonitor=setInterval(fieldMonitor,validatorMonitorRate)}validatorMonitors.push(el);var fn=function(){stopFieldMonitor(el)};el.data(&quot;fieldMonitor&quot;,fn);el.bind(&quot;blur&quot;,fn)}function stopFieldMonitor(el){if(validatorMonitors){var idx=validatorMonitors.indexOf(el);var idx=$.inArray(el,validatorMonitors);if(idx!=-1){validatorMonitors.splice(idx,1)}var fn=el.data(&quot;fieldMonitor&quot;);if(fn){el.unbind(&quot;blur&quot;,fn)}el.removeData(&quot;fieldMonitor&quot;)}}function makeFormEntry(array,name,e,fn){$.each(array,function(idx){var el=$(this);el.data(name,e);if(fn){fn(el)}el.revalidate()});return array}function fieldDecorate(el,valid,value){if(!value){el.addClass(&quot;validator_empty&quot;).removeClass(&quot;validator_value&quot;)}else{el.removeClass(&quot;validator_empty&quot;).addClass(&quot;validator_value&quot;)}if(valid){el.removeClass(&quot;validator_invalid&quot;).addClass(&quot;validator_valid&quot;)}else{el.addClass(&quot;validator_invalid&quot;).removeClass(&quot;validator_valid&quot;)}var dec=el.data(&quot;decorator&quot;);var target=el.data(&quot;decoratorTarget&quot;);var fn=typeof (dec)==&quot;function&quot;?dec:App.getDecorator(dec);return fn?fn(el,valid,value,target):null}function fieldActivate(el,activator,activators){activator=activator?activator:el.data(&quot;activator&quot;);if(activator){var valid=true;var array=activators?activators:activator.data(&quot;activators&quot;);$.each(array,function(){var r=$(&quot;#&quot;+this).data(&quot;validatorResult&quot;);if(r===false){valid=false;return false}});if(valid){activator.removeAttr(&quot;disabled&quot;)}else{activator.attr(&quot;disabled&quot;,true)}}}function fieldRevalidate(el,changeOnly,ignoreActivate){var v=el.data(&quot;validator&quot;);if(v){var result=false;var validator=typeof (v)==&quot;function&quot;?v:AppC.getValidator(v);if(validator){try{var value=getElementValue(el);if(changeOnly&amp;&amp;el.data(&quot;validatorData&quot;)===value){return }el.data(&quot;validatorData&quot;,value);result=validator(el,value);result=(typeof (result)==&quot;undefined&quot;?true:result)?true:false;el.data(&quot;validatorResult&quot;,result);fieldDecorate(el,result,value);if(!ignoreActivate){fieldActivate(el)}}catch(E){$.error(&quot;error in validation = &quot;+E+&quot; for element = &quot;+el.attr(&quot;id&quot;))}}}else{var activators=el.data(&quot;activators&quot;);if(activators){fieldActivate(null,el,activators)}}}$.fn.revalidate=function(changeOnly){return $.each(this,function(idx){fieldRevalidate($(this),changeOnly)});return this};$.fn.validator=function(v){makeFormEntry(this,&quot;validator&quot;,v,function(el){if(el.is(&quot;:text,textarea&quot;)){el.bind(&quot;focus&quot;,function(){startFieldMonitor(el)})}else{if(el.is(&quot;select,:radio,:checkbox&quot;)){el.bind(&quot;click&quot;,function(){el.revalidate()})}}});return this};$.fn.decorator=function(d,decId){var dec=decId?(typeof (decId)==&quot;string&quot;?$(&quot;#&quot;+decId):$(decId)):null;var fn=dec?function(el){el.data(&quot;decoratorTarget&quot;,dec)}:null;return makeFormEntry(this,&quot;decorator&quot;,d,fn)};$.fn.activators=function(a){var self=this;var array=(typeof (a)==&quot;string&quot;?a.split(/[ ,]/):$.makeArray(a)).map(function(e){return $.trim(e)});this.data(&quot;activators&quot;,array);$.each(array,function(idx){var el=$(&quot;#&quot;+$.trim(this));if(!el){$.error(&quot;Error adding activator field with id: &quot;+this+&quot;, not found&quot;);return }el.data(&quot;activator&quot;,self)});this.revalidate();return this};$.fn.fieldset=function(fs){var array=(typeof (fs)==&quot;string&quot;?fs.split(/[ ,]/):$.makeArray(fs)).map(function(e){return $.trim(e)});$.each(this,function(idx){var el=$(this);if(!el){$.error(&quot;Error adding fieldset field with id: &quot;+$(this).attr(&quot;id&quot;)+&quot;, not found&quot;);return }el.data(&quot;fieldsets&quot;,array);$.each(array,function(){App.addToFieldset(el,$.trim(this))})})};App.addToFieldset=function(el,fs){var elements=fieldsets[fs];if(!elements){elements=[];fieldsets[fs]=elements}elements.push(el)};App.getFieldsetData=function(fs,obj){obj=obj||{};var array=typeof (fs)==&quot;string&quot;?[fs]:fs.data(&quot;fieldsets&quot;);if(array&amp;&amp;array.length&gt;0){$.each(array,function(){var elements=fieldsets[this];if(elements){$.each(elements,function(){var el=this;if(!el.is(&quot;:button&quot;)){var value=getElementValue(el);var key=el.is(&quot;form&quot;)?el.attr(&quot;name&quot;)||el.attr(&quot;fieldset&quot;)||el.attr(&quot;id&quot;):el.attr(&quot;name&quot;)||el.attr(&quot;id&quot;);obj[key]=value}})}})}return obj};App.reg(&quot;validator&quot;,[&quot;input&quot;,&quot;button&quot;,&quot;select&quot;,&quot;textarea&quot;],function(value,state){$(this).validator(value)});App.reg(&quot;decorator&quot;,[&quot;input&quot;,&quot;button&quot;,&quot;select&quot;,&quot;textarea&quot;],function(value,state){$(this).decorator(value,$(this).attr(&quot;decoratorId&quot;))});App.reg(&quot;activators&quot;,[&quot;div&quot;,&quot;input&quot;,&quot;button&quot;],function(value,state){$(this).activators(value)});App.reg(&quot;fieldset&quot;,[&quot;form&quot;,&quot;input&quot;,&quot;button&quot;,&quot;select&quot;,&quot;textarea&quot;],function(value,state){$(this).fieldset(value)});var oldVal=$.fn.val;$.fn.val=function(){var inr=this.data(&quot;revalidating&quot;);var rev=false;if(!inr){rev=true;this.data(&quot;revalidating&quot;,true)}var r=oldVal.apply(this,arguments);if(rev){this.revalidate();this.removeData(&quot;revalidating&quot;)}return r};regCSSAction(&quot;hidden&quot;,&quot;visibility&quot;);$.fn.highlight=function(bgColor){bgColor=bgColor||&quot;#ffffcc&quot;;$.each(this,function(){var curBgColor=$(this).css(&quot;backgroundColor&quot;);$(this).animate({backgroundColor:bgColor},50).animate({backgroundColor:curBgColor},1000)});return this};App.dynregAction(&quot;history&quot;);
-/*
-(c) Copyrights 2007 - 2008
-
-Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
- 
-jQuery Plugin by Tzury Bar Yochay 
-tzury.by@gmail.com
-http://evalinux.wordpress.com
-http://facebook.com/profile.php?id=513676303
-
-Project's sites: 
-http://code.google.com/p/js-hotkeys/
-http://github.com/tzuryby/hotkeys/tree/master
-
-License: same as jQuery license. 
-
-USAGE:
-    // simple usage
-    $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');});
-    
-    // special options such as disableInIput
-    $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {});
-    
-Note:
-    This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind
-    
-*/
-jQuery.fn.__bind__=jQuery.fn.bind;jQuery.fn.__unbind__=jQuery.fn.unbind;jQuery.fn.__find__=jQuery.fn.find;var hotkeys={version:&quot;0.7.8&quot;,override:/keydown|keypress|keyup/g,triggersMap:{},specialKeys:{27:&quot;esc&quot;,9:&quot;tab&quot;,32:&quot;space&quot;,13:&quot;return&quot;,8:&quot;backspace&quot;,145:&quot;scroll&quot;,20:&quot;capslock&quot;,144:&quot;numlock&quot;,19:&quot;pause&quot;,45:&quot;insert&quot;,36:&quot;home&quot;,46:&quot;del&quot;,35:&quot;end&quot;,33:&quot;pageup&quot;,34:&quot;pagedown&quot;,37:&quot;left&quot;,38:&quot;up&quot;,39:&quot;right&quot;,40:&quot;down&quot;,112:&quot;f1&quot;,113:&quot;f2&quot;,114:&quot;f3&quot;,115:&quot;f4&quot;,116:&quot;f5&quot;,117:&quot;f6&quot;,118:&quot;f7&quot;,119:&quot;f8&quot;,120:&quot;f9&quot;,121:&quot;f10&quot;,122:&quot;f11&quot;,123:&quot;f12&quot;},shiftNums:{&quot;`&quot;:&quot;~&quot;,&quot;1&quot;:&quot;!&quot;,&quot;2&quot;:&quot;@&quot;,&quot;3&quot;:&quot;#&quot;,&quot;4&quot;:&quot;$&quot;,&quot;5&quot;:&quot;%&quot;,&quot;6&quot;:&quot;^&quot;,&quot;7&quot;:&quot;&amp;&quot;,&quot;8&quot;:&quot;*&quot;,&quot;9&quot;:&quot;(&quot;,&quot;0&quot;:&quot;)&quot;,&quot;-&quot;:&quot;_&quot;,&quot;=&quot;:&quot;+&quot;,&quot;;&quot;:&quot;:&quot;,&quot;'&quot;:'&quot;',&quot;,&quot;:&quot;&lt;&quot;,&quot;.&quot;:&quot;&gt;&quot;,&quot;/&quot;:&quot;?&quot;,&quot;\\&quot;:&quot;|&quot;},newTrigger:function(type,combi,callback){var result={};result[type]={};result[type][combi]={cb:callback,disableInInput:false};return result}};if(jQuery.browser.mozilla){hotkeys.specialKeys=jQuery.extend(hotkeys.specialKeys,{96:&quot;0&quot;,97:&quot;1&quot;,98:&quot;2&quot;,99:&quot;3&quot;,100:&quot;4&quot;,101:&quot;5&quot;,102:&quot;6&quot;,103:&quot;7&quot;,104:&quot;8&quot;,105:&quot;9&quot;})}jQuery.fn.find=function(selector){this.query=selector;return jQuery.fn.__find__.apply(this,arguments)};jQuery.fn.unbind=function(type,combi,fn){if(jQuery.isFunction(combi)){fn=combi;combi=null}if(combi&amp;&amp;typeof combi===&quot;string&quot;){var selectorId=((this.prevObject&amp;&amp;this.prevObject.query)||(this[0].id&amp;&amp;this[0].id)||this[0]).toString();var hkTypes=type.split(&quot; &quot;);for(var x=0;x&lt;hkTypes.length;x++){delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi]}}return this.__unbind__(type,fn)};jQuery.fn.bind=function(type,data,fn){var handle=type.match(hotkeys.override);if(jQuery.isFunction(data)||!handle){return this.__bind__(type,data,fn)}else{var result=null,pass2jq=jQuery.trim(type.replace(hotkeys.override,&quot;&quot;));if(pass2jq){result=this.__bind__(pass2jq,data,fn)}if(typeof data===&quot;string&quot;){data={combi:data}}if(data.combi){for(var x=0;x&lt;handle.length;x++){var eventType=handle[x];var combi=data.combi.toLowerCase(),trigger=hotkeys.newTrigger(eventType,combi,fn),selectorId=((this.prevObject&amp;&amp;this.prevObject.query)||(this[0].id&amp;&amp;this[0].id)||this[0]).toString();trigger[eventType][combi].disableInInput=data.disableInInput;if(!hotkeys.triggersMap[selectorId]){hotkeys.triggersMap[selectorId]=trigger}else{if(!hotkeys.triggersMap[selectorId][eventType]){hotkeys.triggersMap[selectorId][eventType]=trigger[eventType]}}var mapPoint=hotkeys.triggersMap[selectorId][eventType][combi];if(!mapPoint){hotkeys.triggersMap[selectorId][eventType][combi]=[trigger[eventType][combi]]}else{if(mapPoint.constructor!==Array){hotkeys.triggersMap[selectorId][eventType][combi]=[mapPoint]}else{hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length]=trigger[eventType][combi]}}this.each(function(){var jqElem=jQuery(this);if(jqElem.attr(&quot;hkId&quot;)&amp;&amp;jqElem.attr(&quot;hkId&quot;)!==selectorId){selectorId=jqElem.attr(&quot;hkId&quot;)+&quot;;&quot;+selectorId}jqElem.attr(&quot;hkId&quot;,selectorId)});result=this.__bind__(handle.join(&quot; &quot;),data,hotkeys.handler)}}return result}};hotkeys.findElement=function(elem){if(!jQuery(elem).attr(&quot;hkId&quot;)){if(jQuery.browser.opera||jQuery.browser.safari){while(!jQuery(elem).attr(&quot;hkId&quot;)&amp;&amp;elem.parentNode){elem=elem.parentNode}}}return elem};hotkeys.handler=function(event){var target=hotkeys.findElement(event.currentTarget),jTarget=jQuery(target),ids=jTarget.attr(&quot;hkId&quot;);if(ids){ids=ids.split(&quot;;&quot;);var code=event.which,type=event.type,special=hotkeys.specialKeys[code],character=!special&amp;&amp;String.fromCharCode(code).toLowerCase(),shift=event.shiftKey,ctrl=event.ctrlKey,alt=event.altKey||event.originalEvent.altKey,mapPoint=null;for(var x=0;x&lt;ids.length;x++){if(hotkeys.triggersMap[ids[x]][type]){mapPoint=hotkeys.triggersMap[ids[x]][type];break}}if(mapPoint){var trigger;if(!shift&amp;&amp;!ctrl&amp;&amp;!alt){trigger=mapPoint[special]||(character&amp;&amp;mapPoint[character])}else{var modif=&quot;&quot;;if(alt){modif+=&quot;alt+&quot;}if(ctrl){modif+=&quot;ctrl+&quot;}if(shift){modif+=&quot;shift+&quot;}trigger=mapPoint[modif+special];if(!trigger){if(character){trigger=mapPoint[modif+character]||mapPoint[modif+hotkeys.shiftNums[character]]||(modif===&quot;shift+&quot;&amp;&amp;mapPoint[hotkeys.shiftNums[character]])}}}if(trigger){var result=false;for(var x=0;x&lt;trigger.length;x++){if(trigger[x].disableInInput){var elem=jQuery(event.target);if(jTarget.is(&quot;input&quot;)||jTarget.is(&quot;textarea&quot;)||elem.is(&quot;input&quot;)||elem.is(&quot;textarea&quot;)){return true}}result=result||trigger[x].cb.apply(this,[event])}return result}}}};window.hotkeys=hotkeys;AppC.currentLocale=window.navigator.language||&quot;en&quot;;var bundles={};AppC.locale=function(lang){if(lang==AppC.currentLocale){return }AppC.currentLocale=lang;if(!bundles[lang]){try{var url=AppC.sdkPath+&quot;localization/&quot;+lang.toLowerCase()+&quot;.properties&quot;;$.debug(&quot;attempting to fetch &quot;+url);$.ajax({url:url,cache:true,dataType:&quot;text&quot;,type:&quot;GET&quot;,async:true,success:function(prop){var endRE=/\\$/;var cont=false,key=null,value=null;var map={};$.each(prop.split(&quot;\n&quot;),function(){if(cont){value+=value.substring(0,value.length-1);if(endRE.test(this)){return }map[key]=value;cont=false;key=value=null;return }var line=$.trim(this);if(line==&quot;&quot;||line.charAt(0)==&quot;#&quot;){return }var tokens=line.split(&quot;=&quot;);var k=$.trim(tokens[0]);if(k.charAt(0)==&quot;#&quot;){return }var v=$.trim(tokens.length&gt;1?tokens[1]:&quot;&quot;);if(endRE.test(v)){cont=true;key=k;value=v.substring(0,v.length-1);return }map[k]=v});bundles[lang]=map;AppC.beforeCompile(function(){$(&quot;[@id]&quot;).localize(lang)});$(document).trigger(&quot;localized&quot;,lang)}})}catch(E){if(lang.indexOf(&quot;-&quot;)&gt;0){return AppC.locale(lang.split(&quot;-&quot;)[0])}$.error(&quot;error loading language bundle for language = &quot;+lang+&quot;, Exception = &quot;+E)}}else{AppC.beforeCompile(function(){$(&quot;[@id]&quot;).localize(lang)});$(document).trigger(&quot;localized&quot;,lang)}};$.fn.localize=function(lang){if(this.length&gt;1){$.each(this,function(){$(this).localize(lang)});return this}var id=$(this).attr(&quot;id&quot;);if(id!=null){var m=bundles[lang||AppC.currentLocale];if(m){var value=m[id];if(value){var el=$(this).get(0);switch(el.nodeName){case&quot;INPUT&quot;:case&quot;BUTTON&quot;:$(this).val(value);break;default:$(this).html(value);break}}}}return this};if(AppC.config.auto_locale){AppC.locale(AppC.currentLocale)}$.fn.move=function(params){$.each(this,function(){$(this).css(&quot;position&quot;,&quot;relative&quot;).animate({left:params.x||0,top:params.y||0},params.duration||1000)})};$.fn.on=function(value,state){var el=$(this);var isFn=typeof (state)==&quot;function&quot;;if(isFn){value=value+&quot; then script[true]&quot;}var expr=App.parseExpression(value);$.each(expr,function(){var p=App.extractParameters(this[2]);var ep=isFn?null:this[3]?App.extractParameters(this[3]):null;var param={cond:this[1],action:isFn?state:p.name,actionParams:isFn?null:p.params,elseAction:ep?ep.name:null,elseActionParams:ep?ep.params:null,delay:this[4],ifCond:this[5],state:state};App.processCond(el,param)});return this};regCSSAction(&quot;opacity&quot;,function(params){var value=(typeof (params)==&quot;string&quot;||typeof (params)==&quot;number&quot;)?params:(params?params.value:null);if(typeof (value)==&quot;undefined&quot;&amp;&amp;params){for(var p in params){if(p==&quot;id&quot;||p==&quot;source&quot;){continue}value=params[p];break}}if(typeof (value)==&quot;undefined&quot;){value=1}if(typeof (value)!=&quot;number&quot;){value=parseFloat(value)}this.css(&quot;opacity&quot;,(value==1||value==&quot;&quot;)?&quot;1.0&quot;:(value&lt;0.00001)?0:value)});var subs={local:[],remote:[]};var re=/^(l|local|both|r|remote|\*)\:(.*)$/;var localRe=/^l|local|both|\*/;var pubdebug=AppC.params.debug==&quot;2&quot;||AppC.params.debug==&quot;1&quot;;var queue=[];var remoteDisabled=true;var queueInit=false;var processingQueue=false;$.fn.sub=function(name,fn,params){var p=App.extractParameters(name);params=params||p.params;name=App.normalizePub(p.name);var regexp=null;var m=re.exec(name);var type=m[2];if(type.charAt(0)==&quot;~&quot;){type=type.substring(1);regexp=new RegExp(type)}if(this.get(0)!=document){$(this).trash(function(){$(this).unsub(name,fn)})}$.debug(&quot;subscribing type=&quot;+type+&quot;, regexp=&quot;+regexp);if(localRe.test(m[1])){subs.local.push({scope:this,fn:fn,name:type,params:params,regexp:regexp})}else{subs.remote.push({scope:this,fn:fn,name:type,params:params,regexp:regexp})}return this};$.fn.unsub=function(name,fn){name=App.normalizePub(name);var match=re.exec(name);if(match){var array=match[1]==&quot;remote&quot;?subs.remote:subs.local;var type=match[2];var found=[];for(var c=0;c&lt;array.length;c++){var entry=array[c];if(entry.name==type&amp;&amp;entry.fn==fn){found.push(c)}}for(var c=0;c&lt;found.length;c++){array.splice(found[c],1)}}};App.normalizePub=function(name){var idx=name.indexOf(&quot;[&quot;);if(idx&gt;0){name=name.substring(0,idx)}var m=re.exec(name);if(!m){return&quot;both:&quot;+name}switch(m[1]){case&quot;l&quot;:case&quot;local&quot;:return&quot;local:&quot;+m[2];case&quot;r&quot;:case&quot;remote&quot;:return&quot;remote:&quot;+m[2]}return&quot;both:&quot;+m[2]};App.pubQueue=function(name,data,local,scope,version){if(pubdebug){$.info(&quot;publish &quot;+name+&quot; with &quot;+$.toJSON(data))}if(subs.local.length==0&amp;&amp;subs.remote.length==0){return }queue.push({data:data||{},name:name,local:local,scope:scope,version:version});if(remoteDisabled&amp;&amp;queueInit&amp;&amp;!processingQueue){processQueue()}};$.fn.pub=function(name,data,scope,version){var m=re.exec(name);var isLocal=localRe.test(m[1]);data=data||{};App.getFieldsetData(this,data);if(isLocal&amp;&amp;!data.event){data.event={id:$(this).attr(&quot;id&quot;)}}if(!isLocal&amp;&amp;data.event){delete data.event}App.pubQueue(m[2],data,isLocal,scope,version);return this};$(document).bind(&quot;compiled&quot;,function(){queueInit=true;processQueue()});App.regCond(re,function(meta){$(this).sub(meta.cond,function(data,scope,version,name,direction,params){if(App.parseConditionCondition(params,data)){App.triggerAction(this,data,meta)}else{App.triggerElseAction(this,data,meta)}})});App.regAction(/^(l|local|both|\*|r|remote)\:/,function(params,action){$(this).pub(action,params)});function deliverRemoteMessages(msgs){$.debug(&quot;remote messages received = &quot;+$.toJSON(msgs));$.each(msgs,function(){var msg=this;$.each(subs.remote,function(){if((this.regexp&amp;&amp;this.regexp.test(msg.name))||(!this.regexp&amp;&amp;this.name==msg.name)){this.fn.apply(this.scope,[msg.data,msg.scope,msg.version,msg.name,&quot;remote&quot;])}})})}var instanceid=AppC.params.instanceid||App.MD5.hex_md5(String(new Date().getTime())+String(Math.round(9999*Math.random())));function getServiceURL(){var token=App.MD5.hex_md5(sessionCookie+instanceid);return serviceBroker+&quot;?instanceid=&quot;+instanceid+&quot;&amp;auth=&quot;+token+&quot;&amp;ts=&quot;+String(new Date().getTime())}var marshallers={};var currentRequestId=0;marshallers[&quot;xml/json&quot;]=function(q){var requestid=currentRequestId++;var xml=&quot;&quot;;var time=new Date;var timestamp=time.getTime();xml=&quot;&lt;?xml version='1.0' encoding='UTF-8'?&gt;\n&quot;;var tz=time.getTimezoneOffset()/60;var idleMs=0;xml+=&quot;&lt;request version='1.0' idle='&quot;+idleMs+&quot;' timestamp='&quot;+timestamp+&quot;' tz='&quot;+tz+&quot;'&gt;\n&quot;;$.each(q,function(){xml+=&quot;&lt;message requestid='&quot;+requestid+&quot;' type='&quot;+this.name+&quot;' datatype='JSON' scope='&quot;+(this.scope||&quot;appcelerator&quot;)+&quot;' version='&quot;+(this.version||&quot;1.0&quot;)+&quot;'&gt;&quot;;xml+=&quot;&lt;![CDATA[&quot;+$.toJSON(this.data)+&quot;]]&gt;&quot;;xml+=&quot;&lt;/message&gt;&quot;});xml+=&quot;&lt;/request&gt;&quot;;$.ajax({type:&quot;POST&quot;,url:getServiceURL(),data:xml,cache:false,dataType:&quot;xml&quot;,contentType:&quot;text/xml&quot;,success:function(xml){var children=xml.documentElement.childNodes;if(children&amp;&amp;children.length&gt;0){var msgs=[];for(var c=0;c&lt;children.length;c++){var child=children.item(c);if(child.nodeType==1){var requestid=child.getAttribute(&quot;requestid&quot;);var type=child.getAttribute(&quot;type&quot;);var datatype=child.getAttribute(&quot;datatype&quot;);var scope=child.getAttribute(&quot;scope&quot;)||&quot;appcelerator&quot;;var text=$.domText(child);var data=$.evalJSON(text);msgs.push({name:type,data:data,datatype:datatype,scope:scope,requestid:requestid})}}deliverRemoteMessages(msgs)}}})};marshallers[&quot;application/json&quot;]=function(q){var requestid=this.currentRequestId++;var request={};var time=new Date;var json={timestamp:time.getTime()+(time.getTimezoneOffset()*60*1000),version:&quot;1.0&quot;,messages:[]};for(var c=0,len=q.length;c&lt;len;c++){var e=q[c];json.messages.push({type:e.name,data:e.data,version:e.version,scope:e.scope})}$.ajax({type:&quot;POST&quot;,url:getServiceURL(),data:$.toJSON(json),cache:false,dataType:&quot;json&quot;,contentType:&quot;application/json&quot;,success:function(result){var msgs=[];for(var c=0;c&lt;result.messages.length;c++){var message=result.messages[c];var type=message.type;var datatype=message.datatype;var scope=message.scope||&quot;appcelerator&quot;;var data=message.data;message.datatype=&quot;JSON&quot;;msgs.push({name:type,data:data,datatype:datatype,scope:scope})}deliverRemoteMessages(msgs)}})};function remoteDelivery(q){if(!remoteDisabled){marshaller(q)}}function processQueue(){if(queue.length&lt;1){return }var rq=remoteDisabled?null:[];processingQueue=true;for(var i=0;i&lt;queue.length;i++){var a=queue[i].local?subs.local:subs.remote;var name=queue[i].name;var data=queue[i].data;var scope=queue[i].scope||&quot;appcelerator&quot;;var version=queue[i].version||&quot;1.0&quot;;var direction=queue[i].local?&quot;local&quot;:&quot;remote&quot;;for(var j=0;j&lt;a.length;j++){if((a[j].regexp&amp;&amp;a[j].regexp.test(name))||(!a[j].regexp&amp;&amp;a[j].name==name)){a[j].fn.apply(a[j].scope,[data,scope,version,name,direction,a[j].params])}}}if(rq&amp;&amp;rq.length&gt;0){remoteDelivery(rq)}queue=[];processingQueue=false}var queueTimer;var serviceBroker;var marshaller;var sessionCookie;function startDelivery(config){$.debug(&quot;remote config =&gt; &quot;+$.toJSON(config));remoteDisabled=false;var sb=config.servicebroker;if(!sb||sb.disabled==&quot;true&quot;){remoteDisabled=true;$.info(&quot;Appcelerator remote services disabled&quot;);return }serviceBroker=sb.value;if(!serviceBroker){$.error(&quot;Error loading service broker! not specified in appcelerator.xml&quot;);remoteDisabled=true;return }if(!remoteDisabled){marshaller=marshallers[sb.marshaller];if(!marshaller){$.error(&quot;Error loading marshaller = &quot;+sb.marshaller);remoteDisabled=true;return }var cookieName=config.sessionid.value||&quot;unknown_cookie_name&quot;;var cookieValue=$.cookie(cookieName);if(!cookieValue){$.ajax({type:&quot;GET&quot;,url:serviceBroker,data:&quot;initial=1&quot;,async:true,success:function(){sessionCookie=$.cookie(cookieName);$.debug(&quot;sessionCookie = &quot;+sessionCookie);queueTimer=setInterval(processQueue,10)}})}else{sessionCookie=cookieValue;$.debug(&quot;sessionCookie = &quot;+sessionCookie);queueTimer=setInterval(processQueue,10)}}}try{AppC.serverConfig={};if(AppC.docRoot.indexOf(&quot;file:/&quot;)&lt;0){var url=AppC.docRoot+&quot;appcelerator.xml&quot;;$.ajax({async:true,cache:true,dataType:&quot;xml&quot;,type:&quot;GET&quot;,url:url,success:function(data){var re=/@\{(.*?)\}/g;var map={rootPath:AppC.docRoot};var children=data.documentElement.childNodes;for(var c=0;c&lt;children.length;c++){var child=children[c];if(child.nodeType==1){var service=child.nodeName.toLowerCase();var config={};var path=$.domText(child);var template=AppC.compileTemplate(path,false,null,re);for(var x=0;x&lt;child.attributes.length;x++){var attr=child.attributes[x];config[attr.name]=attr.value}config.value=template(map);AppC.serverConfig[service]=config}}$(document).trigger(&quot;serverConfig&quot;,AppC.serverConfig);startDelivery(AppC.serverConfig)},error:function(xhr,text,error){$.error(&quot;error retrieving appcelerator.xml, remote services are disabled. error = &quot;+text)}})}}catch(e){$.error(&quot;error loading &quot;+docRoot+&quot;appcelerator.xml, remote services are disabled. error = &quot;+e)}$.fn.pulsate=function(count){for(var i=0;i&lt;(count||4);i++){this.fadeOut(&quot;fast&quot;).fadeIn(&quot;fast&quot;)}return this};regCSSAction(&quot;pulsate&quot;,function(params){return getTarget(params,this).pulsate(params.count)});$.each([&quot;clear&quot;,&quot;reset&quot;,&quot;clearform&quot;],function(){$.fn[this]=function(){$.each(this,function(){var target=$(this);var tag=App.getTagname(this);switch(tag){case&quot;a&quot;:target.attr(&quot;href&quot;,&quot;#&quot;);break;case&quot;form&quot;:this.reset();target.find(&quot;:input&quot;).revalidate();break;default:target.val(&quot;&quot;);break}});return this}});$.each([&quot;script&quot;,&quot;function&quot;,&quot;javascript&quot;],function(){$.fn[this]=function(code,scope){var js=code;if(typeof (js)==&quot;string&quot;){js=$.toFunction(js)}else{if(code.nodeType==1){js=$.toFunction($(code).html())}else{if(typeof (code.jquery)==&quot;string&quot;){js=$.toFunction(code.get(0).html())}else{throw&quot;I don't know what this object is: &quot;+(typeof (code))+&quot; for &quot;+$(this).attr(&quot;id&quot;)}}}js.call(scope||window);return this}});(function($){var $scrollTo=$.scrollTo=function(target,duration,settings){$(window).scrollTo(target,duration,settings)};$scrollTo.defaults={axis:&quot;xy&quot;,duration:1};$scrollTo.window=function(scope){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var win=this.parentWindow||this.defaultView,elem=this.nodeName==&quot;#document&quot;?win.frameElement||win:this,doc=elem.contentDocument||(elem.contentWindow||elem).document,isWin=elem.setInterval;return elem.nodeName==&quot;IFRAME&quot;||isWin&amp;&amp;$.browser.safari?doc.body:isWin?doc.documentElement:this})};$.fn.scrollTo=function(target,duration,settings){if(typeof duration==&quot;object&quot;){settings=duration;duration=0}if(typeof settings==&quot;function&quot;){settings={onAfter:settings}}settings=$.extend({},$scrollTo.defaults,settings);duration=duration||settings.speed||settings.duration;settings.queue=settings.queue&amp;&amp;settings.axis.length&gt;1;if(settings.queue){duration/=2}settings.offset=both(settings.offset);settings.over=both(settings.over);return this.scrollable().each(function(){var elem=this,$elem=$(elem),targ=target,toff,attr={},win=$elem.is(&quot;html,body&quot;);switch(typeof targ){case&quot;number&quot;:case&quot;string&quot;:if(/^([+-]=)?\d+(px)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);case&quot;object&quot;:if(targ.is||targ.style){toff=(targ=$(targ)).offset()}}$.each(settings.axis.split(&quot;&quot;),function(i,axis){var Pos=axis==&quot;x&quot;?&quot;Left&quot;:&quot;Top&quot;,pos=Pos.toLowerCase(),key=&quot;scroll&quot;+Pos,old=elem[key],Dim=axis==&quot;x&quot;?&quot;Width&quot;:&quot;Height&quot;,dim=Dim.toLowerCase();if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css(&quot;margin&quot;+Pos))||0;attr[key]-=parseInt(targ.css(&quot;border&quot;+Pos+&quot;Width&quot;))||0}attr[key]+=settings.offset[pos]||0;if(settings.over[pos]){attr[key]+=targ[dim]()*settings.over[pos]}}else{attr[key]=targ[pos]}if(/^\d+$/.test(attr[key])){attr[key]=attr[key]&lt;=0?0:Math.min(attr[key],max(Dim))}if(!i&amp;&amp;settings.queue){if(old!=attr[key]){animate(settings.onAfterFirst)}delete attr[key]}});animate(settings.onAfter);function animate(callback){$elem.animate(attr,duration,settings.easing,callback&amp;&amp;function(){callback.call(this,target,settings)})}function max(Dim){var attr=&quot;scroll&quot;+Dim,doc=elem.ownerDocument;return win?Math.max(doc.documentElement[attr],doc.body[attr]):elem[attr]}}).end()};function both(val){return typeof val==&quot;object&quot;?val:{top:val,left:val}}})(jQuery);App.regAction(evtRegex(&quot;selectOption&quot;),function(params){$.error(&quot;not implemented&quot;)});var cssProperties=[&quot;border&quot;,&quot;padding&quot;,&quot;margin&quot;,&quot;color&quot;,&quot;cursor&quot;,&quot;font&quot;,&quot;fontFamily&quot;,&quot;visibility&quot;,&quot;position&quot;,&quot;overflow&quot;,&quot;filter&quot;,&quot;display&quot;,&quot;backgroundColor&quot;,&quot;backgroundPosition&quot;,&quot;backgroundAttachment&quot;,&quot;borderBottomColor&quot;,&quot;borderBottomStyle&quot;,&quot;borderBottomWidth&quot;,&quot;borderLeftColor&quot;,&quot;borderLeftStyle&quot;,&quot;borderLeftWidth&quot;,&quot;borderRightColor&quot;,&quot;borderRightStyle&quot;,&quot;borderRightWidth&quot;,&quot;borderSpacing&quot;,&quot;borderTopColor&quot;,&quot;borderTopStyle&quot;,&quot;borderTopWidth&quot;,&quot;bottom&quot;,&quot;clip&quot;,&quot;color&quot;,&quot;fontSize&quot;,&quot;fontWeight&quot;,&quot;height&quot;,&quot;left&quot;,&quot;letterSpacing&quot;,&quot;lineHeight&quot;,&quot;marginBottom&quot;,&quot;marginLeft&quot;,&quot;marginRight&quot;,&quot;marginTop&quot;,&quot;markerOffset&quot;,&quot;maxHeight&quot;,&quot;maxWidth&quot;,&quot;minHeight&quot;,&quot;minWidth&quot;,&quot;opacity&quot;,&quot;outlineColor&quot;,&quot;outlineOffset&quot;,&quot;outlineWidth&quot;,&quot;paddingBottom&quot;,&quot;paddingLeft&quot;,&quot;paddingRight&quot;,&quot;paddingTop&quot;,&quot;right&quot;,&quot;textIndent&quot;,&quot;top&quot;,&quot;width&quot;,&quot;wordSpacing&quot;,&quot;zIndex&quot;];$.fn.set=function(params){params=convertParams(params);$.each(this,function(){var target=$(this);var tag=App.getTagname(this);for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;case&quot;class&quot;:case&quot;className&quot;:target.attr(&quot;class&quot;,params[p]);break;case&quot;style&quot;:$.each(params[p].split(&quot;;&quot;),function(){var t=this.split(&quot;:&quot;);if(t&amp;&amp;t.length&gt;1){target.css(t[0],t[1]);return }});break;case&quot;href&quot;:switch(tag){case&quot;a&quot;:case&quot;link&quot;:target.attr(&quot;href&quot;,URI.absolutizeURI(params[p],AppC.docRoot));break}case&quot;src&quot;:switch(tag){case&quot;iframe&quot;:case&quot;script&quot;:case&quot;image&quot;:var onload=target.attr(&quot;onloaded&quot;);if(onload){var done=false;el.onload=el.onreadystatechange=function(){if(!done&amp;&amp;(!this.readyState||this.readyState==&quot;loaded&quot;||this.readyState==&quot;complete&quot;)){done=true;target.pub(onload,{source:{id:el.id}},target.attr(&quot;scope&quot;));el.onload=null}}}if(AppC.UA.opera){el.location.href=URI.absolutizeURI(params[p],AppC.docRoot)}else{el.src=URI.absolutizeURI(params[p],AppC.docRoot)}break;default:target.attr(p,params[p]);break}break;default:if(cssProperties.indexOf(p)!=-1||cssProperties.indexOf($.camel(p))!=-1){target.css(p,params[p])}else{target.attr(p,params[p])}}}})};$.fn.srcexpr=function(value){var srcvalue=eval($.unescapeXML(value));if(AppC.UA.IE6){}$(this).get(0).src=srcvalue;return this};App.regAction(evtRegex(&quot;statechange&quot;),function(params){$.error(&quot;not implementing&quot;)});var testCases=[];var testPassed=0;var testFailed=0;var testErrored=0;var testListener=null;$.fn.assert=function(){var passed=true,error=null,stop=false,message=String(arguments[0]),expr=arguments[0];if(typeof (arguments[0])==&quot;string&quot;&amp;&amp;arguments.length==2){expr=arguments[1]}var type=typeof (expr);if(type==&quot;boolean&quot;){passed=expr;stop=true}else{if(type==&quot;string&quot;){expr=$.toFunction(expr)}else{passed=typeof (expr)!=&quot;undefined&quot;?true:false;stop=true}}if(!stop){$.each(this,function(){try{var result=expr.call($(this));if(result!==true){passed=false;return false}}catch(E){passed=false;error=E;return false}})}var result={passed:passed,expr:String(expr),message:message,error:error};testCases.push(result);if(passed){testPassed++}if(error){testErrored++}if(!passed&amp;&amp;!error){testFailed++}if(testListener){testListener.result(result)}return this};$.fn.assertEnabled=function(){var passed=true;$.each(this,function(){var v=$(this).attr(&quot;disabled&quot;);if(v){passed=false;return false}});return this.assert(passed)};$.fn.assertDisabled=function(){var passed=true;$.each(this,function(){var v=$(this).attr(&quot;disabled&quot;);if(!v){passed=false;return false}});return this.assert(passed)};$.fn.assertCSS=function(key,val){var passed=true;$.each(this,function(){var v=$(this).css(key);if(v!=val){passed=false;return false}});return this.assert(passed)};$.fn.assertClass=function(className){var passed=true;$.each(this,function(){if($(this).hasClass(className)==false){passed=false;return false}});return this.assert(passed)};$.fn.assertAttr=function(attr){var passed=true;$.each(this,function(){if(!$(this).attr(attr)){passed=false;return false}});return this.assert(passed)};$.fn.assertValid=function(){var passed=true;$.each(this,function(){var v=$(this).data(&quot;validatorResult&quot;);if(!v){passed=false;return false}});return this.assert(passed)};$.fn.assertInvalid=function(){var passed=true;$.each(this,function(){var v=$(this).data(&quot;validatorResult&quot;);if(v){passed=false;return false}});return this.assert(passed)};var oldPub=App.pubQueue;var lastPubType=null,lastPubData=null;App.pubQueue=function(name,data,local,scope,version){lastPubType=(local?&quot;local&quot;:&quot;remote&quot;)+&quot;:&quot;+name;lastPubData=data;return oldPub.apply(this,arguments)};$.fn.assertPub=function(name,data){name=App.normalizePub(name);if(typeof (data)==&quot;undefined&quot;){return this.assert(name+&quot; was not correct. expected: &quot;+name+&quot;, was: &quot;+lastPubType,lastPubType===name)}if(name!==lastPubType){return this.assert(name+&quot; was not correct. expected: &quot;+name+&quot;, was: &quot;+lastPubType,name===lastPubType)}if(!lastPubData){return this.assert(name+&quot; missing data payload: &quot;+$.toJSON(data),false)}for(var key in data){var v1=lastPubData[key];var v2=data[key];if(v1!==v2){return this.assert(name+&quot; has incorrect data payload entry for key: &quot;+key+&quot;, expected: &quot;+v2+&quot;, was: &quot;+v1,false)}}return this.assert(name,true)};var TestGuard=function(timeout,fn,cb){var count=0;var done=false;var timer=setTimeout(function(){if(count!=0){done=true;$(document).assert(&quot;test failed because it timed out&quot;,false);if(cb.timeout){cb.timeout()}$.error(&quot;test timed out&quot;);fn()}},timeout);this.begin=function(){if(done){return }count++;if(cb&amp;&amp;cb.begin){cb.begin(count)}};this.end=function(){if(done){return }count--;if(cb&amp;&amp;cb.end){cb.end(count)}if(count==0){clearTimeout(timer);done=true;timer=null;fn()}};this.assert=function(a,b){if(done){return }return $(document).assert(a,b)};this.assertPub=function(name,data){if(done){return }return $(document).assertPub(name,data)}};AppC.runTests=function(timeout,begin,end,cb){var timeout=typeof (timeout)!=&quot;number&quot;?10000:timeout;begin=typeof (timeout)!=&quot;number&quot;?timeout:begin;end=typeof (timeout)!=&quot;number&quot;?begin:end;cb=typeof (timeout)!=&quot;number&quot;?end:cb;testCases=[];testPassed=0;testFailed=0;testErrored=0;testListener=cb;var complete=function(){if(end){end({passed:testPassed,failed:testFailed,errored:testErrored,tests:testCases})}else{var count=testPassed+testFailed+testErrored;var msg=&quot;TEST RESULTS: &quot;+count+&quot; test&quot;+(count&gt;1?&quot;s&quot;:&quot;&quot;)+&quot; executed: &quot;;if(testFailed&gt;0||testErrored&gt;0){var r=[];if(testFailed){r.push(testFailed+&quot; failed&quot;)}if(testErrored){r.push(testErrored+&quot; errored&quot;)}r.push(testPassed+&quot; passed&quot;);msg+=r.join(&quot;, &quot;)}else{msg+=&quot;All Passed! Now go take a nice break.&quot;}$.info(msg);if(testFailed||testErrored){$.each(testCases,function(){if(this.error){$.error(&quot;ERROR: &quot;+this.error+&quot;, message: &quot;+this.message)}else{$.error(&quot;FAILED: &quot;+this.expr+&quot;, message: &quot;+this.message)}})}}};var guard=new TestGuard(timeout,complete,cb);guard.begin();begin(guard);guard.end()};$.fn.toggle=function(params){params=convertParams(params);$.each(this,function(){var target=$(this);for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;case&quot;className&quot;:case&quot;class&quot;:target.toggleClass(params[p]);break;default:if(cssProperties.indexOf(p)!=-1||cssProperties.indexOf($.camel(p))!=-1){var currentVal=target.css(p);var opposites={inline:&quot;none&quot;,block:&quot;none&quot;,none:&quot;block&quot;,hidden:&quot;visible&quot;,visible:&quot;hidden&quot;};var opposite=opposites[currentVal]||&quot;&quot;;if(currentVal==params[p]){target.css(p,opposite);break}else{target.css(p,params[p]);break}}else{if(target.attr(p)){target.removeAttr(p);break}else{target.attr(p,params[p]);break}}}}});return this};$.fn.value=function(object,property,defValue){var value=$.getNestedProperty(object,property,defValue||property);if(this.is(&quot;:input&quot;)){this.val(value)}else{this.html(value)}return this};regCSSAction(&quot;visible&quot;,&quot;visibility&quot;);$.each([&quot;add&quot;,&quot;remove&quot;],function(){var action=this;App.regAction(evtRegex(action),function(params,name){var target=getTarget(params,this);for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;default:target[action](p,params[p]);break}}return this})});App.regAction(evtRegex(&quot;cookie&quot;),function(params){$.cookie(params.name,params.value,params)});App.regAction(evtRegex(&quot;disable&quot;),function(params){return getTarget(params,this).disable()});App.handleBasicEffect=function(obj,action,params){var target=obj;var opts={},speed=0,easing=null;for(var p in params){switch(p){case&quot;event&quot;:continue;case&quot;id&quot;:target=$(&quot;#&quot;+params[p]);break;case&quot;speed&quot;:speed=params[p];break;case&quot;easing&quot;:easing=params[p];break;default:opts[$.camel(p)]=params[p];break}}$.debug(&quot;effect=&quot;+action+&quot;,target=&quot;+target.attr(&quot;id&quot;)+&quot;,opts=&quot;+$.toJSON(opts)+&quot;,speed=&quot;+speed+&quot;,easing=&quot;+easing);switch(action){case&quot;animate&quot;:var position=target.css(&quot;position&quot;);if(position!=&quot;relative&quot;&amp;&amp;position!=&quot;absolute&quot;){target.css(&quot;position&quot;,&quot;relative&quot;)}return target.animate(opts,speed,easing);case&quot;fadeTo&quot;:return target.fadeTo(target,[speed,opts.opacity||opts.to||1]);default:return target[action].apply(target,[speed])}};$.fn.appear=function(){$.each(this,function(){$(this).fadeIn()});return this};$.fn.fade=function(){$.each(this,function(){$(this).fadeOut()});return this};$.each([&quot;show&quot;,&quot;hide&quot;,&quot;slideToggle&quot;,&quot;slideUp&quot;,&quot;slideDown&quot;,&quot;fadeIn&quot;,&quot;fadeOut&quot;,&quot;fadeTo&quot;,&quot;animate&quot;,&quot;appear&quot;,&quot;fade&quot;],function(){var name=$.string(this);App.regAction(evtRegex(name),function(params){return App.handleBasicEffect(getTarget(params,this),name,params)})});App.regAction(evtRegex(&quot;enable&quot;),function(params){return getTarget(params,this).enable()});regCSSAction(&quot;move&quot;,function(params){return getTarget(params,this).move(params)});$.each([&quot;clear&quot;,&quot;reset&quot;,&quot;clearform&quot;],function(){var eventName=this;App.regAction(evtRegex(eventName),function(params,name,data){return getTarget(params,this)[eventName]()})});$.each([&quot;script&quot;,&quot;function&quot;,&quot;javascript&quot;],function(){var type=this;App.regAction(evtRegex(this),function(params,name,data){return getTarget(params,this)[type](data,params)},true)});App.regAction(evtRegex(&quot;value&quot;),function(params,name,data){return getTarget(params,this).value(params,data)},true);App.regAction(evtRegex(&quot;bind&quot;),function(params){var target=getTarget(params,this);var fieldset=target.attr(&quot;fieldset&quot;);if(!fieldset){$.error(&quot;bind action requires fieldset attribute&quot;);return this}this.find(&quot;[fieldset=&quot;+fieldset+&quot;]&quot;).bind(params);return this});App.regAction(evtRegex(&quot;scrollTo&quot;),function(params){var scrollTo=0;var duration=1000;var scrollToObj={};var useObj=false;var options={};var target=null;for(var p in params){switch(p){case&quot;event&quot;:break;case&quot;id&quot;:scrollTo=$(&quot;#&quot;+params[p]);break;case&quot;duration&quot;:duration=parseInt(params[p]);break;case&quot;axis&quot;:options.axis=params[p];break;case&quot;queue&quot;:options.queue=params[p];break;case&quot;top&quot;:scrollToObj.top=params[p];useObj=true;break;case&quot;left&quot;:scrollToObj.left=params[p];useObj=true;break;case&quot;target&quot;:target=params[p];break;default:break}}if(target!=null){$(&quot;#&quot;+target).scrollTo((useObj==true)?scrollToObj:scrollTo,duration,options)}else{$.scrollTo((useObj==true)?scrollToObj:scrollTo,duration,options)}});App.regAction(evtRegex(&quot;set&quot;),function(){getTarget(params,this).set.apply(this,arguments);return this});App.regAction(evtRegex(&quot;toggle&quot;),function(params){return getTarget(params,this).toggle(params)});regCSSAction(&quot;highlight&quot;,function(params){var bgColor=params[&quot;background-color&quot;]||params.backgroundColor||&quot;#ffffcc&quot;;return getTarget(params,this).highlight(bgColor)});App.reg(&quot;on&quot;,&quot;*&quot;,function(value,state){$(this).on(value,state)});var appuid=$.cookie(&quot;appuid&quot;);var staturi=((&quot;https:&quot;==document.location.protocol)?&quot;https://s3.amazonaws.com/tracker.appcelerator.org/&quot;:&quot;http://tracker.appcelerator.org/&quot;)+&quot;app.js&quot;;if(!appuid){appuid=App.UUID.newID();$.cookie(&quot;appuid&quot;,appuid,{expires:31536000000*5,path:&quot;/&quot;,domain:document.domain})}var _onerror=window.onerror,_sending=false;function TrackStat(evt,extra){if(AppC.config.track_stats){_sending=true;var d=new Date().getTime()-(started||new Date).getTime();var uri=staturi+&quot;?t=&quot;+Number(new Date)+&quot;&amp;dur=&quot;+d+&quot;&amp;evt=&quot;+evt+&quot;&amp;appuid=&quot;+appuid+&quot;&amp;tid=&quot;+started.getTime()+&quot;&amp;&quot;+(extra||&quot;&quot;);try{$.getScript(uri)}catch(E){}_sending=false}}var errorCount=0;var errorMax=5;window.onerror=function(msg,url,line){if(_sending){return }try{if(url&amp;&amp;url.indexOf(staturi)!=-1){return }if(errorCount++&gt;errorMax){return }if(!url&amp;&amp;!line&amp;&amp;typeof (msg)==&quot;object&quot;&amp;&amp;typeof (msg.stopPropagation)==&quot;function&quot;){_sending=false;return }$.error(&quot;generic uncaught error = &quot;+String(msg)+&quot;, url = &quot;+url+&quot;, line = &quot;+line);var s=&quot;msg=&quot;+encodeURIComponent($.encode64(String(msg)))+&quot;&amp;url=&quot;+encodeURIComponent($.encode64(String(url||&quot;&quot;)))+&quot;&amp;line=&quot;+encodeURIComponent(line||-1);TrackStat(2,s);if(_onerror){_onerror(msg,url,line)}}catch(e){$.error(&quot;caught error in window.onerror = &quot;+e);_sending=false;return false}};$(document).bind(&quot;compiled&quot;,function(){var sendRemote=window.location.href.indexOf(&quot;file:/&quot;)!=-1&amp;&amp;AppC.config.report_stats;var screenHeight=screen.height;var screenWidth=screen.width;var colorDepth=screen.colorDepth||-1;var tz=started.getTimezoneOffset()/60;var cookies=[];$.each((document.cookie||&quot;&quot;).split(&quot;;&quot;),function(){var t=this.split(&quot;=&quot;);if(t.length&gt;0){cookies.push({name:t[0],value:t[1]})}});var data={userAgent:navigator.userAgent,flash:AppC.UA.flash,flashver:AppC.UA.flashVersion,silverlight:AppC.UA.silverlight,silverlightver:AppC.UA.silverlightVersion,gears:AppC.UA.gears,fluid:AppC.UA.fluid,screen:{height:screenHeight,width:screenWidth,color:colorDepth},os:AppC.UA.platform,referrer:document.referrer,path:window.location.href,cookies:cookies,tz:tz,uid:appuid};setTimeout(function(){if(sendRemote){if(window.parent==null||window.parent==window){$(document).pub(&quot;r:appcelerator.status.report&quot;,data)}}var a=0,s=0,v=1,c=null,l=null,svc=null;c=AppC.serverConfig.aid;if(c){a=c.value}c=AppC.serverConfig.sid;if(c){s=c.value}c=AppC.serverConfig.language;if(c){l=c.value}c=AppC.serverConfig.service;if(c){svc=c.value}var p=AppC.UA.platform||&quot;unknown&quot;;var f=AppC.UA.flashVersion;var sic=(AppC.serverConfig.sessionid||{}).value;var si=sic?$.cookie(sic):null;var qs=$.toQueryString({wv:String(AppC.Version),v:v,a:a,s:s,gg:Number(AppC.UA.gears),fd:Number(AppC.UA.fluid),dm:data.screen.width+&quot;,&quot;+data.screen.height+&quot;,&quot;+data.screen.color,p:AppC.UA.platform,tz:tz,fv:data.flashver,sv:data.silverlightver,r:$.encode64(document.referrer||&quot;&quot;),t:$.encode64(document.title||&quot;&quot;),si:si,sct:compileTime,slt:loadTime,bl:window.navigator.language,lng:l,svc:svc,js:$.encode64(jsLocation)});TrackStat(1,qs)},2000+Math.round(1999*Math.random()));$(window).unload(function(){TrackStat(0)})})})(jQuery);
\ No newline at end of file
+Date.prototype.toJSON=function(){return'&quot;'+this.getUTCFullYear()+&quot;-&quot;+(this.getUTCMonth()+1).toPaddedString(2)+&quot;-&quot;+this.getUTCDate().toPaddedString(2)+&quot;T&quot;+this.getUTCHours().toPaddedString(2)+&quot;:&quot;+this.getUTCMinutes().toPaddedString(2)+&quot;:&quot;+this.getUTCSeconds().toPaddedString(2)+'Z&quot;'};String.specialChar={&quot;\b&quot;:&quot;\\b&quot;,&quot;\t&quot;:&quot;\\t&quot;,&quot;\n&quot;:&quot;\\n&quot;,&quot;\f&quot;:&quot;\\f&quot;,&quot;\r&quot;:&quot;\\r&quot;,&quot;\\&quot;:&quot;\\\\&quot;};$.times=function(ch,len){var str=&quot;&quot;;for(var c=0;c&lt;len;c++){str+=ch}return str};Number.prototype.toPaddedString=function(length,radix){var string=this.toString(radix||10);return $.times(&quot;0&quot;,length-string.length)+string};String.prototype.toJSON=function(){var useDoubleQuotes=true;var escapedString=$.gsub(this,/[\x00-\x1f\\]/,function(match){var character=String.specialChar[match[0]];return character?character:&quot;\\u00&quot;+match[0].charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes){return'&quot;'+escapedString.replace(/&quot;/g,'\\&quot;')+'&quot;'}return&quot;'&quot;+escapedString.replace(/'/g,&quot;\\'&quot;)+&quot;'&quot;};Array.prototype.toJSON=function(){var results=[];$.each(this,function(object){var value=$.toJSON(this);if(value!==undefined){results.push(value)}});return&quot;[&quot;+results.join(&quot;, &quot;)+&quot;]&quot;};Number.prototype.toJSON=function(){return isFinite(this)?this.toString():&quot;null&quot;};Boolean.prototype.toJSON=function(){return String(this)};$.extend({toJSON:function(object){var type=typeof object;switch(type){case&quot;undefined&quot;:case&quot;function&quot;:case&quot;unknown&quot;:return&quot;null&quot;}if(object===null){return&quot;null&quot;}if(typeof (object.jquery)==&quot;string&quot;){return null}if(object.toJSON){return object.toJSON()}if(object.nodeType==1){return }var results=[];for(var property in object){var value=object[property];if(value!==undefined){results.push($.toJSON(property)+&quot;: &quot;+$.toJSON(value))}}return&quot;{&quot;+results.join(&quot;, &quot;)+&quot;}&quot;},JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,unfilterJSON:function(str,filter){var m=(filter||this.JSONFilter).exec(str);return m?m[1]:str},isJSON:function(s){var str=s.replace(/\\./g,&quot;@&quot;).replace(/&quot;[^&quot;\\\n\r]*&quot;/g,&quot;&quot;);return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str)},evalJSON:function(str,sanitize){var json=this.unfilterJSON(str);try{if(!sanitize||$.isJSON(json)){return eval(&quot;(&quot;+json+&quot;)&quot;)}}catch(e){}throw new SyntaxError(&quot;Badly formed JSON string: &quot;+str)}});App.MD5={hexcase:0,b64pad:&quot;&quot;,chrsz:8,hex_md5:function(s){return this.binl2hex(this.core_md5(this.str2binl(s),s.length*this.chrsz))},b64_md5:function(s){return this.binl2b64(this.core_md5(this.str2binl(s),s.length*this.chrsz))},str_md5:function(s){return this.binl2str(this.core_md5(this.str2binl(s),s.length*this.chrsz))},hex_hmac_md5:function(key,data){return this.binl2hex(this.core_hmac_md5(key,data))},b64_hmac_md5:function(key,data){return this.binl2b64(this.core_hmac_md5(key,data))},str_hmac_md5:function(key,data){return this.binl2str(this.core_hmac_md5(key,data))},md5_vm_test:function(){return this.hex_md5(&quot;abc&quot;)==&quot;900150983cd24fb0d6963f7d28e17f72&quot;},core_md5:function(x,len){x[len&gt;&gt;5]|=128&lt;&lt;((len)%32);x[(((len+64)&gt;&gt;&gt;9)&lt;&lt;4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i&lt;x.length;i+=16){var olda=a;var oldb=b;var oldc=c;var oldd=d;a=this.md5_ff(a,b,c,d,x[i+0],7,-680876936);d=this.md5_ff(d,a,b,c,x[i+1],12,-389564586);c=this.md5_ff(c,d,a,b,x[i+2],17,606105819);b=this.md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=this.md5_ff(a,b,c,d,x[i+4],7,-176418897);d=this.md5_ff(d,a,b,c,x[i+5],12,1200080426);c=this.md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=this.md5_ff(b,c,d,a,x[i+7],22,-45705983);a=this.md5_ff(a,b,c,d,x[i+8],7,1770035416);d=this.md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=this.md5_ff(c,d,a,b,x[i+10],17,-42063);b=this.md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=this.md5_ff(a,b,c,d,x[i+12],7,1804603682);d=this.md5_ff(d,a,b,c,x[i+13],12,-40341101);c=this.md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=this.md5_ff(b,c,d,a,x[i+15],22,1236535329);a=this.md5_gg(a,b,c,d,x[i+1],5,-165796510);d=this.md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=this.md5_gg(c,d,a,b,x[i+11],14,643717713);b=this.md5_gg(b,c,d,a,x[i+0],20,-373897302);a=this.md5_gg(a,b,c,d,x[i+5],5,-701558691);d=this.md5_gg(d,a,b,c,x[i+10],9,38016083);c=this.md5_gg(c,d,a,b,x[i+15],14,-660478335);b=this.md5_gg(b,c,d,a,x[i+4],20,-405537848);a=this.md5_gg(a,b,c,d,x[i+9],5,568446438);d=this.md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=this.md5_gg(c,d,a,b,x[i+3],14,-187363961);b=this.md5_gg(b,c,d,a,x[i+8],20,1163531501);a=this.md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=this.md5_gg(d,a,b,c,x[i+2],9,-51403784);c=this.md5_gg(c,d,a,b,x[i+7],14,1735328473);b=this.md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=this.md5_hh(a,b,c,d,x[i+5],4,-378558);d=this.md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=this.md5_hh(c,d,a,b,x[i+11],16,1839030562);b=this.md5_hh(b,c,d,a,x[i+14],23,-35309556);a=this.md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=this.md5_hh(d,a,b,c,x[i+4],11,1272893353);c=this.md5_hh(c,d,a,b,x[i+7],16,-155497632);b=this.md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=this.md5_hh(a,b,c,d,x[i+13],4,681279174);d=this.md5_hh(d,a,b,c,x[i+0],11,-358537222);c=this.md5_hh(c,d,a,b,x[i+3],16,-722521979);b=this.md5_hh(b,c,d,a,x[i+6],23,76029189);a=this.md5_hh(a,b,c,d,x[i+9],4,-640364487);d=this.md5_hh(d,a,b,c,x[i+12],11,-421815835);c=this.md5_hh(c,d,a,b,x[i+15],16,530742520);b=this.md5_hh(b,c,d,a,x[i+2],23,-995338651);a=this.md5_ii(a,b,c,d,x[i+0],6,-198630844);d=this.md5_ii(d,a,b,c,x[i+7],10,1126891415);c=this.md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=this.md5_ii(b,c,d,a,x[i+5],21,-57434055);a=this.md5_ii(a,b,c,d,x[i+12],6,1700485571);d=this.md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=this.md5_ii(c,d,a,b,x[i+10],15,-1051523);b=this.md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=this.md5_ii(a,b,c,d,x[i+8],6,1873313359);d=this.md5_ii(d,a,b,c,x[i+15],10,-30611744);c=this.md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=this.md5_ii(b,c,d,a,x[i+13],21,1309151649);a=this.md5_ii(a,b,c,d,x[i+4],6,-145523070);d=this.md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=this.md5_ii(c,d,a,b,x[i+2],15,718787259);b=this.md5_ii(b,c,d,a,x[i+9],21,-343485551);a=this.safe_add(a,olda);b=this.safe_add(b,oldb);c=this.safe_add(c,oldc);d=this.safe_add(d,oldd)}return Array(a,b,c,d)},md5_cmn:function(q,a,b,x,s,t){return this.safe_add(this.bit_rol(this.safe_add(this.safe_add(a,q),this.safe_add(x,t)),s),b)},md5_ff:function(a,b,c,d,x,s,t){return this.md5_cmn((b&amp;c)|((~b)&amp;d),a,b,x,s,t)},md5_gg:function(a,b,c,d,x,s,t){return this.md5_cmn((b&amp;d)|(c&amp;(~d)),a,b,x,s,t)},md5_hh:function(a,b,c,d,x,s,t){return this.md5_cmn(b^c^d,a,b,x,s,t)},md5_ii:function(a,b,c,d,x,s,t){return this.md5_cmn(c^(b|(~d)),a,b,x,s,t)},core_hmac_md5:function(key,data){var bkey=this.str2binl(key);if(bkey.length&gt;16){bkey=this.core_md5(bkey,key.length*this.chrsz)}var ipad=Array(16),opad=Array(16);for(var i=0;i&lt;16;i++){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}var hash=this.core_md5(ipad.concat(this.str2binl(data)),512+data.length*this.chrsz);return this.core_md5(opad.concat(hash),512+128)},safe_add:function(x,y){var lsw=(x&amp;65535)+(y&amp;65535);var msw=(x&gt;&gt;16)+(y&gt;&gt;16)+(lsw&gt;&gt;16);return(msw&lt;&lt;16)|(lsw&amp;65535)},bit_rol:function(num,cnt){return(num&lt;&lt;cnt)|(num&gt;&gt;&gt;(32-cnt))},str2binl:function(str){var bin=Array();var mask=(1&lt;&lt;this.chrsz)-1;for(var i=0;i&lt;str.length*this.chrsz;i+=this.chrsz){bin[i&gt;&gt;5]|=(str.charCodeAt(i/this.chrsz)&amp;mask)&lt;&lt;(i%32)}return bin},binl2str:function(bin){var str=&quot;&quot;;var mask=(1&lt;&lt;this.chrsz)-1;for(var i=0;i&lt;bin.length*32;i+=this.chrsz){str+=String.fromCharCode((bin[i&gt;&gt;5]&gt;&gt;&gt;(i%32))&amp;mask)}return str},binl2hex:function(binarray){var hex_tab=this.hexcase?&quot;0123456789ABCDEF&quot;:&quot;0123456789abcdef&quot;;var str=&quot;&quot;;for(var i=0;i&lt;binarray.length*4;i++){str+=hex_tab.charAt((binarray[i&gt;&gt;2]&gt;&gt;((i%4)*8+4))&amp;15)+hex_tab.charAt((binarray[i&gt;&gt;2]&gt;&gt;((i%4)*8))&amp;15)}return str},binl2b64:function(binarray){var tab=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;;var str=&quot;&quot;;for(var i=0;i&lt;binarray.length*4;i+=3){var triplet=(((binarray[i&gt;&gt;2]&gt;&gt;8*(i%4))&amp;255)&lt;&lt;16)|(((binarray[i+1&gt;&gt;2]&gt;&gt;8*((i+1)%4))&amp;255)&lt;&lt;8)|((binarray[i+2&gt;&gt;2]&gt;&gt;8*((i+2)%4))&amp;255);for(var j=0;j&lt;4;j++){if(i*8+j*6&gt;binarray.length*32){str+=this.b64pad}else{str+=tab.charAt((triplet&gt;&gt;6*(3-j))&amp;63)}}}return str}};var loadedPlugins={};var dynamicPlugins={example:null};function installDynPlugin(name,fn){var l=loadedPlugins[name];if(l){return fn()}var path=AppC.pluginRoot+name+&quot;.js&quot;;$.getScript(path,function(){loadedPlugins[name]=1;fn()})}for(var name in dynamicPlugins){(function(){var found=$.fn[name];if(typeof (found)==&quot;function&quot;){return }$.fn[name]=function(){var arguments=arguments;var scope=this;var depends=dynamicPlugins[name]||[];depends.push(name);var length=depends.length;var count=0;var f=function(){var n=depends[count];if(count++&lt;length){installDynPlugin(n,f)}else{$.fn[name].apply(scope,arguments)}};f();return this}})()}(function(){var cache={};$.scriptlet=function scriptlet(str,data){var fn=!/\W/.test(str)?cache[str]=cache[str]||scriptlet($(str).html()):new Function(&quot;obj&quot;,&quot;var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('&quot;+str.replace(/[\r\t\n]/g,&quot; &quot;).split(&quot;&lt;%&quot;).join(&quot;\t&quot;).replace(/((^|%&gt;)[^\t]*)'/g,&quot;$1\r&quot;).replace(/\t=(.*?)%&gt;/g,&quot;',$1,'&quot;).split(&quot;\t&quot;).join(&quot;');&quot;).split(&quot;%&gt;&quot;).join(&quot;p.push('&quot;).split(&quot;\r&quot;).join(&quot;\\'&quot;)+&quot;');}return p.join('');&quot;);return data?fn(data):fn}})(jQuery);var components={controls:{},themes:{},behaviors:{},layouts:{}};AppC.register=function(type,name,fn){var e=components[type+&quot;s&quot;][name];if(!e){e={pend:[],factory:fn};components[type+&quot;s&quot;][name]=e}e.factory=fn;$.each(e.pend,function(){var instance=createControl(this.el,name,this.opts,this.fn);if(!instance){$.error(&quot;framework error - instance not returned from factory for: &quot;+name)}var render=instance.render;var el=this.el;var opts=this.opts;instance.render=function(){if(arguments.length==1){render.apply(instance,[el,arguments[0]])}else{render.apply(instance,arguments)}el.trigger(&quot;rendered&quot;,instance)};el.data(&quot;control&quot;,instance);el.trigger(&quot;created&quot;,[instance,this.opts]);$.each(instance.getAttributes(),function(){switch(this.type){case AppC.Types.condition:var name=&quot;on&quot;+$.proper(this.name);App.regCond(new RegExp(&quot;^(&quot;+this.name+&quot;)$&quot;),function(meta){var bindFn=function(args){var scope=$(this);args=args||{};args.id=$(this).attr(&quot;id&quot;);App.triggerAction(scope,args,meta)};el.bind(name,bindFn);el.trash(function(){el.unbind(name,bindFn)})});break;case AppC.Types.action:break;default:var v=opts[this.name]||this.defaultValue;if(typeof (v)==&quot;undefined&quot;&amp;&amp;!this.optional){el.trigger(&quot;onError&quot;,&quot;required property '&quot;+this.name+&quot;' not found or missing value&quot;)}opts[this.name]=v}});if(this.fn){this.fn.call(instance,opts)}instance.render.apply(instance,[this.el,opts])})};function createControl(el,name,opts,fn){var e=components.controls[name];opts=opts||{};if(e){if(!e.factory){e.pend.push({el:el,fn:fn,opts:opts});return }var instance=e.factory.create();return instance}e={pend:[{el:el,fn:fn,opts:opts}],factory:null};components.controls[name]=e;load(&quot;control&quot;,name,e)}function load(type,name,e){var uri=AppC.sdkPath+&quot;components/&quot;+type+&quot;s/&quot;+name+&quot;/&quot;+name+&quot;.js&quot;;$.getScript(uri)}$.fn.control=function(name,opts,fn){if(arguments.length==0){return this.data(&quot;control&quot;)}if(typeof (opts)==&quot;function&quot;){fn=opts;opts={}}createControl($(this),name,opts,fn);return this};$.fn.theme=function(name,options){return this};$.fn.behavior=function(name,options){return this};$.fn.layout=function(name,options){return this};App.reg(&quot;set&quot;,&quot;*&quot;,function(value,state){var el=$(this);var visibility=el.css(&quot;visibility&quot;)||&quot;visible&quot;;var show=false,initial=true;if(visibility==&quot;visible&quot;){el.css(&quot;visibility&quot;,&quot;hidden&quot;);show=true}el.addClass(&quot;container&quot;);var bindFn=function(){el.compileChildren(state,false);if(show){$(this).css(&quot;visibility&quot;,visibility);show=false}if(initial){initial=false;App.checkState(state,el)}};el.bind(&quot;rendered&quot;,bindFn);el.trash(function(){el.unbind(&quot;rendered&quot;,bindFn)});$.each($.smartSplit(value,&quot; and &quot;),function(){var idx=this.indexOf(&quot;[&quot;);if(idx&lt;0){throw new &quot;invalid set expression. must be in the form: control[type]&quot;}var lastIdx=this.lastIndexOf(&quot;]&quot;);var ui=this.substring(0,idx);var params=this.substring(idx+1,lastIdx);var comma=params.indexOf(&quot;,&quot;);var type=null,args={};if(comma&lt;0){type=params}else{type=params.substring(0,comma);args=App.getParameters(params.substring(comma+1),true);for(var p in args){args[p]=App.getEvaluatedValue(args[p])}}$.info(&quot;creating component of type=&quot;+type+&quot;,ui=&quot;+ui+&quot;,args=&quot;+$.toJSON(args));el[ui](type,args)})},true);var ua=navigator.userAgent.toLowerCase();AppC.UA={supported:false,opera:(ua.indexOf(&quot;opera&quot;)&gt;-1),safari:(ua.indexOf(&quot;safari&quot;)&gt;-1),safari2:false,safari3:false,IE:!!(window.ActiveXObject),IE6:false,IE7:false,IE8:false,windows:false,mac:false,linux:false,sunOS:false,platform:&quot;unknown&quot;,flash:false,flashVersion:0,silverlight:false,sliverlightVersion:0};if(AppC.UA.IE){var arVersion=navigator.appVersion.split(&quot;MSIE&quot;);var version=parseFloat(arVersion[1]);AppC.UA.IE6=version&gt;=6&amp;&amp;version&lt;7;AppC.UA.IE7=version&gt;=7&amp;&amp;version&lt;8;AppC.UA.IE8=version&gt;=8&amp;&amp;version&lt;9}else{if(AppC.UA.safari){var webKitFields=RegExp(&quot;( applewebkit/)([^ ]+)&quot;).exec(ua);if(webKitFields[2]&gt;400&amp;&amp;webKitFields[2]&lt;500){AppC.UA.safari2=true}else{if(webKitFields[2]&gt;500&amp;&amp;webKitFields[2]&lt;600){AppC.UA.safari3=true}}}}AppC.UA.gecko=!AppC.UA.safari&amp;&amp;(ua.indexOf(&quot;gecko&quot;)&gt;-1);AppC.UA.camino=AppC.UA.gecko&amp;&amp;ua.indexOf(&quot;camino&quot;)&gt;-1;AppC.UA.firefox=AppC.UA.gecko&amp;&amp;(ua.indexOf(&quot;firefox&quot;)&gt;-1||AppC.UA.camino||ua.indexOf(&quot;minefield&quot;)&gt;-1||ua.indexOf(&quot;granparadiso&quot;)&gt;-1||ua.indexOf(&quot;bonecho&quot;)&gt;-1);AppC.UA.IPhone=AppC.UA.safari&amp;&amp;ua.indexOf(&quot;iphone&quot;)&gt;-1;AppC.UA.mozilla=AppC.UA.gecko&amp;&amp;ua.indexOf(&quot;mozilla/&quot;)&gt;-1;AppC.UA.webkit=AppC.UA.mozilla&amp;&amp;AppC.UA.gecko&amp;&amp;ua.indexOf(&quot;applewebkit&quot;)&gt;0;AppC.UA.seamonkey=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;seamonkey&quot;)&gt;-1;AppC.UA.prism=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;prism/&quot;)&gt;0;AppC.UA.iceweasel=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;iceweasel&quot;)&gt;0;AppC.UA.epiphany=AppC.UA.mozilla&amp;&amp;ua.indexOf(&quot;epiphany&quot;)&gt;0;AppC.UA.fluid=(window.fluid!=null);AppC.UA.gears=(window.google&amp;&amp;google.gears)!=null;AppC.UA.chromium=AppC.UA.webkit&amp;&amp;ua.indexOf(&quot;chrome/&quot;)&gt;0;if(ua.indexOf(&quot;windows&quot;)!=-1||ua.indexOf(&quot;win32&quot;)!=-1){AppC.UA.windows=true;AppC.UA.platform=&quot;win32&quot;}else{if(ua.indexOf(&quot;macintosh&quot;)!=-1||ua.indexOf(&quot;mac os x&quot;)!=-1){AppC.UA.mac=true;AppC.UA.platform=&quot;mac&quot;}else{if(ua.indexOf(&quot;linux&quot;)!=-1){AppC.UA.linux=true;AppC.UA.platform=&quot;linux&quot;}else{if(ua.indexOf(&quot;sunos&quot;)!=-1){AppC.UA.sunOS=true;AppC.UA.platform=&quot;sun&quot;}}}}AppC.UA.silverlight=false;AppC.UA.silverlightVersion=0;function checkForSilverlight(){var container=null;try{var control=null;if(window.ActiveXObject){control=new ActiveXObject(&quot;AgControl.AgControl&quot;)}else{if(navigator.plugins[&quot;Silverlight Plug-In&quot;]){container=document.createElement(&quot;div&quot;);document.body.appendChild(container);container.innerHTML='&lt;embed type=&quot;application/x-silverlight&quot; src=&quot;data:,&quot; /&gt;';control=container.childNodes[0]}}if(control){if(control.isVersionSupported(&quot;2.0&quot;)){AppC.UA.silverlightVersion=2}else{if(control.isVersionSupported(&quot;1.0&quot;)){AppC.UA.silverlightVersion=1}}AppC.UA.silverlight=AppC.UA.silverlightVersion&gt;0}}catch(e){}if(container){try{document.body.removeChild(container)}catch(E){}}}if(AppC.UA.IE){try{var flash=new ActiveXObject(&quot;ShockwaveFlash.ShockwaveFlash.7&quot;);var ver=flash.GetVariable(&quot;$version&quot;);var idx=ver.indexOf(&quot; &quot;);var tokens=ver.substring(idx+1).split(&quot;,&quot;);var version=tokens[0];AppC.UA.flashVersion=parseInt(version);AppC.UA.flash=true}catch(e){}}else{var plugin=navigator.plugins&amp;&amp;navigator.plugins.length;if(plugin){plugin=navigator.plugins[&quot;Shockwave Flash&quot;]||navigator.plugins[&quot;Shockwave Flash 2.0&quot;];if(plugin){if(plugin.description){var ver=plugin.description;AppC.UA.flashVersion=parseInt(ver.charAt(ver.indexOf(&quot;.&quot;)-1));AppC.UA.flash=true}else{AppC.UA.flashVersion=7;AppC.UA.flash=true}}}else{plugin=(navigator.mimeTypes&amp;&amp;navigator.mimeTypes[&quot;application/x-shockwave-flash&quot;]&amp;&amp;navigator.mimeTypes[&quot;application/x-shockwave-flash&quot;].enabledPlugin)?navigator.mimeTypes[&quot;application/x-shockwave-flash&quot;].enabledPlugin:0;if(plugin&amp;&amp;plugin.description){AppC.UA.flash=true;AppC.UA.flashVersion=parseInt(plugin.description.substring(plugin.description.indexOf(&quot;.&quot;)-1))}}}$.each(&quot;firefox IE6 IE7 IE8 safari chromium webkit opera camino seamonkey prism fluid iceweasel epiphany&quot;.split(&quot; &quot;),function(){if(AppC.UA[this]===true){AppC.UA.supported=true;var name=this.toLowerCase();AppC.beforeCompile(function(body){checkForSilverlight();if(AppC.UA.platform){body.addClass(AppC.platform)}body.addClass(name);for(var p in AppC.UA){var v=AppC.UA[p];if(typeof (v)==&quot;boolean&quot;&amp;&amp;v===true&amp;&amp;p!=&quot;supported&quot;&amp;&amp;p!=&quot;flash&quot;&amp;&amp;p!=&quot;silverlight&quot;){body.addClass(p.toLowerCase())}}if(AppC.UA.IPhone){body.addClass(&quot;width_narrow&quot;);body.addClass(&quot;height_short&quot;)}else{function calcDim(){var cn=body.attr(&quot;class&quot;);if(cn){$.each(cn.split(&quot; &quot;),function(){if(/^(height|width)_/.test(this)){body.removeClass(this)}})}var width=$(document).width();var height=$(document).height();if(height&lt;480){body.addClass(&quot;height_tiny&quot;)}else{if(height&gt;=480&amp;&amp;height&lt;=768){body.addClass(&quot;height_small&quot;)}else{if(height&gt;768&amp;&amp;height&lt;1100){body.addClass(&quot;height_medium&quot;)}else{if(height&gt;=1100){body.addClass(&quot;height_large&quot;)}}}}if(width&lt;=640){body.addClass(&quot;width_tiny&quot;)}else{if(width&gt;640&amp;&amp;width&lt;=1024){body.addClass(&quot;width_small&quot;)}else{if(width&gt;1024&amp;&amp;width&lt;=1280){body.addClass(&quot;width_medium&quot;)}else{if(width&gt;1280){body.addClass(&quot;width_large&quot;)}}}}}$(window).bind(&quot;resize&quot;,calcDim);calcDim()}});return false}});App.UUID={dateSeed:(started||new Date).getTime(),convert:[&quot;0&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;,&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;D&quot;,&quot;E&quot;,&quot;F&quot;,&quot;G&quot;,&quot;H&quot;,&quot;I&quot;,&quot;J&quot;,&quot;K&quot;,&quot;L&quot;,&quot;M&quot;,&quot;N&quot;,&quot;O&quot;,&quot;P&quot;,&quot;Q&quot;,&quot;R&quot;,&quot;S&quot;,&quot;T&quot;,&quot;U&quot;,&quot;V&quot;,&quot;W&quot;,&quot;X&quot;,&quot;Y&quot;,&quot;Z&quot;],base16:function(number){var output=null;if(number&lt;16){output=this.convert[number]}else{var MSD=&quot;&quot;+Math.floor(number/16);var LSD=number-MSD*16;if(MSD&gt;=16){output=this.base16(MSD)+this.convert[LSD]}else{output=this.convert[MSD]+this.convert[LSD]}}return output},newID:function(){var dg=new Date(1970,9,22,0,0,0,0);var t=this.base16(this.dateSeed-dg.getTime());var a=this.base16(Math.floor(999999999999*Math.random()));var _b=App.MD5.hex_md5(window.location.pathname);var b=$.gsub((_b.length&gt;10?_b.substring(0,10):_b),/[^a-zA-Z0-9]/,&quot;0&quot;);var c=this.base16(Math.round(this.dateSeed*Math.random()));return t+&quot;-&quot;+a+&quot;-&quot;+b+&quot;-&quot;+c}};var currentAddFn=$.fn.add;$.fn.add=function(prop,value){if(arguments.length==2&amp;&amp;typeof (prop)==&quot;string&quot;){switch(prop){case&quot;class&quot;:case&quot;className&quot;:this.addClass(value);break;default:this.attr(prop,value)}return this}else{return currentAddFn.apply(this,arguments)}};var currentRemoveFn=$.fn.remove;$.fn.remove=function(prop,value){if(!prop){return currentRemoveFn.apply(this,arguments)}$.each(this,function(){switch(prop){case&quot;class&quot;:case&quot;className&quot;:$(this).removeClass(value);break;default:if($(prop).length==0){$(this).removeAttr(prop)}else{currentRemoveFn.apply(this,arguments)}}});return this};$.fn.after=function(t,f){var time=App.timeFormat(t);var scope=this;setTimeout(function(){f.call(scope)},time);return this};(function(jQuery){jQuery.each([&quot;backgroundColor&quot;,&quot;borderBottomColor&quot;,&quot;borderLeftColor&quot;,&quot;borderRightColor&quot;,&quot;borderTopColor&quot;,&quot;color&quot;,&quot;outlineColor&quot;],function(i,attr){jQuery.fx.step[attr]=function(fx){if(fx.state==0){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end)}fx.elem.style[attr]=&quot;rgb(&quot;+[Math.max(Math.min(parseInt((fx.pos*(fx.end[0]-fx.start[0]))+fx.start[0]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[1]-fx.start[1]))+fx.start[1]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[2]-fx.start[2]))+fx.start[2]),255),0)].join(&quot;,&quot;)+&quot;)&quot;}});function getRGB(color){var result;if(color&amp;&amp;color.constructor==Array&amp;&amp;color.length==3){return color}if(color==&quot;transparent&quot;){return[255,255,255]}if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)){return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3])]}if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)){return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55]}if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)){return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)]}if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)){return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)]}return colors[jQuery.trim(color).toLowerCase()]}function getColor(elem,attr){var color;do{color=jQuery.curCSS(elem,attr);if(color!=&quot;&quot;&amp;&amp;color!=&quot;transparent&quot;||jQuery.nodeName(elem,&quot;body&quot;)){break}attr=&quot;backgroundColor&quot;}while(elem=elem.parentNode);return getRGB(color)}var colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})($);var oldBind=$.fn.bind;$.fn.bind=function(){if(arguments.length&gt;1){return oldBind.apply(this,arguments)}else{alert(&quot;foo&quot;);var obj=arguments[0];$.each(this,function(idx){var t=$(this).get(idx);$.each($(t).children(),function(){var child=$(this);var name=child.attr(&quot;name&quot;);var value=name?obj[name]:obj[child.attr(&quot;id&quot;)];if(value){child.val(value)}})})}return this};$.fn.disable=function(){$.each(this,function(idx){$(this).attr(&quot;disabled&quot;,true)})};$.fn.enable=function(){$.each(this,function(){$(this).removeAttr(&quot;disabled&quot;)})};var validators={},decorators={},fieldsets={};var validatorMonitor=null;var validatorMonitors=null;var validatorMonitorRate=250;AppC.setFieldMonitorInterval=function(rate){validatorMonitorRate=rate;if(validatorMonitor){clearInterval(validatorMonitor);validatorMonitor=setInterval(fieldMonitor,validatorMonitorRate)}};AppC.addValidator=function(name,fn){validators[name]=fn};AppC.getValidator=function(name){if(name){return validators[name]}};AppC.validators=function(iter){for(var p in validators){iter.call({name:p,fn:validators[p]})}};AppC.addDecorator=function(name,fn){decorators[name]=fn};App.getDecorator=function(name){if(name){return decorators[name]}};AppC.decorators=function(iter){for(var p in decorators){iter.call({name:p,fn:decorators[p]})}};AppC.addValidator(&quot;required&quot;,function(el,value){return(typeof (value)!=&quot;undefined&quot;&amp;&amp;value)});function installDecorator(el,target){if(!target){var img=AppC.sdkRoot+&quot;images/exclamation.png&quot;;var id=el.attr(&quot;id&quot;)+&quot;_decorator&quot;;var html='&lt;span id=&quot;'+id+'&quot; class=&quot;decorator&quot;&gt;&lt;img src=&quot;'+img+'&quot;/&gt;&lt;/span&gt;';el.after(html);target=$(&quot;#&quot;+id);el.data(&quot;decoratorTarget&quot;,target)}return target}AppC.addDecorator(&quot;required&quot;,function(el,valid,value,target){target=installDecorator(el,target);if(valid){el.css(&quot;background-color&quot;,&quot;&quot;);target.css(&quot;visibility&quot;,&quot;hidden&quot;)}else{el.css(&quot;background-color&quot;,&quot;#FFEEEE&quot;);target.css(&quot;visibility&quot;,&quot;visible&quot;)}});AppC.addDecorator(&quot;custom&quot;,function(el,valid,value,target){target.css(&quot;visibility&quot;,valid?&quot;hidden&quot;:&quot;visible&quot;)});function fieldMonitor(){if(validatorMonitors&amp;&amp;validatorMonitors.length&gt;0){$.each(validatorMonitors,function(){$(this).revalidate(true)})}}function startFieldMonitor(el){if(!validatorMonitors){validatorMonitors=[];validatorMonitor=setInterval(fieldMonitor,validatorMonitorRate)}validatorMonitors.push(el);var fn=function(){stopFieldMonitor(el)};el.data(&quot;fieldMonitor&quot;,fn);el.bind(&quot;blur&quot;,fn)}function stopFieldMonitor(el){if(validatorMonitors){var idx=validatorMonitors.indexOf(el);var idx=$.inArray(el,validatorMonitors);if(idx!=-1){validatorMonitors.splice(idx,1)}var fn=el.data(&quot;fieldMonitor&quot;);if(fn){el.unbind(&quot;blur&quot;,fn)}el.removeData(&quot;fieldMonitor&quot;)}}function makeFormEntry(array,name,e,fn){$.each(array,function(idx){var el=$(this);el.data(name,e);if(fn){fn(el)}el.revalidate()});return array}function fieldDecorate(el,valid,value){if(!value){el.addClass(&quot;validator_empty&quot;).removeClass(&quot;validator_value&quot;)}else{el.removeClass(&quot;validator_empty&quot;).addClass(&quot;validator_value&quot;)}if(valid){el.removeClass(&quot;validator_invalid&quot;).addClass(&quot;validator_valid&quot;)}else{el.addClass(&quot;validator_invalid&quot;).removeClass(&quot;validator_valid&quot;)}var dec=el.data(&quot;decorator&quot;);var target=el.data(&quot;decoratorTarget&quot;);var fn=typeof (dec)==&quot;function&quot;?dec:App.getDecorator(dec);return fn?fn(el,valid,value,target):null}function fieldActivate(el,activator,activators){activator=activator?activator:el.data(&quot;activator&quot;);if(activator){var valid=true;var array=activators?activators:activator.data(&quot;activators&quot;);$.each(array,function(){var r=$(&quot;#&quot;+this).data(&quot;validatorResult&quot;);if(r===false){valid=false;return false}});if(valid){activator.removeAttr(&quot;disabled&quot;)}else{activator.attr(&quot;disabled&quot;,true)}}}function fieldRevalidate(el,changeOnly,ignoreActivate){var v=el.data(&quot;validator&quot;);if(v){var result=false;var validator=typeof (v)==&quot;function&quot;?v:AppC.getValidator(v);if(validator){try{var value=getElementValue(el);if(changeOnly&amp;&amp;el.data(&quot;validatorData&quot;)===value){return }el.data(&quot;validatorData&quot;,value);result=validator(el,value);result=(typeof (result)==&quot;undefined&quot;?true:result)?true:false;el.data(&quot;validatorResult&quot;,result);fieldDecorate(el,result,value);if(!ignoreActivate){fieldActivate(el)}}catch(E){$.error(&quot;error in validation = &quot;+E+&quot; for element = &quot;+el.attr(&quot;id&quot;))}}}else{var activators=el.data(&quot;activators&quot;);if(activators){fieldActivate(null,el,activators)}}}$.fn.revalidate=function(changeOnly){return $.each(this,function(idx){fieldRevalidate($(this),changeOnly)});return this};$.fn.validator=function(v){makeFormEntry(this,&quot;validator&quot;,v,function(el){if(el.is(&quot;:text,textarea&quot;)){el.bind(&quot;focus&quot;,function(){startFieldMonitor(el)})}else{if(el.is(&quot;select,:radio,:checkbox&quot;)){el.bind(&quot;click&quot;,function(){el.revalidate()})}}});return this};$.fn.decorator=function(d,decId){var dec=decId?(typeof (decId)==&quot;string&quot;?$(&quot;#&quot;+decId):$(decId)):null;var fn=dec?function(el){el.data(&quot;decoratorTarget&quot;,dec)}:null;return makeFormEntry(this,&quot;decorator&quot;,d,fn)};$.fn.activators=function(a){var self=this;var array=(typeof (a)==&quot;string&quot;?a.split(/[ ,]/):$.makeArray(a)).map(function(e){return $.trim(e)});this.data(&quot;activators&quot;,array);$.each(array,function(idx){var el=$(&quot;#&quot;+$.trim(this));if(!el){$.error(&quot;Error adding activator field with id: &quot;+this+&quot;, not found&quot;);return }el.data(&quot;activator&quot;,self)});this.revalidate();return this};$.fn.fieldset=function(fs){var array=(typeof (fs)==&quot;string&quot;?fs.split(/[ ,]/):$.makeArray(fs)).map(function(e){return $.trim(e)});$.each(this,function(idx){var el=$(this);if(!el){$.error(&quot;Error adding fieldset field with id: &quot;+$(this).attr(&quot;id&quot;)+&quot;, not found&quot;);return }el.data(&quot;fieldsets&quot;,array);$.each(array,function(){App.addToFieldset(el,$.trim(this))})})};App.addToFieldset=function(el,fs){var elements=fieldsets[fs];if(!elements){elements=[];fieldsets[fs]=elements}elements.push(el)};App.getFieldsetData=function(fs,obj){obj=obj||{};var array=typeof (fs)==&quot;string&quot;?[fs]:fs.data(&quot;fieldsets&quot;);if(array&amp;&amp;array.length&gt;0){$.each(array,function(){var elements=fieldsets[this];if(elements){$.each(elements,function(){var el=this;if(!el.is(&quot;:button&quot;)){var value=getElementValue(el);var key=el.is(&quot;form&quot;)?el.attr(&quot;name&quot;)||el.attr(&quot;fieldset&quot;)||el.attr(&quot;id&quot;):el.attr(&quot;name&quot;)||el.attr(&quot;id&quot;);obj[key]=value}})}})}return obj};App.reg(&quot;validator&quot;,[&quot;input&quot;,&quot;button&quot;,&quot;select&quot;,&quot;textarea&quot;],function(value,state){$(this).validator(value)});App.reg(&quot;decorator&quot;,[&quot;input&quot;,&quot;button&quot;,&quot;select&quot;,&quot;textarea&quot;],function(value,state){$(this).decorator(value,$(this).attr(&quot;decoratorId&quot;))});App.reg(&quot;activators&quot;,[&quot;div&quot;,&quot;input&quot;,&quot;button&quot;],function(value,state){$(this).activators(value)});App.reg(&quot;fieldset&quot;,[&quot;form&quot;,&quot;input&quot;,&quot;button&quot;,&quot;select&quot;,&quot;textarea&quot;],function(value,state){$(this).fieldset(value)});var oldVal=$.fn.val;$.fn.val=function(){var inr=this.data(&quot;revalidating&quot;);var rev=false;if(!inr){rev=true;this.data(&quot;revalidating&quot;,true)}var r=oldVal.apply(this,arguments);if(rev){this.revalidate();this.removeData(&quot;revalidating&quot;)}return r};regCSSAction(&quot;hidden&quot;,&quot;visibility&quot;);$.fn.highlight=function(bgColor){bgColor=bgColor||&quot;#ffffcc&quot;;$.each(this,function(){var curBgColor=$(this).css(&quot;backgroundColor&quot;);$(this).animate({backgroundColor:bgColor},50).animate({backgroundColor:curBgColor},1000)});return this};App.dynregAction(&quot;history&quot;);AppC.currentLocale=window.navigator.language||&quot;en&quot;;var bundles={};AppC.locale=function(lang){if(lang==AppC.currentLocale){return }AppC.currentLocale=lang;if(!bundles[lang]){try{var url=AppC.sdkPath+&quot;localization/&quot;+lang.toLowerCase()+&quot;.properties&quot;;$.debug(&quot;attempting to fetch &quot;+url);$.ajax({url:url,cache:true,dataType:&quot;text&quot;,type:&quot;GET&quot;,async:true,success:function(prop){var endRE=/\\$/;var cont=false,key=null,value=null;var map={};$.each(prop.split(&quot;\n&quot;),function(){if(cont){value+=value.substring(0,value.length-1);if(endRE.test(this)){return }map[key]=value;cont=false;key=value=null;return }var line=$.trim(this);if(line==&quot;&quot;||line.charAt(0)==&quot;#&quot;){return }var tokens=line.split(&quot;=&quot;);var k=$.trim(tokens[0]);if(k.charAt(0)==&quot;#&quot;){return }var v=$.trim(tokens.length&gt;1?tokens[1]:&quot;&quot;);if(endRE.test(v)){cont=true;key=k;value=v.substring(0,v.length-1);return }map[k]=v});bundles[lang]=map;AppC.beforeCompile(function(){$(&quot;[@id]&quot;).localize(lang)});$(document).trigger(&quot;localized&quot;,lang)}})}catch(E){if(lang.indexOf(&quot;-&quot;)&gt;0){return AppC.locale(lang.split(&quot;-&quot;)[0])}$.error(&quot;error loading language bundle for language = &quot;+lang+&quot;, Exception = &quot;+E)}}else{AppC.beforeCompile(function(){$(&quot;[@id]&quot;).localize(lang)});$(document).trigger(&quot;localized&quot;,lang)}};$.fn.localize=function(lang){if(this.length&gt;1){$.each(this,function(){$(this).localize(lang)});return this}var id=$(this).attr(&quot;id&quot;);if(id!=null){var m=bundles[lang||AppC.currentLocale];if(m){var value=m[id];if(value){var el=$(this).get(0);switch(el.nodeName){case&quot;INPUT&quot;:case&quot;BUTTON&quot;:$(this).val(value);break;default:$(this).html(value);break}}}}return this};if(AppC.config.auto_locale){AppC.locale(AppC.currentLocale)}$.fn.move=function(params){$.each(this,function(){$(this).css(&quot;position&quot;,&quot;relative&quot;).animate({left:params.x||0,top:params.y||0},params.duration||1000)})};$.fn.on=function(value,state){var el=this;var isFn=typeof (state)==&quot;function&quot;;if(isFn){value=value+&quot; then script[true]&quot;}var expr=App.parseExpression(value);$.each(expr,function(){var p=App.extractParameters(this[2]);var ep=isFn?null:this[3]?App.extractParameters(this[3]):null;var param={cond:this[1],action:isFn?state:p.name,actionParams:isFn?null:p.params,elseAction:ep?ep.name:null,elseActionParams:ep?ep.params:null,delay:this[4],ifCond:this[5],state:state};App.processCond(el,param)});return this};regCSSAction(&quot;opacity&quot;,function(params){var value=(typeof (params)==&quot;string&quot;||typeof (params)==&quot;number&quot;)?params:(params?params.value:null);if(typeof (value)==&quot;undefined&quot;&amp;&amp;params){for(var p in params){if(p==&quot;id&quot;||p==&quot;source&quot;){continue}value=params[p];break}}if(typeof (value)==&quot;undefined&quot;){value=1}if(typeof (value)!=&quot;number&quot;){value=parseFloat(value)}this.css(&quot;opacity&quot;,(value==1||value==&quot;&quot;)?&quot;1.0&quot;:(value&lt;0.00001)?0:value)});var subs={local:[],remote:[]};var re=/^(l|local|both|r|remote|\*)\:(.*)$/;var localRe=/^l|local|both|\*/;var pubdebug=AppC.params.debug==&quot;2&quot;||AppC.params.debug==true;var queue=[];var remoteDisabled=true;var queueInit=false;var processingQueue=false;$.fn.sub=function(name,fn,params){var p=App.extractParameters(name);params=params||p.params;name=App.normalizePub(p.name);var regexp=null;var m=re.exec(name);var type=m[2];if(type.charAt(0)==&quot;~&quot;){type=type.substring(1);regexp=new RegExp(type)}if(this.get(0)!=document){$(this).trash(function(){$(this).unsub(name,fn)})}$.debug(&quot;subscribing type=&quot;+type+&quot;, regexp=&quot;+regexp);if(localRe.test(m[1])){subs.local.push({scope:this,fn:fn,name:type,params:params,regexp:regexp})}else{subs.remote.push({scope:this,fn:fn,name:type,params:params,regexp:regexp})}return this};$.fn.unsub=function(name,fn){name=App.normalizePub(name);var match=re.exec(name);if(match){var array=match[1]==&quot;remote&quot;?subs.remote:subs.local;var type=match[2];var found=[];for(var c=0;c&lt;array.length;c++){var entry=array[c];if(entry.name==type&amp;&amp;entry.fn==fn){found.push(c)}}for(var c=0;c&lt;found.length;c++){array.splice(found[c],1)}}};App.normalizePub=function(name){var idx=name.indexOf(&quot;[&quot;);if(idx&gt;0){name=name.substring(0,idx)}var m=re.exec(name);if(!m){return&quot;both:&quot;+name}switch(m[1]){case&quot;l&quot;:case&quot;local&quot;:return&quot;local:&quot;+m[2];case&quot;r&quot;:case&quot;remote&quot;:return&quot;remote:&quot;+m[2]}return&quot;both:&quot;+m[2]};App.pubQueue=function(name,data,local,scope,version){if(pubdebug){$.info(&quot;publish &quot;+(local?&quot;l:&quot;:&quot;r:&quot;)+name+&quot; with &quot;+$.toJSON(data)+&quot;, local:&quot;+subs.local.length+&quot;/remote:&quot;+subs.remote.length)}if(subs.local.length==0&amp;&amp;subs.remote.length==0){return }queue.push({data:data||{},name:name,local:local,scope:scope,version:version});if(remoteDisabled&amp;&amp;queueInit&amp;&amp;!processingQueue){processQueue()}};$.fn.pub=function(name,data,scope,version){var p=App.extractParameters(name,data||{});data=data||p.params;name=p.name;var m=re.exec(name);var isLocal=localRe.test(m[1]);data=data||{};App.getFieldsetData(this,data);if(isLocal&amp;&amp;!data.event){data.event={id:$(this).attr(&quot;id&quot;)}}if(!isLocal&amp;&amp;data.event){delete data.event}App.pubQueue(m[2],data,isLocal,scope,version);return this};$(document).bind(&quot;compiled&quot;,function(){queueInit=true;processQueue()});App.regCond(re,function(meta){$(this).sub(meta.cond,function(data,scope,version,name,direction,params){if(App.parseConditionCondition(params,data)){App.triggerAction(this,data,meta)}else{App.triggerElseAction(this,data,meta)}})});App.regAction(/^(l|local|both|\*|r|remote)\:/,function(params,action){$(this).pub(action,params)});function deliverRemoteMessages(msgs){$.debug(&quot;remote messages received = &quot;+$.toJSON(msgs));$.each(msgs,function(){var msg=this;$.each(subs.remote,function(){if((this.regexp&amp;&amp;this.regexp.test(msg.name))||(!this.regexp&amp;&amp;this.name==msg.name)){this.fn.apply(this.scope,[msg.data,msg.scope,msg.version,msg.name,&quot;remote&quot;])}})})}var instanceid=AppC.params.instanceid||App.MD5.hex_md5(String(new Date().getTime())+String(Math.round(9999*Math.random())));function getServiceURL(){var token=App.MD5.hex_md5(sessionCookie+instanceid);return serviceBroker+&quot;?instanceid=&quot;+instanceid+&quot;&amp;auth=&quot;+token+&quot;&amp;ts=&quot;+String(new Date().getTime())}var marshallers={};var currentRequestId=0;marshallers[&quot;xml/json&quot;]=function(q){var requestid=currentRequestId++;var xml=&quot;&quot;;var time=new Date;var timestamp=time.getTime();xml=&quot;&lt;?xml version='1.0' encoding='UTF-8'?&gt;\n&quot;;var tz=time.getTimezoneOffset()/60;var idleMs=0;xml+=&quot;&lt;request version='1.0' idle='&quot;+idleMs+&quot;' timestamp='&quot;+timestamp+&quot;' tz='&quot;+tz+&quot;'&gt;\n&quot;;$.each(q,function(){xml+=&quot;&lt;message requestid='&quot;+requestid+&quot;' type='&quot;+this.name+&quot;' datatype='JSON' scope='&quot;+(this.scope||&quot;appcelerator&quot;)+&quot;' version='&quot;+(this.version||&quot;1.0&quot;)+&quot;'&gt;&quot;;xml+=&quot;&lt;![CDATA[&quot;+$.toJSON(this.data)+&quot;]]&gt;&quot;;xml+=&quot;&lt;/message&gt;&quot;});xml+=&quot;&lt;/request&gt;&quot;;$.ajax({type:&quot;POST&quot;,url:getServiceURL(),data:xml,cache:false,dataType:&quot;xml&quot;,contentType:&quot;text/xml&quot;,success:function(xml){var children=xml.documentElement.childNodes;if(children&amp;&amp;children.length&gt;0){var msgs=[];for(var c=0;c&lt;children.length;c++){var child=children.item(c);if(child.nodeType==1){var requestid=child.getAttribute(&quot;requestid&quot;);var type=child.getAttribute(&quot;type&quot;);var datatype=child.getAttribute(&quot;datatype&quot;);var scope=child.getAttribute(&quot;scope&quot;)||&quot;appcelerator&quot;;var text=$.domText(child);var data=$.evalJSON(text);msgs.push({name:type,data:data,datatype:datatype,scope:scope,requestid:requestid})}}deliverRemoteMessages(msgs)}}})};marshallers[&quot;application/json&quot;]=function(q){var requestid=this.currentRequestId++;var request={};var time=new Date;var json={timestamp:time.getTime()+(time.getTimezoneOffset()*60*1000),version:&quot;1.0&quot;,messages:[]};for(var c=0,len=q.length;c&lt;len;c++){var e=q[c];json.messages.push({type:e.name,data:e.data,version:e.version,scope:e.scope})}$.ajax({type:&quot;POST&quot;,url:getServiceURL(),data:$.toJSON(json),cache:false,dataType:&quot;json&quot;,contentType:&quot;application/json&quot;,success:function(result){var msgs=[];for(var c=0;c&lt;result.messages.length;c++){var message=result.messages[c];var type=message.type;var datatype=message.datatype;var scope=message.scope||&quot;appcelerator&quot;;var data=message.data;message.datatype=&quot;JSON&quot;;msgs.push({name:type,data:data,datatype:datatype,scope:scope})}deliverRemoteMessages(msgs)}})};function remoteDelivery(q){if(!remoteDisabled){marshaller(q)}}function processQueue(){if(queue.length&lt;1){return }var rq=remoteDisabled?null:[];processingQueue=true;for(var i=0;i&lt;queue.length;i++){var a=queue[i].local?subs.local:subs.remote;var name=queue[i].name;var data=queue[i].data;var scope=queue[i].scope||&quot;appcelerator&quot;;var version=queue[i].version||&quot;1.0&quot;;var direction=queue[i].local?&quot;local&quot;:&quot;remote&quot;;for(var j=0;j&lt;a.length;j++){if((a[j].regexp&amp;&amp;a[j].regexp.test(name))||(!a[j].regexp&amp;&amp;a[j].name==name)){if(pubdebug){$.info(&quot;dispatching &quot;+(queue[i].local?&quot;l:&quot;:&quot;r:&quot;)+name+&quot; to &quot;+a[j].scope.attr(&quot;id&quot;))}a[j].scope.direction=direction;a[j].scope.version=version;a[j].scope.scope=scope;a[j].scope.name=name;a[j].fn.apply(a[j].scope,[data,scope,version,name,direction,a[j].params])}}}if(rq&amp;&amp;rq.length&gt;0){remoteDelivery(rq)}queue=[];processingQueue=false}var queueTimer;var serviceBroker;var marshaller;var sessionCookie;function startDelivery(config){$.debug(&quot;remote config =&gt; &quot;+$.toJSON(config));remoteDisabled=false;var sb=config.servicebroker;if(!sb||sb.disabled==&quot;true&quot;){remoteDisabled=true;$.info(&quot;Appcelerator remote services disabled&quot;);return }serviceBroker=sb.value;if(!serviceBroker){$.error(&quot;Error loading service broker! not specified in appcelerator.xml&quot;);remoteDisabled=true;return }if(!remoteDisabled){marshaller=marshallers[sb.marshaller];if(!marshaller){$.error(&quot;Error loading marshaller = &quot;+sb.marshaller);remoteDisabled=true;return }var cookieName=config.sessionid.value||&quot;unknown_cookie_name&quot;;var cookieValue=$.cookie(cookieName);if(!cookieValue){$.ajax({type:&quot;GET&quot;,url:serviceBroker,data:&quot;initial=1&quot;,async:true,success:function(){sessionCookie=$.cookie(cookieName);$.debug(&quot;sessionCookie = &quot;+sessionCookie);queueTimer=setInterval(processQueue,10)}})}else{sessionCookie=cookieValue;$.debug(&quot;sessionCookie = &quot;+sessionCookie);queueTimer=setInterval(processQueue,10)}}}try{AppC.serverConfig={};if(AppC.docRoot.indexOf(&quot;file:/&quot;)&lt;0){var url=AppC.docRoot+&quot;appcelerator.xml&quot;;$.ajax({async:true,cache:true,dataType:&quot;xml&quot;,type:&quot;GET&quot;,url:url,success:function(data){var re=/@\{(.*?)\}/g;var map={rootPath:AppC.docRoot};var children=data.documentElement.childNodes;for(var c=0;c&lt;children.length;c++){var child=children[c];if(child.nodeType==1){var service=child.nodeName.toLowerCase();var config={};var path=$.domText(child);var template=AppC.compileTemplate(path,false,null,re);for(var x=0;x&lt;child.attributes.length;x++){var attr=child.attributes[x];config[attr.name]=attr.value}config.value=template(map);AppC.serverConfig[service]=config}}$(document).trigger(&quot;serverConfig&quot;,AppC.serverConfig);startDelivery(AppC.serverConfig)},error:function(xhr,text,error){$.error(&quot;error retrieving appcelerator.xml, remote services are disabled. error = &quot;+text)}})}}catch(e){$.error(&quot;error loading &quot;+docRoot+&quot;appcelerator.xml, remote services are disabled. error = &quot;+e)}$.fn.pulsate=function(count){for(var i=0;i&lt;(count||4);i++){this.fadeOut(&quot;fast&quot;).fadeIn(&quot;fast&quot;)}return this};regCSSAction(&quot;pulsate&quot;,function(params){return getTarget(params,this).pulsate(params.count)});$.each([&quot;clear&quot;,&quot;reset&quot;,&quot;clearform&quot;],function(){$.fn[this]=function(){$.each(this,function(){var target=$(this);var tag=App.getTagname(this);switch(tag){case&quot;a&quot;:target.attr(&quot;href&quot;,&quot;#&quot;);break;case&quot;form&quot;:this.reset();target.find(&quot;:input&quot;).revalidate();break;default:target.val(&quot;&quot;);break}});return this}});$.each([&quot;script&quot;,&quot;function&quot;,&quot;javascript&quot;],function(){$.fn[this]=function(code,scope){scope=scope||{};var js=code;if(typeof (js)==&quot;string&quot;){js=$.toFunction(js,true)}else{if(code.nodeType==1){js=$.toFunction($(code).html(),true)}else{if(typeof (code.jquery)==&quot;string&quot;){js=$.toFunction(code.get(0).html(),true)}else{throw&quot;I don't know what this object is: &quot;+(typeof (code))+&quot; for &quot;+$(this).attr(&quot;id&quot;)}}}scope.window=window;this.result=js.call(scope);return this}});(function($){var $scrollTo=$.scrollTo=function(target,duration,settings){$(window).scrollTo(target,duration,settings)};$scrollTo.defaults={axis:&quot;xy&quot;,duration:1};$scrollTo.window=function(scope){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var win=this.parentWindow||this.defaultView,elem=this.nodeName==&quot;#document&quot;?win.frameElement||win:this,doc=elem.contentDocument||(elem.contentWindow||elem).document,isWin=elem.setInterval;return elem.nodeName==&quot;IFRAME&quot;||isWin&amp;&amp;$.browser.safari?doc.body:isWin?doc.documentElement:this})};$.fn.scrollTo=function(target,duration,settings){if(typeof duration==&quot;object&quot;){settings=duration;duration=0}if(typeof settings==&quot;function&quot;){settings={onAfter:settings}}settings=$.extend({},$scrollTo.defaults,settings);duration=duration||settings.speed||settings.duration;settings.queue=settings.queue&amp;&amp;settings.axis.length&gt;1;if(settings.queue){duration/=2}settings.offset=both(settings.offset);settings.over=both(settings.over);return this.scrollable().each(function(){var elem=this,$elem=$(elem),targ=target,toff,attr={},win=$elem.is(&quot;html,body&quot;);switch(typeof targ){case&quot;number&quot;:case&quot;string&quot;:if(/^([+-]=)?\d+(px)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);case&quot;object&quot;:if(targ.is||targ.style){toff=(targ=$(targ)).offset()}}$.each(settings.axis.split(&quot;&quot;),function(i,axis){var Pos=axis==&quot;x&quot;?&quot;Left&quot;:&quot;Top&quot;,pos=Pos.toLowerCase(),key=&quot;scroll&quot;+Pos,old=elem[key],Dim=axis==&quot;x&quot;?&quot;Width&quot;:&quot;Height&quot;,dim=Dim.toLowerCase();if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css(&quot;margin&quot;+Pos))||0;attr[key]-=parseInt(targ.css(&quot;border&quot;+Pos+&quot;Width&quot;))||0}attr[key]+=settings.offset[pos]||0;if(settings.over[pos]){attr[key]+=targ[dim]()*settings.over[pos]}}else{attr[key]=targ[pos]}if(/^\d+$/.test(attr[key])){attr[key]=attr[key]&lt;=0?0:Math.min(attr[key],max(Dim))}if(!i&amp;&amp;settings.queue){if(old!=attr[key]){animate(settings.onAfterFirst)}delete attr[key]}});animate(settings.onAfter);function animate(callback){$elem.animate(attr,duration,settings.easing,callback&amp;&amp;function(){callback.call(this,target,settings)})}function max(Dim){var attr=&quot;scroll&quot;+Dim,doc=elem.ownerDocument;return win?Math.max(doc.documentElement[attr],doc.body[attr]):elem[attr]}}).end()};function both(val){return typeof val==&quot;object&quot;?val:{top:val,left:val}}})(jQuery);App.regAction(evtRegex(&quot;selectOption&quot;),function(params){$.error(&quot;not implemented&quot;)});var cssProperties=[&quot;border&quot;,&quot;padding&quot;,&quot;margin&quot;,&quot;color&quot;,&quot;cursor&quot;,&quot;font&quot;,&quot;fontFamily&quot;,&quot;visibility&quot;,&quot;position&quot;,&quot;overflow&quot;,&quot;filter&quot;,&quot;display&quot;,&quot;backgroundColor&quot;,&quot;backgroundPosition&quot;,&quot;backgroundAttachment&quot;,&quot;borderBottomColor&quot;,&quot;borderBottomStyle&quot;,&quot;borderBottomWidth&quot;,&quot;borderLeftColor&quot;,&quot;borderLeftStyle&quot;,&quot;borderLeftWidth&quot;,&quot;borderRightColor&quot;,&quot;borderRightStyle&quot;,&quot;borderRightWidth&quot;,&quot;borderSpacing&quot;,&quot;borderTopColor&quot;,&quot;borderTopStyle&quot;,&quot;borderTopWidth&quot;,&quot;bottom&quot;,&quot;clip&quot;,&quot;color&quot;,&quot;fontSize&quot;,&quot;fontWeight&quot;,&quot;height&quot;,&quot;left&quot;,&quot;letterSpacing&quot;,&quot;lineHeight&quot;,&quot;marginBottom&quot;,&quot;marginLeft&quot;,&quot;marginRight&quot;,&quot;marginTop&quot;,&quot;markerOffset&quot;,&quot;maxHeight&quot;,&quot;maxWidth&quot;,&quot;minHeight&quot;,&quot;minWidth&quot;,&quot;opacity&quot;,&quot;outlineColor&quot;,&quot;outlineOffset&quot;,&quot;outlineWidth&quot;,&quot;paddingBottom&quot;,&quot;paddingLeft&quot;,&quot;paddingRight&quot;,&quot;paddingTop&quot;,&quot;right&quot;,&quot;textIndent&quot;,&quot;top&quot;,&quot;width&quot;,&quot;wordSpacing&quot;,&quot;zIndex&quot;];$.fn.set=function(params){params=convertParams(params);$.each(this,function(){var target=$(this);var tag=App.getTagname(this);for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;case&quot;class&quot;:case&quot;className&quot;:target.attr(&quot;class&quot;,params[p]);break;case&quot;style&quot;:$.each(params[p].split(&quot;;&quot;),function(){var t=this.split(&quot;:&quot;);if(t&amp;&amp;t.length&gt;1){target.css(t[0],t[1]);return }});break;case&quot;href&quot;:switch(tag){case&quot;a&quot;:case&quot;link&quot;:target.attr(&quot;href&quot;,URI.absolutizeURI(params[p],AppC.docRoot));break}case&quot;src&quot;:switch(tag){case&quot;iframe&quot;:case&quot;script&quot;:case&quot;image&quot;:var onload=target.attr(&quot;onloaded&quot;);if(onload){var done=false;el.onload=el.onreadystatechange=function(){if(!done&amp;&amp;(!this.readyState||this.readyState==&quot;loaded&quot;||this.readyState==&quot;complete&quot;)){done=true;target.pub(onload,{source:{id:el.id}},target.attr(&quot;scope&quot;));el.onload=null}}}if(AppC.UA.opera){el.location.href=URI.absolutizeURI(params[p],AppC.docRoot)}else{el.src=URI.absolutizeURI(params[p],AppC.docRoot)}break;default:target.attr(p,params[p]);break}break;default:if(cssProperties.indexOf(p)!=-1||cssProperties.indexOf($.camel(p))!=-1){target.css(p,params[p])}else{target.attr(p,params[p])}}}})};$.fn.srcexpr=function(value){var srcvalue=eval($.unescapeXML(value));if(AppC.UA.IE6){}$(this).get(0).src=srcvalue;return this};App.regAction(evtRegex(&quot;statechange&quot;),function(params){$.error(&quot;not implementing&quot;)});var testCases=[];var testPassed=0;var testFailed=0;var testErrored=0;var testListener=null;$.fn.assert=function(){var passed=true,error=null,stop=false,message=String(arguments[0]),expr=arguments[0];if(typeof (arguments[0])==&quot;string&quot;&amp;&amp;arguments.length==2){expr=arguments[1]}var type=typeof (expr);if(type==&quot;boolean&quot;){passed=expr;stop=true}else{if(type==&quot;string&quot;){expr=$.toFunction(expr)}else{passed=typeof (expr)!=&quot;undefined&quot;?true:false;stop=true}}if(!stop){$.each(this,function(){try{var result=expr.call($(this));if(result!==true){passed=false;return false}}catch(E){passed=false;error=E;return false}})}var result={passed:passed,expr:String(expr),message:message,error:error};testCases.push(result);if(passed){testPassed++}if(error){testErrored++}if(!passed&amp;&amp;!error){testFailed++}if(testListener){testListener.result(result)}return this};$.fn.assertEnabled=function(){var passed=true;$.each(this,function(){var v=$(this).attr(&quot;disabled&quot;);if(v){passed=false;return false}});return this.assert(passed)};$.fn.assertDisabled=function(){var passed=true;$.each(this,function(){var v=$(this).attr(&quot;disabled&quot;);if(!v){passed=false;return false}});return this.assert(passed)};$.fn.assertCSS=function(key,val){var passed=true;$.each(this,function(){var v=$(this).css(key);if(v!=val){passed=false;return false}});return this.assert(passed)};$.fn.assertClass=function(className){var passed=true;$.each(this,function(){if($(this).hasClass(className)==false){passed=false;return false}});return this.assert(passed)};$.fn.assertAttr=function(attr){var passed=true;$.each(this,function(){if(!$(this).attr(attr)){passed=false;return false}});return this.assert(passed)};$.fn.assertValid=function(){var passed=true;$.each(this,function(){var v=$(this).data(&quot;validatorResult&quot;);if(!v){passed=false;return false}});return this.assert(passed)};$.fn.assertInvalid=function(){var passed=true;$.each(this,function(){var v=$(this).data(&quot;validatorResult&quot;);if(v){passed=false;return false}});return this.assert(passed)};var oldPub=App.pubQueue;var lastPubType=null,lastPubData=null;App.pubQueue=function(name,data,local,scope,version){lastPubType=(local?&quot;local&quot;:&quot;remote&quot;)+&quot;:&quot;+name;lastPubData=data;return oldPub.apply(this,arguments)};$.fn.assertPub=function(name,data){name=App.normalizePub(name);if(typeof (data)==&quot;undefined&quot;){return this.assert(name+&quot; was not correct. expected: &quot;+name+&quot;, was: &quot;+lastPubType,lastPubType===name)}if(name!==lastPubType){return this.assert(name+&quot; was not correct. expected: &quot;+name+&quot;, was: &quot;+lastPubType,name===lastPubType)}if(!lastPubData){return this.assert(name+&quot; missing data payload: &quot;+$.toJSON(data),false)}for(var key in data){var v1=lastPubData[key];var v2=data[key];if(v1!==v2){return this.assert(name+&quot; has incorrect data payload entry for key: &quot;+key+&quot;, expected: &quot;+v2+&quot;, was: &quot;+v1,false)}}return this.assert(name,true)};var TestGuard=function(timeout,fn,cb){var count=0;var done=false;var timer=setTimeout(function(){if(count!=0){done=true;$(document).assert(&quot;test failed because it timed out&quot;,false);if(cb.timeout){cb.timeout()}$.error(&quot;test timed out&quot;);fn()}},timeout);this.begin=function(){if(done){return }count++;if(cb&amp;&amp;cb.begin){cb.begin(count)}};this.end=function(){if(done){return }count--;if(cb&amp;&amp;cb.end){cb.end(count)}if(count==0){clearTimeout(timer);done=true;timer=null;fn()}};this.assert=function(a,b){if(done){return }return $(document).assert(a,b)};this.assertPub=function(name,data){if(done){return }return $(document).assertPub(name,data)}};AppC.runTests=function(timeout,begin,end,cb){var timeout=typeof (timeout)!=&quot;number&quot;?10000:timeout;begin=typeof (timeout)!=&quot;number&quot;?timeout:begin;end=typeof (timeout)!=&quot;number&quot;?begin:end;cb=typeof (timeout)!=&quot;number&quot;?end:cb;testCases=[];testPassed=0;testFailed=0;testErrored=0;testListener=cb;var complete=function(){if(end){end({passed:testPassed,failed:testFailed,errored:testErrored,tests:testCases})}else{var count=testPassed+testFailed+testErrored;var msg=&quot;TEST RESULTS: &quot;+count+&quot; test&quot;+(count&gt;1?&quot;s&quot;:&quot;&quot;)+&quot; executed: &quot;;if(testFailed&gt;0||testErrored&gt;0){var r=[];if(testFailed){r.push(testFailed+&quot; failed&quot;)}if(testErrored){r.push(testErrored+&quot; errored&quot;)}r.push(testPassed+&quot; passed&quot;);msg+=r.join(&quot;, &quot;)}else{msg+=&quot;All Passed! Now go take a nice break.&quot;}$.info(msg);if(testFailed||testErrored){$.each(testCases,function(){if(this.error){$.error(&quot;ERROR: &quot;+this.error+&quot;, message: &quot;+this.message)}else{$.error(&quot;FAILED: &quot;+this.expr+&quot;, message: &quot;+this.message)}})}}};var guard=new TestGuard(timeout,complete,cb);guard.begin();begin(guard);guard.end()};$.fn.toggle=function(params){params=convertParams(params);$.each(this,function(){var target=$(this);for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;case&quot;className&quot;:case&quot;class&quot;:target.toggleClass(params[p]);break;default:if(cssProperties.indexOf(p)!=-1||cssProperties.indexOf($.camel(p))!=-1){var currentVal=target.css(p);var opposites={inline:&quot;none&quot;,block:&quot;none&quot;,none:&quot;block&quot;,hidden:&quot;visible&quot;,visible:&quot;hidden&quot;};var opposite=opposites[currentVal]||&quot;&quot;;if(currentVal==params[p]){target.css(p,opposite);break}else{target.css(p,params[p]);break}}else{if(target.attr(p)){target.removeAttr(p);break}else{target.attr(p,params[p]);break}}}}});return this};$.fn.value=function(object,property,defValue){var value=$.getNestedProperty(object,property);if(!value){value=$.getNestedProperty(object,&quot;value&quot;)}if(!value){value=defValue||property}if(this.is(&quot;:input&quot;)){this.val(value)}else{this.html(value)}return this};regCSSAction(&quot;visible&quot;,&quot;visibility&quot;);$.each([&quot;add&quot;,&quot;remove&quot;],function(){var action=this;App.regAction(evtRegex(action),function(params,name){var target=getTarget(params,this);for(var p in params){switch(p){case&quot;id&quot;:case&quot;event&quot;:break;default:target[action](p,params[p]);break}}return this})});App.regAction(evtRegex(&quot;cookie&quot;),function(params){$.cookie(params.name,params.value,params)});App.regAction(evtRegex(&quot;disable&quot;),function(params){return getTarget(params,this).disable()});App.handleBasicEffect=function(obj,action,params){var target=obj;var opts={},speed=0,easing=null;for(var p in params){switch(p){case&quot;event&quot;:continue;case&quot;id&quot;:target=$(&quot;#&quot;+params[p]);break;case&quot;speed&quot;:speed=params[p];break;case&quot;easing&quot;:easing=params[p];break;default:opts[$.camel(p)]=params[p];break}}$.debug(&quot;effect=&quot;+action+&quot;,target=&quot;+target.attr(&quot;id&quot;)+&quot;,opts=&quot;+$.toJSON(opts)+&quot;,speed=&quot;+speed+&quot;,easing=&quot;+easing);switch(action){case&quot;animate&quot;:var position=target.css(&quot;position&quot;);if(position!=&quot;relative&quot;&amp;&amp;position!=&quot;absolute&quot;){target.css(&quot;position&quot;,&quot;relative&quot;)}return target.animate(opts,speed,easing);case&quot;fadeTo&quot;:return target.fadeTo(target,[speed,opts.opacity||opts.to||1]);default:return target[action].apply(target,[speed])}};$.fn.appear=function(){$.each(this,function(){$(this).fadeIn()});return this};$.fn.fade=function(){$.each(this,function(){$(this).fadeOut()});return this};$.each([&quot;show&quot;,&quot;hide&quot;,&quot;slideToggle&quot;,&quot;slideUp&quot;,&quot;slideDown&quot;,&quot;fadeIn&quot;,&quot;fadeOut&quot;,&quot;fadeTo&quot;,&quot;animate&quot;,&quot;appear&quot;,&quot;fade&quot;],function(){var name=$.string(this);App.regAction(evtRegex(name),function(params){return App.handleBasicEffect(getTarget(params,this),name,params)})});App.regAction(evtRegex(&quot;enable&quot;),function(params){return getTarget(params,this).enable()});regCSSAction(&quot;move&quot;,function(params){return getTarget(params,this).move(params)});$.each([&quot;clear&quot;,&quot;reset&quot;,&quot;clearform&quot;],function(){var eventName=this;App.regAction(evtRegex(eventName),function(params,name,data){return getTarget(params,this)[eventName]()})});$.each([&quot;script&quot;,&quot;function&quot;,&quot;javascript&quot;],function(){var type=this;App.regAction(evtRegex(this),function(params,name,data){if(this.direction){params.direction=this.direction;params.version=this.version;params.type=params.name=this.name}return getTarget(params,this)[type](data,params)},true)});App.regAction(evtRegex(&quot;value&quot;),function(params,name,data){if(this.direction){params.direction=this.direction;params.version=this.version;params.type=params.name=this.name}var p=App.extractParameters(&quot;[&quot;+data+&quot;]&quot;,params);return getTarget(params,this).value(p.params,data)},true);App.regAction(evtRegex(&quot;bind&quot;),function(params){var target=getTarget(params,this);this.bind(params);return this});App.regAction(evtRegex(&quot;scrollTo&quot;),function(params){var scrollTo=0;var duration=1000;var scrollToObj={};var useObj=false;var options={};var target=null;for(var p in params){switch(p){case&quot;event&quot;:break;case&quot;id&quot;:scrollTo=$(&quot;#&quot;+params[p]);break;case&quot;duration&quot;:duration=parseInt(params[p]);break;case&quot;axis&quot;:options.axis=params[p];break;case&quot;queue&quot;:options.queue=params[p];break;case&quot;top&quot;:scrollToObj.top=params[p];useObj=true;break;case&quot;left&quot;:scrollToObj.left=params[p];useObj=true;break;case&quot;target&quot;:target=params[p];break;default:break}}if(target!=null){$(&quot;#&quot;+target).scrollTo((useObj==true)?scrollToObj:scrollTo,duration,options)}else{$.scrollTo((useObj==true)?scrollToObj:scrollTo,duration,options)}});App.regAction(evtRegex(&quot;set&quot;),function(){getTarget(params,this).set.apply(this,arguments);return this});App.regAction(evtRegex(&quot;toggle&quot;),function(params){return getTarget(params,this).toggle(params)});regCSSAction(&quot;highlight&quot;,function(params){var bgColor=params[&quot;background-color&quot;]||params.backgroundColor||&quot;#ffffcc&quot;;return getTarget(params,this).highlight(bgColor)});App.reg(&quot;on&quot;,&quot;*&quot;,function(value,state){$(this).on(value,state)});var appuid=$.cookie(&quot;appuid&quot;);var staturi=((&quot;https:&quot;==document.location.protocol)?&quot;https://s3.amazonaws.com/tracker.appcelerator.org/&quot;:&quot;http://tracker.appcelerator.org/&quot;)+&quot;app.js&quot;;if(!appuid){appuid=App.UUID.newID();$.cookie(&quot;appuid&quot;,appuid,{expires:31536000000*5,path:&quot;/&quot;,domain:document.domain})}var _onerror=window.onerror,_sending=false;function TrackStat(evt,extra){if(AppC.config.track_stats){_sending=true;var d=new Date().getTime()-(started||new Date).getTime();var uri=staturi+&quot;?t=&quot;+Number(new Date)+&quot;&amp;dur=&quot;+d+&quot;&amp;evt=&quot;+evt+&quot;&amp;appuid=&quot;+appuid+&quot;&amp;tid=&quot;+started.getTime()+&quot;&amp;&quot;+(extra||&quot;&quot;);try{$.getScript(uri)}catch(E){}_sending=false}}var errorCount=0;var errorMax=5;window.onerror=function(msg,url,line){if(_sending){return }try{if(url&amp;&amp;url.indexOf(staturi)!=-1){return }if(errorCount++&gt;errorMax){return }if(!url&amp;&amp;!line&amp;&amp;typeof (msg)==&quot;object&quot;&amp;&amp;typeof (msg.stopPropagation)==&quot;function&quot;){_sending=false;return }$.error(&quot;generic uncaught error = &quot;+String(msg)+&quot;, url = &quot;+url+&quot;, line = &quot;+line);var s=&quot;msg=&quot;+encodeURIComponent($.encode64(String(msg)))+&quot;&amp;url=&quot;+encodeURIComponent($.encode64(String(url||&quot;&quot;)))+&quot;&amp;line=&quot;+encodeURIComponent(line||-1);TrackStat(2,s);if(_onerror){_onerror(msg,url,line)}}catch(e){$.error(&quot;caught error in window.onerror = &quot;+e);_sending=false;return false}};$(document).bind(&quot;compiled&quot;,function(){var sendRemote=window.location.href.indexOf(&quot;file:/&quot;)!=-1&amp;&amp;AppC.config.report_stats;var screenHeight=screen.height;var screenWidth=screen.width;var colorDepth=screen.colorDepth||-1;var tz=started.getTimezoneOffset()/60;var cookies=[];$.each((document.cookie||&quot;&quot;).split(&quot;;&quot;),function(){var t=this.split(&quot;=&quot;);if(t.length&gt;0){cookies.push({name:t[0],value:t[1]})}});var data={userAgent:navigator.userAgent,flash:AppC.UA.flash,flashver:AppC.UA.flashVersion,silverlight:AppC.UA.silverlight,silverlightver:AppC.UA.silverlightVersion,gears:AppC.UA.gears,fluid:AppC.UA.fluid,screen:{height:screenHeight,width:screenWidth,color:colorDepth},os:AppC.UA.platform,referrer:document.referrer,path:window.location.href,cookies:cookies,tz:tz,uid:appuid};setTimeout(function(){if(sendRemote){if(window.parent==null||window.parent==window){$(document).pub(&quot;r:appcelerator.status.report&quot;,data)}}var a=0,s=0,v=1,c=null,l=null,svc=null;c=AppC.serverConfig.aid;if(c){a=c.value}c=AppC.serverConfig.sid;if(c){s=c.value}c=AppC.serverConfig.language;if(c){l=c.value}c=AppC.serverConfig.service;if(c){svc=c.value}var p=AppC.UA.platform||&quot;unknown&quot;;var f=AppC.UA.flashVersion;var sic=(AppC.serverConfig.sessionid||{}).value;var si=sic?$.cookie(sic):null;var qs=$.toQueryString({wv:String(AppC.Version),v:v,a:a,s:s,gg:Number(AppC.UA.gears),fd:Number(AppC.UA.fluid),dm:data.screen.width+&quot;,&quot;+data.screen.height+&quot;,&quot;+data.screen.color,p:AppC.UA.platform,tz:tz,fv:data.flashver,sv:data.silverlightver,r:$.encode64(document.referrer||&quot;&quot;),t:$.encode64(document.title||&quot;&quot;),si:si,sct:compileTime,slt:loadTime,bl:window.navigator.language,lng:l,svc:svc,js:$.encode64(jsLocation)});TrackStat(1,qs)},2000+Math.round(1999*Math.random()));$(window).unload(function(){TrackStat(0)})})})(jQuery);
\ No newline at end of file</diff>
      <filename>public/javascripts/appcelerator.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,8 @@
 /*!(c) 2006-2008 Appcelerator, Inc. http://appcelerator.org
  * Licensed under the Apache License, Version 2.0. Please visit
  * http://license.appcelerator.com for full copy of the License.
+ *
+ * TestMonkey lives at http://github.com/jhaynie/testmonkey/tree/master
  **/
 window.TestMonkey = {};
 
@@ -8,12 +10,108 @@ window.TestMonkey = {};
 
 	var testRunnerPlugin = null;
 	
+	/**
+	 * the plugin is responsible for driving the UI and doing
+	 * all the stuff responsible for setting up and executing
+	 * the test monkey system
+	 *
+	 */
+	TestMonkey.installTestRunnerPlugin = function(callback)
+	{
+		testRunnerPlugin = callback;
+	};
+	
+	var assertions = {};
+	/**
+	 * plugin to add your own assertion types.  name should be the 
+	 * name of the assertion and handler is the callback function to
+	 * execution the assertion.  all internal built-in assertions use
+	 * this same interface to register themselves. it is possible to
+	 * override the builtins by calling this method with same name as
+	 * a built-in assertion.
+	 */
+	TestMonkey.installAssertionType = function(name,handler)
+	{
+		assertions[name]=handler;
+	};
+	
+	TestMonkey.installAssertionType('',function(testcase,assertion,args)
+	{
+		return runAssertion(args[0]);
+	});
+	
+	TestMonkey.installAssertionType('Visible',function(testcase,assertion,args)
+	{
+		return [this.css('visibility')=='visible',this.css('visibility')];
+	});
+
+	TestMonkey.installAssertionType('Hidden',function(testcase,assertion,args)
+	{
+		return [this.css('visibility')=='hidden',this.css('visibility')];
+	});
+
+	TestMonkey.installAssertionType('Disabled',function(testcase,assertion,args)
+	{
+		return [this.attr('disabled'),this.attr('disabled')];
+	});
+
+	TestMonkey.installAssertionType('Enabled',function(testcase,assertion,args)
+	{
+		return [!this.attr('disabled'),this.attr('disabled')];
+	});
+
+	TestMonkey.installAssertionType('CSS',function(testcase,assertion,args)
+	{
+		return [this.css(args[0]) == args[1],this.css(args[0])];
+	});
+
+	TestMonkey.installAssertionType('Attr',function(testcase,assertion,args)
+	{
+		return [String(this.attr(args[0])) == String(args[1]),String(this.attr(args[0]))];
+	});
+
+	TestMonkey.installAssertionType('Class',function(testcase,assertion,args)
+	{
+		return [this.hasClass(args[0]),this.attr('class')];
+	});
+	
+	TestMonkey.installAssertionType('HTML',function(testcase,assertion,args)
+	{
+		return [this.html()==args[0],this.html()];
+	});
+
+	TestMonkey.installAssertionType('Value',function(testcase,assertion,args)
+	{
+		return [this.val()==args[0],this.val()];
+	});
+
+	TestMonkey.installAssertionType('Text',function(testcase,assertion,args)
+	{
+		return [this.text()==args[0],this.text()];
+	});
+
+	TestMonkey.installAssertionType('Empty',function(testcase,assertion,args)
+	{
+		return [this.text()=='',this.text()];
+	});
+
+	TestMonkey.installAssertionType('Checked',function(testcase,assertion,args)
+	{
+		return [this.get(0).checked,this.get(0).checked];
+	});
+
+	TestMonkey.installAssertionType('Unchecked',function(testcase,assertion,args)
+	{
+		return [!this.get(0).checked,this.get(0).checked];
+	});
+
 	function fireEvent()
 	{
 		if (testRunnerPlugin)
 		{
 			var name = arguments[0], args = arguments.length &gt; 1 ? $.makeArray(arguments).slice(1) : [];
 			var fn = testRunnerPlugin[name];
+			$.info('firing '+name);
 			if (fn)
 			{
 				fn.apply(testRunnerPlugin,args);
@@ -28,19 +126,12 @@ window.TestMonkey = {};
 		}
 	}
 
-	var assertions = {};
 	var currentDescriptor = null, currentSuite = null;
 	
-	TestMonkey.installTestRunnerPlugin = function(callback)
-	{
-		testRunnerPlugin = callback;
-	};
-	
-	TestMonkey.installAssertionType = function(name,handler)
-	{
-		assertions[name]=handler;
-	};
 	
+	/**
+	 * called from the test execution environment to run the tests
+	 */
 	scope.testRunner = function()
 	{
 		// cleanup in case we call this multiple times
@@ -85,13 +176,13 @@ window.TestMonkey = {};
 
 		fireEvent('beforeTestCases',testCases);
 
-		fireEvent('beforeAssertionCount',assertCount);
+		fireEvent('beforeAssertionCount');
 		var assertCount = 0;
 		
 		$.each(testCases,function()
 		{
 			var testcase = this;
-			assertCount += testcase.asserts.length;
+			assertCount += testcase.asserts.length;  
 			testcase.running = false;
 			testcase.ready = true;
 		});
@@ -107,13 +198,14 @@ window.TestMonkey = {};
 		{
 			var descriptor = this[1];
 			var html = descriptor.html;
+			descriptor.htmlID = String(Math.round( Math.random() * 10000 ));
 			if (html)
 			{
 				total+=1;
-				loadTestFrame(html,function(id)
+				loadTestFrame(html,function(content)
 				{
 					// mark the id for the frame onto the descriptor
-					descriptor.htmlID = id;
+					descriptor.content = content;
 					loaded+=1;
 					if (loaded == total)
 					{
@@ -123,7 +215,8 @@ window.TestMonkey = {};
 			}
 			else
 			{
-				descriptor.htmlID = String(Math.round( Math.random() * 10000 ));
+				// we later use marker to indicate where we need to replace content
+				descriptor.content = &quot;&lt;html&gt;&lt;head&gt;####MARKER####&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;&quot;;
 			}
 		});
 
@@ -153,7 +246,6 @@ window.TestMonkey = {};
 				{
 					fireEvent('afterTestSuite',currentSuite);
 					var currentD = testSuites[currentSuite];
-					if (currentD.htmlID) removeTestFrame(currentD.htmlID);
 				}
 				currentSuite = nextTestCase.suite;
 				fireEvent('beforeTestSuite',currentSuite);
@@ -181,7 +273,6 @@ window.TestMonkey = {};
 			{
 				fireEvent('afterTestSuite',currentSuite);
 				var currentD = testSuites[currentSuite];
-				if (currentD.htmlID) removeTestFrame(currentD.htmlID);
 			}
 			fireEvent('afterTestCases',testCases);
 			fireEvent('afterTestRunner');
@@ -202,76 +293,6 @@ window.TestMonkey = {};
 		}
 	}
 	
-	TestMonkey.installAssertionType('',function(testcase,assertion,args)
-	{
-		return runAssertion(args[0]);
-	});
-	
-	TestMonkey.installAssertionType('Visible',function(testcase,assertion,args)
-	{
-		return [this.css('visibility')=='visible',this.css('visibility')];
-	});
-
-	TestMonkey.installAssertionType('Hidden',function(testcase,assertion,args)
-	{
-		return [this.css('visibility')=='hidden',this.css('visibility')];
-	});
-
-	TestMonkey.installAssertionType('Disabled',function(testcase,assertion,args)
-	{
-		return [this.attr('disabled'),this.attr('disabled')];
-	});
-
-	TestMonkey.installAssertionType('Enabled',function(testcase,assertion,args)
-	{
-		return [!this.attr('disabled'),this.attr('disabled')];
-	});
-
-	TestMonkey.installAssertionType('CSS',function(testcase,assertion,args)
-	{
-		return [this.css(args[0]) == args[1],this.css(args[0])];
-	});
-
-	TestMonkey.installAssertionType('Attr',function(testcase,assertion,args)
-	{
-		return [String(this.attr(args[0])) == String(args[1]),String(this.attr(args[0]))];
-	});
-
-	TestMonkey.installAssertionType('Class',function(testcase,assertion,args)
-	{
-		return [this.hasClass(args[0]),this.attr('class')];
-	});
-	
-	TestMonkey.installAssertionType('HTML',function(testcase,assertion,args)
-	{
-		return [this.html()==args[0],this.html()];
-	});
-
-	TestMonkey.installAssertionType('Value',function(testcase,assertion,args)
-	{
-		return [this.val()==args[0],this.val()];
-	});
-
-	TestMonkey.installAssertionType('Text',function(testcase,assertion,args)
-	{
-		return [this.text()==args[0],this.text()];
-	});
-
-	TestMonkey.installAssertionType('Empty',function(testcase,assertion,args)
-	{
-		return [this.text()=='',this.text()];
-	});
-
-	TestMonkey.installAssertionType('Checked',function(testcase,assertion,args)
-	{
-		return [this.get(0).checked,this.get(0).checked];
-	});
-
-	TestMonkey.installAssertionType('Unchecked',function(testcase,assertion,args)
-	{
-		return [!this.get(0).checked,this.get(0).checked];
-	});
-	
 	function internalAssert()
 	{
 		var idx = arguments[0], type = arguments[1]||'';
@@ -295,15 +316,17 @@ window.TestMonkey = {};
 		}
 	}
 	
-	function getHtml(frame_doc)
+	function getHtml(f)
 	{
-		var n = $(frame_doc.get(0).cloneNode(true));
+		var n = $(f.get(0).cloneNode(true));
+		// pull out the firebug injected HTML since we don't really want to see that
 		n.find('#_firebugConsoleInjector,#_firebugConsole').remove();
 		return '&lt;html&gt;\n'+jQuery(n).html()+'\n&lt;/html&gt;';
 	}
 	
 	var currentTestCase = null;
-	
+
+	//TODO: needed anymore?
 	$.fn.assertTestCase = function()
 	{
 		internalAssert.apply(this,arguments);
@@ -312,32 +335,26 @@ window.TestMonkey = {};
 	
 	function executeTest(testcase,descriptor)
 	{
+		currentTestCase = testcase;
 		testcase.results = [];
 		testcase.running = true;
-		currentTestCase = testcase;
 		var timer = null;
-		var frame_doc = null;
+		var count = 0;
+		var total = testcase.asserts.length;
+		
+		function getFrame()
+		{
+			return jQuery(&quot;#&quot;+descriptor.htmlID).contents().find(&quot;html&quot;);
+		}
 		window.testScope = function()
 		{
 			var self = this;
-			this.jQuery = window.jQuery;
 			this.descriptor = descriptor;
-			this.internalAssert = internalAssert;
-			this.$ = function(selector)
-			{
-				var result = jQuery(&quot;#&quot;+descriptor.htmlID).contents().find(selector);
-				result.assertTestCase = function()
-				{
-					if (testcase.running)
-					{
-						return internalAssert.apply(this,arguments);
-					}
-					return false;
-				};
-				return result;				
-			}
+			// these functions are specially mapped into the execution
+			// environment as delegates
 			this.setup = function()
 			{
+				timer=setTimeout(function(){self.end(true,true)},testcase.timeout);
 				if (descriptor.setup) try { descriptor.setup(); } catch (E) {}
 			}
 			this.teardown = function()
@@ -375,100 +392,128 @@ window.TestMonkey = {};
 				testcase.results.push({'result':false,'message':testcase.message});
 				self.end(true,false);
 			}
+			this.completed = function()
+			{
+				if (typeof(testcase.timeout)=='undefined')
+				{
+					self.end(false,false);
+				}
+			}
 			this.end=function(failed,timeout)
 			{
-				testcase.after_dom = getHtml(frame_doc);
-				if (!testcase.running) return;
+				count++;
 				if (timer)
 				{
 					clearTimeout(timer);
 					timer=null;
 				}
-				testcase.running = false;
-				if (failed)
+				if (timeout &amp;&amp; count &lt; total)
 				{
-					testcase.failed = true;
+					// timeout the rest of the assertions
+					for (var c=count+1;c&lt;total;c++)
+					{
+						testcase.results.push({'result':false,'message':'timed out'});
+					}
 				}
-				else
+				self.teardown();
+				var f = getFrame();
+				f.find('#__testMonkeySDK,#__testMonkeyJS').remove();
+				testcase.after_dom = getHtml(f);
+				try
 				{
-					var passed = true;
-					jQuery.each(testcase.results,function()
+					if (!testcase.running) return;
+					testcase.running = false;
+					if (failed)
 					{
-						if (!this.result)
+						testcase.failed = true;
+					}
+					else
+					{
+						var passed = true;
+						if (testcase.results.length == 0)
 						{
-							passed=false;
-							return false;
+							testcase.results.push({'result':true,'message':'passed'});
 						}
-					});
-					testcase.failed = !passed;
-					if (passed &amp;&amp; !testcase.message) testcase.message =&quot;Assertions Passed&quot;;
-					if (!passed &amp;&amp; !testcase.message) testcase.message = &quot;Assertion Failures&quot;;
+						jQuery.each(testcase.results,function()
+						{
+							if (!this.result)
+							{
+								passed=false;
+								return false;
+							}
+						});
+						testcase.failed = !passed;
+						if (passed &amp;&amp; !testcase.message) testcase.message =&quot;Assertions Passed&quot;;
+						if (!passed &amp;&amp; !testcase.message) testcase.message = &quot;Assertion Failures&quot;;
+					}
+					if (timeout)
+					{
+						testcase.timeout = true;
+						testcase.message = &quot;Timed out&quot;;
+						testcase.results.push({'result':false,'message':testcase.message});
+					}
+					fireEvent('afterTestCase',testcase,descriptor);
+					removeTestFrame(descriptor.htmlID);
+					executeNextTestCase();
 				}
-				if (timeout)
+				catch (E)
 				{
-					testcase.timeout = true;
-					testcase.message = &quot;Timed out&quot;;
-					testcase.results.push({'result':false,'message':testcase.message});
+					alert('Error ending test: ' + E);
 				}
-				fireEvent('afterTestCase',testcase,descriptor);
-				executeNextTestCase();
+				window.testMonkeyScope = null;
 			}
 		}
-		var t = new window.testScope;
+		
+		// we keep it at global scope so the execution environment can
+		// easily use the running scope instance
+		window.testMonkeyScope = new window.testScope;
+		
 		try
 		{
-			
-			var code=&quot;var scope = parent ? new parent.window.testScope : window.testScope;\n&quot;;
-			code+=&quot;var jq = typeof(jQuery)=='undefined' ? scope.$ : jQuery;\n&quot;;
-			code+=&quot;try {\n&quot;;
-			code+= &quot;(function($){\n&quot;;
-			code+=&quot;function log() { return scope.log.apply(this,arguments) }\n&quot;;
-			code+=&quot;function end() { return scope.end.apply(this,arguments) }\n&quot;;
-			code+=&quot;function fail() { return scope.fail.apply(this,arguments) }\n&quot;;
-			code+=&quot;function error() { return scope.error.apply(this,arguments) }\n&quot;;
-			code+=&quot;function assertTestCase() { return scope.assertTestCase.apply(this,arguments) }\n&quot;;
-			code+=&quot;scope.setup.call(scope.descriptor);\n&quot;;
-			code+='('+testcase.code+').call(scope.descriptor);\n';
-			code+='\n})(jq);\n';
-			code+=&quot;}catch(E){\n&quot;;
-			code+=&quot;scope.error(E);\n&quot;;
-			code+=&quot;}\n&quot;;
-			code+=&quot;scope.teardown.call(scope.descriptor);\n&quot;;
-			
+			jQuery(&quot;&lt;iframe style='position:absolute;left:-10px;top:-10px;height:1px;width:1px;' id='&quot; + descriptor.htmlID+&quot;'&gt;&lt;/iframe&gt;&quot;).appendTo(&quot;body&quot;);
 			var body = jQuery(&quot;#&quot;+descriptor.htmlID).contents().find(&quot;body&quot;).get(0);
-
-			if (!body)
-			{
-				// in this case, they didn't load up any iframe - we need to dynamically create one (for test cases that don't specify html)
-				jQuery(&quot;&lt;iframe style='position:absolute;left:-10px;top:-10px;height:1px;width:1px;' id='&quot; + descriptor.htmlID+&quot;'&gt;&lt;/iframe&gt;&quot;).appendTo(&quot;body&quot;);
-				body = jQuery(&quot;#&quot;+descriptor.htmlID).contents().find(&quot;body&quot;).get(0);
-			}
 			
-			frame_doc = jQuery(body.parentNode);
-			testcase.before_dom = getHtml(frame_doc);
+			if (!body) body = jQuery(&quot;#&quot;+descriptor.htmlID).contents().find(&quot;html&quot;).get(0);
 			
-			var script = body.ownerDocument.createElement('script');
-			script.type = &quot;text/javascript&quot;;
-			script.id = descriptor.htmlID+'__testmonkey_magic';
-			if ( jQuery.browser.msie )
-			{
-				script.text = code;
-			}
-			else
-			{
-				script.appendChild( body.ownerDocument.createTextNode( code ) );
-			}
+			var doc = body.ownerDocument;
+			
+			var setupCode = &quot;&quot; + 
+			&quot;(function($,scope){\n&quot;+
+			&quot; $.noConflict();\n&quot;+
+			&quot; $(function(){\n &quot;+	
+			&quot;    $.fn.assertTestCase = function(){ return scope.assertTestCase.apply(this,arguments) }\n&quot; + 
+			&quot;    function log() { return scope.log.apply(this,arguments) }\n&quot; + 
+			&quot;    function end() { return scope.end.apply(this,arguments) }\n&quot; + 
+			&quot;    function fail() { return scope.fail.apply(this,arguments) }\n&quot; + 
+			&quot;    function error() { return scope.error.apply(this,arguments) }\n&quot; + 
+			&quot;    function assertTestCase() { return scope.assertTestCase.apply(this,arguments) }\n&quot; + 
+			&quot;    scope.setup.call(scope.descriptor);\n&quot; + 
+			&quot;    try{\n&quot; + 
+			'      ('+testcase.code+').call(scope.descriptor);\n' + 
+			&quot;    }catch(E){\n&quot; + 
+			&quot;      scope.error(E);\n&quot; + 
+			&quot;    }\n&quot; + 
+			&quot;    scope.completed();\n&quot; + 
+			&quot; });\n &quot; + 
+			&quot;})(window.jQuery,parent.window.testMonkeyScope);\n&quot;;
+
+			// inject our library
+			var code = &quot;&lt;script id=\&quot;__testMonkeySDK\&quot; type=\&quot;text/javascript\&quot; src=\&quot;&quot; + AppC.sdkJS + &quot;\&quot;&gt;&lt;/script&gt;\n&quot;;
+
+			// now inject our test execution environment
+			code += &quot;&lt;script id=\&quot;__testMonkeyJS\&quot; type=\&quot;text/javascript\&quot;&gt;&quot; + setupCode + &quot;&lt;/script&gt;\n&quot;;
 
-			body.appendChild(script);
+			var jscode = descriptor.content.replace('####MARKER####',code);
+
+			$.info(jscode);
 			
-			if (typeof(testcase.timeout)=='undefined')
-			{
-				t.end(false,false);
-			}
-			else
-			{
-				timer=setTimeout(function(){t.end(true,true)},testcase.timeout);
-			}
+			// write the test + our bootstrap code
+			doc.open(&quot;text/html&quot;,&quot;replace&quot;);
+			$.info('after open')
+			doc.writeln(jscode);
+			$.info('after write')
+			doc.close();
+			$.info('after close')
 		}
 		catch(E)
 		{
@@ -476,7 +521,7 @@ window.TestMonkey = {};
 			testcase.error = E;
 			testcase.message = &quot;Exception running testcase: &quot;+E;
 			testcase.results.push({'result':false,'error':E,'message':testcase.message});
-			t.end(true,false);
+			window.testMonkeyScope.end(true,false);
 		}
 	}
 	
@@ -520,10 +565,47 @@ window.TestMonkey = {};
 	{
 		var id = '__testdriver_content_'+(testFrameId++);
 		url = URI.absolutizeURI(url,AppC.docRoot+'tests/');
-		$(&quot;&lt;iframe id='&quot;+id+&quot;' src='&quot;+url+&quot;' frameborder='0' height='1' width='1' style='position:absolute;left:-100px;top:-10px;'&gt;&lt;/iframe&gt;&quot;).appendTo(&quot;body&quot;);
-		$('#'+id).load(function()
-		{
-			fn(id);
+		
+		return jQuery.ajax({
+			type: &quot;GET&quot;,
+			url: url,
+			success: function(html)
+			{
+				// search to see what injection point we need to 
+				// put the code.  we want it to be at the earliest point
+				// possible. but it will not run until after the doc is loaded
+				var begin = html.indexOf('&lt;head');
+				if (begin &gt; 0)
+				{
+					begin = html.indexOf('&gt;',begin);
+				}
+				else
+				{
+					begin = html.indexOf('&lt;body');
+					if (begin &lt; 0)
+					{
+						begin = html.indexOf('&lt;html');
+						if (begin&lt;0)
+						{
+							html = '&lt;html&gt;' + html + '&lt;/html&gt;';
+							begin = 0;
+						}
+						begin = html.indexOf('&gt;',begin);
+						html = html.substring(0,begin) + '&lt;head&gt;&lt;/head&gt;' + html.substring(begin+1);
+						begin = begin + 6;
+					}
+					else
+					{
+						html = html.substring(0,begin-1) + '&lt;head&gt;&lt;/head&gt;' + html.substring(begin);
+						begin = (begin-1) + 6;
+					}
+				}
+				var start = '';
+				if (begin&gt;0) start = html.substring(0,begin);
+				var end = html.substring(begin);
+				// we later use marker to indicate where we need to replace content
+				fn(start + '####MARKER####' + end);
+			}
 		});
 	}
 	
@@ -531,14 +613,15 @@ window.TestMonkey = {};
 	{
 		// for this frame, we need to drop back to DOM instead of just .remove it seems
 		var el = $(&quot;#&quot;+id);
-		// if (el.length &gt; 0)
-		// {
-		// 	var node = el.get(0);
-		// 	setTimeout(function()
-		// 	{
-		// 		node.parentNode.removeChild(node);
-		// 	},10);
-		// }
+		if (el.length &gt; 0)
+		{
+			var node = el.get(0);
+			// FF seems to not be happy if we remove to early (shows a spinning icon)
+			setTimeout(function()
+			{
+				node.parentNode.removeChild(node);
+			},10);
+		}
 	}
 	
 	function escapeString(str)
@@ -554,7 +637,7 @@ window.TestMonkey = {};
 		{
 			_asserts.push(m[0]); 
 			var prefix = m[1] ? '&quot;' + escapeString(m[1]) + '&quot;' : 'null';
-			var params = m[2];
+			var params = m[2] || 'null';
 			return 'assertTestCase(' + (_asserts.length-1) + ','+prefix+','+params+')';
 		});
 		var asserts = [];</diff>
      <filename>public/javascripts/testmonkey.js</filename>
    </modified>
    <modified>
      <diff>@@ -26,14 +26,12 @@ testSuite(&quot;Set of tests for Test Monkey&quot;,
 			assert(1 + foo);
 			end();
 		});
-
 		test(&quot;inline failures&quot;,function()
 		{
 			assert(false);
 		});
 		test(&quot;empty test&quot;,function()
 		{
-			
 		});
 	}
 })</diff>
      <filename>public/tests/example/example.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,4 @@
 &lt;html&gt;
-&lt;head&gt;
-	&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot; src=&quot;../../javascripts/appcelerator-debug.js&quot;&gt;&lt;/script&gt;
-&lt;/head&gt;
 &lt;body id=&quot;foo&quot;&gt;
 	&lt;button id=&quot;test1&quot; on=&quot;click then l:foo.click&quot;&gt;Click me&lt;/button&gt;
 	&lt;div on=&quot;l:foo.click then l:bar[foo=bar]&quot;&gt;&lt;/div&gt;</diff>
      <filename>public/tests/example/example2.html</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>649296121f7a4968a7840d4ca91ae517be5b081a</id>
    </parent>
  </parents>
  <author>
    <name>Jeff Haynie</name>
    <email>jhaynie@gmail.com</email>
  </author>
  <url>http://github.com/jhaynie/testmonkey/commit/c15caa5f8971d3adc6f2a5e9b5d43fbc87471487</url>
  <id>c15caa5f8971d3adc6f2a5e9b5d43fbc87471487</id>
  <committed-date>2008-11-14T16:26:42-08:00</committed-date>
  <authored-date>2008-11-14T16:26:42-08:00</authored-date>
  <message>more sandboxing improvements, slight documentation</message>
  <tree>1c177ca2c12943264941d419ab5b2714f115ffb4</tree>
  <committer>
    <name>Jeff Haynie</name>
    <email>jhaynie@gmail.com</email>
  </committer>
</commit>
