seamless 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. data/bin/seamless +36 -0
  2. data/lib/seamless.rb +70 -0
  3. data/lib/seamless/active_record_extension.rb +11 -0
  4. data/lib/seamless/dispatcher.rb +45 -0
  5. data/lib/seamless/message_broker.rb +12 -0
  6. data/lib/seamless/message_broker_controller.rb +11 -0
  7. data/lib/seamless/messagebroker/inmemory_message_broker.rb +45 -0
  8. data/lib/seamless/migration.rb +8 -0
  9. data/lib/seamless/model.rb +94 -0
  10. data/lib/seamless/service.rb +186 -0
  11. data/seamless/seamless_generator.rb +181 -0
  12. data/seamless/templates/README +24 -0
  13. data/seamless/templates/admin.html +166 -0
  14. data/seamless/templates/application.rb +7 -0
  15. data/seamless/templates/css/global.css +333 -0
  16. data/seamless/templates/css/seamless-admin.css +281 -0
  17. data/seamless/templates/css/seamless.css +632 -0
  18. data/seamless/templates/environment.rb +65 -0
  19. data/seamless/templates/generate +25 -0
  20. data/seamless/templates/images/arch.png +0 -0
  21. data/seamless/templates/images/arrow_undo.png +0 -0
  22. data/seamless/templates/images/cell_phone.png +0 -0
  23. data/seamless/templates/images/confirm.png +0 -0
  24. data/seamless/templates/images/deny.png +0 -0
  25. data/seamless/templates/images/dialog_close.gif +0 -0
  26. data/seamless/templates/images/dialog_close_hover.gif +0 -0
  27. data/seamless/templates/images/email.png +0 -0
  28. data/seamless/templates/images/exclamation.png +0 -0
  29. data/seamless/templates/images/indicator.gif +0 -0
  30. data/seamless/templates/images/indicator2.gif +0 -0
  31. data/seamless/templates/images/seamless.gif +0 -0
  32. data/seamless/templates/images/shadow.gif +0 -0
  33. data/seamless/templates/images/shadowAlpha.png +0 -0
  34. data/seamless/templates/images/small_star.png +0 -0
  35. data/seamless/templates/images/table_add.png +0 -0
  36. data/seamless/templates/images/table_delete.png +0 -0
  37. data/seamless/templates/images/table_edit.png +0 -0
  38. data/seamless/templates/images/table_go.png +0 -0
  39. data/seamless/templates/images/table_refresh.png +0 -0
  40. data/seamless/templates/images/tag.png +0 -0
  41. data/seamless/templates/images/warning.png +0 -0
  42. data/seamless/templates/images/wizard.gif +0 -0
  43. data/seamless/templates/images/work_phone.png +0 -0
  44. data/seamless/templates/index.html +171 -0
  45. data/seamless/templates/js/seamless-admin.js +255 -0
  46. data/seamless/templates/js/seamless.js +2755 -0
  47. data/seamless/templates/message_broker.rb +6 -0
  48. data/seamless/templates/message_broker_helper.rb +2 -0
  49. data/seamless/templates/robots.txt +2 -0
  50. data/seamless/templates/routes.rb +18 -0
  51. data/seamless/templates/seamless.xml +5 -0
  52. data/seamless/templates/server +4 -0
  53. data/seamless/templates/test_service.rb +13 -0
  54. data/service/USAGE +21 -0
  55. data/service/service_generator.rb +59 -0
  56. data/service/templates/service.rb +14 -0
  57. metadata +122 -0
@@ -0,0 +1,2755 @@
1
+ /**
2
+ * Hakano Version: 1.0.RC4.127, Built: 20070519 0041
3
+ *
4
+ * Seam(less) Web Application Framework
5
+ * Copyright (c) 2006-2007 Hakano, Inc. All Rights Reserved.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ *
10
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ *
18
+ * --------------------------------------------------------------------------------
19
+ *
20
+ * NOTICE: Some code included in this file is owned by a one or more
21
+ * third-parties. Please see the appropriate notice above each section
22
+ * for more information about authorship, restrictions, licensing and
23
+ * relevant copyright information.
24
+ */
25
+
26
+
27
+
28
+
29
+ var Prototype={Version:'1.5.0_rc1',ScriptFragment:'(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction:function(){},K:function(x){return x}}
30
+ var Class={create:function(){return function(){this.initialize.apply(this,arguments);}}}
31
+ var Abstract=new Object();Object.extend=function(destination,source){for(var property in source){destination[property]=source[property];}
32
+ return destination;}
33
+ Object.extend(Object,{inspect:function(object){try{if(object==undefined)return'undefined';if(object==null)return'null';return object.inspect?object.inspect():object.toString();}catch(e){if(e instanceof RangeError)return'...';throw e;}},keys:function(object){var keys=[];for(var property in object)
34
+ keys.push(property);return keys;},values:function(object){var values=[];for(var property in object)
35
+ values.push(object[property]);return values;},clone:function(object){return Object.extend({},object);}});Function.prototype.bind=function(){var __method=this,args=$A(arguments),object=args.shift();return function(){return __method.apply(object,args.concat($A(arguments)));}}
36
+ Function.prototype.bindAsEventListener=function(object){var __method=this,args=$A(arguments),object=args.shift();return function(event){return __method.apply(object,[(event||window.event)].concat(args).concat($A(arguments)));}}
37
+ Object.extend(Number.prototype,{toColorPart:function(){var digits=this.toString(16);if(this<16)return'0'+digits;return digits;},succ:function(){return this+1;},times:function(iterator){$R(0,this,true).each(iterator);return this;}});var Try={these:function(){var returnValue;for(var i=0;i<arguments.length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}
38
+ return returnValue;}}
39
+ var PeriodicalExecuter=Class.create();PeriodicalExecuter.prototype={initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback();},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},stop:function(){if(!this.timer)return;clearInterval(this.timer);this.timer=null;},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.callback(this);}finally{this.currentlyExecuting=false;}}}}
40
+ Object.extend(String.prototype,{gsub:function(pattern,replacement){var result='',source=this,match;replacement=arguments.callee.prepareReplacement(replacement);while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=(replacement(match)||'').toString();source=source.slice(match.index+match[0].length);}else{result+=source,source='';}}
41
+ return result;},sub:function(pattern,replacement,count){replacement=this.gsub.prepareReplacement(replacement);count=count===undefined?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match);});},scan:function(pattern,iterator){this.gsub(pattern,iterator);return this;},truncate:function(length,truncation){length=length||30;truncation=truncation===undefined?'...':truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:this;},strip:function(){return this.replace(/^\s+/,'').replace(/\s+$/,'');},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)});},escapeHTML:function(){var div=document.createElement('div');var text=document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML:function(){var div=document.createElement('div');div.innerHTML=this.stripTags();return div.childNodes[0]?div.childNodes[0].nodeValue:'';},toQueryParams:function(){var pairs=this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({},function(params,pairString){var pair=pairString.split('=');var value=pair[1]?decodeURIComponent(pair[1]):undefined;params[decodeURIComponent(pair[0])]=value;return params;});},toArray:function(){return this.split('');},camelize:function(){var oStringList=this.split('-');if(oStringList.length==1)return oStringList[0];var camelizedString=this.indexOf('-')==0?oStringList[0].charAt(0).toUpperCase()+oStringList[0].substring(1):oStringList[0];for(var i=1,len=oStringList.length;i<len;i++){var s=oStringList[i];camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);}
42
+ return camelizedString;},inspect:function(useDoubleQuotes){var escapedString=this.replace(/\\/g,'\\\\');if(useDoubleQuotes)
43
+ return'"'+escapedString.replace(/"/g,'\\"')+'"';else
44
+ return"'"+escapedString.replace(/'/g,'\\\'')+"'";}});String.prototype.gsub.prepareReplacement=function(replacement){if(typeof replacement=='function')return replacement;var template=new Template(replacement);return function(match){return template.evaluate(match)};}
45
+ String.prototype.parseQuery=String.prototype.toQueryParams;var Template=Class.create();Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;Template.prototype={initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern;},evaluate:function(object){return this.template.gsub(this.pattern,function(match){var before=match[1];if(before=='\\')return match[2];return before+(object[match[3]]||'').toString();});}}
46
+ var $break=new Object();var $continue=new Object();var Enumerable={each:function(iterator){var index=0;try{this._each(function(value){try{iterator(value,index++);}catch(e){if(e!=$continue)throw e;}});}catch(e){if(e!=$break)throw e;}
47
+ return this;},all:function(iterator){var result=true;this.each(function(value,index){result=result&&!!(iterator||Prototype.K)(value,index);if(!result)throw $break;});return result;},any:function(iterator){var result=false;this.each(function(value,index){if(result=!!(iterator||Prototype.K)(value,index))
48
+ throw $break;});return result;},collect:function(iterator){var results=[];this.each(function(value,index){results.push(iterator(value,index));});return results;},detect:function(iterator){var result;this.each(function(value,index){if(iterator(value,index)){result=value;throw $break;}});return result;},findAll:function(iterator){var results=[];this.each(function(value,index){if(iterator(value,index))
49
+ results.push(value);});return results;},grep:function(pattern,iterator){var results=[];this.each(function(value,index){var stringValue=value.toString();if(stringValue.match(pattern))
50
+ results.push((iterator||Prototype.K)(value,index));})
51
+ return results;},include:function(object){var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;},inject:function(memo,iterator){this.each(function(value,index){memo=iterator(memo,value,index);});return memo;},invoke:function(method){var args=$A(arguments).slice(1);return this.collect(function(value){return value[method].apply(value,args);});},max:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(result==undefined||value>=result)
52
+ result=value;});return result;},min:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(result==undefined||value<result)
53
+ result=value;});return result;},partition:function(iterator){var trues=[],falses=[];this.each(function(value,index){((iterator||Prototype.K)(value,index)?trues:falses).push(value);});return[trues,falses];},pluck:function(property){var results=[];this.each(function(value,index){results.push(value[property]);});return results;},reject:function(iterator){var results=[];this.each(function(value,index){if(!iterator(value,index))
54
+ results.push(value);});return results;},sortBy:function(iterator){return this.collect(function(value,index){return{value:value,criteria:iterator(value,index)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}).pluck('value');},toArray:function(){return this.collect(Prototype.K);},zip:function(){var iterator=Prototype.K,args=$A(arguments);if(typeof args.last()=='function')
55
+ iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index));});},inspect:function(){return'#<Enumerable:'+this.toArray().inspect()+'>';}}
56
+ Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray});var $A=Array.from=function(iterable){if(!iterable)return[];if(iterable.toArray){return iterable.toArray();}else{var results=[];for(var i=0;i<iterable.length;i++)
57
+ results.push(iterable[i]);return results;}}
58
+ Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse)
59
+ Array.prototype._reverse=Array.prototype.reverse;Object.extend(Array.prototype,{_each:function(iterator){for(var i=0;i<this.length;i++)
60
+ iterator(this[i]);},clear:function(){this.length=0;return this;},first:function(){return this[0];},last:function(){return this[this.length-1];},compact:function(){return this.select(function(value){return value!=undefined||value!=null;});},flatten:function(){return this.inject([],function(array,value){return array.concat(value&&value.constructor==Array?value.flatten():[value]);});},without:function(){var values=$A(arguments);return this.select(function(value){return!values.include(value);});},indexOf:function(object){for(var i=0;i<this.length;i++)
61
+ if(this[i]==object)return i;return-1;},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse();},reduce:function(){return this.length>1?this:this[0];},uniq:function(){return this.inject([],function(array,value){return array.include(value)?array:array.concat([value]);});},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']';}});var Hash={_each:function(iterator){for(var key in this){var value=this[key];if(typeof value=='function')continue;var pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}},keys:function(){return this.pluck('key');},values:function(){return this.pluck('value');},merge:function(hash){return $H(hash).inject($H(this),function(mergedHash,pair){mergedHash[pair.key]=pair.value;return mergedHash;});},toQueryString:function(){return this.map(function(pair){return pair.map(encodeURIComponent).join('=');}).join('&');},inspect:function(){return'#<Hash:{'+this.map(function(pair){return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';}}
62
+ function $H(object){var hash=Object.extend({},object||{});Object.extend(hash,Enumerable);Object.extend(hash,Hash);return hash;}
63
+ ObjectRange=Class.create();Object.extend(ObjectRange.prototype,Enumerable);Object.extend(ObjectRange.prototype,{initialize:function(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive;},_each:function(iterator){var value=this.start;while(this.include(value)){iterator(value);value=value.succ();}},include:function(value){if(value<this.start)
64
+ return false;if(this.exclusive)
65
+ return value<this.end;return value<=this.end;}});var $R=function(start,end,exclusive){return new ObjectRange(start,end,exclusive);}
66
+ var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false;},activeRequestCount:0}
67
+ Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator);},register:function(responderToAdd){if(!this.include(responderToAdd))
68
+ this.responders.push(responderToAdd);},unregister:function(responderToRemove){this.responders=this.responders.without(responderToRemove);},dispatch:function(callback,request,transport,json){this.each(function(responder){if(responder[callback]&&typeof responder[callback]=='function'){try{responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++;},onComplete:function(){Ajax.activeRequestCount--;}});Ajax.Base=function(){};Ajax.Base.prototype={setOptions:function(options){this.options={method:'post',asynchronous:true,contentType:'application/x-www-form-urlencoded',parameters:''}
69
+ Object.extend(this.options,options||{});},responseIsSuccess:function(){return this.transport.status==undefined||this.transport.status==0||(this.transport.status>=200&&this.transport.status<300);},responseIsFailure:function(){return!this.responseIsSuccess();}}
70
+ Ajax.Request=Class.create();Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];Ajax.Request.prototype=Object.extend(new Ajax.Base(),{initialize:function(url,options){this.transport=Ajax.getTransport();this.setOptions(options);this.request(url);},request:function(url){var parameters=this.options.parameters||'';if(parameters.length>0)parameters+='&_=';if(this.options.method!='get'&&this.options.method!='post'){parameters+=(parameters.length>0?'&':'')+'_method='+this.options.method;this.options.method='post';}
71
+ try{this.url=url;if(this.options.method=='get'&&parameters.length>0)
72
+ this.url+=(this.url.match(/\?/)?'&':'?')+parameters;Ajax.Responders.dispatch('onCreate',this,this.transport);this.transport.open(this.options.method,this.url,this.options.asynchronous);if(this.options.asynchronous)
73
+ setTimeout(function(){this.respondToReadyState(1)}.bind(this),10);this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();var body=this.options.postBody?this.options.postBody:parameters;this.transport.send(this.options.method=='post'?body:null);if(!this.options.asynchronous&&this.transport.overrideMimeType)
74
+ this.onStateChange();}catch(e){this.dispatchException(e);}},setRequestHeaders:function(){var requestHeaders=['X-Requested-With','XMLHttpRequest','X-Prototype-Version',Prototype.Version,'Accept','text/javascript, text/html, application/xml, text/xml, */*'];if(this.options.method=='post'){requestHeaders.push('Content-type',this.options.contentType);if(this.transport.overrideMimeType)
75
+ requestHeaders.push('Connection','close');}
76
+ if(this.options.requestHeaders)
77
+ requestHeaders.push.apply(requestHeaders,this.options.requestHeaders);for(var i=0;i<requestHeaders.length;i+=2)
78
+ this.transport.setRequestHeader(requestHeaders[i],requestHeaders[i+1]);},onStateChange:function(){var readyState=this.transport.readyState;if(readyState!=1)
79
+ this.respondToReadyState(this.transport.readyState);},header:function(name){try{return this.transport.getResponseHeader(name);}catch(e){}},evalJSON:function(){try{return eval('('+this.header('X-JSON')+')');}catch(e){}},evalResponse:function(){try{return eval(this.transport.responseText);}catch(e){this.dispatchException(e);}},respondToReadyState:function(readyState){var event=Ajax.Request.Events[readyState];var transport=this.transport,json=this.evalJSON();if(event=='Complete'){try{(this.options['on'+this.transport.status]||this.options['on'+(this.responseIsSuccess()?'Success':'Failure')]||Prototype.emptyFunction)(transport,json);}catch(e){this.dispatchException(e);}
80
+ if((this.header('Content-type')||'').match(/^text\/javascript/i))
81
+ this.evalResponse();}
82
+ try{(this.options['on'+event]||Prototype.emptyFunction)(transport,json);Ajax.Responders.dispatch('on'+event,this,transport,json);}catch(e){this.dispatchException(e);}
83
+ if(event=='Complete')
84
+ this.transport.onreadystatechange=Prototype.emptyFunction;},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch('onException',this,exception);}});Ajax.Updater=Class.create();Object.extend(Object.extend(Ajax.Updater.prototype,Ajax.Request.prototype),{initialize:function(container,url,options){this.containers={success:container.success?$(container.success):$(container),failure:container.failure?$(container.failure):(container.success?null:$(container))}
85
+ this.transport=Ajax.getTransport();this.setOptions(options);var onComplete=this.options.onComplete||Prototype.emptyFunction;this.options.onComplete=(function(transport,object){this.updateContent();onComplete(transport,object);}).bind(this);this.request(url);},updateContent:function(){var receiver=this.responseIsSuccess()?this.containers.success:this.containers.failure;var response=this.transport.responseText;if(!this.options.evalScripts)
86
+ response=response.stripScripts();if(receiver){if(this.options.insertion){new this.options.insertion(receiver,response);}else{Element.update(receiver,response);}}
87
+ if(this.responseIsSuccess()){if(this.onComplete)
88
+ setTimeout(this.onComplete.bind(this),10);}}});Ajax.PeriodicalUpdater=Class.create();Ajax.PeriodicalUpdater.prototype=Object.extend(new Ajax.Base(),{initialize:function(container,url,options){this.setOptions(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start();},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent();},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments);},updateComplete:function(request){if(this.options.decay){this.decay=(request.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=request.responseText;}
89
+ this.timer=setTimeout(this.onTimerEvent.bind(this),this.decay*this.frequency*1000);},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options);}});function $()
90
+ {var args=arguments;if(args.length==1)
91
+ {var element=args[0];if(element==window)
92
+ {return window;}
93
+ else if(element==document.body)
94
+ {return document.body;}
95
+ if(typeof element=='string')
96
+ {return Element.extend(document.getElementById(element));}
97
+ return element;}
98
+ var results=[],element;for(var i=0,len=args.length;i<len;i++){element=arguments[i];if(typeof element=='string')
99
+ element=document.getElementById(element);results.push(Element.extend(element));}
100
+ return results.reduce();}
101
+ document.getElementsByClassName=function(className,parentElement){var children=($(parentElement)||document.body).getElementsByTagName('*');return $A(children).inject([],function(elements,child){if(child.className.match(new RegExp("(^|\\s)"+className+"(\\s|$)")))
102
+ elements.push(Element.extend(child));return elements;});}
103
+ if(!window.Element)
104
+ var Element=new Object();Element.extend=function(element){if(!element)return;if(_nativeExtensions||element.nodeType==3)return element;if(!element._extended&&element.tagName&&element!=window){var methods=Object.clone(Element.Methods),cache=Element.extend.cache;if(element.tagName=='FORM')
105
+ Object.extend(methods,Form.Methods);if(['INPUT','TEXTAREA','SELECT'].include(element.tagName))
106
+ Object.extend(methods,Form.Element.Methods);for(var property in methods){var value=methods[property];if(typeof value=='function')
107
+ element[property]=cache.findOrStore(value);}}
108
+ element._extended=true;return element;}
109
+ Element.extend.cache={findOrStore:function(value){return this[value]=this[value]||function(){return value.apply(null,[this].concat($A(arguments)));}}}
110
+ Element.Methods={visible:function(element){return $(element).style.display!='none';},toggle:function(element){element=$(element);Element[Element.visible(element)?'hide':'show'](element);return element;},hide:function(element){$(element).style.display='none';return element;},show:function(element){$(element).style.display='';return element;},remove:function(element){element=$(element);element.parentNode.removeChild(element);return element;},update:function(element,html){$(element).innerHTML=html.stripScripts();setTimeout(function(){html.evalScripts()},10);return element;},replace:function(element,html){element=$(element);if(element.outerHTML){element.outerHTML=html.stripScripts();}else{var range=element.ownerDocument.createRange();range.selectNodeContents(element);element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()),element);}
111
+ setTimeout(function(){html.evalScripts()},10);return element;},inspect:function(element){element=$(element);var result='<'+element.tagName.toLowerCase();$H({'id':'id','className':'class'}).each(function(pair){var property=pair.first(),attribute=pair.last();var value=(element[property]||'').toString();if(value)result+=' '+attribute+'='+value.inspect(true);});return result+'>';},recursivelyCollect:function(element,property){element=$(element);var elements=[];while(element=element[property])
112
+ if(element.nodeType==1)
113
+ elements.push(Element.extend(element));return elements;},ancestors:function(element){return $(element).recursivelyCollect('parentNode');},descendants:function(element){element=$(element);return $A(element.getElementsByTagName('*'));},previousSiblings:function(element){return $(element).recursivelyCollect('previousSibling');},nextSiblings:function(element){return $(element).recursivelyCollect('nextSibling');},siblings:function(element){element=$(element);return element.previousSiblings().reverse().concat(element.nextSiblings());},match:function(element,selector){element=$(element);if(typeof selector=='string')
114
+ selector=new Selector(selector);return selector.match(element);},up:function(element,expression,index){return Selector.findElement($(element).ancestors(),expression,index);},down:function(element,expression,index){return Selector.findElement($(element).descendants(),expression,index);},previous:function(element,expression,index){return Selector.findElement($(element).previousSiblings(),expression,index);},next:function(element,expression,index){return Selector.findElement($(element).nextSiblings(),expression,index);},getElementsBySelector:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element,args);},getElementsByClassName:function(element,className){element=$(element);return document.getElementsByClassName(className,element);},getHeight:function(element){element=$(element);return element.offsetHeight;},classNames:function(element){return new Element.ClassNames(element);},hasClassName:function(element,className){if(!(element=$(element)))return;return Element.classNames(element).include(className);},addClassName:function(element,className){if(!(element=$(element)))return;Element.classNames(element).add(className);return element;},removeClassName:function(element,className){if(!(element=$(element)))return;Element.classNames(element).remove(className);return element;},observe:function(){Event.observe.apply(Event,arguments);return $A(arguments).first();},stopObserving:function(){Event.stopObserving.apply(Event,arguments);return $A(arguments).first();},cleanWhitespace:function(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType==3&&!/\S/.test(node.nodeValue))
115
+ element.removeChild(node);node=nextNode;}
116
+ return element;},empty:function(element){return $(element).innerHTML.match(/^\s*$/);},childOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)
117
+ if(element==ancestor)return true;return false;},scrollTo:function(element){element=$(element);var x=element.x?element.x:element.offsetLeft,y=element.y?element.y:element.offsetTop;window.scrollTo(x,y);return element;},getStyle:function(element,style){element=$(element);var value=element.style[style.camelize()];if(!value){if(document.defaultView&&document.defaultView.getComputedStyle){var css=document.defaultView.getComputedStyle(element,null);value=css?css.getPropertyValue(style):null;}else if(element.currentStyle){value=element.currentStyle[style.camelize()];}}
118
+ if(window.opera&&['left','top','right','bottom'].include(style))
119
+ if(Element.getStyle(element,'position')=='static')value='auto';return value=='auto'?null:value;},setStyle:function(element,style){element=$(element);for(var name in style)
120
+ element.style[name.camelize()]=style[name];return element;},getDimensions:function(element){element=$(element);if(Element.getStyle(element,'display')!='none')
121
+ return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;els.visibility='hidden';els.position='absolute';els.display='';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display='none';els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,'position');if(pos=='static'||!pos){element._madePositioned=true;element.style.position='relative';if(window.opera){element.style.top=0;element.style.left=0;}}
122
+ return element;},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right='';}
123
+ return element;},makeClipping:function(element){element=$(element);if(element._overflow)return;element._overflow=element.style.overflow||'auto';if((Element.getStyle(element,'overflow')||'visible')!='hidden')
124
+ element.style.overflow='hidden';return element;},undoClipping:function(element){element=$(element);if(!element._overflow)return;element.style.overflow=element._overflow=='auto'?'':element._overflow;delete element._overflow;return element;}}
125
+ if(document.all){Element.Methods.update=function(element,html){element=$(element);html=typeof html=='undefined'?'':html.toString();var tagName=element.tagName.toUpperCase();if(['THEAD','TBODY','TR','TD'].indexOf(tagName)>-1){var div=document.createElement('div');switch(tagName){case'THEAD':case'TBODY':div.innerHTML='<table><tbody>'+html.stripScripts()+'</tbody></table>';depth=2;break;case'TR':div.innerHTML='<table><tbody><tr>'+html.stripScripts()+'</tr></tbody></table>';depth=3;break;case'TD':div.innerHTML='<table><tbody><tr><td>'+html.stripScripts()+'</td></tr></tbody></table>';depth=4;}
126
+ $A(element.childNodes).each(function(node){element.removeChild(node)});depth.times(function(){div=div.firstChild});$A(div.childNodes).each(function(node){element.appendChild(node)});}else{element.innerHTML=html.stripScripts();}
127
+ setTimeout(function(){html.evalScripts()},10);return element;}}
128
+ Object.extend(Element,Element.Methods);var _nativeExtensions=false;if(!window.HTMLElement&&/Konqueror|Safari|KHTML/.test(navigator.userAgent)){['','Form','Input','TextArea','Select'].each(function(tag){var klass=window['HTML'+tag+'Element']={};klass.prototype=document.createElement(tag?tag.toLowerCase():'div').__proto__;});}
129
+ Element.addMethods=function(methods){Object.extend(Element.Methods,methods||{});function copy(methods,destination){var cache=Element.extend.cache;for(var property in methods){var value=methods[property];destination[property]=cache.findOrStore(value);}}
130
+ if(typeof HTMLElement!='undefined'){copy(Element.Methods,HTMLElement.prototype);copy(Form.Methods,HTMLFormElement.prototype);[HTMLInputElement,HTMLTextAreaElement,HTMLSelectElement].each(function(klass){copy(Form.Element.Methods,klass.prototype);});_nativeExtensions=true;}}
131
+ var Toggle=new Object();Toggle.display=Element.toggle;Abstract.Insertion=function(adjacency){this.adjacency=adjacency;}
132
+ Abstract.Insertion.prototype={initialize:function(element,content){this.element=$(element);this.content=content.stripScripts();if(this.adjacency&&this.element.insertAdjacentHTML){try{this.element.insertAdjacentHTML(this.adjacency,this.content);}catch(e){var tagName=this.element.tagName.toLowerCase();if(tagName=='tbody'||tagName=='tr'){this.insertContent(this.contentFromAnonymousTable());}else{throw e;}}}else{this.range=this.element.ownerDocument.createRange();if(this.initializeRange)this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);}
133
+ setTimeout(function(){content.evalScripts()},10);},contentFromAnonymousTable:function(){var div=document.createElement('div');div.innerHTML='<table><tbody>'+this.content+'</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}}
134
+ var Insertion=new Object();Insertion.Before=Class.create();Insertion.Before.prototype=Object.extend(new Abstract.Insertion('beforeBegin'),{initializeRange:function(){this.range.setStartBefore(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element);}).bind(this));}});Insertion.Top=Class.create();Insertion.Top.prototype=Object.extend(new Abstract.Insertion('afterBegin'),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent:function(fragments){fragments.reverse(false).each((function(fragment){this.element.insertBefore(fragment,this.element.firstChild);}).bind(this));}});Insertion.Bottom=Class.create();Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion('beforeEnd'),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.appendChild(fragment);}).bind(this));}});Insertion.After=Class.create();Insertion.After.prototype=Object.extend(new Abstract.Insertion('afterEnd'),{initializeRange:function(){this.range.setStartAfter(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element);},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0;})._each(iterator);},set:function(className){this.element.className=className;},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set(this.select(function(className){return className!=classNameToRemove;}).join(' '));},toString:function(){return this.toArray().join(' ');}}
135
+ Object.extend(Element.ClassNames.prototype,Enumerable);var Selector=Class.create();Selector.prototype={initialize:function(expression){this.params={classNames:[]};this.expression=expression.toString().strip();this.parseExpression();this.compileMatcher();},parseExpression:function(){function abort(message){throw'Parse error in selector: '+message;}
136
+ if(this.expression=='')abort('empty expression');var params=this.params,expr=this.expression,match,modifier,clause,rest;while(match=expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)){params.attributes=params.attributes||[];params.attributes.push({name:match[2],operator:match[3],value:match[4]||match[5]||''});expr=match[1];}
137
+ if(expr=='*')return this.params.wildcard=true;while(match=expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)){modifier=match[1],clause=match[2],rest=match[3];switch(modifier){case'#':params.id=clause;break;case'.':params.classNames.push(clause);break;case'':case undefined:params.tagName=clause.toUpperCase();break;default:abort(expr.inspect());}
138
+ expr=rest;}
139
+ if(expr.length>0)abort(expr.inspect());},buildMatchExpression:function(){var params=this.params,conditions=[],clause;if(params.wildcard)
140
+ conditions.push('true');if(clause=params.id)
141
+ conditions.push('element.id == '+clause.inspect());if(clause=params.tagName)
142
+ conditions.push('element.tagName.toUpperCase() == '+clause.inspect());if((clause=params.classNames).length>0)
143
+ for(var i=0;i<clause.length;i++)
144
+ conditions.push('Element.hasClassName(element, '+clause[i].inspect()+')');if(clause=params.attributes){clause.each(function(attribute){var value='element.getAttribute('+attribute.name.inspect()+')';var splitValueBy=function(delimiter){return value+' && '+value+'.split('+delimiter.inspect()+')';}
145
+ switch(attribute.operator){case'=':conditions.push(value+' == '+attribute.value.inspect());break;case'~=':conditions.push(splitValueBy(' ')+'.include('+attribute.value.inspect()+')');break;case'|=':conditions.push(splitValueBy('-')+'.first().toUpperCase() == '+attribute.value.toUpperCase().inspect());break;case'!=':conditions.push(value+' != '+attribute.value.inspect());break;case'':case undefined:conditions.push(value+' != null');break;default:throw'Unknown operator '+attribute.operator+' in selector';}});}
146
+ return conditions.join(' && ');},compileMatcher:function(){this.match=new Function('element','if (!element.tagName) return false; \
147
+ return '+this.buildMatchExpression());},findElements:function(scope){var element;if(element=$(this.params.id))
148
+ if(this.match(element))
149
+ if(!scope||Element.childOf(element,scope))
150
+ return[element];scope=(scope||document).getElementsByTagName(this.params.tagName||'*');var results=[];for(var i=0;i<scope.length;i++)
151
+ if(this.match(element=scope[i]))
152
+ results.push(Element.extend(element));return results;},toString:function(){return this.expression;}}
153
+ Object.extend(Selector,{matchElements:function(elements,expression){var selector=new Selector(expression);return elements.select(selector.match.bind(selector)).collect(Element.extend);},findElement:function(elements,expression,index){if(typeof expression=='number')index=expression,expression=false;return Selector.matchElements(elements,expression||'*')[index||0];},findChildElements:function(element,expressions){return expressions.map(function(expression){return expression.strip().split(/\s+/).inject([null],function(results,expr){var selector=new Selector(expr);return results.inject([],function(elements,result){return elements.concat(selector.findElements(result||element));});});}).flatten();}});function $$(){return Selector.findChildElements(document,$A(arguments));}
154
+ var Form={reset:function(form){$(form).reset();return form;}};Form.Methods={serialize:function(form){var elements=Form.getElements($(form));var queryComponents=new Array();for(var i=0;i<elements.length;i++){var queryComponent=Form.Element.serialize(elements[i]);if(queryComponent)
155
+ queryComponents.push(queryComponent);}
156
+ return queryComponents.join('&');},getElements:function(form){form=$(form);var elements=new Array();for(var tagName in Form.Element.Serializers){var tagElements=form.getElementsByTagName(tagName);for(var j=0;j<tagElements.length;j++)
157
+ elements.push(tagElements[j]);}
158
+ return elements;},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName('input');if(!typeName&&!name)
159
+ return inputs;var matchingInputs=new Array();for(var i=0;i<inputs.length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name))
160
+ continue;matchingInputs.push(input);}
161
+ return matchingInputs;},disable:function(form){form=$(form);var elements=Form.getElements(form);for(var i=0;i<elements.length;i++){var element=elements[i];element.blur();element.disabled='true';}
162
+ return form;},enable:function(form){form=$(form);var elements=Form.getElements(form);for(var i=0;i<elements.length;i++){var element=elements[i];element.disabled='';}
163
+ return form;},findFirstElement:function(form){return Form.getElements(form).find(function(element){return element.type!='hidden'&&!element.disabled&&['input','select','textarea'].include(element.tagName.toLowerCase());});},focusFirstElement:function(form){form=$(form);Field.activate(Form.findFirstElement(form));return form;}}
164
+ Object.extend(Form,Form.Methods);Form.Element={focus:function(element){$(element).focus();return element;},select:function(element){$(element).select();return element;}}
165
+ Form.Element.Methods={serialize:function(element){element=$(element);var method=element.tagName.toLowerCase();var parameter=Form.Element.Serializers[method](element);if(parameter){var key=encodeURIComponent(parameter[0]);if(key.length==0)return;if(parameter[1].constructor!=Array)
166
+ parameter[1]=[parameter[1]];return parameter[1].map(function(value){return key+'='+encodeURIComponent(value);}).join('&');}},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();var parameter=Form.Element.Serializers[method](element);if(parameter)
167
+ return parameter[1];},clear:function(element){$(element).value='';return element;},present:function(element){return $(element).value!='';},activate:function(element){element=$(element);element.focus();if(element.select)
168
+ element.select();return element;},disable:function(element){element=$(element);element.disabled='';return element;},enable:function(element){element=$(element);element.blur();element.disabled='true';return element;}}
169
+ Object.extend(Form.Element,Form.Element.Methods);var Field=Form.Element;Form.Element.Serializers={input:function(element){switch(element.type.toLowerCase()){case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(element);default:return Form.Element.Serializers.textarea(element);}
170
+ return false;},inputSelector:function(element){if(element.checked)
171
+ return[element.name,element.value];},textarea:function(element){return[element.name,element.value];},select:function(element){return Form.Element.Serializers[element.type=='select-one'?'selectOne':'selectMany'](element);},selectOne:function(element){var value='',opt,index=element.selectedIndex;if(index>=0){opt=element.options[index];value=opt.value||opt.text;}
172
+ return[element.name,value];},selectMany:function(element){var value=[];for(var i=0;i<element.length;i++){var opt=element.options[i];if(opt.selected)
173
+ value.push(opt.value||opt.text);}
174
+ return[element.name,value];}}
175
+ var $F=Form.Element.getValue;Abstract.TimedObserver=function(){}
176
+ Abstract.TimedObserver.prototype={initialize:function(element,frequency,callback){this.frequency=frequency;this.element=$(element);this.callback=callback;this.lastValue=this.getValue();this.registerCallback();},registerCallback:function(){setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},onTimerEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}}}
177
+ Form.Element.Observer=Class.create();Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.Element.getValue(this.element);}});Form.Observer=Class.create();Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.serialize(this.element);}});Abstract.EventObserver=function(){}
178
+ Abstract.EventObserver.prototype={initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form')
179
+ this.registerFormCallbacks();else
180
+ this.registerCallback(this.element);},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}},registerFormCallbacks:function(){var elements=Form.getElements(this.element);for(var i=0;i<elements.length;i++)
181
+ this.registerCallback(elements[i]);},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case'checkbox':case'radio':Event.observe(element,'click',this.onElementEvent.bind(this));break;default:Event.observe(element,'change',this.onElementEvent.bind(this));break;}}}}
182
+ Form.Element.EventObserver=Class.create();Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.Element.getValue(this.element);}});Form.EventObserver=Class.create();Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.serialize(this.element);}});if(!window.Event){var Event=new Object();}
183
+ Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,element:function(event){return event.target||event.srcElement;},isLeftClick:function(event){return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));},pointerX:function(event){return event.pageX||(event.clientX+
184
+ (document.documentElement.scrollLeft||document.body.scrollLeft));},pointerY:function(event){return event.pageY||(event.clientY+
185
+ (document.documentElement.scrollTop||document.body.scrollTop));},stop:function(event){if(event)
186
+ {if(event.preventDefault){event.preventDefault();event.stopPropagation();}else{event.returnValue=false;event.cancelBubble=true;}}},findElement:function(event,tagName){var element=Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
187
+ element=element.parentNode;return element;},observers:false,_observeAndCache:function(element,name,observer,useCapture){if(!this.observers)this.observers=[];if(element.addEventListener){this.observers.push([element,name,observer,useCapture]);element.addEventListener(name,observer,useCapture);}else if(element.attachEvent){this.observers.push([element,name,observer,useCapture]);element.attachEvent('on'+name,observer);}},unloadCache:function(){if(!Event.observers)return;for(var i=0;i<Event.observers.length;i++){Event.stopObserving.apply(this,Event.observers[i]);Event.observers[i][0]=null;}
188
+ Event.observers=false;},observe:function(element,name,observer,useCapture){element=$(element);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))
189
+ name='keydown';Event._observeAndCache(element,name,observer,useCapture);},stopObserving:function(element,name,observer,useCapture){element=typeof element=='string'?$(element):element;useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))
190
+ name='keydown';if(element.removeEventListener){element.removeEventListener(name,observer,useCapture);}else if(element.detachEvent){try{element.detachEvent('on'+name,observer);}catch(e){}}}});if(navigator.appVersion.match(/\bMSIE\b/))
191
+ Event.observe(window,'unload',Event.unloadCache,false);var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;},realOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode;}while(element);return[valueL,valueT];},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;}while(element);return[valueL,valueT];},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(element.tagName=='BODY')break;var p=Element.getStyle(element,'position');if(p=='relative'||p=='absolute')break;}}while(element);return[valueL,valueT];},offsetParent:function(element){if(element.offsetParent)return element.offsetParent;if(element==document.body)return element;while((element=element.parentNode)&&element!=document.body)
192
+ if(Element.getStyle(element,'position')!='static')
193
+ return element;return document.body;},within:function(element,x,y){if(this.includeScrollOffsets)
194
+ return this.withinIncludingScrolloffsets(element,x,y);this.xcomp=x;this.ycomp=y;this.offset=this.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=this.realOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=this.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:function(mode,element){if(!mode)return 0;if(mode=='vertical')
195
+ return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight;if(mode=='horizontal')
196
+ return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth;},page:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
197
+ if(Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);element=forElement;do{if(!window.opera||element.tagName=='BODY'){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0;}}while(element=element.parentNode);return[valueL,valueT];},clone:function(source,target){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{})
198
+ source=$(source);var p=Position.page(source);target=$(target);var delta=[0,0];var parent=null;if(Element.getStyle(target,'position')=='absolute'){parent=Position.offsetParent(target);delta=Position.page(parent);}
199
+ if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop;}
200
+ if(options.setLeft)target.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';if(options.setTop)target.style.top=(p[1]-delta[1]+options.offsetTop)+'px';if(options.setWidth)target.style.width=source.offsetWidth+'px';if(options.setHeight)target.style.height=source.offsetHeight+'px';},absolutize:function(element){element=$(element);if(element.style.position=='absolute')return;Position.prepare();var offsets=Position.positionedOffset(element);var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position='absolute';element.style.top=top+'px';;element.style.left=left+'px';;element.style.width=width+'px';;element.style.height=height+'px';;},relativize:function(element){element=$(element);if(element.style.position=='relative')return;Position.prepare();element.style.position='relative';var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+'px';element.style.left=left+'px';element.style.height=element._originalHeight;element.style.width=element._originalWidth;}}
201
+ if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){Position.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
202
+ if(Element.getStyle(element,'position')=='absolute')break;element=element.offsetParent;}while(element);return[valueL,valueT];}}
203
+ Element.addMethods();var Scriptaculous={Version:'1.5.1',require:function(libraryName){document.write('<script type="text/javascript" src="'+libraryName+'"></script>');},load:function(){if((typeof Prototype=='undefined')||parseFloat(Prototype.Version.split(".")[0]+"."+
204
+ Prototype.Version.split(".")[1])<1.4)
205
+ throw("script.aculo.us requires the Prototype JavaScript framework >= 1.4.0");$A(document.getElementsByTagName("script")).findAll(function(s){return(s.src&&s.src.match(/scriptaculous\.js(\?.*)?$/))}).each(function(s){var path=s.src.replace(/scriptaculous\.js(\?.*)?$/,'');var includes=s.src.match(/\?.*load=([a-z,]*)/);(includes?includes[1]:'builder,effects,controls').split(',').each(function(include){Scriptaculous.require(path+include+'.js')});});}}
206
+ Scriptaculous.load();var Builder={NODEMAP:{AREA:'map',CAPTION:'table',COL:'table',COLGROUP:'table',LEGEND:'fieldset',OPTGROUP:'select',OPTION:'select',PARAM:'object',TBODY:'table',TD:'table',TFOOT:'table',TH:'table',THEAD:'table',TR:'table'},node:function(elementName){elementName=elementName.toUpperCase();var parentTag=this.NODEMAP[elementName]||'div';var parentElement=document.createElement(parentTag);try{parentElement.innerHTML="<"+elementName+"></"+elementName+">";}catch(e){}
207
+ var element=parentElement.firstChild||null;if(element&&(element.tagName!=elementName))
208
+ element=element.getElementsByTagName(elementName)[0];if(!element)element=document.createElement(elementName);if(!element)return;if(arguments[1])
209
+ if(this._isStringOrNumber(arguments[1])||(arguments[1]instanceof Array)){this._children(element,arguments[1]);}else{var attrs=this._attributes(arguments[1]);if(attrs.length){try{parentElement.innerHTML="<"+elementName+" "+
210
+ attrs+"></"+elementName+">";}catch(e){}
211
+ element=parentElement.firstChild||null;if(!element){element=document.createElement(elementName);for(attr in arguments[1])
212
+ element[attr=='class'?'className':attr]=arguments[1][attr];}
213
+ if(element.tagName!=elementName)
214
+ element=parentElement.getElementsByTagName(elementName)[0];}}
215
+ if(arguments[2])
216
+ this._children(element,arguments[2]);return element;},_text:function(text){return document.createTextNode(text);},_attributes:function(attributes){var attrs=[];for(attribute in attributes)
217
+ attrs.push((attribute=='className'?'class':attribute)+'="'+attributes[attribute].toString().escapeHTML()+'"');return attrs.join(" ");},_children:function(element,children){if(typeof children=='object'){children.flatten().each(function(e){if(typeof e=='object')
218
+ element.appendChild(e)
219
+ else
220
+ if(Builder._isStringOrNumber(e))
221
+ element.appendChild(Builder._text(e));});}else
222
+ if(Builder._isStringOrNumber(children))
223
+ element.appendChild(Builder._text(children));},_isStringOrNumber:function(param){return(typeof param=='string'||typeof param=='number');}}
224
+ String.prototype.parseColor=function(){var color='#';if(this.slice(0,4)=='rgb('){var cols=this.slice(4,this.length-1).split(',');var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);}else{if(this.slice(0,1)=='#'){if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();if(this.length==7)color=this.toLowerCase();}}
225
+ return(color.length==7?color:(arguments[0]||this));}
226
+ Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):''));}).flatten().join('');}
227
+ Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodes(node):''));}).flatten().join('');}
228
+ Element.setStyle=function(element,style){element=$(element);for(k in style)element.style[k.camelize()]=style[k];}
229
+ Element.setContentZoom=function(element,percent){Element.setStyle(element,{fontSize:(percent/100)+'em'});if(navigator.appVersion.indexOf('AppleWebKit')>0)window.scrollBy(0,0);}
230
+ Element.getOpacity=function(element){var opacity;if(opacity=Element.getStyle(element,'opacity'))
231
+ return parseFloat(opacity);if(opacity=(Element.getStyle(element,'filter')||'').match(/alpha\(opacity=(.*)\)/))
232
+ if(opacity[1])return parseFloat(opacity[1])/100;return 1.0;}
233
+ Element.setOpacity=function(element,value){element=$(element);if(value==1){Element.setStyle(element,{opacity:(/Gecko/.test(navigator.userAgent)&&!/Konqueror|Safari|KHTML/.test(navigator.userAgent))?0.999999:null});if(/MSIE/.test(navigator.userAgent))
234
+ Element.setStyle(element,{filter:Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});}else{if(value<0.00001)value=0;Element.setStyle(element,{opacity:value});if(/MSIE/.test(navigator.userAgent))
235
+ Element.setStyle(element,{filter:Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')+'alpha(opacity='+value*100+')'});}}
236
+ Element.getInlineOpacity=function(element){return $(element).style.opacity||'';}
237
+ Element.childrenWithClassName=function(element,className){return $A($(element).getElementsByTagName('*')).select(function(c){return Element.hasClassName(c,className)});}
238
+ Array.prototype.call=function(){var args=arguments;this.each(function(f){f.apply(this,args)});}
239
+ var Effect={tagifyText:function(element){var tagifyStyle='position:relative';if(/MSIE/.test(navigator.userAgent))tagifyStyle+=';zoom:1';element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(Builder.node('span',{style:tagifyStyle},character==' '?String.fromCharCode(160):character),child);});Element.remove(child);}});},multiple:function(element,effect){var elements;if(((typeof element=='object')||(typeof element=='function'))&&(element.length))
240
+ elements=element;else
241
+ elements=$(element).childNodes;var options=Object.extend({speed:0.1,delay:0.0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));});},PAIRS:{'slide':['SlideDown','SlideUp'],'blind':['BlindDown','BlindUp'],'appear':['Appear','Fade']},toggle:function(element,effect){element=$(element);effect=(effect||'appear').toLowerCase();var options=Object.extend({queue:{position:'end',scope:(element.id||'global')}},arguments[2]||{});Effect[Element.visible(element)?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);}};var Effect2=Effect;Effect.Transitions={}
242
+ Effect.Transitions.linear=function(pos){return pos;}
243
+ Effect.Transitions.sinoidal=function(pos){return(-Math.cos(pos*Math.PI)/2)+0.5;}
244
+ Effect.Transitions.reverse=function(pos){return 1-pos;}
245
+ Effect.Transitions.flicker=function(pos){return((-Math.cos(pos*Math.PI)/4)+0.75)+Math.random()/4;}
246
+ Effect.Transitions.wobble=function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+0.5;}
247
+ Effect.Transitions.pulse=function(pos){return(Math.floor(pos*10)%2==0?(pos*10-Math.floor(pos*10)):1-(pos*10-Math.floor(pos*10)));}
248
+ Effect.Transitions.none=function(pos){return 0;}
249
+ Effect.Transitions.full=function(pos){return 1;}
250
+ Effect.ScopedQueue=Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype,Enumerable),{initialize:function(){this.effects=[];this.interval=null;},_each:function(iterator){this.effects._each(iterator);},add:function(effect){var timestamp=new Date().getTime();var position=(typeof effect.options.queue=='string')?effect.options.queue:effect.options.queue.position;switch(position){case'front':this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn;});break;case'end':timestamp=this.effects.pluck('finishOn').max()||timestamp;break;}
251
+ effect.startOn+=timestamp;effect.finishOn+=timestamp;this.effects.push(effect);if(!this.interval)
252
+ this.interval=setInterval(this.loop.bind(this),40);},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null;}},loop:function(){var timePos=new Date().getTime();this.effects.invoke('loop',timePos);}});Effect.Queues={instances:$H(),get:function(queueName){if(typeof queueName!='string')return queueName;if(!this.instances[queueName])
253
+ this.instances[queueName]=new Effect.ScopedQueue();return this.instances[queueName];}}
254
+ Effect.Queue=Effect.Queues.get('global');Effect.DefaultOptions={transition:Effect.Transitions.sinoidal,duration:1.0,fps:25.0,sync:false,from:0.0,to:1.0,delay:0.0,queue:'parallel'}
255
+ Effect.Base=function(){};Effect.Base.prototype={position:null,start:function(options){this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state='idle';this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.event('beforeStart');if(!this.options.sync)
256
+ Effect.Queues.get(typeof this.options.queue=='string'?'global':this.options.queue.scope).add(this);},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
257
+ var pos=(timePos-this.startOn)/(this.finishOn-this.startOn);var frame=Math.round(pos*this.options.fps*this.options.duration);if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame;}}},render:function(pos){if(this.state=='idle'){this.state='running';this.event('beforeSetup');if(this.setup)this.setup();this.event('afterSetup');}
258
+ if(this.state=='running'){if(this.options.transition)pos=this.options.transition(pos);pos*=(this.options.to-this.options.from);pos+=this.options.from;this.position=pos;this.event('beforeUpdate');if(this.update)this.update(pos);this.event('afterUpdate');}},cancel:function(){if(!this.options.sync)
259
+ Effect.Queues.get(typeof this.options.queue=='string'?'global':this.options.queue.scope).remove(this);this.state='finished';},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},inspect:function(){return'#<Effect:'+$H(this).inspect()+',options:'+$H(this.options).inspect()+'>';}}
260
+ Effect.Parallel=Class.create();Object.extend(Object.extend(Effect.Parallel.prototype,Effect.Base.prototype),{initialize:function(effects){this.effects=effects||[];this.start(arguments[1]);},update:function(position){this.effects.invoke('render',position);},finish:function(position){this.effects.each(function(effect){effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish)effect.finish(position);effect.event('afterFinish');});}});Effect.Opacity=Class.create();Object.extend(Object.extend(Effect.Opacity.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(/MSIE/.test(navigator.userAgent)&&(!this.element.hasLayout))
261
+ Element.setStyle(this.element,{zoom:1});var options=Object.extend({from:Element.getOpacity(this.element)||0.0,to:1.0},arguments[1]||{});this.start(options);},update:function(position){Element.setOpacity(this.element,position);}});Effect.Move=Class.create();Object.extend(Object.extend(Effect.Move.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);var options=Object.extend({x:0,y:0,mode:'relative'},arguments[1]||{});this.start(options);},setup:function(){Element.makePositioned(this.element);this.originalLeft=parseFloat(Element.getStyle(this.element,'left')||'0');this.originalTop=parseFloat(Element.getStyle(this.element,'top')||'0');if(this.options.mode=='absolute'){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop;}},update:function(position){Element.setStyle(this.element,{left:this.options.x*position+this.originalLeft+'px',top:this.options.y*position+this.originalTop+'px'});}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};Effect.Scale=Class.create();Object.extend(Object.extend(Effect.Scale.prototype,Effect.Base.prototype),{initialize:function(element,percent){this.element=$(element)
262
+ var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:'box',scaleFrom:100.0,scaleTo:percent},arguments[2]||{});this.start(options);},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=Element.getStyle(this.element,'position');this.originalStyle={};['top','left','width','height','fontSize'].each(function(k){this.originalStyle[k]=this.element.style[k];}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=Element.getStyle(this.element,'font-size')||'100%';['em','px','%'].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType;}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=='box')
263
+ this.dims=[this.element.offsetHeight,this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))
264
+ this.dims=[this.element.scrollHeight,this.element.scrollWidth];if(!this.dims)
265
+ this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update:function(position){var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);if(this.options.scaleContent&&this.fontSize)
266
+ Element.setStyle(this.element,{fontSize:this.fontSize*currentScale+this.fontSizeType});this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);},finish:function(position){if(this.restoreAfterFinish)Element.setStyle(this.element,this.originalStyle);},setDimensions:function(height,width){var d={};if(this.options.scaleX)d.width=width+'px';if(this.options.scaleY)d.height=height+'px';if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=='absolute'){if(this.options.scaleY)d.top=this.originalTop-topd+'px';if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';}else{if(this.options.scaleY)d.top=-topd+'px';if(this.options.scaleX)d.left=-leftd+'px';}}
267
+ Element.setStyle(this.element,d);}});Effect.Highlight=Class.create();Object.extend(Object.extend(Effect.Highlight.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});this.start(options);},setup:function(){if(Element.getStyle(this.element,'display')=='none'){this.cancel();return;}
268
+ this.oldStyle={backgroundImage:Element.getStyle(this.element,'background-image')};Element.setStyle(this.element,{backgroundImage:'none'});if(!this.options.endcolor)
269
+ this.options.endcolor=Element.getStyle(this.element,'background-color').parseColor('#ffffff');if(!this.options.restorecolor)
270
+ this.options.restorecolor=Element.getStyle(this.element,'background-color');this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));},update:function(position){Element.setStyle(this.element,{backgroundColor:$R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart());}.bind(this))});},finish:function(){Element.setStyle(this.element,Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));}});Effect.ScrollTo=Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);this.start(arguments[1]||{});},setup:function(){Position.prepare();var offsets=Position.cumulativeOffset(this.element);if(this.options.offset)offsets[1]+=this.options.offset;var max=window.innerHeight?window.height-window.innerHeight:document.body.scrollHeight-
271
+ (document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight);this.scrollStart=Position.deltaY;this.delta=(offsets[1]>max?max:offsets[1])-this.scrollStart;},update:function(position){Position.prepare();window.scrollTo(Position.deltaX,this.scrollStart+(position*this.delta));}});Effect.Fade=function(element){var oldOpacity=Element.getInlineOpacity(element);var options=Object.extend({from:Element.getOpacity(element)||1.0,to:0.0,afterFinishInternal:function(effect){with(Element){if(effect.options.to!=0)return;hide(effect.element);setStyle(effect.element,{opacity:oldOpacity});}}},arguments[1]||{});return new Effect.Opacity(element,options);}
272
+ Effect.Appear=function(element){var options=Object.extend({from:(Element.getStyle(element,'display')=='none'?0.0:Element.getOpacity(element)||0.0),to:1.0,beforeSetup:function(effect){with(Element){setOpacity(effect.element,effect.options.from);show(effect.element);}}},arguments[1]||{});return new Effect.Opacity(element,options);}
273
+ Effect.Puff=function(element){element=$(element);var oldStyle={opacity:Element.getInlineOpacity(element),position:Element.getStyle(element,'position')};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:1.0,beforeSetupInternal:function(effect){with(Element){setStyle(effect.effects[0].element,{position:'absolute'});}},afterFinishInternal:function(effect){with(Element){hide(effect.effects[0].element);setStyle(effect.effects[0].element,oldStyle);}}},arguments[1]||{}));}
274
+ Effect.BlindUp=function(element){element=$(element);Element.makeClipping(element);return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){with(Element){[hide,undoClipping].call(effect.element);}}},arguments[1]||{}));}
275
+ Effect.BlindDown=function(element){element=$(element);var oldHeight=Element.getStyle(element,'height');var elementDimensions=Element.getDimensions(element);return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){with(Element){makeClipping(effect.element);setStyle(effect.element,{height:'0px'});show(effect.element);}},afterFinishInternal:function(effect){with(Element){undoClipping(effect.element);setStyle(effect.element,{height:oldHeight});}}},arguments[1]||{}));}
276
+ Effect.SwitchOff=function(element){element=$(element);var oldOpacity=Element.getInlineOpacity(element);return new Effect.Appear(element,{duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){with(Element){[makePositioned,makeClipping].call(effect.element);}},afterFinishInternal:function(effect){with(Element){[hide,undoClipping,undoPositioned].call(effect.element);setStyle(effect.element,{opacity:oldOpacity});}}})}});}
277
+ Effect.DropOut=function(element){element=$(element);var oldStyle={top:Element.getStyle(element,'top'),left:Element.getStyle(element,'left'),opacity:Element.getInlineOpacity(element)};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:0.5,beforeSetup:function(effect){with(Element){makePositioned(effect.effects[0].element);}},afterFinishInternal:function(effect){with(Element){[hide,undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element,oldStyle);}}},arguments[1]||{}));}
278
+ Effect.Shake=function(element){element=$(element);var oldStyle={top:Element.getStyle(element,'top'),left:Element.getStyle(element,'left')};return new Effect.Move(element,{x:20,y:0,duration:0.05,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-20,y:0,duration:0.05,afterFinishInternal:function(effect){with(Element){undoPositioned(effect.element);setStyle(effect.element,oldStyle);}}})}})}})}})}})}});}
279
+ Effect.SlideDown=function(element){element=$(element);Element.cleanWhitespace(element);var oldInnerBottom=Element.getStyle(element.firstChild,'bottom');var elementDimensions=Element.getDimensions(element);return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){with(Element){makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera)setStyle(effect.element,{top:''});makeClipping(effect.element);setStyle(effect.element,{height:'0px'});show(element);}},afterUpdateInternal:function(effect){with(Element){setStyle(effect.element.firstChild,{bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});}},afterFinishInternal:function(effect){with(Element){undoClipping(effect.element);undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild,{bottom:oldInnerBottom});}}},arguments[1]||{}));}
280
+ Effect.SlideUp=function(element){element=$(element);Element.cleanWhitespace(element);var oldInnerBottom=Element.getStyle(element.firstChild,'bottom');return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(effect){with(Element){makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera)setStyle(effect.element,{top:''});makeClipping(effect.element);show(element);}},afterUpdateInternal:function(effect){with(Element){setStyle(effect.element.firstChild,{bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});}},afterFinishInternal:function(effect){with(Element){[hide,undoClipping].call(effect.element);undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild,{bottom:oldInnerBottom});}}},arguments[1]||{}));}
281
+ Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){with(Element){makeClipping(effect.element);}},afterFinishInternal:function(effect){with(Element){hide(effect.element);undoClipping(effect.element);}}});}
282
+ Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransistion:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:Element.getInlineOpacity(element)};var dims=Element.getDimensions(element);var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case'top-left':initialMoveX=initialMoveY=moveX=moveY=0;break;case'top-right':initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case'bottom-left':initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case'bottom-right':initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case'center':initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break;}
283
+ return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){with(Element){hide(effect.element);makeClipping(effect.element);makePositioned(effect.element);}},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){with(Element){setStyle(effect.effects[0].element,{height:'0px'});show(effect.effects[0].element);}},afterFinishInternal:function(effect){with(Element){[undoClipping,undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element,oldStyle);}}},options))}});}
284
+ Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransistion:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:Element.getInlineOpacity(element)};var dims=Element.getDimensions(element);var moveX,moveY;switch(options.direction){case'top-left':moveX=moveY=0;break;case'top-right':moveX=dims.width;moveY=0;break;case'bottom-left':moveX=0;moveY=dims.height;break;case'bottom-right':moveX=dims.width;moveY=dims.height;break;case'center':moveX=dims.width/2;moveY=dims.height/2;break;}
285
+ return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){with(Element){[makePositioned,makeClipping].call(effect.effects[0].element)}},afterFinishInternal:function(effect){with(Element){[hide,undoClipping,undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element,oldStyle);}}},options));}
286
+ Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{};var oldOpacity=Element.getInlineOpacity(element);var transition=options.transition||Effect.Transitions.sinoidal;var reverser=function(pos){return transition(1-Effect.Transitions.pulse(pos))};reverser.bind(transition);return new Effect.Opacity(element,Object.extend(Object.extend({duration:3.0,from:0,afterFinishInternal:function(effect){Element.setStyle(effect.element,{opacity:oldOpacity});}},options),{transition:reverser}));}
287
+ Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};Element.makeClipping(element);return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){with(Element){[hide,undoClipping].call(effect.element);setStyle(effect.element,oldStyle);}}});}},arguments[1]||{}));}
288
+ var Autocompleter={}
289
+ Autocompleter.Base=function(){};Autocompleter.Base.prototype={baseInitialize:function(element,update,options){this.element=$(element);this.update=$(update);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;if(this.setOptions)
290
+ this.setOptions(options);else
291
+ this.options=options||{};this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
292
+ Effect.Appear(update,{duration:0.15});};this.options.onHide=this.options.onHide||function(element,update){new Effect.Fade(update,{duration:0.15})};if(typeof(this.options.tokens)=='string')
293
+ this.options.tokens=new Array(this.options.tokens);this.observer=null;this.element.setAttribute('autocomplete','off');Element.hide(this.update);Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,"keypress",this.onKeyPress.bindAsEventListener(this));},show:function(){if(Element.getStyle(this.update,'display')=='none')this.options.onShow(this.element,this.update);if(!this.iefix&&(navigator.appVersion.indexOf('MSIE')>0)&&(navigator.userAgent.indexOf('Opera')<0)&&(Element.getStyle(this.update,'position')=='absolute')){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" '+'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" '+'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+'_iefix');}
294
+ if(this.iefix)setTimeout(this.fixIEOverlapping.bind(this),50);},fixIEOverlapping:function(){Position.clone(this.update,this.iefix);this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix);},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,'display')!='none')this.options.onHide(this.element,this.update);if(this.iefix)Element.hide(this.iefix);},startIndicator:function(){if(this.options.indicator)Element.show(this.options.indicator);},stopIndicator:function(){if(this.options.indicator)Element.hide(this.options.indicator);},onKeyPress:function(event){if(this.active)
295
+ switch(event.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();if(navigator.appVersion.indexOf('AppleWebKit')>0)Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();if(navigator.appVersion.indexOf('AppleWebKit')>0)Event.stop(event);return;}
296
+ else
297
+ if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN)
298
+ return;this.changed=true;this.hasFocus=true;if(this.observer)clearTimeout(this.observer);this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000);},onHover:function(event){var element=Event.findElement(event,'LI');if(this.index!=element.autocompleteIndex)
299
+ {this.index=element.autocompleteIndex;this.render();}
300
+ Event.stop(event);},onClick:function(event){var element=Event.findElement(event,'LI');this.index=element.autocompleteIndex;this.selectEntry();this.hide();},onBlur:function(event){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false;},render:function(){if(this.entryCount>0){for(var i=0;i<this.entryCount;i++)
301
+ this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected");if(this.hasFocus){this.show();this.active=true;}}else{this.active=false;this.hide();}},markPrevious:function(){if(this.index>0)this.index--
302
+ else this.index=this.entryCount-1;},markNext:function(){if(this.index<this.entryCount-1)this.index++
303
+ else this.index=0;},getEntry:function(index){return this.update.firstChild.childNodes[index];},getCurrentEntry:function(){return this.getEntry(this.index);},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry());},updateElement:function(selectedElement){if(this.options.updateElement){this.options.updateElement(selectedElement);return;}
304
+ var value='';if(this.options.select){var nodes=document.getElementsByClassName(this.options.select,selectedElement)||[];if(nodes.length>0)value=Element.collectTextNodes(nodes[0],this.options.select);}else
305
+ value=Element.collectTextNodesIgnoreClass(selectedElement,'informal');var lastTokenPos=this.findLastToken();if(lastTokenPos!=-1){var newValue=this.element.value.substr(0,lastTokenPos+1);var whitespace=this.element.value.substr(lastTokenPos+1).match(/^\s+/);if(whitespace)
306
+ newValue+=whitespace[0];this.element.value=newValue+value;}else{this.element.value=value;}
307
+ this.element.focus();if(this.options.afterUpdateElement)
308
+ this.options.afterUpdateElement(this.element,selectedElement);},updateChoices:function(choices){if(!this.changed&&this.hasFocus){this.update.innerHTML=choices;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.firstChild);if(this.update.firstChild&&this.update.firstChild.childNodes){this.entryCount=this.update.firstChild.childNodes.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry);}}else{this.entryCount=0;}
309
+ this.stopIndicator();this.index=0;this.render();}},addObservers:function(element){Event.observe(element,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(element,"click",this.onClick.bindAsEventListener(this));},onObserverEvent:function(){this.changed=false;if(this.getToken().length>=this.options.minChars){this.startIndicator();this.getUpdatedChoices();}else{this.active=false;this.hide();}},getToken:function(){var tokenPos=this.findLastToken();if(tokenPos!=-1)
310
+ var ret=this.element.value.substr(tokenPos+1).replace(/^\s+/,'').replace(/\s+$/,'');else
311
+ var ret=this.element.value;return/\n/.test(ret)?'':ret;},findLastToken:function(){var lastTokenPos=-1;for(var i=0;i<this.options.tokens.length;i++){var thisTokenPos=this.element.value.lastIndexOf(this.options.tokens[i]);if(thisTokenPos>lastTokenPos)
312
+ lastTokenPos=thisTokenPos;}
313
+ return lastTokenPos;}}
314
+ Ajax.Autocompleter=Class.create();Object.extend(Object.extend(Ajax.Autocompleter.prototype,Autocompleter.Base.prototype),{initialize:function(element,update,url,options){this.baseInitialize(element,update,options);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=url;},getUpdatedChoices:function(){entry=encodeURIComponent(this.options.paramName)+'='+
315
+ encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;if(this.options.defaultParams)
316
+ this.options.parameters+='&'+this.options.defaultParams;new Ajax.Request(this.url,this.options);},onComplete:function(request){this.updateChoices(request.responseText);}});Autocompleter.Local=Class.create();Autocompleter.Local.prototype=Object.extend(new Autocompleter.Base(),{initialize:function(element,update,array,options){this.baseInitialize(element,update,options);this.options.array=array;},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this));},setOptions:function(options){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(instance){var ret=[];var partial=[];var entry=instance.getToken();var count=0;for(var i=0;i<instance.options.array.length&&ret.length<instance.options.choices;i++){var elem=instance.options.array[i];var foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase()):elem.indexOf(entry);while(foundPos!=-1){if(foundPos==0&&elem.length!=entry.length){ret.push("<li><strong>"+elem.substr(0,entry.length)+"</strong>"+
317
+ elem.substr(entry.length)+"</li>");break;}else if(entry.length>=instance.options.partialChars&&instance.options.partialSearch&&foundPos!=-1){if(instance.options.fullSearch||/\s/.test(elem.substr(foundPos-1,1))){partial.push("<li>"+elem.substr(0,foundPos)+"<strong>"+
318
+ elem.substr(foundPos,entry.length)+"</strong>"+elem.substr(foundPos+entry.length)+"</li>");break;}}
319
+ foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase(),foundPos+1):elem.indexOf(entry,foundPos+1);}}
320
+ if(partial.length)
321
+ ret=ret.concat(partial.slice(0,instance.options.choices-ret.length))
322
+ return"<ul>"+ret.join('')+"</ul>";}},options||{});}});Field.scrollFreeActivate=function(field){setTimeout(function(){Field.activate(field);},1);}
323
+ Ajax.InPlaceEditor=Class.create();Ajax.InPlaceEditor.defaultHighlightColor="#FFFF99";Ajax.InPlaceEditor.prototype={initialize:function(element,url,options){this.url=url;this.element=$(element);this.options=Object.extend({okButton:true,okText:"ok",cancelLink:true,cancelText:"cancel",savingText:"Saving...",clickToEditText:"Click to edit",okText:"ok",rows:1,onComplete:function(transport,element){new Effect.Highlight(element,{startcolor:this.options.highlightcolor});},onFailure:function(transport){alert("Error communicating with the server: "+transport.responseText.stripTags());},callback:function(form){return Form.serialize(form);},handleLineBreaks:true,loadingText:'Loading...',savingClassName:'inplaceeditor-saving',loadingClassName:'inplaceeditor-loading',formClassName:'inplaceeditor-form',highlightcolor:Ajax.InPlaceEditor.defaultHighlightColor,highlightendcolor:"#FFFFFF",externalControl:null,submitOnBlur:false,ajaxOptions:{}},options||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+"-inplaceeditor";if($(this.options.formId)){this.options.formId=null;}}
324
+ if(this.options.externalControl){this.options.externalControl=$(this.options.externalControl);}
325
+ this.originalBackground=Element.getStyle(this.element,'background-color');if(!this.originalBackground){this.originalBackground="transparent";}
326
+ this.element.title=this.options.clickToEditText;this.onclickListener=this.enterEditMode.bindAsEventListener(this);this.mouseoverListener=this.enterHover.bindAsEventListener(this);this.mouseoutListener=this.leaveHover.bindAsEventListener(this);Event.observe(this.element,'click',this.onclickListener);Event.observe(this.element,'mouseover',this.mouseoverListener);Event.observe(this.element,'mouseout',this.mouseoutListener);if(this.options.externalControl){Event.observe(this.options.externalControl,'click',this.onclickListener);Event.observe(this.options.externalControl,'mouseover',this.mouseoverListener);Event.observe(this.options.externalControl,'mouseout',this.mouseoutListener);}},enterEditMode:function(evt){if(this.saving)return;if(this.editing)return;this.editing=true;this.onEnterEditMode();if(this.options.externalControl){Element.hide(this.options.externalControl);}
327
+ Element.hide(this.element);this.createForm();this.element.parentNode.insertBefore(this.form,this.element);Field.scrollFreeActivate(this.editField);if(evt){Event.stop(evt);}
328
+ return false;},createForm:function(){this.form=document.createElement("form");this.form.id=this.options.formId;Element.addClassName(this.form,this.options.formClassName)
329
+ this.form.onsubmit=this.onSubmit.bind(this);this.createEditField();if(this.options.textarea){var br=document.createElement("br");this.form.appendChild(br);}
330
+ if(this.options.okButton){okButton=document.createElement("input");okButton.type="submit";okButton.value=this.options.okText;this.form.appendChild(okButton);}
331
+ if(this.options.cancelLink){cancelLink=document.createElement("a");cancelLink.href="#";cancelLink.appendChild(document.createTextNode(this.options.cancelText));cancelLink.onclick=this.onclickCancel.bind(this);this.form.appendChild(cancelLink);}},hasHTMLLineBreaks:function(string){if(!this.options.handleLineBreaks)return false;return string.match(/<br/i)||string.match(/<p>/i);},convertHTMLLineBreaks:function(string){return string.replace(/<br>/gi,"\n").replace(/<br\/>/gi,"\n").replace(/<\/p>/gi,"\n").replace(/<p>/gi,"");},createEditField:function(){var text;if(this.options.loadTextURL){text=this.options.loadingText;}else{text=this.getText();}
332
+ var obj=this;if(this.options.rows==1&&!this.hasHTMLLineBreaks(text)){this.options.textarea=false;var textField=document.createElement("input");textField.obj=this;textField.type="text";textField.name="value";textField.value=text;textField.style.backgroundColor=this.options.highlightcolor;var size=this.options.size||this.options.cols||0;if(size!=0)textField.size=size;if(this.options.submitOnBlur)
333
+ textField.onblur=this.onSubmit.bind(this);this.editField=textField;}else{this.options.textarea=true;var textArea=document.createElement("textarea");textArea.obj=this;textArea.name="value";textArea.value=this.convertHTMLLineBreaks(text);textArea.rows=this.options.rows;textArea.cols=this.options.cols||40;if(this.options.submitOnBlur)
334
+ textArea.onblur=this.onSubmit.bind(this);this.editField=textArea;}
335
+ if(this.options.loadTextURL){this.loadExternalText();}
336
+ this.form.appendChild(this.editField);},getText:function(){return this.element.innerHTML;},loadExternalText:function(){Element.addClassName(this.form,this.options.loadingClassName);this.editField.disabled=true;new Ajax.Request(this.options.loadTextURL,Object.extend({asynchronous:true,onComplete:this.onLoadedExternalText.bind(this)},this.options.ajaxOptions));},onLoadedExternalText:function(transport){Element.removeClassName(this.form,this.options.loadingClassName);this.editField.disabled=false;this.editField.value=transport.responseText.stripTags();},onclickCancel:function(){this.onComplete();this.leaveEditMode();return false;},onFailure:function(transport){this.options.onFailure(transport);if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;this.oldInnerHTML=null;}
337
+ return false;},onSubmit:function(){var form=this.form;var value=this.editField.value;this.onLoading();new Ajax.Updater({success:this.element,failure:null},this.url,Object.extend({parameters:this.options.callback(form,value),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this)},this.options.ajaxOptions));if(arguments.length>1){Event.stop(arguments[0]);}
338
+ return false;},onLoading:function(){this.saving=true;this.removeForm();this.leaveHover();this.showSaving();},showSaving:function(){this.oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;Element.addClassName(this.element,this.options.savingClassName);this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);},removeForm:function(){if(this.form){if(this.form.parentNode)Element.remove(this.form);this.form=null;}},enterHover:function(){if(this.saving)return;this.element.style.backgroundColor=this.options.highlightcolor;if(this.effect){this.effect.cancel();}
339
+ Element.addClassName(this.element,this.options.hoverClassName)},leaveHover:function(){if(this.options.backgroundColor){this.element.style.backgroundColor=this.oldBackground;}
340
+ Element.removeClassName(this.element,this.options.hoverClassName)
341
+ if(this.saving)return;this.effect=new Effect.Highlight(this.element,{startcolor:this.options.highlightcolor,endcolor:this.options.highlightendcolor,restorecolor:this.originalBackground});},leaveEditMode:function(){Element.removeClassName(this.element,this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);if(this.options.externalControl){Element.show(this.options.externalControl);}
342
+ this.editing=false;this.saving=false;this.oldInnerHTML=null;this.onLeaveEditMode();},onComplete:function(transport){this.leaveEditMode();this.options.onComplete.bind(this)(transport,this.element);},onEnterEditMode:function(){},onLeaveEditMode:function(){},dispose:function(){if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;}
343
+ this.leaveEditMode();Event.stopObserving(this.element,'click',this.onclickListener);Event.stopObserving(this.element,'mouseover',this.mouseoverListener);Event.stopObserving(this.element,'mouseout',this.mouseoutListener);if(this.options.externalControl){Event.stopObserving(this.options.externalControl,'click',this.onclickListener);Event.stopObserving(this.options.externalControl,'mouseover',this.mouseoverListener);Event.stopObserving(this.options.externalControl,'mouseout',this.mouseoutListener);}}};Form.Element.DelayedObserver=Class.create();Form.Element.DelayedObserver.prototype={initialize:function(element,delay,callback){this.delay=delay||0.5;this.element=$(element);this.callback=callback;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));},delayedListener:function(event){if(this.lastValue==$F(this.element))return;if(this.timer)clearTimeout(this.timer);this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element);},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element));}};var dp={sh:{Toolbar:{},Utils:{},RegexLib:{},Brushes:{},Strings:{},Version:'1.4.1'}};dp.sh.Strings={AboutDialog:'<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></p>&copy;2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:'+ expand source',check:function(highlighter){return highlighter.collapse;},func:function(sender,highlighter)
344
+ {sender.parentNode.removeChild(sender);highlighter.div.className=highlighter.div.className.replace('collapsed','');}},ViewSource:{label:'view plain',func:function(sender,highlighter)
345
+ {var code=highlighter.originalCode.replace(/</g,'&lt;');var wnd=window.open('','_blank','width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');wnd.document.write('<textarea style="width:99%;height:99%">'+code+'</textarea>');wnd.document.close();}},CopyToClipboard:{label:'copy to clipboard',check:function(){return window.clipboardData!=null;},func:function(sender,highlighter)
346
+ {window.clipboardData.setData('text',highlighter.originalCode);alert('The code is in your clipboard now');}},PrintSource:{label:'print',func:function(sender,highlighter)
347
+ {var iframe=document.createElement('IFRAME');var doc=null;iframe.style.cssText='position:absolute;width:0px;height:0px;left:-500px;top:-500px;';document.body.appendChild(iframe);doc=iframe.contentWindow.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write('<div class="'+highlighter.div.className.replace('collapsed','')+' printing">'+highlighter.div.innerHTML+'</div>');doc.close();iframe.contentWindow.focus();iframe.contentWindow.print();alert('Printing...');document.body.removeChild(iframe);}},About:{label:'?',func:function(highlighter)
348
+ {var wnd=window.open('','_blank','dialog,width=300,height=150,scrollbars=0');var doc=wnd.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write(dp.sh.Strings.AboutDialog.replace('{V}',dp.sh.Version));doc.close();wnd.focus();}}};dp.sh.Toolbar.Create=function(highlighter)
349
+ {var div=document.createElement('DIV');div.className='tools';for(var name in dp.sh.Toolbar.Commands)
350
+ {var cmd=dp.sh.Toolbar.Commands[name];if(cmd.check!=null&&!cmd.check(highlighter))
351
+ continue;div.innerHTML+='<a href="#" onclick="dp.sh.Toolbar.Command(\''+name+'\',this);return false;">'+cmd.label+'</a>';}
352
+ return div;}
353
+ dp.sh.Toolbar.Command=function(name,sender)
354
+ {var n=sender;while(n!=null&&n.className.indexOf('dp-highlighter')==-1)
355
+ n=n.parentNode;if(n!=null)
356
+ dp.sh.Toolbar.Commands[name].func(sender,n.highlighter);}
357
+ dp.sh.Utils.CopyStyles=function(destDoc,sourceDoc)
358
+ {var links=sourceDoc.getElementsByTagName('link');for(var i=0;i<links.length;i++)
359
+ if(links[i].rel.toLowerCase()=='stylesheet')
360
+ destDoc.write('<link type="text/css" rel="stylesheet" href="'+links[i].href+'"></link>');}
361
+ dp.sh.RegexLib={MultiLineCComments:new RegExp('/\\*[\\s\\S]*?\\*/','gm'),SingleLineCComments:new RegExp('//.*$','gm'),SingleLinePerlComments:new RegExp('#.*$','gm'),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""])*"','g'),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''])*'",'g')};dp.sh.Match=function(value,index,css)
362
+ {this.value=value;this.index=index;this.length=value.length;this.css=css;}
363
+ dp.sh.Highlighter=function()
364
+ {this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true;}
365
+ dp.sh.Highlighter.SortCallback=function(m1,m2)
366
+ {if(m1.index<m2.index)
367
+ return-1;else if(m1.index>m2.index)
368
+ return 1;else
369
+ {if(m1.length<m2.length)
370
+ return-1;else if(m1.length>m2.length)
371
+ return 1;}
372
+ return 0;}
373
+ dp.sh.Highlighter.prototype.CreateElement=function(name)
374
+ {var result=document.createElement(name);result.highlighter=this;return result;}
375
+ dp.sh.Highlighter.prototype.GetMatches=function(regex,css)
376
+ {var index=0;var match=null;while((match=regex.exec(this.code))!=null)
377
+ this.matches[this.matches.length]=new dp.sh.Match(match[0],match.index,css);}
378
+ dp.sh.Highlighter.prototype.AddBit=function(str,css)
379
+ {if(str==null||str.length==0)
380
+ return;var span=this.CreateElement('SPAN');str=str.replace(/&/g,'&amp;');str=str.replace(/ /g,'&nbsp;');str=str.replace(/</g,'&lt;');str=str.replace(/\n/gm,'&nbsp;<br>');if(css!=null)
381
+ {var regex=new RegExp('<br>','gi');if(regex.test(str))
382
+ {var lines=str.split('&nbsp;<br>');str='';for(var i=0;i<lines.length;i++)
383
+ {span=this.CreateElement('SPAN');span.className=css;span.innerHTML=lines[i];this.div.appendChild(span);if(i+1<lines.length)
384
+ this.div.appendChild(this.CreateElement('BR'));}}
385
+ else
386
+ {span.className=css;span.innerHTML=str;this.div.appendChild(span);}}
387
+ else
388
+ {span.innerHTML=str;this.div.appendChild(span);}}
389
+ dp.sh.Highlighter.prototype.IsInside=function(match)
390
+ {if(match==null||match.length==0)
391
+ return false;for(var i=0;i<this.matches.length;i++)
392
+ {var c=this.matches[i];if(c==null)
393
+ continue;if((match.index>c.index)&&(match.index<c.index+c.length))
394
+ return true;}
395
+ return false;}
396
+ dp.sh.Highlighter.prototype.ProcessRegexList=function()
397
+ {for(var i=0;i<this.regexList.length;i++)
398
+ this.GetMatches(this.regexList[i].regex,this.regexList[i].css);}
399
+ dp.sh.Highlighter.prototype.ProcessSmartTabs=function(code)
400
+ {var lines=code.split('\n');var result='';var tabSize=4;var tab='\t';function InsertSpaces(line,pos,count)
401
+ {var left=line.substr(0,pos);var right=line.substr(pos+1,line.length);var spaces='';for(var i=0;i<count;i++)
402
+ spaces+=' ';return left+spaces+right;}
403
+ function ProcessLine(line,tabSize)
404
+ {if(line.indexOf(tab)==-1)
405
+ return line;var pos=0;while((pos=line.indexOf(tab))!=-1)
406
+ {var spaces=tabSize-pos%tabSize;line=InsertSpaces(line,pos,spaces);}
407
+ return line;}
408
+ for(var i=0;i<lines.length;i++)
409
+ result+=ProcessLine(lines[i],tabSize)+'\n';return result;}
410
+ dp.sh.Highlighter.prototype.SwitchToList=function()
411
+ {var html=this.div.innerHTML.replace(/<(br)\/?>/gi,'\n');var lines=html.split('\n');if(this.addControls==true)
412
+ this.bar.appendChild(dp.sh.Toolbar.Create(this));if(this.showColumns)
413
+ {var div=this.CreateElement('div');var columns=this.CreateElement('div');var showEvery=10;var i=1;while(i<=150)
414
+ {if(i%showEvery==0)
415
+ {div.innerHTML+=i;i+=(i+'').length;}
416
+ else
417
+ {div.innerHTML+='&middot;';i++;}}
418
+ columns.className='columns';columns.appendChild(div);this.bar.appendChild(columns);}
419
+ for(var i=0,lineIndex=this.firstLine;i<lines.length-1;i++,lineIndex++)
420
+ {var li=this.CreateElement('LI');var span=this.CreateElement('SPAN');li.className=(i%2==0)?'alt':'';span.innerHTML=lines[i]+'&nbsp;';li.appendChild(span);this.ol.appendChild(li);}
421
+ this.div.innerHTML='';}
422
+ dp.sh.Highlighter.prototype.Highlight=function(code)
423
+ {function Trim(str)
424
+ {return str.replace(/^\s*(.*?)[\s\n]*$/g,'$1');}
425
+ function Chop(str)
426
+ {return str.replace(/\n*$/,'').replace(/^\n*/,'');}
427
+ function Unindent(str)
428
+ {var lines=str.split('\n');var indents=new Array();var regex=new RegExp('^\\s*','g');var min=1000;for(var i=0;i<lines.length&&min>0;i++)
429
+ {if(Trim(lines[i]).length==0)
430
+ continue;var matches=regex.exec(lines[i]);if(matches!=null&&matches.length>0)
431
+ min=Math.min(matches[0].length,min);}
432
+ if(min>0)
433
+ for(var i=0;i<lines.length;i++)
434
+ lines[i]=lines[i].substr(min);return lines.join('\n');}
435
+ function Copy(string,pos1,pos2)
436
+ {return string.substr(pos1,pos2-pos1);}
437
+ var pos=0;this.originalCode=code;this.code=Chop(Unindent(code));this.div=this.CreateElement('DIV');this.bar=this.CreateElement('DIV');this.ol=this.CreateElement('OL');this.matches=new Array();this.div.className='dp-highlighter';this.div.highlighter=this;this.bar.className='bar';this.ol.start=this.firstLine;if(this.CssClass!=null)
438
+ this.ol.className=this.CssClass;if(this.collapse)
439
+ this.div.className+=' collapsed';if(this.noGutter)
440
+ this.div.className+=' nogutter';if(this.tabsToSpaces==true)
441
+ this.code=this.ProcessSmartTabs(this.code);this.ProcessRegexList();if(this.matches.length==0)
442
+ {this.AddBit(this.code,null);this.SwitchToList();this.div.appendChild(this.ol);return;}
443
+ this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback);for(var i=0;i<this.matches.length;i++)
444
+ if(this.IsInside(this.matches[i]))
445
+ this.matches[i]=null;for(var i=0;i<this.matches.length;i++)
446
+ {var match=this.matches[i];if(match==null||match.length==0)
447
+ continue;this.AddBit(Copy(this.code,pos,match.index),null);this.AddBit(match.value,match.css);pos=match.index+match.length;}
448
+ this.AddBit(this.code.substr(pos),null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);}
449
+ dp.sh.Highlighter.prototype.GetKeywords=function(str)
450
+ {return'\\b'+str.replace(/ /g,'\\b|\\b')+'\\b';}
451
+ dp.sh.HighlightAll=function(name,showGutter,showControls,collapseAll,firstLine,showColumns)
452
+ {function FindValue()
453
+ {var a=arguments;for(var i=0;i<a.length;i++)
454
+ {if(a[i]==null)
455
+ continue;if(typeof(a[i])=='string'&&a[i]!='')
456
+ return a[i]+'';if(typeof(a[i])=='object'&&a[i].value!='')
457
+ return a[i].value+'';}
458
+ return null;}
459
+ function IsOptionSet(value,list)
460
+ {for(var i=0;i<list.length;i++)
461
+ if(list[i]==value)
462
+ return true;return false;}
463
+ function GetOptionValue(name,list,defaultValue)
464
+ {var regex=new RegExp('^'+name+'\\[(\\w+)\\]$','gi');var matches=null;for(var i=0;i<list.length;i++)
465
+ if((matches=regex.exec(list[i]))!=null)
466
+ return matches[1];return defaultValue;}
467
+ var elements=document.getElementsByName(name);var highlighter=null;var registered=new Object();var propertyName='value';if(elements==null)
468
+ return;for(var brush in dp.sh.Brushes)
469
+ {var aliases=dp.sh.Brushes[brush].Aliases;if(aliases==null)
470
+ continue;for(var i=0;i<aliases.length;i++)
471
+ registered[aliases[i]]=brush;}
472
+ for(var i=0;i<elements.length;i++)
473
+ {var element=elements[i];var options=FindValue(element.attributes['class'],element.className,element.attributes['language'],element.language);var language='';if(options==null)
474
+ continue;options=options.split(':');language=options[0].toLowerCase();if(registered[language]==null)
475
+ continue;highlighter=new dp.sh.Brushes[registered[language]]();element.style.display='none';highlighter.noGutter=(showGutter==null)?IsOptionSet('nogutter',options):!showGutter;highlighter.addControls=(showControls==null)?!IsOptionSet('nocontrols',options):showControls;highlighter.collapse=(collapseAll==null)?IsOptionSet('collapse',options):collapseAll;highlighter.showColumns=(showColumns==null)?IsOptionSet('showcolumns',options):showColumns;highlighter.firstLine=(firstLine==null)?parseInt(GetOptionValue('firstline',options,1)):firstLine;highlighter.Highlight(element[propertyName]);element.parentNode.insertBefore(highlighter.div,element);}}
476
+ dp.sh.Brushes.CSharp=function()
477
+ {var keywords='abstract as base bool break byte case catch char checked class const '+'continue decimal default delegate do double else enum event explicit '+'extern false finally fixed float for foreach get goto if implicit in int '+'interface internal is lock long namespace new null object operator out '+'override params private protected public readonly ref return sbyte sealed set '+'short sizeof stackalloc static string struct switch this throw true try '+'typeof uint ulong unchecked unsafe ushort using virtual void while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}
478
+ dp.sh.Brushes.CSharp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSharp.Aliases=['c#','c-sharp','csharp'];dp.sh.Brushes.Cpp=function()
479
+ {var datatypes='ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR '+'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH '+'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP '+'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY '+'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT '+'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE '+'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF '+'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR '+'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR '+'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT '+'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 '+'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR '+'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 '+'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT '+'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG '+'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM '+'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t '+'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS '+'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t '+'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t '+'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler '+'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function '+'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf '+'va_list wchar_t wctrans_t wctype_t wint_t signed';var keywords='break case catch class const __finally __exception __try '+'const_cast continue private public protected __declspec '+'default delete deprecated dllexport dllimport do dynamic_cast '+'else enum explicit extern if for friend goto inline '+'mutable naked namespace new noinline noreturn nothrow '+'register reinterpret_cast return selectany '+'sizeof static static_cast struct switch template this '+'thread throw true false try typedef typeid typename union '+'using uuid virtual void volatile whcar_t while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^ *#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(datatypes),'gm'),css:'datatypes'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-cpp';}
480
+ dp.sh.Brushes.Cpp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Cpp.Aliases=['cpp','c','c++'];dp.sh.Brushes.CSS=function()
481
+ {var keywords='ascent azimuth background-attachment background-color background-image background-position '+'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top '+'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color '+'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width '+'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color '+'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display '+'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font '+'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top '+'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans '+'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page '+'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position '+'quotes richness right size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress '+'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em '+'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';var values='above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';this.regexList=[{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\#[a-zA-Z0-9]{3,6}','g'),css:'colors'},{regex:new RegExp('(\\d+)(px|pt|\:)','g'),css:'string'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(values),'g'),css:'string'},{regex:new RegExp(this.GetKeywords(fonts),'g'),css:'string'}];this.CssClass='dp-css';}
482
+ dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=['css'];dp.sh.Brushes.JScript=function()
483
+ {var keywords='abstract boolean break byte case catch char class const continue debugger '+'default delete do double else enum export extends false final finally float '+'for function goto if implements import in instanceof int interface long native '+'new null package private protected public return short static super switch '+'synchronized this throw throws transient true try typeof var void volatile while with';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}
484
+ dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=['js','jscript','javascript'];dp.sh.Brushes.Java=function()
485
+ {var keywords='abstract assert boolean break byte case catch char class const '+'continue default do double else enum extends '+'false final finally float for goto if implements import '+'instanceof int interface long native new null '+'package private protected public return '+'short static strictfp super switch synchronized this throw throws true '+'transient try void volatile while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b','gi'),css:'number'},{regex:new RegExp('(?!\\@interface\\b)\\@[\\$\\w]+\\b','g'),css:'annotation'},{regex:new RegExp('\\@interface\\b','g'),css:'keyword'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-j';}
486
+ dp.sh.Brushes.Java.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Java.Aliases=['java'];dp.sh.Brushes.Php=function()
487
+ {var funcs='abs acos acosh addcslashes addslashes '+'array_change_key_case array_chunk array_combine array_count_values array_diff '+'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+'array_push array_rand array_reduce array_reverse array_search array_shift '+'array_slice array_splice array_sum array_udiff array_udiff_assoc '+'array_udiff_uassoc array_uintersect array_uintersect_assoc '+'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+'strtoupper strtr strval substr substr_compare';var keywords='and or xor __FILE__ __LINE__ array as break case '+'cfunction class const continue declare default die do else '+'elseif empty enddeclare endfor endforeach endif endswitch endwhile '+'extends for foreach function include include_once global if '+'new old_function return static switch use require require_once '+'var while __FUNCTION__ __CLASS__ '+'__METHOD__ abstract interface public implements extends private protected throw';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\$\\w+','g'),css:'vars'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}
488
+ dp.sh.Brushes.Php.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Php.Aliases=['php'];dp.sh.Brushes.Python=function()
489
+ {var keywords='and assert break class continue def del elif else except exec '+'finally for from global if import in is lambda not or object pass print '+'raise return try yield while';var builtins='self __builtin__ __dict__ __future__ __methods__ __members__ __author__ __email__ __version__'+'__class__ __bases__ __import__ __main__ __name__ __doc__ __self__ __debug__ __slots__ '+'abs append apply basestring bool buffer callable chr classmethod clear close cmp coerce compile complex '+'conjugate copy count delattr dict dir divmod enumerate Ellipsis eval execfile extend False file fileno filter float flush '+'get getattr globals has_key hasarttr hash hex id index input insert int intern isatty isinstance isubclass '+'items iter keys len list locals long map max min mode oct open ord pop pow property range '+'raw_input read readline readlines reduce reload remove repr reverse round seek setattr slice sum '+'staticmethod str super tell True truncate tuple type unichr unicode update values write writelines xrange zip';var magicmethods='__abs__ __add__ __and__ __call__ __cmp__ __coerce__ __complex__ __concat__ __contains__ __del__ __delattr__ __delitem__ '+'__delslice__ __div__ __divmod__ __float__ __getattr__ __getitem__ __getslice__ __hash__ __hex__ __eq__ __le__ __lt__ __gt__ __ge__ '+'__iadd__ __isub__ __imod__ __idiv__ __ipow__ __iand__ __ior__ __ixor__ __ilshift__ __irshift__ '+'__invert__ __init__ __int__ __inv__ __iter__ __len__ __long__ __lshift__ __mod__ __mul__ __new__ __neg__ __nonzero__ __oct__ __or__ '+'__pos__ __pow__ __radd__ __rand__ __rcmp__ __rdiv__ __rdivmod__ __repeat__ __repr__ __rlshift__ __rmod__ __rmul__ '+'__ror__ __rpow__ __rrshift__ __rshift__ __rsub__ __rxor__ __setattr__ __setitem__ __setslice__ __str__ __sub__ __xor__';var exceptions='Exception StandardError ArithmeticError LookupError EnvironmentError AssertionError AttributeError EOFError '+'FutureWarning IndentationError OverflowWarning PendingDeprecationWarning ReferenceError RuntimeWarning '+'SyntaxWarning TabError UnicodeDecodeError UnicodeEncodeError UnicodeTranslateError UserWarning Warning '+'IOError ImportError IndexError KeyError KeyboardInterrupt MemoryError NameError NotImplementedError OSError '+'RuntimeError StopIteration SyntaxError SystemError SystemExit TypeError UnboundLocalError UnicodeError ValueError '+'FloatingPointError OverflowError WindowsError ZeroDivisionError';var types='NoneType TypeType IntType LongType FloatType ComplexType StringType UnicodeType BufferType TupleType ListType '+'DictType FunctionType LambdaType CodeType ClassType UnboundMethodType InstanceType MethodType BuiltinFunctionType BuiltinMethodType '+'ModuleType FileType XRangeType TracebackType FrameType SliceType EllipsisType';var commonlibs='anydbm array asynchat asyncore AST base64 binascii binhex bisect bsddb buildtools bz2 '+'BaseHTTPServer Bastion calendar cgi cmath cmd codecs codeop commands compiler copy copy_reg '+'cPickle crypt cStringIO csv curses Carbon CGIHTTPServer ConfigParser Cookie datetime dbhash '+'dbm difflib dircache distutils doctest DocXMLRPCServer email encodings errno exceptions fcntl '+'filecmp fileinput ftplib gc gdbm getopt getpass glob gopherlib gzip heapq htmlentitydefs '+'htmllib httplib HTMLParser imageop imaplib imgfile imghdr imp inspect itertools jpeg keyword '+'linecache locale logging mailbox mailcap marshal math md5 mhlib mimetools mimetypes mimify mmap '+'mpz multifile mutex MimeWriter netrc new nis nntplib nsremote operator optparse os parser pickle pipes '+'popen2 poplib posix posixfile pprint preferences profile pstats pwd pydoc pythonprefs quietconsole '+'quopri Queue random re readline resource rexec rfc822 rgbimg sched select sets sgmllib sha shelve shutil '+'signal site smtplib socket stat statcache string struct symbol sys syslog SimpleHTTPServer '+'SimpleXMLRPCServer SocketServer StringIO tabnanny tarfile telnetlib tempfile termios textwrap '+'thread threading time timeit token tokenize traceback tty types Tkinter unicodedata unittest '+'urllib urllib2 urlparse user UserDict UserList UserString warnings weakref webbrowser whichdb '+'xml xmllib xmlrpclib xreadlines zipfile zlib';this.regexList=[{regex:new RegExp('#.*$','gm'),css:'comment'},{regex:new RegExp('"""(.|\n)*?"""','gm'),css:'string'},{regex:new RegExp("'''(.|\n)*?'''",'gm'),css:'string'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(builtins),'gm'),css:'builtins'},{regex:new RegExp(this.GetKeywords(magicmethods),'gm'),css:'magicmethods'},{regex:new RegExp(this.GetKeywords(exceptions),'gm'),css:'exceptions'},{regex:new RegExp(this.GetKeywords(types),'gm'),css:'types'},{regex:new RegExp(this.GetKeywords(commonlibs),'gm'),css:'commonlibs'}];this.CssClass='dp-py';}
490
+ dp.sh.Brushes.Python.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Python.Aliases=['py','python'];dp.sh.Brushes.Ruby=function()
491
+ {var keywords='alias and BEGIN begin break case class def define_method defined do each else elsif '+'END end ensure false for if in module new next nil not or raise redo rescue retry return '+'self super then throw true undef unless until when while yield';var builtins='Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload '+'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol '+'ThreadGroup Thread Time TrueClass'
492
+ this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(':[a-z][A-Za-z0-9_]*','g'),css:'symbol'},{regex:new RegExp('[\\$|@|@@]\\w+','g'),css:'variable'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(builtins),'gm'),css:'builtin'}];this.CssClass='dp-rb';}
493
+ dp.sh.Brushes.Ruby.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Ruby.Aliases=['ruby','rails'];dp.sh.Brushes.Sql=function()
494
+ {var funcs='abs avg case cast coalesce convert count current_timestamp '+'current_user day isnull left lower month nullif replace right '+'session_user space substring sum system_user upper user year';var keywords='absolute action add after alter as asc at authorization begin bigint '+'binary bit by cascade char character check checkpoint close collate '+'column commit committed connect connection constraint contains continue '+'create cube current current_date current_time cursor database date '+'deallocate dec decimal declare default delete desc distinct double drop '+'dynamic else end end-exec escape except exec execute false fetch first '+'float for force foreign forward free from full function global goto grant '+'group grouping having hour ignore index inner insensitive insert instead '+'int integer intersect into is isolation key last level load local max min '+'minute modify move name national nchar next no numeric of off on only '+'open option order out output partial password precision prepare primary '+'prior privileges procedure public read real references relative repeatable '+'restrict return returns revoke rollback rollup rows rule schema scroll '+'second section select sequence serializable set size smallint static '+'statistics table temp temporary then time timestamp to top transaction '+'translation trigger true truncate uncommitted union unique update values '+'varchar varying view when where with work';var operators='all and any between cross in join like not null or outer some';this.regexList=[{regex:new RegExp('--(.*)$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(operators),'gmi'),css:'op'},{regex:new RegExp(this.GetKeywords(keywords),'gmi'),css:'keyword'}];this.CssClass='dp-sql';}
495
+ dp.sh.Brushes.Sql.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Sql.Aliases=['sql'];dp.sh.Brushes.Xml=function()
496
+ {this.CssClass='dp-xml';}
497
+ dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=['xml','xhtml','xslt','html','xhtml'];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function()
498
+ {function push(array,value)
499
+ {array[array.length]=value;}
500
+ var index=0;var match=null;var regex=null;this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>','gm'),'cdata');this.GetMatches(new RegExp('<!--\\s*.*\\s*?-->','gm'),'comments');regex=new RegExp('([:\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*','gm');while((match=regex.exec(this.code))!=null)
501
+ {push(this.matches,new dp.sh.Match(match[1],match.index,'attribute'));if(match[2]!=undefined)
502
+ {push(this.matches,new dp.sh.Match(match[2],match.index+match[0].indexOf(match[2]),'attribute-value'));}}
503
+ this.GetMatches(new RegExp('</*\\?*(?!\\!)|/*\\?*>','gm'),'tag');regex=new RegExp('</*\\?*\\s*([:\\w-\.]+)','gm');while((match=regex.exec(this.code))!=null)
504
+ {push(this.matches,new dp.sh.Match(match[1],match.index+match[0].indexOf(match[1]),'tag-name'));}}
505
+ if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i]}return this.length}}if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0;i<this.length-1;i++){this[i]=this[i+1]}this.length=this.length-1;return firstItem}}}if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0;i<arguments.length;i++){argumentsArray[i]=arguments[i]}var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0;i<itemsToAppend.length;i++){this.push(itemsToAppend[i])}return itemsDeleted}}var log4javascript;var SimpleDateFormat;(function(){function isUndefined(obj){return typeof obj=="undefined"}(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];var dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,Y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;Date.prototype.getDifference=function(date){return this.getTime()-date.getTime()};Date.prototype.isBefore=function(d){return this.getTime()<d.getTime()};Date.prototype.getWeekInYear=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK}var previousSunday=new Date(this.getTime()-this.getDay()*ONE_DAY);previousSunday=new Date(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());var startOfYear=new Date(this.getFullYear(),0,1);var numberOfSundays=previousSunday.isBefore(startOfYear)?0:1+Math.floor((previousSunday.getTime()-startOfYear.getTime())/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfYear.getDay();var weekInYear=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInYear++}return weekInYear};Date.prototype.getWeekInMonth=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK}var previousSunday=new Date(this.getTime()-this.getDay()*ONE_DAY);previousSunday=new Date(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());var startOfMonth=new Date(this.getFullYear(),this.getMonth(),1);var numberOfSundays=previousSunday.isBefore(startOfMonth)?0:1+Math.floor((previousSunday.getTime()-startOfMonth.getTime())/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfMonth.getDay();var weekInMonth=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInMonth++}return weekInMonth};Date.prototype.getDayInYear=function(){var startOfYear=new Date(this.getFullYear(),0,1);return 1+Math.floor((this.getTime()-startOfYear.getTime())/ONE_DAY)};SimpleDateFormat=function(formatString){this.formatString=formatString};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(days){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek};SimpleDateFormat.prototype.format=function(date){var formattedString="";var result;var padWithZeroes=function(str,len){while(str.length<len){str="0"+str}return str};var formatText=function(data,numberOfLetters,minLength){return(numberOfLetters>=4)?data:data.substr(0,Math.max(minLength,numberOfLetters))};var formatNumber=function(data,numberOfLetters){var dataString=""+data;return padWithZeroes(dataString,numberOfLetters)};var searchString=this.formatString;while((result=regex.exec(searchString))){var matchedString=result[0];var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString=="''"){formattedString+="'"}else{formattedString+=quotedString.substring(1,quotedString.length-1)}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData="";switch(patternLetter){case"G":rawData="AD";break;case"y":rawData=date.getFullYear();break;case"M":rawData=date.getMonth();break;case"w":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case"W":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case"D":rawData=date.getDayInYear();break;case"d":rawData=date.getDate();break;case"F":rawData=1+Math.floor((date.getDate()-1)/7);break;case"E":rawData=dayNames[date.getDay()];break;case"a":rawData=(date.getHours()>=12)?"PM":"AM";break;case"H":rawData=date.getHours();break;case"k":rawData=1+date.getHours();break;case"K":rawData=date.getHours()%12;break;case"h":rawData=1+(date.getHours()%12);break;case"m":rawData=date.getMinutes();break;case"s":rawData=date.getSeconds();break;case"S":rawData=date.getMilliseconds();break;case"Z":rawData=date.getTimezoneOffset();break}switch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=2){var dataString=""+rawData;formattedString+=dataString.substr(2,2)}else{formattedString+=formatNumber(rawData,numberOfLetters)}break;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters)}else{formattedString+=formatNumber(rawData+1,numberOfLetters)}break;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?"-":"+";var absData=Math.abs(rawData);var hours=""+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=""+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break}}searchString=searchString.substr(result.index+result[0].length)}return formattedString}})();var applicationStartDate=new Date();var uniqueId="log4javascript_"+applicationStartDate.getTime()+"_"+Math.floor(Math.random()*100000000);var emptyFunction=function(){};var newLine="\r\n";log4javascript={};log4javascript.version="1.3.1";function getExceptionStringRep(ex){if(ex){var exStr="Exception: ";if(ex.message){exStr+=ex.message}else if(ex.description){exStr+=ex.description}if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber}if(ex.fileName){exStr+=" in file "+ex.fileName}if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack}return exStr}return null}function formatObjectExpansion(obj,depth,indentation){var i,output,childDepth,childIndentation,childLines;if((obj instanceof Array)&&depth>0){if(!indentation){indentation=""}output="["+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i=0;i<obj.length;i++){childLines.push(childIndentation+formatObjectExpansion(obj[i],childDepth,childIndentation))}output+=childLines.join(","+newLine)+newLine+indentation+"]";return output}else if(typeof obj=="object"&&depth>0){if(!indentation){indentation=""}output=""+"{"+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i in obj){childLines.push(childIndentation+i+": "+formatObjectExpansion(obj[i],childDepth,childIndentation))}output+=childLines.join(","+newLine)+newLine+indentation+"}";return output}else if(typeof obj=="string"){return obj}else{return obj.toString()}}function escapeNewLines(str){return str.replace(/\r\n|\r|\n/g,"\\r\\n")}function urlEncode(str){return escape(str).replace(/\+/g,"%2B").replace(/"/g,"%22").replace(/'/g,"%27").replace(/\//g,"%2F")}function bool(obj){return Boolean(obj)}function array_remove(arr,val){var index=-1;for(var i=0;i<arr.length;i++){if(arr[i]===val){index=i;break}}if(index>=0){arr.splice(index,1);return true}else{return false}}function extractBooleanFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue}else{return bool(param)}}function extractStringFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue}else{return String(param)}}function extractIntFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue}else{try{var value=parseInt(param,10);return isNaN(value)?defaultValue:value}catch(ex){logLog.warn("Invalid int param "+param,ex);return defaultValue}}}function extractFunctionFromParam(param,defaultValue){if(typeof param=="function"){return param}else{return defaultValue}}var logLog={quietMode:false,setQuietMode:function(quietMode){this.quietMode=bool(quietMode)},numberOfErrors:0,alertAllErrors:false,setAlertAllErrors:function(alertAllErrors){this.alertAllErrors=alertAllErrors},debug:function(message,exception){},warn:function(message,exception){},error:function(message,exception){if(++this.numberOfErrors==1||this.alertAllErrors){if(!this.quietMode){var alertMessage="log4javascript error: "+message;if(exception){alertMessage+=newLine+newLine+"Original error: "+getExceptionStringRep(exception)}alert(alertMessage)}}}};log4javascript.logLog=logLog;var errorListeners=[];log4javascript.addErrorListener=function(listener){if(typeof listener=="function"){errorListeners.push(listener)}else{handleError("addErrorListener: listener supplied was not a function")}};log4javascript.removeErrorListener=function(listener){array_remove(errorListeners,listener)};function handleError(message,exception){logLog.error(message,exception);for(var i=0;i<errorListeners.length;i++){errorListeners[i](message,exception)}}var enabled=(typeof log4javascript_disabled!="undefined")&&log4javascript_disabled?false:true;log4javascript.setEnabled=function(enable){enabled=bool(enable)};log4javascript.isEnabled=function(){return enabled};log4javascript.evalInScope=function(expr){return eval(expr)};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show)};function Logger(name){this.name=name;var appenders=[];var loggerLevel=Level.DEBUG;this.addAppender=function(appender){if(appender instanceof log4javascript.Appender){appenders.push(appender)}else{handleError("Logger.addAppender: appender supplied is not a subclass of Appender")}};this.removeAppender=function(appender){array_remove(appenders,appender)};this.removeAllAppenders=function(appender){appenders.length=0};this.log=function(level,message,exception){if(level.isGreaterOrEqual(loggerLevel)){var loggingEvent=new LoggingEvent(this,new Date(),level,message,exception);for(var i=0;i<appenders.length;i++){appenders[i].doAppend(loggingEvent)}}};this.setLevel=function(level){loggerLevel=level};this.getLevel=function(){return loggerLevel}}Logger.prototype={trace:function(message,exception){this.log(Level.TRACE,message,exception)},debug:function(message,exception){this.log(Level.DEBUG,message,exception)},info:function(message,exception){this.log(Level.INFO,message,exception)},warn:function(message,exception){this.log(Level.WARN,message,exception)},error:function(message,exception){this.log(Level.ERROR,message,exception)},fatal:function(message,exception){this.log(Level.FATAL,message,exception)}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};log4javascript.getLogger=function(loggerName){if(!(typeof loggerName=="string")){loggerName="[anonymous]"}if(!loggers[loggerName]){loggers[loggerName]=new Logger(loggerName)}return loggers[loggerName]};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=log4javascript.getLogger("[default]");var a=new log4javascript.PopUpAppender();defaultLogger.addAppender(a)}return defaultLogger};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=log4javascript.getLogger("[null]")}return nullLogger};var Level=function(level,name){this.level=level;this.name=name};Level.prototype={toString:function(){return this.name},equals:function(level){return this.level==level.level},isGreaterOrEqual:function(level){return this.level>=level.level}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;var LoggingEvent=function(logger,timeStamp,level,message,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInSeconds=Math.floor(timeStamp.getTime()/1000);this.level=level;this.message=message;this.exception=exception};LoggingEvent.prototype.getThrowableStrRep=function(){return this.exception?getExceptionStringRep(this.exception):""};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:"logger",timeStampKey:"timestamp",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url"},loggerKey:"logger",timeStampKey:"timestamp",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url",batchHeader:"",batchFooter:"",batchSeparator:"",format:function(loggingEvent){handleError("Layout.format: layout supplied has no format() method")},ignoresThrowable:function(){handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method")},getContentType:function(){return"text/plain"},allowBatching:function(){return true},getDataValues:function(loggingEvent){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,loggingEvent.timeStampInSeconds],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,loggingEvent.message]];if(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)])}if(this.hasCustomFields()){for(var i=0;i<this.customFields.length;i++){dataValues.push([this.customFields[i].name,this.customFields[i].value])}}return dataValues},setKeys:function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey){this.loggerKey=extractStringFromParam(loggerKey,this.defaults.loggerKey);this.timeStampKey=extractStringFromParam(timeStampKey,this.defaults.timeStampKey);this.levelKey=extractStringFromParam(levelKey,this.defaults.levelKey);this.messageKey=extractStringFromParam(messageKey,this.defaults.messageKey);this.exceptionKey=extractStringFromParam(exceptionKey,this.defaults.exceptionKey);this.urlKey=extractStringFromParam(urlKey,this.defaults.urlKey)},setCustomField:function(name,value){var fieldUpdated=false;for(var i=0;i<this.customFields.length;i++){if(this.customFields[i].name===name){this.customFields[i].value=value;fieldUpdated=true}}if(!fieldUpdated){this.customFields.push({"name":name,"value":value})}},hasCustomFields:function(){return(this.customFields.length>0)}};log4javascript.Layout=Layout;var SimpleLayout=function(){this.customFields=[]};SimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+" - "+loggingEvent.message};SimpleLayout.prototype.ignoresThrowable=function(loggingEvent){return true};log4javascript.SimpleLayout=SimpleLayout;var NullLayout=function(){this.customFields=[]};NullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.message};NullLayout.prototype.ignoresThrowable=function(loggingEvent){return true};log4javascript.NullLayout=NullLayout;var XmlLayout=function(){this.customFields=[]};XmlLayout.prototype=new Layout();XmlLayout.prototype.getContentType=function(){return"text/xml"};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\]\]>/,"]]>]]&gt;<![CDATA[")};XmlLayout.prototype.format=function(loggingEvent){var str="<log4javascript:event logger=\""+loggingEvent.logger.name+"\" timestamp=\""+loggingEvent.timeStampInSeconds+"\" level=\""+loggingEvent.level.name+"\">"+newLine+"<log4javascript:message><![CDATA["+this.escapeCdata(loggingEvent.message.toString())+"]]></log4javascript:message>"+newLine;if(this.hasCustomFields()){for(var i=0;i<this.customFields.length;i++){str+="<log4javascript:customfield name=\""+this.customFields[i].name+"\"><![CDATA["+this.customFields[i].value.toString()+"]]></log4javascript:customfield>"+newLine}}if(loggingEvent.exception){str+="<log4javascript:exception><![CDATA["+getExceptionStringRep(loggingEvent.exception)+"]]></log4javascript:exception>"+newLine}str+="</log4javascript:event>"+newLine+newLine;return str};XmlLayout.prototype.ignoresThrowable=function(loggingEvent){return false};log4javascript.XmlLayout=XmlLayout;var JsonLayout=function(readable,loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey){this.readable=bool(readable);this.batchHeader=this.readable?"["+newLine:"[";this.batchFooter=this.readable?"]"+newLine:"]";this.batchSeparator=this.readable?","+newLine:",";this.setKeys(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey);this.propertySeparator=this.readable?", ":",";this.colon=this.readable?": ":":";this.customFields=[]};JsonLayout.prototype=new Layout();JsonLayout.prototype.setReadable=function(readable){this.readable=bool(readable)};JsonLayout.prototype.isReadable=function(){return this.readable};JsonLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var str="{";if(this.readable){str+=newLine}for(var i=0;i<dataValues.length;i++){if(this.readable){str+="\t"}var valType=typeof dataValues[i][1];var val=(valType!="number"&&valType!="boolean")?"\""+escapeNewLines(dataValues[i][1].toString().replace(/\"/g,"\\\""))+"\"":dataValues[i][1];str+="\""+dataValues[i][0]+"\""+this.colon+val;if(i<dataValues.length-1){str+=this.propertySeparator}if(this.readable){str+=newLine}}str+="}";if(this.readable){str+=newLine}return str};JsonLayout.prototype.ignoresThrowable=function(loggingEvent){return false};log4javascript.JsonLayout=JsonLayout;var HttpPostDataLayout=function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey){this.setKeys(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey);this.customFields=[]};HttpPostDataLayout.prototype=new Layout();HttpPostDataLayout.prototype.allowBatching=function(){return false};HttpPostDataLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var queryBits=[];for(var i=0;i<dataValues.length;i++){queryBits.push(urlEncode(dataValues[i][0])+"="+urlEncode(dataValues[i][1]))}return queryBits.join("&")};HttpPostDataLayout.prototype.ignoresThrowable=function(loggingEvent){return false};log4javascript.HttpPostDataLayout=HttpPostDataLayout;var PatternLayout=function(pattern){if(pattern){this.pattern=pattern}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN}this.customFields=[]};PatternLayout.TTCC_CONVERSION_PATTERN="%r %p %c - %m%n";PatternLayout.DEFAULT_CONVERSION_PATTERN="%m%n";PatternLayout.ISO8601_DATEFORMAT="yyyy-MM-dd HH:mm:ss,SSS";PatternLayout.DATETIME_DATEFORMAT="dd MMM yyyy HH:mm:ss,SSS";PatternLayout.ABSOLUTETIME_DATEFORMAT="HH:mm:ss,SSS";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\.?[0-9]+)?([cdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;var formattedString="";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=""+text}else{var replacement="";switch(conversionCharacter){case"c":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(".");if(precision>=loggerNameBits.length){replacement=loggerName}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(".")}}else{replacement=loggerName}break;case"d":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat=="ISO8601"){dateFormat=PatternLayout.ISO8601_DATEFORMAT}else if(dateFormat=="ABSOLUTE"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT}else if(dateFormat=="DATE"){dateFormat=PatternLayout.DATETIME_DATEFORMAT}}replacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case"f":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError("PatternLayout.format: invalid specifier '"+specifier+"' for conversion character 'f' - should be a number")}else if(fieldIndex===0){handleError("PatternLayout.format: invalid specifier '"+specifier+"' for conversion character 'f' - must be greater than zero")}else if(fieldIndex>this.customFields.length){handleError("PatternLayout.format: invalid specifier '"+specifier+"' for conversion character 'f' - there aren't that many custom fields")}else{fieldIndex=fieldIndex-1}}replacement=this.customFields[fieldIndex].value}break;case"m":if(specifier){var depth=parseInt(specifier,10);if(isNaN(depth)){handleError("PatternLayout.format: invalid specifier '"+specifier+"' for conversion character 'm' - should be a number");replacement=loggingEvent.message}else{replacement=formatObjectExpansion(loggingEvent.message,depth)}}else{replacement=loggingEvent.message}break;case"n":replacement=newLine;break;case"p":replacement=loggingEvent.level.name;break;case"r":replacement=""+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case"%":replacement="%";break;default:replacement=matchedString;break}var len;if(truncation){len=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(len<strLen){replacement=replacement.substring(strLen-len,strLen)}}if(padding){if(padding.charAt(0)=="-"){len=parseInt(padding.substr(1),10);while(replacement.length<len){replacement+=" "}}else{len=parseInt(padding,10);while(replacement.length<len){replacement=" "+replacement}}}formattedString+=replacement}searchString=searchString.substr(result.index+result[0].length)}return formattedString};PatternLayout.prototype.ignoresThrowable=function(loggingEvent){return true};log4javascript.PatternLayout=PatternLayout;var Appender=function(){};Appender.prototype={layout:new PatternLayout(),threshold:Level.ALL,doAppend:function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent)}},append:function(loggingEvent){},setLayout:function(layout){if(layout instanceof Layout){this.layout=layout}else{handleError("Appender.setLayout: layout supplied to "+this.toString()+" is not a subclass of Layout")}},getLayout:function(){return this.layout},setThreshold:function(threshold){if(threshold instanceof Level){this.threshold=threshold}else{handleError("Appender.setThreshold: threshold supplied to "+this.toString()+" is not a subclass of Level")}},getThreshold:function(){return this.threshold},toString:function(){return"[Base Appender]"}};log4javascript.Appender=Appender;var AlertAppender=function(layout){if(layout){this.setLayout(layout)}};AlertAppender.prototype=new Appender();AlertAppender.prototype.layout=new SimpleLayout();AlertAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep()}alert(formattedMessage)};AlertAppender.prototype.toString=function(){return"[AlertAppender]"};log4javascript.AlertAppender=AlertAppender;var AjaxAppender=function(url,layout,timed,waitForResponse,batchSize,timerInterval,requestSuccessCallback,failCallback){var appender=this;var isSupported=true;if(!url){handleError("AjaxAppender: URL must be specified in constructor");isSupported=false}timed=extractBooleanFromParam(timed,this.defaults.timed);waitForResponse=extractBooleanFromParam(waitForResponse,this.defaults.waitForResponse);batchSize=extractIntFromParam(batchSize,this.defaults.batchSize);timerInterval=extractIntFromParam(timerInterval,this.defaults.timerInterval);requestSuccessCallback=extractFunctionFromParam(requestSuccessCallback,this.defaults.requestSuccessCallback);failCallback=extractFunctionFromParam(failCallback,this.defaults.failCallback);var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError("AjaxAppender: configuration option '"+configOptionName+"' may not be set after the appender has been initialized");return false}return true}this.getSessionId=function(){return sessionId};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField("sessionid",sessionId)};this.setLayout=function(layout){if(checkCanConfigure("layout")){this.layout=layout;if(sessionId!==null){this.setSessionId(sessionId)}}};if(layout){this.setLayout(layout)}this.isTimed=function(){return timed};this.setTimed=function(timedParam){if(checkCanConfigure("timed")){timed=bool(timedParam)}};this.getTimerInterval=function(){return timerInterval};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure("timerInterval")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval)}};this.isWaitForResponse=function(){return waitForResponse};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure("waitForResponse")){waitForResponse=bool(waitForResponseParam)}};this.getBatchSize=function(){return batchSize};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure("batchSize")){batchSize=extractIntFromParam(batchSizeParam,batchSize)}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback)};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback)};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll)}else{sending=false;if(timed){scheduleSending()}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch))}sending=false;if(timed){scheduleSending()}}}}this.sendAll=sendAll;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData="";while((currentLoggingEvent=batchedLoggingEvents.shift())){var currentFormattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){currentFormattedMessage+=loggingEvent.getThrowableStrRep()}formattedMessages.push(currentFormattedMessage)}if(batchedLoggingEvents.length==1){postData=formattedMessages.join("")}else{postData=appender.getLayout().batchHeader+formattedMessages.join(appender.getLayout().batchSeparator)+appender.getLayout().batchFooter}return postData}function scheduleSending(){setTimeout(sendAll,timerInterval)}function getXmlHttp(){var xmlHttp=null;if(typeof XMLHttpRequest=="object"||typeof XMLHttpRequest=="function"){xmlHttp=new XMLHttpRequest()}else{try{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP")}catch(e2){try{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")}catch(e3){var msg="AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg)}}}}return xmlHttp}function sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp();if(isSupported){if(xmlHttp.overrideMimeType){xmlHttp.overrideMimeType(appender.getLayout().getContentType())}xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){var success=(isUndefined(xmlHttp.status)||xmlHttp.status===0||(xmlHttp.status>=200&&xmlHttp.status<300));if(success){if(requestSuccessCallback){requestSuccessCallback(xmlHttp)}if(successCallback){successCallback(xmlHttp)}}else{var msg="AjaxAppender.append: XMLHttpRequest request to URL "+url+" returned status code "+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg)}}xmlHttp.onreadystatechange=emptyFunction;xmlHttp=null}};xmlHttp.open("POST",url,true);try{xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}catch(headerEx){var msg="AjaxAppender.append: your browser's XMLHttpRequest implementation"+" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg)}return}xmlHttp.send(postData)}}catch(ex){var msg="AjaxAppender.append: error sending log message to "+url;handleError(msg,ex);if(failCallback){failCallback(msg+". Details: "+getExceptionStringRep(ex))}}}this.append=function(loggingEvent){if(isSupported){if(!initialized){init()}queuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var postData="";var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent)}queuedRequests.push(batchedLoggingEvents);if(!timed){if(!waitForResponse||(waitForResponse&&!sending)){sendAll()}}}}};function init(){initialized=true;if(timed){scheduleSending()}}};AjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,requestSuccessCallback:null,failCallback:null};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return"[AjaxAppender]"};log4javascript.AjaxAppender=AjaxAppender;(function(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked)}function setLoggingEnabled(enable){loggingEnabled=enable}var newestAtTop=false;function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var lc=getLogContainer();var numberOfEntries=lc.childNodes.length;var node=null;var logContainerChildNodes=[];while((node=lc.firstChild)){lc.removeChild(node);logContainerChildNodes.push(node)}while((node=logContainerChildNodes.pop())){lc.appendChild(node)}if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(var i=0;i<logEntryMatches.length;i++){matches[matchIndex]=logEntryMatches[i];if(currentMatch&&logEntryMatches[i].equals(currentMatch)){currentMatchIndex=matchIndex}matchIndex++}};var i;if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i])}}else{for(i=0;i<logEntries.length;i++){actOnLogEntry(logEntries[i])}}currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent()}}else if(scrollToLatest){doScrollToLatest()}}$("newestAtTop").checked=isNewestAtTop}function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop)}var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest()}$("scrollToLatest").checked=isScrollToLatest}function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest)}function doScrollToLatest(){var l=getLogContainer();if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight}}}}var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries()}var logQueuedEventsTimer=null;var logEntries=[];var isCssWrapSupported;var renderDelay=100;function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer)}setTimeout(renderQueuedLogEntries,renderDelay)}}}function renderQueuedLogEntries(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0;i<logEntries.length;i++){if(!logEntries[i].isRendered){logEntries[i].render();logEntries[i].appendToLog();if(currentSearch){currentSearch.applyTo(logEntries[i])}}}if(currentSearch){if(pruned){if(currentSearch.hasMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0)}displayMatches()}else{displayNoMatches()}}else if(!initiallyHasMatches&&currentSearch.hasMatches()){setCurrentMatchIndex(0);displayMatches()}}if(scrollToLatest){doScrollToLatest()}}function pruneLogEntries(){if((maxMessages!==null)&&(logEntries.length>maxMessages)){var numberToDelete=logEntries.length-maxMessages;for(var i=0;i<numberToDelete;i++){logEntries[i].remove()}logEntries=array_removeFromStart(logEntries,numberToDelete);if(currentSearch){currentSearch.removePrunedMatches()}return true}return false}function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.isRendered=false}LogEntry.prototype={render:function(){this.mainDiv=document.createElement("div");this.mainDiv.className="logentry "+this.level.name;if(isCssWrapSupported){this.mainDiv.appendChild(document.createTextNode(this.formattedMessage))}else{this.formattedMessage=this.formattedMessage.replace(/\\r\\n/g,"\\r");this.unwrappedPre=this.mainDiv.appendChild(document.createElement("pre"));this.unwrappedPre.appendChild(document.createTextNode(this.formattedMessage));this.unwrappedPre.className="unwrapped";this.wrappedSpan=this.mainDiv.appendChild(document.createElement("span"));this.wrappedSpan.appendChild(document.createTextNode(this.formattedMessage));this.wrappedSpan.className="wrapped"}this.content=this.formattedMessage;this.isRendered=true},appendToLog:function(){var lc=getLogContainer();if(newestAtTop&&lc.hasChildNodes()){lc.insertBefore(this.mainDiv,lc.firstChild)}else{getLogContainer().appendChild(this.mainDiv)}},setContent:function(content){if(content!=this.content){if(getLogContainer().currentStyle){if(content===this.formattedMessage){this.unwrappedPre.innerHTML="";this.unwrappedPre.appendChild(document.createTextNode(this.formattedMessage));this.wrappedSpan.innerHTML="";this.wrappedSpan.appendChild(document.createTextNode(this.formattedMessage))}else{content=content.replace(/\\r\\n/g,"\\r");this.unwrappedPre.innerHTML=content;this.wrappedSpan.innerHTML=content}}else{if(content===this.formattedMessage){this.mainDiv.innerHTML="";this.mainDiv.appendChild(document.createTextNode(this.formattedMessage))}else{this.mainDiv.innerHTML=content}}this.content=content}},getSearchMatches:function(){var matches=[];if(isCssWrapSupported){var els=getElementsByClass(this.mainDiv,"searchterm","span");for(var i=0;i<els.length;i++){matches[i]=new Match(this.level,els[i])}}else{var unwrappedEls=getElementsByClass(this.unwrappedPre,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedSpan,"searchterm","span");for(i=0;i<unwrappedEls.length;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i])}}return matches},remove:function(){if(this.isRendered){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null}}};function mainPageReloaded(){var separator=document.createElement("div");separator.className="separator";separator.innerHTML="&nbsp;";getLogContainer().appendChild(separator)}window.onload=function(){isCssWrapSupported=(typeof getLogContainer().currentStyle=="undefined");setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogEntries();loaded=true;setTimeout(setLogContainerHeight,20);if(window!=top){$("closeButton").style.display="none"}};var loaded=false;var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel)}function getLogContainer(){return $("log")}function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(getLogContainer(),logLevels[i])}else{removeClass(getLogContainer(),logLevels[i])}}updateSearchFromFilters()}function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(getLogContainer(),logLevels[i])}else{removeClass(getLogContainer(),logLevels[i])}}}function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return}}getCheckBox("ALL").checked=true}function clearLog(){getLogContainer().innerHTML="";logEntries=[];doSearch()}function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(getLogContainer(),"wrap")}else{removeClass(getLogContainer(),"wrap")}refreshCurrentMatch()}var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer)}catch(ex){}searchTimer=setTimeout(doSearch,500)}function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[]}Search.prototype={hasMatches:function(){return this.matches.length>0},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<=this.matches.length;i++){if(this.matches[i].isVisible()){return true}}}return false},match:function(logEntry){var entryText=logEntry.formattedMessage;var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText)}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1)}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1)}return matchesSearch},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i}}for(var i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i}}return-1},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i}}for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i}}return-1},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){replaceClass(logEntry.mainDiv,"searchmatch","searchnonmatch");var logEntryContent;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);logEntryContent=logEntry.formattedMessage.replace(capturingRegex,"<span class=\\\"searchterm\\\">$1</span>")}else{logEntryContent="";var searchTermReplacementStartTag="<span class=\\\"searchterm\\\">";var searchTermReplacementEndTag="</span>";var searchTermReplacementLength=searchTermReplacementStartTag.length+this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var startIndex=0;var searchIndex;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){var searchTermReplacement=searchTermReplacementStartTag+logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length)+searchTermReplacementEndTag;logEntryContent+=logEntry.formattedMessage.substring(startIndex,searchIndex)+searchTermReplacement;startIndex=searchIndex+searchTermLength}logEntryContent+=logEntry.formattedMessage.substr(startIndex)}logEntry.setContent(logEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches)}else{replaceClass(logEntry.mainDiv,"searchnonmatch","searchmatch");logEntry.setContent(logEntry.formattedMessage)}return doesMatch},removePrunedMatches:function(){var matchesToRemoveCount=0;var currentMatchRemoved=false;for(var i=0;i<this.matches.length;i++){if(this.matches[i].isOrphan()){this.matches[i].remove();if(i===currentMatchIndex){currentMatchRemoved=true}matchesToRemoveCount++}}if(matchesToRemoveCount>0){array_removeFromStart(this.matches,matchesToRemoveCount);var newMatchIndex=currentMatchRemoved?0:currentMatchIndex-matchesToRemoveCount;if(this.hasMatches()){setCurrentMatchIndex(newMatchIndex)}else{currentMatchIndex=null}}}};function getPageOffsetTop(el){var currentEl=el;var y=0;while(currentEl){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent}return y}function scrollIntoView(el){getLogContainer().scrollLeft=el.offsetLeft;getLogContainer().scrollTop=getPageOffsetTop(el)-getToolBarsHeight()}function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedSpan){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(!isCssWrapSupported){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedSpan=spanInWrappedSpan}this.mainSpan=isCssWrapSupported?spanInMainDiv:spanInUnwrappedPre}Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan},setCurrent:function(){if(isCssWrapSupported){addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv)}else{addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedSpan,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedSpan:this.spanInUnwrappedPre;scrollIntoView(elementToScroll)}},setNotCurrent:function(){if(isCssWrapSupported){removeClass(this.spanInMainDiv,"currentmatch")}else{removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedSpan,"currentmatch")}},isOrphan:function(){return isOrphan(this.mainSpan)},isVisible:function(){return getCheckBox(this.logEntryLevel).checked},remove:function(){if(isCssWrapSupported){this.spanInMainDiv=null}else{this.spanInUnwrappedPre=null;this.spanInWrappedSpan=null}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){removeClass(logEntries[i].mainDiv,"searchmatch");removeClass(logEntries[i].mainDiv,"searchnonmatch");logEntries[i].setContent(logEntries[i].formattedMessage)}currentSearch=null;setLogContainerHeight()}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex"}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex")}addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i])}setLogContainerHeight();if(currentSearch.hasMatches()){setCurrentMatchIndex(0);displayMatches()}else{displayNoMatches()}}}function updateSearchFromFilters(){if(currentSearch&&currentSearch.hasMatches()){var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex)}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches()}else{displayNoMatches()}}}}function refreshCurrentMatch(){if(currentSearch&&currentSearch.hasMatches()){setCurrentMatchIndex(currentMatchIndex)}}function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight()}function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight()}function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!==""))?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(getLogContainer(),"searchhighlight")}else{removeClass(getLogContainer(),"searchhighlight")}if($("searchFilter").checked){addClass(getLogContainer(),"searchfilter")}else{removeClass(getLogContainer(),"searchfilter")}$("searchDisable").checked=!enable}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(getLogContainer(),"searchhighlight");removeClass(getLogContainer(),"searchfilter")}setLogContainerHeight()}function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(getLogContainer(),"searchfilter")}else{removeClass(getLogContainer(),"searchfilter")}refreshCurrentMatch()}function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(getLogContainer(),"searchhighlight")}else{removeClass(getLogContainer(),"searchhighlight")}}function clearSearch(){$("searchBox").value="";doSearch()}function searchNext(){try{if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex)}}}catch(err){alert("currentMatchIndex is "+currentMatchIndex)}}function searchPrevious(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex)}}}function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent()}function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass}else{el.className=cssClass}}}function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass)}return false}function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0;i<existingClasses.length;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i]}}el.className=newClasses.join(" ")}}function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass)}function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0;i<elements.length;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i])}}return matches}function $(id){return document.getElementById(id)}function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false}currentNode=currentNode.parentNode}return true}function getWindowWidth(){if(window.innerWidth){return window.innerWidth}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth}else if(document.body){return document.body.clientWidth}return 0}function getWindowHeight(){if(window.innerHeight){return window.innerHeight}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight}else if(document.body){return document.body.clientHeight}return 0}function getToolBarsHeight(){return $("switches").offsetHeight}function setLogContainerHeight(){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";getLogContainer().style.height=""+(windowHeight-getToolBarsHeight())+"px"}window.onresize=setLogContainerHeight;if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i]}return this.length}}if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val}}}if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0;i<this.length-1;i++){this[i]=this[i+1]}this.length=this.length-1;return firstItem}}}function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove)}else{for(var i=numberToRemove;i<array.length;i++){array[i-numberToRemove]=array[i]}array.length=array.length-numberToRemove}return array}function array_contains(arr,val){for(var i=0;i<arr.length;i++){if(arr[i]==val){return true}}return false}','//]]>','</script>','<style type="text/css">','body{background-color:white;color:black;padding:0px;margin:0px;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0px}div#switches div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div#switches div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div#switches input.button{padding:0px 5px;font-size:100%}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search{padding:5px 0px}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0px}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}*.greyedout{color:gray}*.greyedout *.alwaysenabled{color:black}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto}*.logentry{overflow:visible;display:none;white-space:pre}*.logentry pre.unwrapped{display:inline}*.logentry span.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0px 0px 1px 0px;border-color:#dddddd;border-style:dotted}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0px;line-height:1px}','</style>','</head>','<body id="body">','<div id="switchesContainer">','<div id="switches">','<div id="levels" class="toolbar">','Filters:','<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>','<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>','<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>','<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>','<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>','<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>','<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>','</div>','<div id="search" class="toolbar">','<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />','<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />','<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>','<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>','<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>','<div id="searchNav">','<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />','<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />','<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>','<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>','</div>','</div>','<div id="options" class="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="wrapLabel">Log</label>','<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>','<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>','<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />','<input type="button" id="closeButton" value="Close" onclick="window.close()" class="button" title="Close the window" />','</div>','</div>','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','</body>','</html>']};function ConsoleAppender(){}var consoleAppenderIdCounter=1;ConsoleAppender.prototype=new Appender();ConsoleAppender.prototype.create=function(inPage,containerElement,layout,lazyInit,focusConsoleWindow,useOldPopUp,complainAboutPopUpBlocking,newestMessageAtTop,scrollToLatestMessage,initiallyMinimized,width,height,reopenWhenClosed,maxMessages){var appender=this;if(layout){this.setLayout(layout)}else{this.setLayout(this.defaults.layout)}var initialized=false;var consoleWindowLoaded=false;var queuedLoggingEvents=[];var isSupported=true;var consoleAppenderId=consoleAppenderIdCounter++;lazyInit=extractBooleanFromParam(lazyInit,true);newestMessageAtTop=extractBooleanFromParam(newestMessageAtTop,this.defaults.newestMessageAtTop);scrollToLatestMessage=extractBooleanFromParam(scrollToLatestMessage,this.defaults.scrollToLatestMessage);width=width?width:this.defaults.width;height=height?height:this.defaults.height;maxMessages=maxMessages?maxMessages:this.defaults.maxMessages;var init,safeToAppend,getConsoleWindow;var appenderName=inPage?"InPageAppender":"PopUpAppender";var checkCanConfigure=function(configOptionName){if(initialized){handleError(appenderName+": configuration option '"+configOptionName+"' may not be set after the appender has been initialized");return false}return true};this.isNewestMessageAtTop=function(){return newestMessageAtTop};this.setNewestMessageAtTop=function(newestMessageAtTopParam){newestMessageAtTop=bool(newestMessageAtTopParam);if(consoleWindowLoaded&&isSupported){getConsoleWindow().setNewestAtTop(newestMessageAtTop)}};this.isScrollToLatestMessage=function(){return scrollToLatestMessage};this.setScrollToLatestMessage=function(scrollToLatestMessageParam){scrollToLatestMessage=bool(scrollToLatestMessageParam);if(consoleWindowLoaded&&isSupported){getConsoleWindow().setScrollToLatest(scrollToLatestMessage)}};this.getWidth=function(){return width};this.setWidth=function(widthParam){if(checkCanConfigure("width")){width=extractStringFromParam(widthParam,width)}};this.getHeight=function(){return height};this.setHeight=function(heightParam){if(checkCanConfigure("height")){height=extractStringFromParam(heightParam,height)}};this.getMaxMessages=function(){return maxMessages};this.setMaxMessages=function(maxMessagesParam){maxMessages=extractIntFromParam(maxMessagesParam,maxMessages);if(consoleWindowLoaded&&isSupported){getConsoleWindow().setMaxMessages(maxMessages)}};this.append=function(loggingEvent){if(isSupported){queuedLoggingEvents.push(loggingEvent);var isSafeToAppend=safeToAppend();if(!initialized||(consoleClosed&&reopenWhenClosed)){init()}if(safeToAppend()){appendQueuedLoggingEvents()}}};var appendQueuedLoggingEvents=function(loggingEvent){while(queuedLoggingEvents.length>0){var currentLoggingEvent=queuedLoggingEvents.shift();var formattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){formattedMessage+=currentLoggingEvent.getThrowableStrRep()}getConsoleWindow().log(currentLoggingEvent.level,formattedMessage)}if(focusConsoleWindow){getConsoleWindow().focus()}};var writeHtml=function(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0;i<lines.length;i++){doc.writeln(lines[i])}doc.close()};var consoleClosed=false;var pollConsoleWindow=function(windowTest,successCallback,errorMessage){function pollConsoleWindowLoaded(){try{if(consoleClosed){clearInterval(poll)}if(windowTest(getConsoleWindow())){clearInterval(poll);successCallback()}}catch(ex){clearInterval(poll);isSupported=false;handleError(errorMessage,ex)}}var poll=setInterval(pollConsoleWindowLoaded,100)};if(inPage){if(!containerElement||!containerElement.appendChild){isSupported=false;handleError("InPageAppender.init: a container DOM element must be supplied for the console window");return}initiallyMinimized=extractBooleanFromParam(initiallyMinimized,appender.defaults.initiallyMinimized);this.isInitiallyMinimized=function(){return initiallyMinimized};this.setInitiallyMinimized=function(initiallyMinimizedParam){if(checkCanConfigure("initiallyMinimized")){initiallyMinimized=bool(initiallyMinimizedParam)}};var minimized=false;var iframeContainerDiv;var iframeId=uniqueId+"_InPageAppender_"+consoleAppenderId;this.hide=function(){iframeContainerDiv.style.display="none";minimized=true};this.show=function(){iframeContainerDiv.style.display="block";minimized=false};this.isVisible=function(){return!minimized};this.close=function(){if(!consoleClosed){iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);consoleClosed=true}};init=function(){var initErrorMessage="InPageAppender.init: unable to create console iframe";function finalInit(){try{getConsoleWindow().setNewestAtTop(newestMessageAtTop);getConsoleWindow().setScrollToLatest(scrollToLatestMessage);getConsoleWindow().setMaxMessages(maxMessages);consoleWindowLoaded=true;appendQueuedLoggingEvents();if(initiallyMinimized){appender.hide()}}catch(ex){isSupported=false;handleError(initErrorMessage,ex)}}function writeToDocument(){try{var windowTest=function(win){return bool(win.loaded)};writeHtml(getConsoleWindow().document);if(windowTest(getConsoleWindow())){finalInit()}else{pollConsoleWindow(windowTest,finalInit,initErrorMessage)}}catch(ex){isSupported=false;handleError(initErrorMessage,ex)}}minimized=initiallyMinimized;iframeContainerDiv=containerElement.appendChild(document.createElement("div"));iframeContainerDiv.style.width=width;iframeContainerDiv.style.height=height;iframeContainerDiv.style.border="solid gray 1px";var iframeHtml="<iframe id='"+iframeId+"' name='"+iframeId+"' width='100%' height='100%' frameborder='0'"+"scrolling='no'></iframe>";iframeContainerDiv.innerHTML=iframeHtml;consoleClosed=false;var iframeDocumentExistsTest=function(win){return bool(win)&&bool(win.document)};if(iframeDocumentExistsTest(getConsoleWindow())){writeToDocument()}else{pollConsoleWindow(iframeDocumentExistsTest,writeToDocument,initErrorMessage)}initialized=true};getConsoleWindow=function(){var iframe=window.frames[iframeId];if(iframe){return iframe}};safeToAppend=function(){if(isSupported&&!consoleClosed){if(!consoleWindowLoaded&&getConsoleWindow()&&getConsoleWindow().loaded){consoleWindowLoaded=true}return consoleWindowLoaded}return false}}else{useOldPopUp=extractBooleanFromParam(useOldPopUp,appender.defaults.useOldPopUp);complainAboutPopUpBlocking=extractBooleanFromParam(complainAboutPopUpBlocking,appender.defaults.complainAboutPopUpBlocking);reopenWhenClosed=extractBooleanFromParam(reopenWhenClosed,this.defaults.reopenWhenClosed);this.isUseOldPopUp=function(){return useOldPopUp};this.setUseOldPopUp=function(useOldPopUpParam){if(checkCanConfigure("useOldPopUp")){useOldPopUp=bool(useOldPopUpParam)}};this.isComplainAboutPopUpBlocking=function(){return complainAboutPopUpBlocking};this.setComplainAboutPopUpBlocking=function(complainAboutPopUpBlockingParam){if(checkCanConfigure("complainAboutPopUpBlocking")){complainAboutPopUpBlocking=bool(complainAboutPopUpBlockingParam)}};this.isFocusPopUp=function(){return focusConsoleWindow};this.setFocusPopUp=function(focusPopUpParam){focusConsoleWindow=bool(focusPopUpParam)};this.isReopenWhenClosed=function(){return reopenWhenClosed};this.setReopenWhenClosed=function(reopenWhenClosedParam){reopenWhenClosed=bool(reopenWhenClosedParam)};this.close=function(){try{popUp.close()}catch(e){}consoleClosed=true};var popUp;init=function(){var windowProperties="width="+width+",height="+height+",status,resizable";var windowName="PopUp_"+location.host.replace(/[^a-z0-9]/gi,"_")+"_"+consoleAppenderId;if(!useOldPopUp){windowName=windowName+"_"+uniqueId}function finalInit(){consoleWindowLoaded=true;getConsoleWindow().setNewestAtTop(newestMessageAtTop);getConsoleWindow().setScrollToLatest(scrollToLatestMessage);getConsoleWindow().setMaxMessages(maxMessages);appendQueuedLoggingEvents()}try{popUp=window.open("",windowName,windowProperties);consoleClosed=false;if(popUp){if(useOldPopUp&&popUp.loaded){popUp.mainPageReloaded();finalInit()}else{writeHtml(popUp.document);var popUpLoadedTest=function(win){return bool(win)&&win.loaded};if(popUp.loaded){finalInit()}else{pollConsoleWindow(popUpLoadedTest,finalInit,"PopUpAppender.init: unable to create console window")}}}else{isSupported=false;logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");if(complainAboutPopUpBlocking){handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.")}}}catch(ex){handleError("PopUpAppender.init: error creating pop-up",ex)}initialized=true};getConsoleWindow=function(){return popUp};safeToAppend=function(){if(isSupported&&!isUndefined(popUp)&&!consoleClosed){if(popUp.closed||(consoleWindowLoaded&&isUndefined(popUp.closed))){consoleClosed=true;logLog.debug("PopUpAppender: pop-up closed");return false}if(!consoleWindowLoaded&&popUp.loaded){consoleWindowLoaded=true}}return isSupported&&consoleWindowLoaded&&!consoleClosed}}if(enabled&&!lazyInit){init()}this.getConsoleWindow=getConsoleWindow};var PopUpAppender=function(lazyInit,layout,focusPopUp,useOldPopUp,complainAboutPopUpBlocking,newestMessageAtTop,scrollToLatestMessage,reopenWhenClosed,width,height,maxMessages){var focusConsoleWindow=extractBooleanFromParam(focusPopUp,this.defaults.focusPopUp);this.create(false,null,layout,lazyInit,focusConsoleWindow,useOldPopUp,complainAboutPopUpBlocking,newestMessageAtTop,scrollToLatestMessage,null,width,height,reopenWhenClosed,maxMessages)};PopUpAppender.prototype=new ConsoleAppender();PopUpAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),focusPopUp:false,lazyInit:true,useOldPopUp:true,complainAboutPopUpBlocking:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"600",height:"400",reopenWhenClosed:false,maxMessages:null};PopUpAppender.prototype.toString=function(){return"[PopUpAppender]"};log4javascript.PopUpAppender=PopUpAppender;var InPageAppender=function(containerElement,lazyInit,layout,initiallyMinimized,newestMessageAtTop,scrollToLatestMessage,width,height,maxMessages){this.create(true,containerElement,layout,lazyInit,false,null,null,newestMessageAtTop,scrollToLatestMessage,initiallyMinimized,width,height,null,maxMessages)};InPageAppender.prototype=new ConsoleAppender();InPageAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,lazyInit:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"100%",height:"250px",maxMessages:null};InPageAppender.prototype.toString=function(){return"[InPageAppender]"};log4javascript.InPageAppender=InPageAppender;log4javascript.InlineAppender=InPageAppender})();var BrowserConsoleAppender=function(layout){if(layout){this.setLayout(layout)}};BrowserConsoleAppender.prototype=new log4javascript.Appender();BrowserConsoleAppender.prototype.layout=new NullLayout();BrowserConsoleAppender.prototype.threshold=Level.DEBUG;BrowserConsoleAppender.prototype.append=function(loggingEvent){var appender=this;var getFormattedMessage=function(){var layout=appender.getLayout();var formattedMessage=layout.format(loggingEvent);if(layout.ignoresThrowable()&&loggingEvent.exception){formattedMessage+=loggingEvent.getThrowableStrRep()}return formattedMessage};if((typeof opera!="undefined")&&opera.postError){opera.postError(getFormattedMessage())}else if(window.console&&window.console.log){var formattedMesage=getFormattedMessage();if(window.console.debug&&Level.DEBUG.isGreaterOrEqual(loggingEvent.level)){window.console.debug(formattedMesage)}else if(window.console.info&&Level.INFO.equals(loggingEvent.level)){window.console.info(formattedMesage)}else if(window.console.warn&&Level.WARN.equals(loggingEvent.level)){window.console.warn(formattedMesage)}else if(window.console.error&&loggingEvent.level.isGreaterOrEqual(Level.ERROR)){window.console.error(formattedMesage)}else{window.console.log(formattedMesage)}}};BrowserConsoleAppender.prototype.toString=function(){return"[BrowserConsoleAppender]"};log4javascript.BrowserConsoleAppender=BrowserConsoleAppender})();var DOCUMENT_ROOT=null;(function()
506
+ {var idx=window.document.location.href.lastIndexOf('/');if(idx==window.document.location.href.length-1)
507
+ {DOCUMENT_ROOT=window.document.location.href;}
508
+ else
509
+ {DOCUMENT_ROOT=window.document.location.href.substr(0,idx);if(DOCUMENT_ROOT.substring(DOCUMENT_ROOT.length-1)!='/')
510
+ {DOCUMENT_ROOT=DOCUMENT_ROOT+'/';}}})();var HAKANO={Version:'1.0.RC4.127',VersionDate:'20070519 0041',DocumentPath:DOCUMENT_ROOT,ScriptPath:undefined,StylePath:undefined,ImagePath:undefined,ContentPath:undefined,load:function()
511
+ {if((typeof Prototype=='undefined')||parseFloat(Prototype.Version.split(".")[0]+"."+
512
+ Prototype.Version.split(".")[1])<1.5)
513
+ {throw("application requires the Prototype JavaScript framework >= 1.5");}
514
+ HAKANO.setDocumentRoot(DOCUMENT_ROOT);},setDocumentRoot:function(rootPath)
515
+ {if(rootPath==null)
516
+ {rootPath=DOCUMENT_ROOT;}
517
+ if(!rootPath.match(/.\/$/))
518
+ {rootPath=rootPath+'/';}
519
+ HAKANO.DocumentPath=rootPath;HAKANO.ScriptPath=HAKANO.DocumentPath+'js/';HAKANO.ImagePath=HAKANO.DocumentPath+'images/';HAKANO.StylePath=HAKANO.DocumentPath+'css/';HAKANO.ContentPath=HAKANO.DocumentPath+'content/';}};hakano=function()
520
+ {return{util:{},namespace:function(sNameSpace)
521
+ {if(!sNameSpace||!sNameSpace.length)
522
+ {return null;}
523
+ var levels=sNameSpace.split(".");var currentNS=hakano;for(var i=(levels[0]=="hakano"||levels[0]=='seamless')?1:0;i<levels.length;++i)
524
+ {currentNS[levels[i]]=currentNS[levels[i]]||{};currentNS=currentNS[levels[i]];}
525
+ return currentNS;}};}();HAKANO.load();window.siteLoadedObservers=[];window.siteUnloadedObservers=[];var SEAMLESS=HAKANO;seamless=hakano;HAKANO.TEMPLATE_VARS={rootPath:HAKANO.DocumentPath,scriptPath:HAKANO.ScriptPath,imagePath:HAKANO.ImagePath,cssPath:HAKANO.DocumentPath+'css',contentPath:HAKANO.DocumentPath+'content',portletPath:HAKANO.DocumentPath+'portlets',modulePath:HAKANO.DocumentPath+'modules',soundPath:HAKANO.DocumentPath+'sounds'};HAKANO.isStrictMode=(document.compatMode=='CSS1Compat');var ua=navigator.userAgent.toLowerCase();HAKANO.isOpera=(ua.indexOf('opera')>-1);HAKANO.isSafari=(ua.indexOf('webkit')>-1);HAKANO.isIE=(window.ActiveXObject);HAKANO.isIE7=(ua.indexOf('msie 7')>-1);HAKANO.isGecko=!HAKANO.isSafari&&(ua.indexOf('gecko')>-1);if(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1)
526
+ {HAKANO.isWindows=true;}
527
+ else if(ua.indexOf("macintosh")!=-1)
528
+ {HAKANO.isMac=true;}
529
+ if(HAKANO.isIE&&!HAKANO.isIE7)
530
+ {try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
531
+ Object.extend(Array.prototype,{copy:function()
532
+ {var copy=[];for(var c=0;c<this.length;c++)
533
+ {copy[c]=this[c];}
534
+ return copy;},exists:function(entry)
535
+ {for(var c=0;c<this.length;c++)
536
+ {if(this[c]==entry)
537
+ {return true;}}
538
+ return false;},contains:function(entry)
539
+ {return this.exists(entry);},removeAt:function(idx)
540
+ {this.splice(idx,1);},remove:function(entry)
541
+ {for(var c=0;c<this.length;c++)
542
+ {if(this[c]==entry)
543
+ {this.splice(c,1);return true;}}
544
+ return false;},swap:function(a,b)
545
+ {var src=null;var target=null;for(var c=0;c<this.length;c++)
546
+ {if(this[c]==a)
547
+ {src=c;}
548
+ if(this[c]==b)
549
+ {target=c;}
550
+ if(src!=null&&target!=null)
551
+ {break;}}
552
+ if(src!=null&&target!=null)
553
+ {this[src]=b;this[target]=a;return true;}
554
+ return false;}});hakano.util.Cookie=Class.create();hakano.util.Cookie={toString:function()
555
+ {return"[hakano.util.Cookie]";},getCookieVal:function(offset){var endstr=document.cookie.indexOf(";",offset);if(endstr==-1)
556
+ {endstr=document.cookie.length;}
557
+ return unescape(document.cookie.substring(offset,endstr));},GetCookie:function(name){var arg=escape(name)+"=";var alen=arg.length;var clen=document.cookie.length;$D(this,"GetCookie: value=",document.cookie);var i=0;while(i<clen){var j=i+alen;var value=document.cookie.substring(i,j);if(value==arg)
558
+ {var cookieval=this.getCookieVal(j);if(cookieval!=null&&cookieval!='')
559
+ {$D(this,"GetCookie",name+"="+cookieval);return cookieval;}
560
+ else
561
+ {$D(this,"GetCookie",name+"=null");return null;}}
562
+ i=document.cookie.indexOf(" ",i)+1;if(i==0)break;}
563
+ $D(this,"GetCookie",name+"=null");return null;},SetCookie:function(name,value){var argv=this.SetCookie.arguments;var argc=this.SetCookie.arguments.length;var expires=(argc>2)?argv[2]:null;var path=(argc>3)?argv[3]:null;var domain=(argc>4)?argv[4]:null;var secure=(argc>5)?argv[5]:false;var cookie=escape(name)+"="+escape(value)+
564
+ ((expires==null)?"":("; expires="+expires.toGMTString()))+
565
+ ((path==null)?"":("; path="+path))+
566
+ ((domain==null)?"":("; domain="+domain))+
567
+ ((secure)?"; secure":"");$D(this,"SetCookie",cookie);document.cookie=cookie;},DeleteCookie:function()
568
+ {var date=new Date();date.setTime(date.getTime()+(-1*24*60*60*1000));var expires="; expires="+date.toGMTString();var args=$A(arguments);var self=this;args.each(function(name)
569
+ {var cval=self.GetCookie(name);$D(self,"DeleteCookie",name);document.cookie=name+"="+expires+"; path=/";document.cookie=name+"="+expires+";";});},HasCookie:function(name)
570
+ {return this.GetCookie(name)!=null;}};hakano.util.DateTime=Class.create();hakano.util.DateTime={ONE_SECOND:1000,ONE_MINUTE:60000,ONE_HOUR:3600000,ONE_DAY:86400000,ONE_WEEK:604800000,ONE_MONTH:18748800000,ONE_YEAR:31536000000,getDurationNoFormat:function(begin,end)
571
+ {end=end||new Date();var amount=end.getTime()-begin.getTime();var hours=0
572
+ var minutes=0;var seconds=0;if(amount>this.ONE_HOUR)
573
+ {hours=Math.round(amount/this.ONE_HOUR);amount=amount-(this.ONE_HOUR*hours);}
574
+ if(amount==this.ONE_HOUR)
575
+ {hours=1;amount=amount-this.ONE_HOUR;}
576
+ if(amount>this.ONE_MINUTE)
577
+ {minutes=Math.round(amount/this.ONE_MINUTE);amount=amount-(this.ONE_MINUTE*minutes);}
578
+ if(amount==this.ONE_MINUTE)
579
+ {minutes=1;amount=amount-this.ONE_MINUTE;}
580
+ if(amount>this.ONE_SECOND)
581
+ {seconds=Math.round(amount/this.ONE_SECOND);amount=amount-(this.ONE_SECOND*seconds);}
582
+ if(amount==this.ONE_SECOND)
583
+ {seconds=1;}
584
+ if(seconds<10)
585
+ {seconds="0"+seconds;}
586
+ var value="";if(hours>0)
587
+ {return hours+":"+minutes+":"+seconds;}
588
+ if(minutes>0)
589
+ {return minutes+":"+seconds;}
590
+ if(seconds>0)
591
+ {return"0:"+seconds;}
592
+ else return":00";},getDuration:function(begin,end)
593
+ {end=end||new Date();var amount=end.getTime()-begin.getTime();return this.toDuration(amount);},toDuration:function(amount)
594
+ {amount=amount||0;if(amount<0)
595
+ {return'0';}
596
+ else if(amount<this.ONE_SECOND)
597
+ {var calc=Math.round(amount/this.ONE_SECOND);return calc+' ms';}
598
+ else if(amount==this.ONE_SECOND)
599
+ {return'1 second';}
600
+ else if(amount<this.ONE_MINUTE)
601
+ {var calc=Math.round(amount/this.ONE_SECOND);return calc+' second'+(calc>1?'s':'');}
602
+ if(amount==this.ONE_MINUTE)
603
+ {return'1 minute';}
604
+ else if(amount==this.ONE_HOUR)
605
+ {return'1 hour';}
606
+ else if(amount<this.ONE_HOUR)
607
+ {var calc=Math.round(amount/this.ONE_MINUTE);return calc+' minute'+(calc>1?'s':'');}
608
+ else if(amount>this.ONE_HOUR&&amount<this.ONE_DAY)
609
+ {var calc=Math.round(amount/this.ONE_HOUR);return calc+' hour'+(calc>1?'s':'');}
610
+ else if(amount==this.ONE_DAY)
611
+ {return'1 day';}
612
+ else if(amount>this.ONE_DAY&&amount<this.ONE_YEAR)
613
+ {if(amount>this.ONE_MONTH)
614
+ {var calc=Math.round(amount/this.ONE_MONTH);return calc+' month'+(calc>1?'s':'');}
615
+ else if(amount>this.ONE_WEEK)
616
+ {var calc=Math.round(amount/this.ONE_WEEK);return calc+' week'+(calc>1?'s':'');}
617
+ else
618
+ {var calc=Math.round(amount/this.ONE_DAY);return calc+' day'+(calc>1?'s':'');}}
619
+ else if(amount==this.ONE_YEAR)
620
+ {return'1 year';}
621
+ else
622
+ {var calc=Math.round(amount/this.ONE_DAY);return calc+' years';}},friendlyDiff:function(date,end,shortstr)
623
+ {if(!date)return null;end=end||new Date();var amount=end.getTime()-date.getTime();if(amount<=this.ONE_MINUTE)
624
+ {if(shortstr)
625
+ {return'a few secs ago';}
626
+ return'a few seconds ago';}
627
+ else if(amount<this.ONE_HOUR)
628
+ {var calc=Math.round(amount/this.ONE_MINUTE);if(calc<10)
629
+ {if(shortstr)
630
+ {return'a few mins ago';}
631
+ return'a few minutes ago';}
632
+ if(shortstr)
633
+ {return calc+' min'+(calc>1?'s':'')+' ago';}
634
+ return calc+' minute'+(calc>1?'s':'')+' ago';}
635
+ else if(amount==this.ONE_HOUR)
636
+ {return'an hour ago';}
637
+ else if(amount<this.ONE_DAY)
638
+ {var calc=Math.round(amount/this.ONE_HOUR);return calc+' hour'+(calc>1?'s':'')+' ago';}
639
+ else if(amount==this.ONE_DAY)
640
+ {return'yesterday';}
641
+ else if(amount>this.ONE_DAY&&amount<this.ONE_YEAR)
642
+ {if(amount>this.ONE_MONTH)
643
+ {var calc=Math.round(amount/this.ONE_MONTH);return calc+' month'+(calc>1?'s':'')+' ago';}
644
+ else if(amount>this.ONE_WEEK)
645
+ {var calc=Math.round(amount/this.ONE_WEEK);return calc+' week'+(calc>1?'s':'')+' ago';}
646
+ else
647
+ {var calc=Math.round(amount/this.ONE_DAY);if(calc==1)
648
+ {return'yesterday';}
649
+ return calc+' day'+(calc>1?'s':'')+' ago';}}
650
+ else if(amount>this.ONE_YEAR)
651
+ {if(shortstr)
652
+ {return'>1 year ago';}
653
+ return'more than a year ago';}
654
+ return amount;},getMonthIntValue:function(s)
655
+ {switch(s)
656
+ {case"Jan":return 0;case"Feb":return 1;case"Mar":return 2;case"Apr":return 3;case"May":return 4;case"Jun":return 5;case"Jul":return 6;case"Aug":return 7;case"Sep":return 8;case"Oct":return 9;case"Nov":return 10;case"Dec":return 11;}},intval:function(s)
657
+ {if(s)
658
+ {if(s.charAt(0)=='0')
659
+ {s=s.substring(1);}
660
+ return parseInt(s);}
661
+ return 0;},getFriendlyDate:function(date,qualifiers)
662
+ {var q=Object.extend({today:'',yesterday:'',past:'',lowercase:false},qualifiers||"");date=date||new Date();var localDate=typeof(date)=="string"?hakano.util.DateTime.parseRFC2822Date(date):date;if(hakano.util.DateTime.isToday(localDate))
663
+ {return q['today']+hakano.util.DateTime.get12HourTime(localDate);}
664
+ else if(hakano.util.DateTime.isYesterday(localDate))
665
+ {return q['yesterday']+(q['lowercase']?"yesterday":"Yesterday");}
666
+ return q['past']+localDate.getDay()+" "+hakano.util.DateTime.getShortMonthName(localDate);},isToday:function(date)
667
+ {var now=new Date();return(now.getFullYear()==date.getFullYear()&&now.getMonth()==date.getMonth()&&now.getDay()==date.getDay());},isYesterday:function(date)
668
+ {var now=new Date();return(now.getFullYear()==date.getFullYear()&&now.getMonth()==date.getMonth()&&now.getDay()-1==date.getDay());},getShortMonthName:function(date)
669
+ {var month=date.getMonth();switch(month)
670
+ {case 0:return"Jan";case 1:return"Feb";case 2:return"Mar";case 3:return"Apr";case 4:return"May";case 5:return"Jun";case 6:return"Jul";case 7:return"Aug";case 8:return"Sep";case 9:return"Oct";case 10:return"Nov";case 11:return"Dec";}},get12HourTime:function(d,seconds,milli)
671
+ {var date=d;if(date==null)
672
+ {date=new Date();}
673
+ var hour=date.getHours();var str=(hour==0)?12:hour;var ampm="AM";if(hour>=12)
674
+ {str=(hour==12)?12:(hour-12);ampm="PM";}
675
+ var m=date.getMinutes();var s=date.getSeconds();str+=":"+(m<10?"0":"")+m;if(seconds)
676
+ {str+=":"+(s<10?"0":"")+s;}
677
+ if(milli)
678
+ {var ms=date.getMilliseconds();str+="."+(ms<10?"0":"")+ms;}
679
+ str+=" "+ampm;return str;},getShortDateTime:function(d)
680
+ {if(d&&typeof(d)=='string')
681
+ {d=this.parseJavaDate(d);}
682
+ var date=d||new Date();return this.getShortMonthName(date)+" "+date.getDate()+" "+this.get12HourTime(date);},parseInt:function(x)
683
+ {if(x)
684
+ {if(x.charAt(0)=='0')
685
+ {return this.parseInt(x.substring(1));}
686
+ return parseInt(x);}
687
+ return 0;},parseJavaDate:function(d)
688
+ {if(!d||d=='')return null;var year=parseInt(d.substring(0,4));var month=this.parseInt(d.substring(5,7))-1;var day=this.parseInt(d.substring(8,10));var hour=this.parseInt(d.substring(11,13));var minute=this.parseInt(d.substring(14,16));var second=this.parseInt(d.substring(17,19));var milli=this.parseInt(d.substring(20));var date=new Date();date.setFullYear(year);date.setMonth(month);date.setDate(day);date.setHours(hour);date.setMinutes(minute);date.setSeconds(second);date.setMilliseconds(milli);return date;},parseRFC2822Date:function(d)
689
+ {var tokens=d.split(" ");var day=this.intval(tokens[1]);var month=tokens[2];var year=tokens[3];var timetokens=tokens[4].split(":");var hour=this.intval(timetokens[0]);var min=this.intval(timetokens[1]);var sec=this.intval(timetokens[2]);var hourOffset=this.intval(tokens[5].substring(0,3));var minOffset=this.intval(tokens[5].substring(3));var gmtHour=0;if(hourOffset<0)
690
+ {gmtHour=hour-(hourOffset);}
691
+ else
692
+ {gmtHour=hour+(hourOffset);}
693
+ if(gmtHour>23)
694
+ {gmtHour=gmtHour-24;day+=1;}
695
+ else if(gmtHour<0)
696
+ {gmtHour=24-gmtHour;day-=1;}
697
+ var gmtDate=new Date();gmtDate.setUTCDate(day);gmtDate.setUTCMonth(this.getMonthIntValue(month));gmtDate.setUTCFullYear(year);gmtDate.setUTCHours(gmtHour,min,sec);return gmtDate;}};var HAKANO_DEBUG=window.location.href.indexOf('debug=1')>0;log4javascript.setEnabled(HAKANO_DEBUG);var _log=log4javascript.getLogger("main");var _logAppender=null;if(HAKANO_DEBUG)
698
+ {_logAppender=new log4javascript.PopUpAppender();}
699
+ if(_logAppender!=null)
700
+ {var _popUpLayout=new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");_logAppender.setLayout(_popUpLayout);_log.addAppender(_logAppender);_logAppender.setThreshold(HAKANO_DEBUG?log4javascript.Level.DEBUG:log4javascript.Level.WARN);}
701
+ var Logger=Class.create();Logger.info=function(msg)
702
+ {if(_logAppender)_log.info(msg);};Logger.warn=function(msg)
703
+ {if(_logAppender)_log.warn(msg);};Logger.debug=function(msg)
704
+ {if(_logAppender)_log.debug(msg);};Logger.error=function(msg)
705
+ {if(_logAppender)_log.error(msg);};Logger.trace=function(msg)
706
+ {if(_logAppender)_log.trace(msg);}
707
+ Logger.fatal=function(msg)
708
+ {if(_logAppender)_log.fatal(msg);}
709
+ function $D()
710
+ {if(HAKANO_DEBUG)
711
+ {var args=$A(arguments);var msg=(args.length>1)?args.join(" "):args[0];Logger.debug(msg);}}
712
+ hakano.util.Dom={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12,clearDOM:function(n)
713
+ {if(n&&n.childNodes)
714
+ {var c=n.childNodes.length;while(c>0)
715
+ {var child=n.childNodes[0];this.purge(child,true);n.removeChild(child);c=n.childNodes.length;}}},getTagValue:function(element)
716
+ {var value="";this.each(element.childNodes,this.CDATA_SECTION_NODE,function(e)
717
+ {value+=e.nodeValue;});return value;},getTagContent:function(element,tagname,def)
718
+ {try
719
+ {return element.getElementsByTagName(tagname)[0].firstChild.nodeValue;}
720
+ catch(e)
721
+ {return def;}},getNodeValueByTag:function(row,name)
722
+ {var nodes=row.childNodes;var len=nodes.length;for(var c=0;c<len;c++)
723
+ {if(nodes[c].nodeName==name)
724
+ {return this.getText(nodes[c]);}}
725
+ return null;},eachAttribute:function(node,iterator,excludes,specified)
726
+ {specified=specified==null?true:specified;excludes=excludes||[];if(node.attributes)
727
+ {var map=node.attributes;for(var c=0,len=map.length;c<len;c++)
728
+ {var item=map[c];if(item&&item.value!=null&&specified==item.specified)
729
+ {var type=typeof(item);if(type=='function'||type=='native'||item.name.match(/_moz\-/))continue;if(excludes.length>0)
730
+ {var cont=false;for(var i=0,l=excludes.length;i<l;i++)
731
+ {if(excludes[i]==item.name)
732
+ {cont=true;break;}}
733
+ if(cont)continue;}
734
+ var attr=item.value;iterator(item.name,item.value,item.specified,c,map.length);}}
735
+ return c>0;}
736
+ return false;},getTagAttribute:function(element,tagname,key,def)
737
+ {try
738
+ {var attribute=element.getElementsByTagName(tagname)[0].getAttribute(key);if(null!=attribute)
739
+ {return attribute;}}
740
+ catch(e)
741
+ {}
742
+ return def;},each:function(nodelist,nodeType,func)
743
+ {if(typeof(nodelist)=="array")
744
+ {nodelist.each(function(n)
745
+ {if(n.nodeType==nodeType)
746
+ {func(n);}});}
747
+ else if(typeof(nodelist)=="object"||typeof(nodelist)=="function"&&navigator.userAgent.match(/WebKit/i))
748
+ {for(var p=0,len=nodelist.length;p<len;p++)
749
+ {var obj=nodelist[p];if(typeof obj.nodeType!="undefined"&&obj.nodeType==nodeType)
750
+ {try
751
+ {func(obj);}
752
+ catch(e)
753
+ {if(e==$break)
754
+ {break;}
755
+ else if(e!=$continue)
756
+ {throw e;}}}}}
757
+ else
758
+ {throw("unsupported dom nodelist type: "+typeof(nodelist));}},purge:function(d,dontRecurse)
759
+ {if(d['finalize']&&typeof(d['finalize'])=="function")
760
+ {d['finalize']();}
761
+ var a=d.attributes,i,l,n;if(a)
762
+ {l=a.length;for(i=0;i<l;i+=1)
763
+ {n=a[i].name;if('function'==typeof d[n]&&n.substring(0,2)=='on')
764
+ {d[n]=null;}}}
765
+ if(dontRecurse)return;a=d.childNodes;if(a)
766
+ {l=a.length;for(i=0;i<l;i+=1)
767
+ {this.purge(d.childNodes[i]);}}},getText:function(n,skipHTMLStyles)
768
+ {var text="";var children=n.childNodes;var len=children.length;for(var c=0;c<len;c++)
769
+ {var child=children[c];if(child.nodeType==this.COMMENT_NODE)
770
+ {text+="<!-- "+child.nodeValue+" -->";continue;}
771
+ if(child.nodeType==this.ELEMENT_NODE)
772
+ {text+=this.toXML(child,true,null,null,skipHTMLStyles);}
773
+ else
774
+ {if(child.nodeType==this.TEXT_NODE)
775
+ {text+=child.nodeValue||'';}
776
+ else if(child.nodeValue==null)
777
+ {text+=this.toXML(child,true,null,null,skipHTMLStyles);}
778
+ else
779
+ {text+=child.nodeValue||'';}}}
780
+ return text;},hasAttribute:function(e,n,cs)
781
+ {if(!e.hasAttribute)
782
+ {if(e.attributes)
783
+ {for(var c=0,len=e.attributes.length;c<len;c++)
784
+ {var item=e.attributes[c];if(item&&item.specified)
785
+ {if(cs&&item.name==n||!cs&&item.name.toLowerCase()==n.toLowerCase())
786
+ {return true;}}}}
787
+ return false;}
788
+ else
789
+ {return e.hasAttribute(n);}},getAttribute:function(e,n,cs)
790
+ {if(cs)
791
+ {return e.getAttribute(n);}
792
+ else
793
+ {for(var c=0,len=e.attributes.length;c<len;c++)
794
+ {var item=e.attributes[c];if(item&&item.specified)
795
+ {if(item.name.toLowerCase()==n.toLowerCase())
796
+ {return item.value;}}}
797
+ return null;}},toXML:function(e,embed,nodeName,id,skipHTMLStyles)
798
+ {nodeName=(nodeName||e.nodeName.toLowerCase());var xml="<"+nodeName;if(id)
799
+ {xml+=" id='"+id+"' ";}
800
+ if(e.attributes)
801
+ {var map=e.attributes;var x=0;for(var c=0,len=map.length;c<len;c++)
802
+ {var item=map[c];if(item&&item.value!=null&&item.specified)
803
+ {var type=typeof(item);if(item.value&&item.value.startsWith('function()'))
804
+ {continue;}
805
+ if(type=='function'||type=='native'||item.name.match(/_moz\-/))continue;if(id!=null&&item.name=='id')
806
+ {continue;}
807
+ if(HAKANO.isIE&&!skipHTMLStyles&&item.name=='style')
808
+ {var str='';for(var p in e.style)
809
+ {var v=e.style[p];if(v&&v!='')
810
+ {str+=p+':'+v+';';}}
811
+ xml+=" style=\""+str+"\"";x++;continue;}
812
+ var attr=String.escapeXML(item.value);xml+=" "+item.name+"=\""+attr+"\"";x++;}}}
813
+ xml+=">";if(embed&&e.childNodes&&e.childNodes.length>0)
814
+ {xml+=this.getText(e,skipHTMLStyles);}
815
+ xml+="</"+nodeName+">";return xml;},getAndRemoveAttribute:function(node,name)
816
+ {var value=node.getAttribute(name);if(value)
817
+ {node.removeAttribute(name);}
818
+ return value;},getAttributesString:function(element,excludes)
819
+ {var html='';this.eachAttribute(element,function(name,value)
820
+ {if(!excludes||!excludes.exists(name))
821
+ {html+=name+'="'+(value||'')+'" ';}},true);return html;}};try
822
+ {if(typeof(DOMNodeList)=="object")DOMNodeList.prototype.length=DOMNodeList.prototype.getLength;if(typeof(DOMNode)=="object")
823
+ {DOMNode.prototype.childNodes=DOMNode.prototype.getChildNodes;DOMNode.prototype.parentNode=DOMNode.prototype.getParentNode;DOMNode.prototype.nodeType=DOMNode.prototype.getNodeType;DOMNode.prototype.nodeName=DOMNode.prototype.getNodeName;DOMNode.prototype.nodeValue=DOMNode.prototype.getNodeValue;}}
824
+ catch(e)
825
+ {}
826
+ var $E=function(type,options)
827
+ {var elem=document.createElement(type);if(options)
828
+ {if(options['parent'])
829
+ {options['parent'].appendChild(elem);}
830
+ if(options['className'])
831
+ {elem.className=options['className'];}
832
+ if(options['html'])
833
+ {elem.innerHTML=options['html'];}
834
+ if(options['children'])
835
+ {options['children'].each(function(child)
836
+ {elem.appendChild(child);});}}
837
+ return elem;};Effect.Scale2=Class.create();Object.extend(Object.extend(Effect.Scale2.prototype,Effect.Scale.prototype),{initialize:function(div,scale,args,dim)
838
+ {Effect.Scale.prototype.initialize.apply(this,[div,scale,args]);this._dims=dim;},setup:function()
839
+ {Effect.Scale.prototype.setup.call(this);this.dims=[this._dims.height,this._dims.width];},setDimensions:function(height,width)
840
+ {if(this.options.beforeSetDimensions)this.options.beforeSetDimensions(height,width);if(this.options.setDimensions)this.options.setDimensions(height,width);else Effect.Scale.prototype.setDimensions.apply(this,[height,width]);if(this.options.afterSetDimensions)this.options.afterSetDimensions(height,width);}});Effect.SlideRight=function(element)
841
+ {element=$(element);Element.setStyle(element,{'overflow':'hidden'});var overflow=Element.getStyle(element,'overflow');var dim=Element.getDimensions(element);new Effect.Scale2(element,100,Object.extend(arguments[1]||{},{scaleContent:false,scaleY:false,scaleX:true,scaleMode:'contents',scaleFrom:0,afterSetup:function()
842
+ {Element.setStyle(element,{'width':'0','display':''});},afterFinish:function()
843
+ {if(overflow)Element.setStyle(element,{'overflow':overflow});}}),dim);}
844
+ Effect.SlideLeft=function(element)
845
+ {element=$(element);var dim=Element.getDimensions(element);new Effect.Scale2(element,0,Object.extend(arguments[1]||{},{scaleContent:false,scaleY:false,scaleX:true,scaleMode:'contents',scaleFrom:100,afterFinish:function()
846
+ {Element.setStyle(element,{'width':dim.width,'display':'none'});}}),dim);}
847
+ Element.getDocumentSize=function()
848
+ {var xScroll,yScroll;var pageHeight,pageWidth;if(window.innerHeight&&window.scrollMaxY){xScroll=document.body.scrollWidth;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;}
849
+ var windowWidth,windowHeight;if(self.innerHeight){windowWidth=self.innerWidth;windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;}
850
+ if(yScroll<windowHeight){pageHeight=windowHeight;}else{pageHeight=yScroll;}
851
+ if(xScroll<windowWidth){pageWidth=windowWidth;}else{pageWidth=xScroll;}
852
+ return[pageWidth,pageHeight,windowWidth,windowHeight];};Element.getPageScroll=function()
853
+ {var yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;}else if(document.body){yScroll=document.body.scrollTop;}
854
+ return yScroll;}
855
+ Element.getCenteredTopPosition=function(relative,name)
856
+ {var dim=Element.getDimensions(relative);var pos=Element.getDimensions(name).width;return(dim.height-pos)/2;};Element.center=function(relative,name,top)
857
+ {var element=$(name);var dim=Element.getDimensions(relative);var width=dim.width;var height=dim.height;var pos=Element.getDimensions(name).width;var left=(width-pos)/2;element.style.position="absolute";element.style.left=left+"px";element.style.right=left+width+"px";if(top)
858
+ {element.style.top=top+"px";}
859
+ else
860
+ {var hw=element.offsetHeight||parseInt(element.style.height)||200;element.style.top=(height-hw)/2+"px";}};Element.findParentForm=function(element)
861
+ {var found=null;Element.ancestors(element).each(function(n)
862
+ {if(n.nodeName=='FORM')
863
+ {found=n;throw $break;}});return found;};Element.showing=function(element,ancestors)
864
+ {if(!Element.visible(element))return false;ancestors=ancestors||element.ancestors();var visible=true;ancestors.each(function(ancestor)
865
+ {if(!Element.visible(ancestor))
866
+ {visible=false;throw $break;}});return visible;};Element.findNonShowingAncestor=function(element,ancestors)
867
+ {if(!Element.visible(element))return element;ancestors=ancestors||element.ancestors();var found=null;ancestors.each(function(ancestor)
868
+ {if(!Element.visible(ancestor))
869
+ {found=ancestor;throw $break;}});return found;};Element.setHeight=function(element,h)
870
+ {element=$(element);element.style.height=h+"px";};Element.setWidth=function(element,w)
871
+ {element=$(element);element.style.width=w+"px";};Element.setTop=function(element,t)
872
+ {element=$(element);element.style.top=t+"px";};Element.isVisible=function(el)
873
+ {return el.style.visibility!='hidden'&&el.style.display!='none';};Object.extend(Event,{observe:function(element,name,observer,useCapture)
874
+ {var e=element;element=typeof element=='string'?$(element):element;if(!element)
875
+ {throw"Event.observe called with null element named: "+e+" for event: "+name;}
876
+ if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))
877
+ name='keydown';if(name=='load'&&element.screen)
878
+ this._observeLoad(element,name,observer,useCapture);else
879
+ this._observeAndCache(element,name,observer,useCapture);},_observeLoad:function(element,name,observer,useCapture)
880
+ {if(!this._readyCallbacks)
881
+ {var loader=this._onloadWindow.bind(this);if(document.addEventListener)
882
+ document.addEventListener("DOMContentLoaded",loader,false);if(navigator.appVersion.match(/Konqueror|Safari|KHTML/i))
883
+ Event._timer=setInterval(function()
884
+ {if(/loaded|complete/.test(document.readyState))loader();},10);Event._readyCallbacks=[];this._observeAndCache(element,name,loader,useCapture);}
885
+ Event._readyCallbacks.push(observer);},_onloadWindow:function()
886
+ {if(arguments.callee.done)return;arguments.callee.done=true;if(this._timer)clearInterval(this._timer);this._readyCallbacks.each(function(f)
887
+ {f()});this._readyCallbacks=null;},getEvent:function(e)
888
+ {return(e)?e:window.event;},isEventObject:function(e)
889
+ {e=this.getEvent(e);if(e)
890
+ {if(typeof(e.cancelBubble)!='undefined'&&typeof(e.qualifier)!='undefined')
891
+ {return true;}
892
+ if(typeof(e.stopPropagation)!='undefined'&&typeof(e.preventDefault)!='undefined')
893
+ {return true;}}
894
+ return false;},getKeyCode:function(event)
895
+ {var pK;if(event)
896
+ {if(typeof(event.keyCode)!="undefined")
897
+ {pK=event.keyCode;}
898
+ else if(typeof(event.which)!="undefined")
899
+ {pK=event.which;}}
900
+ else
901
+ {pK=window.event.keyCode;}
902
+ return pK;},isKey:function(event,code)
903
+ {return Event.getKeyCode(event)==code;},isEscapeKey:function(event)
904
+ {return Event.isKey(event,Event.KEY_ESC)||Event.isKey(event,event.DOM_VK_ESCAPE);},isEnterKey:function(event)
905
+ {return Event.isKey(event,Event.KEY_RETURN)||Event.isKey(event,event.DOM_VK_ENTER);},isSpaceBarKey:function(event)
906
+ {return Event.isKey(event,Event.KEY_SPACEBAR)||Event.isKey(event,event.DOM_VK_SPACE);},isPageUpKey:function(event)
907
+ {return Event.isKey(event,Event.KEY_PAGEUP)||Event.isKey(event,event.DOM_VK_PAGE_UP);},isPageDownKey:function(event)
908
+ {return Event.isKey(event,Event.KEY_PAGEDOWN)||Event.isKey(event,event.DOM_VK_PAGE_DOWN);},isHomeKey:function(event)
909
+ {return Event.isKey(event,Event.KEY_HOME)||Event.isKey(event,event.DOM_VK_HOME);},isEndKey:function(event)
910
+ {return Event.isKey(event,Event.KEY_END)||Event.isKey(event,event.DOM_VK_END);},isDeleteKey:function(event)
911
+ {return Event.isKey(event,Event.KEY_DELETE)||Event.isKey(event,event.DOM_VK_DELETE);},isLeftKey:function(event)
912
+ {return Event.isKey(event,Event.KEY_LEFT)||Event.isKey(event,event.DOM_VK_LEFT);},isRightKey:function(event)
913
+ {return Event.isKey(event,Event.KEY_RIGHT)||Event.isKey(event,event.DOM_VK_RIGHT);},KEY_SPACEBAR:0,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_END:35,KEY_HOME:36,KEY_DELETE:46});hakano.util.EventBroadcaster=Class.create();Object.extend(hakano.util.EventBroadcaster.prototype,{listeners:[],addListener:function(listener)
914
+ {this.listeners.push(listener);},removeListener:function(listener)
915
+ {if(!this.listeners)
916
+ {return false;}
917
+ return this.listeners.remove(listener);},dispose:function()
918
+ {if(this.listeners)
919
+ {this.listeners.clear();}},fireEvent:function()
920
+ {if(!this.listeners||this.listeners.length==0)
921
+ {$D(this+' not firing event: registered no listeners');return;}
922
+ var args=$A(arguments);if(undefined==args||0==args.length)
923
+ {throw"fire event not correct for "+this+", requires at least a event name parameter";}
924
+ var name=args.shift();var ch=name.charAt(0).toUpperCase();var method="on"+ch+name.substring(1);$D(this+' firing event: '+method+', listeners: '+this.listeners.length);this.listeners.each(function(listener)
925
+ {var f=listener[method];if(f)
926
+ {f.apply(listener,args);}
927
+ else if(typeof(listener)=='function')
928
+ {listener.apply(listener,args);}});}});hakano.util.IdleManager=Class.create();hakano.util.IdleManager={IDLE_TIME:60000,timestamp:null,activeListeners:[],idleListeners:[],idle:false,install:function()
929
+ {this.event=this.onActivity.bind(this);this.timestamp=new Date().getTime();Event.observe(window,'keypress',this.event,false);Event.observe(window,'mousemove',this.event,false);var self=this;Event.observe(window,'unload',function()
930
+ {Event.stopObserving(window,'keypress',self.event,false);Event.stopObserving(window,'mousemove',self.event,false);self.event=null;},false);this.startTimer();},startTimer:function()
931
+ {this.stopTimer();this.timer=setInterval(this.onTimer.bind(this),500);},stopTimer:function()
932
+ {if(this.timer)
933
+ {clearInterval(this.timer);this.timer=0;}},onTimer:function()
934
+ {if(this.isIdle())
935
+ {this.stopTimer();this.idle=true;if(this.idleListeners.length>0)
936
+ {this.idleListeners.each(function(l)
937
+ {l.call(l);});}}},registerIdleListener:function(l)
938
+ {this.idleListeners.push(l);},unregisterIdleListener:function(l)
939
+ {this.idleListeners.remove(l);},registerActiveListener:function(l)
940
+ {this.activeListeners.push(l);},unregisterActiveListener:function(l)
941
+ {this.activeListeners.remove(l);},isIdle:function()
942
+ {return this.getIdleTimeInMS()>=this.IDLE_TIME;},getIdleTimeInMS:function()
943
+ {return(new Date().getTime()-this.timestamp);},onActivity:function()
944
+ {this.timestamp=new Date().getTime();if(this.idle)
945
+ {this.idle=false;if(this.activeListeners.length>0)
946
+ {this.activeListeners.each(function(l)
947
+ {l.call(l);});}
948
+ this.startTimer();}
949
+ return true;}};window.siteLoadedObservers.push(hakano.util.IdleManager.install.bind(hakano.util.IdleManager));var arVersion=navigator.appVersion.split("MSIE");var version=parseFloat(arVersion[1]);HAKANO.isIE=version>5.0;HAKANO.isIE6=version>=6.0&&version<7;HAKANO.isIE7=version>=7.0&&version<8;if(HAKANO.isIE6)
950
+ {document.getElementsByTagNameNS=function(xmlns,tag)
951
+ {var ar=$A(document.getElementsByTagName('*'));if(xmlns=="http://www.w3.org/1999/xhtml")
952
+ {xmlns="";}
953
+ var found=[];for(var c=0,len=ar.length;c<len;c++)
954
+ {var elem=ar[c];if(elem.tagUrn==xmlns&&(tag=='*'||elem.nodeName==tag))
955
+ {found.push(elem);}}
956
+ return found;};}
957
+ (function(){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},s={array:function(x,arr){if(!x)return'null';if(arr.contains(x))
958
+ {return null;}
959
+ arr.push(x);var a=['['],b,f,i,l=x.length,v;for(var i=0;i<l;i+=1){v=x[i];f=s[typeof v];if(typeof(f)!='function')continue;v=f(v,arr);v=(v==null)?'null':v;if(Event.isEventObject(v))continue;var t=typeof(v);switch(t)
960
+ {case'string':case'number':case'boolean':{if(b){a[a.length]=',';}
961
+ a[a.length]=v;b=true;break;}}}
962
+ a[a.length]=']';return a.join('');},'boolean':function(x){return x||false;},'null':function(x){return"null";},number:function(x){return isFinite(x)?x:'null';},object:function(x,arr){if(x){if(x instanceof Array){return s.array(x,arr);}
963
+ if(Event.isEventObject(x))return'null';if(arr.contains(x))
964
+ {return'null';}
965
+ arr.push(x);var a=['{'],b,f,i,v;for(var i in x){if(i=='_toString')continue;v=x[i];f=s[typeof v];if(f)
966
+ {if(typeof(f)!='function')continue;v=f(v,arr);v=(v==null)?'null':v;if(Event.isEventObject(v))continue;var t=typeof(v);switch(t)
967
+ {case'string':case'number':case'boolean':{if(b){a[a.length]=',';}
968
+ a.push(s.string(i),':',v);b=true;break;}}}}
969
+ a[a.length]='}';return a.join('');}
970
+ return'null';},string:function(x){if(/["\\\x00-\x1f]/.test(x)){x=x.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
971
+ c=b.charCodeAt();return'\\u00'+
972
+ Math.floor(c/16).toString(16)+
973
+ (c%16).toString(16);});}
974
+ return'"'+x+'"';}};Object.prototype.toJSONString=function()
975
+ {if(Event.isEventObject(this))return'null';return s.object(this,[]);};Array.prototype.toJSONString=function()
976
+ {return s.array(this,[]);};Boolean.prototype.toJSONString=function()
977
+ {return this;};Number.prototype.toJSONString=function()
978
+ {return isFinite(this)?this:'null';};})();String.prototype.parseJSON=function(){try{return!(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(this.replace(/"(\\.|[^"\\])*"/g,'')))&&eval('('+this+')');}catch(e){return false;}};hakano.util.KeyManager=Class.create();hakano.util.KeyManager=Object.extend(hakano.util.KeyManager,hakano.util.EventBroadcaster.prototype);Object.extend(hakano.util.KeyManager,{monitors:[],KEY_ENTER:1,KEY_ESCAPE:2,KEY_SPACEBAR:3,disabled:false,toString:function()
979
+ {return'[hakano.util.KeyManager]';},disable:function()
980
+ {this.disabled=true;},enable:function()
981
+ {this.disabled=false;},install:function()
982
+ {this.keyPressFunc=this.onkeypress.bindAsEventListener(this);document.body.onkeypress=this.keyPressFunc;window.siteUnloadedObservers.push(this.dispose.bind(this));},dispose:function()
983
+ {document.body.onkeypress=null;this.keyPressFunc=null;var self=this;this.monitors.each(function(m)
984
+ {self.removeHandler(m[0],m[1]);});this.monitors=null;hakano.util.EventBroadcaster.prototype.dispose.call(this);},removeHandler:function(key,element)
985
+ {if(element)
986
+ {var focusHandler=element['_focusHandler_'+key];var blurHandler=element['_blurHandler_'+key];if(focusHandler)
987
+ {Event.stopObserving(element,'focus',focusHandler,false);try
988
+ {delete element['_focusHandler_'+key];}
989
+ catch(E)
990
+ {}}
991
+ if(blurHandler)
992
+ {Event.stopObserving(element,'blur',blurHandler,false);try
993
+ {delete element['_blurHandler_'+key];}
994
+ catch(E)
995
+ {}}}
996
+ if(this.monitors.length>0)
997
+ {var found=null;for(var c=0,len=this.monitors.length;c<len;c++)
998
+ {var a=this.monitors[c];if(a[0]==key&&a[1]==element)
999
+ {found=a;break;}}
1000
+ if(found)
1001
+ {this.monitors.remove(found);}}},installHandler:function(key,element,handler)
1002
+ {var self=this;this.removeHandler(key,element);var array=[key,element,handler];if(element)
1003
+ {var focusHandler=function(e)
1004
+ {e=Event.getEvent(e);element.focused=true;self.monitors.remove(array);self.monitors.push(array);return true;};var blurHandler=function(e)
1005
+ {e=Event.getEvent(e);element.focused=false;self.monitors.remove(array);return true;};element['_focusHandler_'+key]=focusHandler;element['_blurHandler_'+key]=blurHandler;Event.observe(element,'focus',focusHandler,false);Event.observe(element,'blur',blurHandler,false);}
1006
+ else
1007
+ {this.monitors.push(array);}},onkeypress:function(e)
1008
+ {if(this.monitors.length>0&&!this.disabled)
1009
+ {var stop=false;for(var c=0,len=this.monitors.length;c<len;c++)
1010
+ {var m=this.monitors[c];if((Event.isEnterKey(e)&&m[0]==hakano.util.KeyManager.KEY_ENTER)||(Event.isEscapeKey(e)&&m[0]==hakano.util.KeyManager.KEY_ESCAPE)||(Event.isSpaceBarKey(e)&&m[0]==hakano.util.KeyManager.KEY_SPACEBAR))
1011
+ {var target=Event.element(e);if(m[1]==null||target==m[1])
1012
+ {m[2](e);stop=true;break;}}}
1013
+ if(stop)
1014
+ {Event.stop(e);return false;}}
1015
+ return true;}});window.siteLoadedObservers.push(hakano.util.KeyManager.install.bind(hakano.util.KeyManager));hakano.util.MD5=Class.create();hakano.util.MD5={hexcase:0,b64pad:"",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()
1016
+ {return this.hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72";},core_md5:function(x,len)
1017
+ {x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i<x.length;i+=16)
1018
+ {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);}
1019
+ return Array(a,b,c,d);},md5_cmn:function(q,a,b,x,s,t)
1020
+ {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)
1021
+ {return this.md5_cmn((b&c)|((~b)&d),a,b,x,s,t);},md5_gg:function(a,b,c,d,x,s,t)
1022
+ {return this.md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);},md5_hh:function(a,b,c,d,x,s,t)
1023
+ {return this.md5_cmn(b^c^d,a,b,x,s,t);},md5_ii:function(a,b,c,d,x,s,t)
1024
+ {return this.md5_cmn(c^(b|(~d)),a,b,x,s,t);},core_hmac_md5:function(key,data)
1025
+ {var bkey=this.str2binl(key);if(bkey.length>16)
1026
+ {bkey=this.core_md5(bkey,key.length*this.chrsz);}
1027
+ var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++)
1028
+ {ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}
1029
+ 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)
1030
+ {var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);},bit_rol:function(num,cnt)
1031
+ {return(num<<cnt)|(num>>>(32-cnt));},str2binl:function(str)
1032
+ {var bin=Array();var mask=(1<<this.chrsz)-1;for(var i=0;i<str.length*this.chrsz;i+=this.chrsz)
1033
+ bin[i>>5]|=(str.charCodeAt(i/this.chrsz)&mask)<<(i%32);return bin;},binl2str:function(bin)
1034
+ {var str="";var mask=(1<<this.chrsz)-1;for(var i=0;i<bin.length*32;i+=this.chrsz)
1035
+ str+=String.fromCharCode((bin[i>>5]>>>(i%32))&mask);return str;},binl2hex:function(binarray)
1036
+ {var hex_tab=this.hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++)
1037
+ {str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&0xF)+
1038
+ hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF);}
1039
+ return str;},binl2b64:function(binarray)
1040
+ {var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i<binarray.length*4;i+=3)
1041
+ {var triplet=(((binarray[i>>2]>>8*(i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&0xFF);for(var j=0;j<4;j++)
1042
+ {if(i*8+j*6>binarray.length*32)
1043
+ {str+=this.b64pad;}
1044
+ else
1045
+ {str+=tab.charAt((triplet>>6*(3-j))&0x3F);}}}
1046
+ return str;}};function NumberFormat(num,inputDecimal)
1047
+ {this.VERSION='Number Format v1.5.4';this.COMMA=',';this.PERIOD='.';this.DASH='-';this.LEFT_PAREN='(';this.RIGHT_PAREN=')';this.LEFT_OUTSIDE=0;this.LEFT_INSIDE=1;this.RIGHT_INSIDE=2;this.RIGHT_OUTSIDE=3;this.LEFT_DASH=0;this.RIGHT_DASH=1;this.PARENTHESIS=2;this.NO_ROUNDING=-1
1048
+ this.num;this.numOriginal;this.hasSeparators=false;this.separatorValue;this.inputDecimalValue;this.decimalValue;this.negativeFormat;this.negativeRed;this.hasCurrency;this.currencyPosition;this.currencyValue;this.places;this.roundToPlaces;this.truncate;this.setNumber=setNumberNF;this.toUnformatted=toUnformattedNF;this.setInputDecimal=setInputDecimalNF;this.setSeparators=setSeparatorsNF;this.setCommas=setCommasNF;this.setNegativeFormat=setNegativeFormatNF;this.setNegativeRed=setNegativeRedNF;this.setCurrency=setCurrencyNF;this.setCurrencyPrefix=setCurrencyPrefixNF;this.setCurrencyValue=setCurrencyValueNF;this.setCurrencyPosition=setCurrencyPositionNF;this.setPlaces=setPlacesNF;this.toFormatted=toFormattedNF;this.toPercentage=toPercentageNF;this.getOriginal=getOriginalNF;this.moveDecimalRight=moveDecimalRightNF;this.moveDecimalLeft=moveDecimalLeftNF;this.getRounded=getRoundedNF;this.preserveZeros=preserveZerosNF;this.justNumber=justNumberNF;this.expandExponential=expandExponentialNF;this.getZeros=getZerosNF;this.moveDecimalAsString=moveDecimalAsStringNF;this.moveDecimal=moveDecimalNF;this.addSeparators=addSeparatorsNF;if(inputDecimal==null){this.setNumber(num,this.PERIOD);}else{this.setNumber(num,inputDecimal);}
1049
+ this.setCommas(true);this.setNegativeFormat(this.LEFT_DASH);this.setNegativeRed(false);this.setCurrency(false);this.setCurrencyPrefix('$');this.setPlaces(2);}
1050
+ function setInputDecimalNF(val)
1051
+ {this.inputDecimalValue=val;}
1052
+ function setNumberNF(num,inputDecimal)
1053
+ {if(inputDecimal!=null){this.setInputDecimal(inputDecimal);}
1054
+ this.numOriginal=num;this.num=this.justNumber(num);}
1055
+ function toUnformattedNF()
1056
+ {return(this.num);}
1057
+ function getOriginalNF()
1058
+ {return(this.numOriginal);}
1059
+ function setNegativeFormatNF(format)
1060
+ {this.negativeFormat=format;}
1061
+ function setNegativeRedNF(isRed)
1062
+ {this.negativeRed=isRed;}
1063
+ function setSeparatorsNF(isC,separator,decimal)
1064
+ {this.hasSeparators=isC;if(separator==null)separator=this.COMMA;if(decimal==null)decimal=this.PERIOD;if(separator==decimal){this.decimalValue=(decimal==this.PERIOD)?this.COMMA:this.PERIOD;}else{this.decimalValue=decimal;}
1065
+ this.separatorValue=separator;}
1066
+ function setCommasNF(isC)
1067
+ {this.setSeparators(isC,this.COMMA,this.PERIOD);}
1068
+ function setCurrencyNF(isC)
1069
+ {this.hasCurrency=isC;}
1070
+ function setCurrencyValueNF(val)
1071
+ {this.currencyValue=val;}
1072
+ function setCurrencyPrefixNF(cp)
1073
+ {this.setCurrencyValue(cp);this.setCurrencyPosition(this.LEFT_OUTSIDE);}
1074
+ function setCurrencyPositionNF(cp)
1075
+ {this.currencyPosition=cp}
1076
+ function setPlacesNF(p,tr)
1077
+ {this.roundToPlaces=!(p==this.NO_ROUNDING);this.truncate=(tr!=null&&tr);this.places=(p<0)?0:p;}
1078
+ function addSeparatorsNF(nStr,inD,outD,sep)
1079
+ {nStr+='';var dpos=nStr.indexOf(inD);var nStrEnd='';if(dpos!=-1){nStrEnd=outD+nStr.substring(dpos+1,nStr.length);nStr=nStr.substring(0,dpos);}
1080
+ var rgx=/(\d+)(\d{3})/;while(rgx.test(nStr)){nStr=nStr.replace(rgx,'$1'+sep+'$2');}
1081
+ return nStr+nStrEnd;}
1082
+ function toFormattedNF()
1083
+ {var pos;var nNum=this.num;var nStr;var splitString=new Array(2);if(this.roundToPlaces){nNum=this.getRounded(nNum);nStr=this.preserveZeros(Math.abs(nNum));}else{nStr=this.expandExponential(Math.abs(nNum));}
1084
+ if(this.hasSeparators){nStr=this.addSeparators(nStr,this.PERIOD,this.decimalValue,this.separatorValue);}else{nStr=nStr.replace(new RegExp('\\'+this.PERIOD),this.decimalValue);}
1085
+ var c0='';var n0='';var c1='';var n1='';var n2='';var c2='';var n3='';var c3='';var negSignL=(this.negativeFormat==this.PARENTHESIS)?this.LEFT_PAREN:this.DASH;var negSignR=(this.negativeFormat==this.PARENTHESIS)?this.RIGHT_PAREN:this.DASH;if(this.currencyPosition==this.LEFT_OUTSIDE){if(nNum<0){if(this.negativeFormat==this.LEFT_DASH||this.negativeFormat==this.PARENTHESIS)n1=negSignL;if(this.negativeFormat==this.RIGHT_DASH||this.negativeFormat==this.PARENTHESIS)n2=negSignR;}
1086
+ if(this.hasCurrency)c0=this.currencyValue;}else if(this.currencyPosition==this.LEFT_INSIDE){if(nNum<0){if(this.negativeFormat==this.LEFT_DASH||this.negativeFormat==this.PARENTHESIS)n0=negSignL;if(this.negativeFormat==this.RIGHT_DASH||this.negativeFormat==this.PARENTHESIS)n3=negSignR;}
1087
+ if(this.hasCurrency)c1=this.currencyValue;}
1088
+ else if(this.currencyPosition==this.RIGHT_INSIDE){if(nNum<0){if(this.negativeFormat==this.LEFT_DASH||this.negativeFormat==this.PARENTHESIS)n0=negSignL;if(this.negativeFormat==this.RIGHT_DASH||this.negativeFormat==this.PARENTHESIS)n3=negSignR;}
1089
+ if(this.hasCurrency)c2=this.currencyValue;}
1090
+ else if(this.currencyPosition==this.RIGHT_OUTSIDE){if(nNum<0){if(this.negativeFormat==this.LEFT_DASH||this.negativeFormat==this.PARENTHESIS)n1=negSignL;if(this.negativeFormat==this.RIGHT_DASH||this.negativeFormat==this.PARENTHESIS)n2=negSignR;}
1091
+ if(this.hasCurrency)c3=this.currencyValue;}
1092
+ nStr=c0+n0+c1+n1+nStr+n2+c2+n3+c3;if(this.negativeRed&&nNum<0){nStr='<font color="red">'+nStr+'</font>';}
1093
+ return(nStr);}
1094
+ function toPercentageNF()
1095
+ {var nNum=this.num*100;nNum=this.getRounded(nNum);return nNum+'%';}
1096
+ function getZerosNF(places)
1097
+ {var extraZ='';var i=0;for(;i<places;i++){extraZ+='0';}
1098
+ return extraZ;}
1099
+ function expandExponentialNF(origVal)
1100
+ {if(isNaN(origVal))return origVal;var newVal=parseFloat(origVal)+'';var eLoc=newVal.toLowerCase().indexOf('e');if(eLoc!=-1){var plusLoc=newVal.toLowerCase().indexOf('+');var negLoc=newVal.toLowerCase().indexOf('-',eLoc);var justNumber=newVal.substring(0,eLoc);if(negLoc!=-1){var places=newVal.substring(negLoc+1,newVal.length);justNumber=this.moveDecimalAsString(justNumber,true,parseInt(places));}else{if(plusLoc==-1)plusLoc=eLoc;var places=newVal.substring(plusLoc+1,newVal.length);justNumber=this.moveDecimalAsString(justNumber,false,parseInt(places));}
1101
+ newVal=justNumber;}
1102
+ return newVal;}
1103
+ function moveDecimalRightNF(val,places)
1104
+ {var newVal='';if(places==null){newVal=this.moveDecimal(val,false);}else{newVal=this.moveDecimal(val,false,places);}
1105
+ return newVal;}
1106
+ function moveDecimalLeftNF(val,places)
1107
+ {var newVal='';if(places==null){newVal=this.moveDecimal(val,true);}else{newVal=this.moveDecimal(val,true,places);}
1108
+ return newVal;}
1109
+ function moveDecimalAsStringNF(val,left,places)
1110
+ {var spaces=(arguments.length<3)?this.places:places;if(spaces<=0)return val;var newVal=val+'';var extraZ=this.getZeros(spaces);var re1=new RegExp('([0-9.]+)');if(left){newVal=newVal.replace(re1,extraZ+'$1');var re2=new RegExp('(-?)([0-9]*)([0-9]{'+spaces+'})(\\.?)');newVal=newVal.replace(re2,'$1$2.$3');}else{var reArray=re1.exec(newVal);if(reArray!=null){newVal=newVal.substring(0,reArray.index)+reArray[1]+extraZ+newVal.substring(reArray.index+reArray[0].length);}
1111
+ var re2=new RegExp('(-?)([0-9]*)(\\.?)([0-9]{'+spaces+'})');newVal=newVal.replace(re2,'$1$2$4.');}
1112
+ newVal=newVal.replace(/\.$/,'');return newVal;}
1113
+ function moveDecimalNF(val,left,places)
1114
+ {var newVal='';if(places==null){newVal=this.moveDecimalAsString(val,left);}else{newVal=this.moveDecimalAsString(val,left,places);}
1115
+ return parseFloat(newVal);}
1116
+ function getRoundedNF(val)
1117
+ {val=this.moveDecimalRight(val);if(this.truncate){val=val>=0?Math.floor(val):Math.ceil(val);}else{val=Math.round(val);}
1118
+ val=this.moveDecimalLeft(val);return val;}
1119
+ function preserveZerosNF(val)
1120
+ {var i=0;val=this.expandExponential(val);if(this.places<=0)return val;var decimalPos=val.indexOf('.');if(decimalPos==-1){val+='.';for(;i<this.places;i++){val+='0';}}else{var actualDecimals=(val.length-1)-decimalPos;var difference=this.places-actualDecimals;for(;i<difference;i++){val+='0';}}
1121
+ return val;}
1122
+ function justNumberNF(val)
1123
+ {var newVal=val+'';var isPercentage=false;if(newVal.indexOf('%')!=-1){newVal=newVal.replace(/\%/g,'');isPercentage=true;}
1124
+ var re=new RegExp('[^\\'+this.inputDecimalValue+'\\d\\-\\+\\(\\)eE]','g');newVal=newVal.replace(re,'');var tempRe=new RegExp('['+this.inputDecimalValue+']','g');var treArray=tempRe.exec(newVal);if(treArray!=null){var tempRight=newVal.substring(treArray.index+treArray[0].length);newVal=newVal.substring(0,treArray.index)+this.PERIOD+tempRight.replace(tempRe,'');}
1125
+ if(newVal.charAt(newVal.length-1)==this.DASH){newVal=newVal.substring(0,newVal.length-1);newVal='-'+newVal;}
1126
+ else if(newVal.charAt(0)==this.LEFT_PAREN&&newVal.charAt(newVal.length-1)==this.RIGHT_PAREN){newVal=newVal.substring(1,newVal.length-1);newVal='-'+newVal;}
1127
+ newVal=parseFloat(newVal);if(!isFinite(newVal)){newVal=0;}
1128
+ if(isPercentage){newVal=this.moveDecimalLeft(newVal,2);}
1129
+ return newVal;}
1130
+ Object.setNestedProperty=function(obj,prop,value)
1131
+ {var props=prop.split('.');var cur=obj;var prev=null;var last=null;props.each(function(p)
1132
+ {last=p;if(cur[p])
1133
+ {prev=cur;cur=cur[p];}
1134
+ else
1135
+ {prev=cur;cur=cur[p]={};}});prev[last]=value;return obj;};Object.getNestedProperty=function(obj,prop)
1136
+ {if(obj!=null&&prop!=null)
1137
+ {var props=prop.split('.');if(props.length!=-1)
1138
+ {var cur=obj;props.each(function(p)
1139
+ {if(null!=cur[p])
1140
+ {cur=cur[p];}
1141
+ else
1142
+ {cur=null;throw $break;}});return cur;}
1143
+ else
1144
+ {return obj[prop];}}
1145
+ return null;};var exclusionMethods=['decorate','before','beforeAll','after','afterAll','setupDecoratorFor','initialize'];var exclusionPattern=/(before_|original_|after_)/;Object.decorate=function(object)
1146
+ {if(object._decorated)return object;object._decorated=true;object.setupDecoratorFor=function(method)
1147
+ {if(!('original_'+method in object))
1148
+ {var self=this;object['original_'+method]=object[method];object['before_'+method]=[];object['after_'+method]=[];object[method]=function()
1149
+ {var args=$A(arguments);self['before_'+method].each(function(f)
1150
+ {f.apply(self,[method,args]);});var rv=self['original_'+method].apply(self,args);self['after_'+method].each(function(f)
1151
+ {f.apply(self,[method,args,rv]);});return rv;};}};object.before=function(method,f)
1152
+ {object.setupDecoratorFor(method);object['before_'+method].unshift(f);return object;};object.beforeAll=function(f)
1153
+ {for(var p in object)
1154
+ {if(typeof(object[p])!='function'||exclusionMethods.contains(p)||exclusionPattern.test(p))continue;object.setupDecoratorFor(p);object['before_'+p].unshift(f);}
1155
+ return object;};object.after=function(method,f)
1156
+ {object.setupDecoratorFor(method);object['after_'+method].push(f);return object;};object.afterAll=function(f)
1157
+ {for(var p in object)
1158
+ {if(typeof(object[p])!='function'||exclusionMethods.contains(p)||exclusionPattern.test(p))continue;object.setupDecoratorFor(p);object['after_'+p].unshift(f);}
1159
+ return object;};return object;};Object.extend(Object.prototype,{decorate:function()
1160
+ {return Object.decorate(this);}});Object.copy=function(target,source)
1161
+ {if(source)
1162
+ {for(var p in source)
1163
+ {var obj=source[p];var type=typeof(obj);switch(type)
1164
+ {case'string':case'number':case'boolean':case'object':case'array':{target[p]=obj;break;}}}}
1165
+ return target;};Object.evalWithinScope=function(code,scope)
1166
+ {if(code=='{}')return{};var func=eval('var f = function(){return eval("('+code+')")}; f;');return func.call(scope);};Object.getExceptionDetail=function(e)
1167
+ {if(!e)return'No Exception Object';if(HAKANO.isIE)
1168
+ {return'message: '+e.message+', location: '+e.location||0;}
1169
+ else
1170
+ {return'message: '+e.message+', location: '+e.lineNumber||0;}};hakano.util.Scroller=Class.create();Object.extend(hakano.util.Scroller,{STEPS:35,smoothScrollTo:function(element)
1171
+ {if(!Element.visible(element))
1172
+ {Element.show(element);}
1173
+ var destx=element.offsetLeft;var desty=element.offsetTop;var thisNode=element;while(thisNode.offsetParent&&(thisNode.offsetParent!=document.body))
1174
+ {thisNode=thisNode.offsetParent;destx+=thisNode.offsetLeft;desty+=thisNode.offsetTop;}
1175
+ if(this.timer)
1176
+ {clearInterval(this.timer);this.timer=null;}
1177
+ var cypos=this.getCurrentYPos();var step=parseInt((desty-cypos)/this.STEPS);this.timer=setInterval('hakano.util.Scroller.scrollWindow('+step+','+desty+')',10);},getCurrentYPos:function()
1178
+ {if(document.body&&document.body.scrollTop)
1179
+ return document.body.scrollTop;if(document.documentElement&&document.documentElement.scrollTop)
1180
+ return document.documentElement.scrollTop;if(window.pageYOffset)
1181
+ return window.pageYOffset;return 0;},scrollWindow:function(scramount,dest)
1182
+ {var wascypos=this.getCurrentYPos();var isAbove=(wascypos<dest);window.scrollTo(0,wascypos+scramount);var iscypos=this.getCurrentYPos();var isAboveNow=(iscypos<dest);if((isAbove!=isAboveNow)||(wascypos==iscypos))
1183
+ {clearInterval(this.timer);this.timer=null;}}});hakano.util.SHA=Class.create();hakano.util.SHA={toSHA256Hex:function(value)
1184
+ {return this.hex_sha256(value);},chrsz:8,hexcase:1,safe_add:function(x,y)
1185
+ {var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);},S:function(X,n){return(X>>>n)|(X<<(32-n));},R:function(X,n){return(X>>>n);},Ch:function(x,y,z){return((x&y)^((~x)&z));},Maj:function(x,y,z){return((x&y)^(x&z)^(y&z));},Sigma0256:function(x){return(this.S(x,2)^this.S(x,13)^this.S(x,22));},Sigma1256:function(x){return(this.S(x,6)^this.S(x,11)^this.S(x,25));},Gamma0256:function(x){return(this.S(x,7)^this.S(x,18)^this.R(x,3));},Gamma1256:function(x){return(this.S(x,17)^this.S(x,19)^this.R(x,10));},Sigma0512:function(x){return(this.S(x,28)^this.S(x,34)^this.S(x,39));},Sigma1512:function(x){return(this.S(x,14)^this.S(x,18)^this.S(x,41));},Gamma0512:function(x){return(this.S(x,1)^this.S(x,8)^this.R(x,7));},Gamma1512:function(x){return(this.S(x,19)^this.S(x,61)^this.R(x,6));},core_sha256:function(m,l)
1186
+ {var K=new Array(0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2);var HASH=new Array(0x6A09E667,0xBB67AE85,0x3C6EF372,0xA54FF53A,0x510E527F,0x9B05688C,0x1F83D9AB,0x5BE0CD19);var W=new Array(64);var a,b,c,d,e,f,g,h;var T1,T2;m[l>>5]|=0x80<<(24-l%32);m[((l+64>>9)<<4)+15]=l;for(var i=0;i<m.length;i+=16){a=HASH[0];b=HASH[1];c=HASH[2];d=HASH[3];e=HASH[4];f=HASH[5];g=HASH[6];h=HASH[7];for(var j=0;j<64;j++){if(j<16)W[j]=m[j+i];else W[j]=this.safe_add(this.safe_add(this.safe_add(this.Gamma1256(W[j-2]),W[j-7]),this.Gamma0256(W[j-15])),W[j-16]);T1=this.safe_add(this.safe_add(this.safe_add(this.safe_add(h,this.Sigma1256(e)),this.Ch(e,f,g)),K[j]),W[j]);T2=this.safe_add(this.Sigma0256(a),this.Maj(a,b,c));h=g;g=f;f=e;e=this.safe_add(d,T1);d=c;c=b;b=a;a=this.safe_add(T1,T2);}
1187
+ HASH[0]=this.safe_add(a,HASH[0]);HASH[1]=this.safe_add(b,HASH[1]);HASH[2]=this.safe_add(c,HASH[2]);HASH[3]=this.safe_add(d,HASH[3]);HASH[4]=this.safe_add(e,HASH[4]);HASH[5]=this.safe_add(f,HASH[5]);HASH[6]=this.safe_add(g,HASH[6]);HASH[7]=this.safe_add(h,HASH[7]);}
1188
+ return HASH;},str2binb:function(str)
1189
+ {var bin=Array();var mask=(1<<this.chrsz)-1;for(var i=0;i<str.length*this.chrsz;i+=this.chrsz)
1190
+ bin[i>>5]|=(str.charCodeAt(i/this.chrsz)&mask)<<(24-i%32);return bin;},binb2str:function(bin)
1191
+ {var str="";var mask=(1<<this.chrsz)-1;for(var i=0;i<bin.length*32;i+=this.chrsz)
1192
+ str+=String.fromCharCode((bin[i>>5]>>>(24-i%32))&mask);return str;},binb2hex:function(binarray)
1193
+ {var hex_tab=this.hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++)
1194
+ {str+=hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8+4))&0xF)+
1195
+ hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8))&0xF);}
1196
+ return str;},binb2b64:function(binarray)
1197
+ {var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i<binarray.length*4;i+=3)
1198
+ {var triplet=(((binarray[i>>2]>>8*(3-i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*(3-(i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*(3-(i+2)%4))&0xFF);for(var j=0;j<4;j++)
1199
+ {if(i*8+j*6>binarray.length*32)str+=b64pad;else str+=tab.charAt((triplet>>6*(3-j))&0x3F);}}
1200
+ return str;},hex_sha256:function(s){return this.binb2hex(this.core_sha256(this.str2binb(s),s.length*this.chrsz));},b64_sha256:function(s){return this.binb2b64(this.core_sha256(this.str2binb(s),s.length*this.chrsz));},str_sha256:function(s){return this.binb2str(this.core_sha256(this.str2binb(s),s.length*this.chrsz));}};Object.extend(String.prototype,{limit:function(size)
1201
+ {if(this.length>size)
1202
+ {return this.substring(0,size)+"...";}
1203
+ return this;},trim:function()
1204
+ {return this.replace(/^\s+/g,'').replace(/\s+$/g,'');},startsWith:function(value)
1205
+ {if(value.length<=this.length)
1206
+ {return this.substring(0,value.length)==value;}
1207
+ return false;},toFunction:function(dontPreProcess)
1208
+ {var str=this.trim();if(str.length==0)
1209
+ {return Prototype.emptyFunction;}
1210
+ if(!dontPreProcess)
1211
+ {if(str.match(/^function\(/))
1212
+ {str='return '+String.unescapeXML(this)+'()';}
1213
+ else if(!str.match(/return/))
1214
+ {str='return '+String.unescapeXML(this);}
1215
+ else if(str.match(/^return function/))
1216
+ {str=String.unescapeXML(this)+' ();';}}
1217
+ var code='var f = function(){'+str+'}; f;';var func=eval(code);if(typeof(func)=='function')
1218
+ {return func;}
1219
+ throw Error('code was not a function: '+this);}});String.escapeXML=function(value)
1220
+ {var str="";for(var c=0;c<value.length;c++)
1221
+ {var ch=value.charAt(c);if(ch=='"')
1222
+ {str+="&quot;";}
1223
+ else if(ch=='&')
1224
+ {str+="&amp;";}
1225
+ else if(ch=='>')
1226
+ {str+="&gt;";}
1227
+ else if(ch=='<')
1228
+ {str+="&lt;";}
1229
+ else if(ch=='\'')
1230
+ {str+="&apos;";}
1231
+ else
1232
+ {str+=ch;}}
1233
+ return str;};String.unescapeXML=function(value)
1234
+ {if(!value)return null;var v=value.replace(/&lt;/g,"<");v=v.replace(/&gt;/g,">");v=v.replace(/&apos;/g,"'");v=v.replace(/&amp;/g,"&");v=v.replace(/&quot;/g,"\"");return v;};HAKANO.unescapeXML=String.unescapeXML;HAKANO.escapeXML=String.escapeXML;var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";String.prototype.encode64=function()
1235
+ {var input=this;var output="";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>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}
1236
+ output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+
1237
+ keyStr.charAt(enc3)+keyStr.charAt(enc4);}while(i<input.length);return output;};String.prototype.decode64=function(){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;var input=this;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");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<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2);}
1238
+ if(enc4!=64){output=output+String.fromCharCode(chr3);}}while(i<input.length);return output;};hakano.util.URI=Class.create();Object.extend(hakano.util.URI,{splitQueryParams:function(uri)
1239
+ {if(!uri)return{};var pairs=uri.split('&');return pairs.inject({},function(params,pairString)
1240
+ {var pair=pairString.split('=');params[decodeURIComponent(pair[0])]=pair[1]?decodeURIComponent(pair[1]):undefined;return params;});},toQueryString:function(array)
1241
+ {var q="";array.each(function(entry)
1242
+ {if(""!=q)
1243
+ {q+="&";}
1244
+ q+=encodeURIComponent(entry[0])+"="+encodeURIComponent(entry[1]);});return q;},toQueryParams:function(uri)
1245
+ {if(uri)
1246
+ {var i=uri.indexOf('?');if(i!=-1)
1247
+ {return this.splitQueryParams(uri.substring(i+1));}}
1248
+ return{};},getRootPath:function(uri)
1249
+ {var abs=uri.indexOf(':/');if(abs==-1)
1250
+ {throw"must be an absolute uri: "+uri;}
1251
+ var qs=uri.indexOf('?');if(qs!=-1)
1252
+ {uri=uri.substring(0,qs);}
1253
+ else
1254
+ {hash=uri.indexOf('#');if(hash!=-1)
1255
+ {uri=uri.substring(0,hash);}}
1256
+ var i=uri.lastIndexOf('/');if(i==-1)
1257
+ {return uri+'/';}
1258
+ if(i==uri.length-1)
1259
+ {return uri;}
1260
+ var proto=uri.substring(abs,3);var len=3;if(proto!='://')
1261
+ {len=2;}
1262
+ if(i>abs+len)
1263
+ {uri=uri.substring(0,i);if(uri.substring(uri.length-1)=='/')
1264
+ {return uri;}}
1265
+ return uri+'/';},parse:function(target,base)
1266
+ {var basePath=base?base:HAKANO.DocumentPath;var rootPath=this.getRootPath(basePath);if(target=='/'||target=='')return rootPath;if(target.substring(0,1)=='/'||(target.length>2&&target.substr(0,3)=="../")||(target.length>1&&target.substr(0,2)=="./"))
1267
+ {if(target.substring(0,1)=='/')
1268
+ {return rootPath+target.substring(1);}
1269
+ return rootPath+target;}
1270
+ else if(target.indexOf(":/")!=-1)
1271
+ {return target;}
1272
+ else
1273
+ {return rootPath+target;}},regexp:/(ftp|http|https|file):(\/){1,2}(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/,isValid:function(str)
1274
+ {return str==null||str==''?false:str.match(this.regexp);},chopDirectories:function(path,count)
1275
+ {var paths=path.split('/');var str='';for(var c=0;c<paths.length-count;c++)
1276
+ {str+=paths[c]+'/';}
1277
+ return str;}});hakano.util.UUID={dateSeed:new Date().getTime(),generateNewId:function()
1278
+ {var a=Math.round(9999999999*Math.random());var b=Math.round(9999999999*Math.random());var c=Math.round(this.dateSeed*Math.random());return a+"-"+b+"-"+c;}};hakano.util.MessageBroker=Class.create();Object.extend(hakano.util.MessageBroker,hakano.util.EventBroadcaster.prototype);Object.extend(hakano.util.MessageBroker,{DEBUG:true,init:false,serverPath:HAKANO.DocumentPath+"service/messagebroker",interceptors:[],messageQueue:[],timer:null,time:null,currentRequestId:1,serverDown:false,poll:true,fetching:false,localDirectListeners:{},remoteDirectListeners:{},localPatternListeners:[],remotePatternListeners:[],devmode:(window.location.href.indexOf('devmode=1')>0),toString:function()
1279
+ {return'[MessageBroker]';},addInterceptor:function(interceptor)
1280
+ {$D(this.toString()+' Adding interceptor: '+interceptor);this.interceptors.push(interceptor);},removeInterceptor:function(interceptor)
1281
+ {$D(this.toString()+'Removing interceptor: '+interceptor);this.interceptors.remove(interceptor);},addListenerByType:function(t,callback)
1282
+ {t=t.trim();var idx=t.indexOf(':');var direction=(idx!=-1)?(t.substring(0,idx)):'both';var type=(idx!=-1)?t.substring(idx+1):t;var regex=type.charAt(0)=='~';if(direction=='local'||direction=='both')
1283
+ {var array=null;if(regex)
1284
+ {this.localPatternListeners.push([callback,new RegExp(type.substring(1))]);var removePatternListenerArrays=callback['_removePatternListenerArrays'];if(!removePatternListenerArrays)
1285
+ {removePatternListenerArrays=[];callback['_removePatternListenerArrays']=removePatternListenerArrays;}
1286
+ removePatternListenerArrays.push(this.localPatternListeners);}
1287
+ else
1288
+ {array=this.localDirectListeners[type];if(!array)
1289
+ {array=[];this.localDirectListeners[type]=array;}
1290
+ var removeListenerArrays=callback['_removeListenerArrays'];if(!removeListenerArrays)
1291
+ {removeListenerArrays=[];callback['_removeListenerArrays']=removeListenerArrays;}
1292
+ removeListenerArrays.push(array);array.push(callback);}}
1293
+ if(direction=='remote'||direction=='both')
1294
+ {var array=null;if(regex)
1295
+ {this.remotePatternListeners.push([callback,new RegExp(type.substring(1))]);var removePatternListenerArrays=callback['_removePatternListenerArrays'];if(!removePatternListenerArrays)
1296
+ {removePatternListenerArrays=[];callback['_removePatternListenerArrays']=removePatternListenerArrays;}
1297
+ removePatternListenerArrays.push(this.remotePatternListeners);}
1298
+ else
1299
+ {array=this.remoteDirectListeners[type];if(!array)
1300
+ {array=[];this.remoteDirectListeners[type]=array;}
1301
+ var removeListenerArrays=callback['_removeListenerArrays'];if(!removeListenerArrays)
1302
+ {removeListenerArrays=[];callback['_removeListenerArrays']=removeListenerArrays;}
1303
+ removeListenerArrays.push(array);array.push(callback);}}},addListener:function(callback)
1304
+ {var startTime=new Date().getTime();var accept=callback['accept'];if(!accept)
1305
+ {alert('add listener problem, callback incorrect and has no accept function\n'+callback);return;}
1306
+ var types=accept.call(callback);if(types.length==1)
1307
+ {this.addListenerByType(types[0],callback);}
1308
+ else
1309
+ {for(var c=0,len=types.length;c<len;c++)
1310
+ {this.addListenerByType(types[c],callback);}}
1311
+ if(this.DEBUG)$D(this.toString()+' Added listener: '+callback+' ('+(new Date().getTime()-startTime)+' ms)');},removeListener:function(callback)
1312
+ {var startTime=new Date().getTime();var removeListenerArrays=callback['_removeListenerArrays'];if(removeListenerArrays&&removeListenerArrays.length>0)
1313
+ {for(var c=0,len=removeListenerArrays.length;c<len;c++)
1314
+ {removeListenerArrays[c].remove(callback);}
1315
+ delete callback['_removeListenerArrays'];}
1316
+ var removePatternListenerArrays=callback['_removePatternListenerArrays'];if(removePatternListenerArrays&&removePatternListenerArrays.length>0)
1317
+ {for(var c=0,len=removePatternListenerArrays.length;c<len;c++)
1318
+ {var array=removePatternListenerArrays[c];if(array&&array.length>0)
1319
+ {var found=null;for(var x=0,xlen=array.length;x<xlen;x++)
1320
+ {var e=array[x];if(e[0]==callback)
1321
+ {found=e;break;}}
1322
+ if(found)array.remove(found);}}}
1323
+ if(this.DEBUG)$D(this.toString()+' Removed listener: '+callback+' ('+(new Date().getTime()-startTime)+' ms)');},queue:function(msg,callback)
1324
+ {var type=msg['type'];if(!type)
1325
+ {throw"type must be specified on the message";}
1326
+ if(this.interceptors.length>0)
1327
+ {var send=true;for(var c=0,len=this.interceptors.length;c<len;c++)
1328
+ {var interceptor=this.interceptors[c];var func=interceptor['interceptQueue'];if(func)
1329
+ {var result=func.apply(interceptor,[msg,callback]);if(this.DEBUG)$D(self.toString()+' Invoked interceptor: '+interceptor+', returned: '+result+' for message: '+type);if(result!=null&&!result)
1330
+ {send=false;break;}}}
1331
+ if(!send)
1332
+ {$D(this+' interceptor squashed event: '+msg['type']);return;}}
1333
+ var a=type.indexOf(':');var dest=a!=-1?type.substring(0,a):'local';var name=a!=-1?type.substring(a+1):type;msg['type']=name;var data=(msg['data'])?msg['data']:{};var json=null;switch(typeof(data))
1334
+ {case'object':case'array':json=data.toJSONString();break;default:json=data.toString();break;}
1335
+ data.toString=function()
1336
+ {return json;};$D(this+' message queued: '+name+', data: '+json);switch(dest)
1337
+ {case'remote':{if(this.messageQueue)
1338
+ {if(!this.devmode)
1339
+ {this.messageQueue.push([msg,callback]);this.startTimer(msg['immediate']||false);}}
1340
+ else
1341
+ {Logger.error(this+' message:'+name+" ignored since we don't have a messageQueue!");}
1342
+ var arraydirect=this.remoteDirectListeners[name];var arraypattern=this.remotePatternListeners;if(arraydirect)
1343
+ {for(var c=0,len=arraydirect.length;c<len;c++)
1344
+ {this.sendToListener(arraydirect[c],name,data,'JSON',dest);}}
1345
+ if(arraypattern)
1346
+ {for(var c=0,len=arraypattern.length;c<len;c++)
1347
+ {var entry=arraypattern[c];var listener=entry[0];var pattern=entry[1];if(pattern.test(name))
1348
+ {this.sendToListener(listener,name,data,'JSON',dest);}}}
1349
+ break;}
1350
+ case'local':{var arraydirect=this.localDirectListeners[name];var arraypattern=this.localPatternListeners;if(arraydirect)
1351
+ {for(var c=0,len=arraydirect.length;c<len;c++)
1352
+ {this.sendToListener(arraydirect[c],name,data,'JSON',dest);}}
1353
+ if(arraypattern)
1354
+ {for(var c=0,len=arraypattern.length;c<len;c++)
1355
+ {var entry=arraypattern[c];var listener=entry[0];var pattern=entry[1];if(pattern.test(name))
1356
+ {this.sendToListener(listener,name,data,'JSON',dest);}}}
1357
+ break;}}},processIncoming:function(xml)
1358
+ {if(xml)
1359
+ {var children=xml.documentElement.childNodes;if(children&&children.length>0)
1360
+ {for(var c=0;c<children.length;c++)
1361
+ {var child=children.item(c);if(child.nodeType==hakano.util.Dom.ELEMENT_NODE)
1362
+ {var requestid=child.getAttribute("requestid");try
1363
+ {this.dispatch(requestid,child);}
1364
+ catch(e)
1365
+ {Logger.error(this+' - Error in dispatch of message. '+Object.getExceptionDetail(e));}}}}}},dispatch:function(requestid,msg)
1366
+ {var type=msg.getAttribute("type");var datatype=msg.getAttribute("datatype");var data=msg;if(datatype=='JSON')
1367
+ {var text;try
1368
+ {text=hakano.util.Dom.getText(msg);data=text.parseJSON();data.toString=function()
1369
+ {if(!this._toString)
1370
+ {this._toString=this.toJSONString();}
1371
+ return this._toString;};$D(this.toString()+' received remote message, type:'+type+',data:'+data);}
1372
+ catch(e)
1373
+ {Logger.error('Error received evaluating: '+text+' for '+msg+', type:'+type+", "+Object.getExceptionDetail(e));return;}}
1374
+ if(this.interceptors.length>0)
1375
+ {var send=true;for(var c=0,len=this.interceptors.length;c<len;c++)
1376
+ {var interceptor=this.interceptors[c];var func=interceptor['interceptDispatch'];if(func)
1377
+ {var result=func.apply(interceptor,[requestid,type,data,datatype]);if(result!=null&&!result)
1378
+ {send=false;break;}}}
1379
+ if(!send)
1380
+ {return;}}
1381
+ var array=this.remoteDirectListeners[type];if(array&&array.length>0)
1382
+ {for(var c=0,len=array.length;c<len;c++)
1383
+ {this.sendToListener(array[c],type,data,datatype,'remote');}}
1384
+ if(this.remotePatternListeners.length>0)
1385
+ {for(var c=0,len=this.remotePatternListeners.length;c<len;c++)
1386
+ {var entry=this.remotePatternListeners[c];var listener=entry[0];var pattern=entry[1];if(pattern.test(type))
1387
+ {this.sendToListener(listener,type,data,datatype,'remote');}}}},sendToListener:function(listener,type,msg,datatype,from)
1388
+ {if(this.interceptors.length>0)
1389
+ {var send=true;for(var c=0,len=this.interceptors.length;c<len;c++)
1390
+ {var interceptor=this.interceptors[c];var func=interceptor['interceptSendToListener'];if(func)
1391
+ {var result=func.apply(interceptor,[listener,type,msg,datatype,from]);if(result!=null&&!result)
1392
+ {send=false;break;}}}
1393
+ if(!send)
1394
+ {return;}}
1395
+ $D(this.toString()+' forwarding '+type+' to '+listener+', direction:'+from+', datatype:'+datatype+', data: '+msg);try
1396
+ {listener['onMessage'].apply(listener,[type,msg,datatype,from]);}
1397
+ catch(e)
1398
+ {Logger.error("Unhandled Exception dispatching:"+type+", "+msg+", to listener:"+listener+", "+Object.getExceptionDetail(e));}
1399
+ return true;},XML_REGEXP:/^<(.*)>$/,deliver:function(initialrequest)
1400
+ {var self=this;var xml=null;if(this.messageQueue==null)
1401
+ {Logger.error(this.toString()+', deliver called but no message queue');return;}
1402
+ if(this.messageQueue.length>0)
1403
+ {xml="<?xml version='1.0'?>\n";var idleMs=hakano.util.IdleManager.getIdleTimeInMS();xml+="<request version='1.0' idle='"+idleMs+"'>\n";var timestamp=new Date().getTime();for(var c=0,len=this.messageQueue.length;c<len;c++)
1404
+ {var msg=this.messageQueue[c];var requestid=this.currentRequestId++;var data=msg[0]['data']||"<data/>";var datatype=this.XML_REGEXP.exec(data)?'XML':'JSON';if(datatype=='JSON')
1405
+ {data='<![CDATA['+data.toJSONString()+']]>';}
1406
+ xml+="<message requestid='"+requestid+"' type='"+msg[0]['type']+"' datatype='"+datatype+"'>";xml+=data;xml+="</message>";}
1407
+ this.messageQueue.clear();xml+="</request>";}
1408
+ var _method=(xml==null)?'get':'post';var p=(initialrequest&&xml==null)?"?maxwait=1&initial=1":"?maxwait="+((!initialrequest&&xml)?this.maxWaitPollTime:this.maxWaitPollTimeWhenSending);Logger.trace(this.toString()+' Sending (poll='+(this.poll)+'): '+(xml||'<empty>'));this.fetching=true;new Ajax.Request(this.serverPath+p,{asynchronous:true,method:_method,postBody:xml||"",contentType:'text/xml',onComplete:function()
1409
+ {self.fetching=false;},onSuccess:function(result)
1410
+ {self.fetching=false;self.startTimer(false);if(result&&result.status)
1411
+ {if(result.status==401)
1412
+ {self.onMessageBrokerInvalidLogin();return;}
1413
+ if(result.status!=204)
1414
+ {var contentType=result.getResponseHeader('Content-type');if(!contentType||contentType.indexOf('text/xml')==-1)
1415
+ {self.onMessageBrokerInvalidContentType();return;}}
1416
+ if(self.serverDown)
1417
+ {self.serverDown=false;var downtime=new Date().getTime()-self.serverDownStarted;Logger.info('['+hakano.util.DateTime.get12HourTime(new Date(),true,true)+'] '+self.toString()+' Server is UP at '+self.serverPath);self.fireEvent("serverUp",downtime);self.queue({type:'local:hakano.messagebroker.server.up',data:{path:this.serverPath,downtime:downtime}});}
1418
+ var redirected=result.getResponseHeader("X-Hakano-Redirect");if(result.status==302||redirected)
1419
+ {self.fireEvent("logout");return;}
1420
+ if(result.status==200)
1421
+ {var skip=false;var cl=result.getResponseHeader("Content-Length");if(cl&&cl=="0")
1422
+ {skip=true;Logger.info(self.toString()+' Receiving no messages on response');}
1423
+ if(!skip)
1424
+ {Logger.info('['+hakano.util.DateTime.get12HourTime(new Date(),true,true)+'] '+self.toString()+' Receiving: '+result.responseText);self.processIncoming(result.responseXML);}}}
1425
+ if(result&&result.status&&result.status!=200&&result.status!=503&&result.status!=204)
1426
+ {Logger.error(self.toString()+' Response Failure: '+result.status+' '+result.statusText);}},onFailure:function(transport,json)
1427
+ {self.fetching=false;if(transport.status>=500||transport.status==404)
1428
+ {self.serverDown=true;self.serverDownStarted=new Date().getTime();Logger.warn(self.toString()+' Server is DOWN at '+self.serverPath);self.fireEvent("serverDown");self.queue({type:'local:hakano.messagebroker.server.down',data:{path:self.serverPath}});}
1429
+ else
1430
+ {Logger.error(self.toString()+' Failure: '+transport.status+' '+transport.statusText);}
1431
+ self.startTimer(false);},onException:function(resp,ex)
1432
+ {var msg=new String(ex);var log=true;var restartTimer=true;self.fetching=false;if(msg.indexOf("NS_ERROR_NOT_AVAILABLE")!=-1&&msg.indexOf("nsIXMLHttpRequest.status")!=-1)
1433
+ {log=false;}
1434
+ if(msg.indexOf("NS_ERROR_FILE_NOT_FOUND")!=-1)
1435
+ {restartTimer=false;}
1436
+ if(log)
1437
+ {Logger.error(self.toString()+' Exception: '+msg);}
1438
+ if(restartTimer)
1439
+ {self.startTimer(false);}}});},destroy:function()
1440
+ {this.cancelTimer();if(this.messageQueue)this.messageQueue.clear();this.messageQueue=null;this.time=null;if(this.localDirectListeners)
1441
+ {for(var p in this.localDirectListeners)
1442
+ {var a=this.localDirectListeners[p];if(typeof(a)=='array')
1443
+ {a.clear();}}
1444
+ this.localDirectListeners=null;}
1445
+ if(this.remoteDirectListeners)
1446
+ {for(var p in this.remoteDirectListeners)
1447
+ {var a=this.remoteDirectListeners[p];if(typeof(a)=='array')
1448
+ {a.clear();}}
1449
+ this.remoteDirectListeners=null;}
1450
+ if(this.localPatternListeners)this.localPatternListeners.clear();this.localPatternListeners=null;if(this.remotePatternListeners)this.remotePatternListeners.clear();this.remotePatternListeners=null;},cancelTimer:function()
1451
+ {if(this.timer)
1452
+ {clearTimeout(this.timer);this.timer=0;}},onMessageBrokerInvalidContentType:function()
1453
+ {$D(this+', received an invalid content type, probably need to re-login, redirecting to landing page');if(window.location.href!=HAKANO.DocumentPath)
1454
+ {window.location.href=HAKANO.DocumentPath;}},onMessageBrokerInvalidLogin:function()
1455
+ {$D(this+', received an invalid credentials, probably need to re-login, redirecting to landing page');if(window.location.href!=HAKANO.DocumentPath)
1456
+ {window.location.href=HAKANO.DocumentPath;}},startTimer:function(force)
1457
+ {if(!this.init)
1458
+ {Logger.error(this.toString()+' - startTimer called but not running');return;}
1459
+ this.cancelTimer();if(this.messageQueue)
1460
+ {if(!this.poll)
1461
+ {if(this.messageQueue.length>0&&!this.fetching)
1462
+ {this.emptyQueueHits=0;this.deliver(true);return;}
1463
+ return;}
1464
+ if(force&&!this.fetching)
1465
+ {this.emptyQueueHits=0;this.deliver(force);return;}
1466
+ var now=new Date().getTime();if(this.time)
1467
+ {if(this.messageQueue.length>0&&now-this.time>=150&&!this.fetching)
1468
+ {this.emptyQueueHits=0;this.deliver(false);return;}}
1469
+ this.time=now;var self=this;var qtime=this.downServerPoll;if(!this.serverDown)
1470
+ {if(this.messageQueue.length>1)
1471
+ {qtime=this.moreThanOneEntryQueuePoll;this.emptyQueueHits=0;}
1472
+ else
1473
+ {if(this.messageQueue.length>0)
1474
+ {qtime=this.oneEntryQueuePoll;this.emptyQueueHits=0;}
1475
+ else
1476
+ {qtime=Math.min(this.emptyQueuePollMax,this.emptyQueuePoll+(this.emptyQueueHits*this.emptyQueueDecay));this.emptyQueueHits++;}}}
1477
+ this.timer=setTimeout(function()
1478
+ {if(!self.fetching)
1479
+ {self.deliver(false);}},qtime);}
1480
+ else
1481
+ {Logger.error(toString()+' startTimer called and we have no message queue');}},maxWaitPollTime:200,maxWaitPollTimeWhenSending:100,moreThanOneEntryQueuePoll:50,oneEntryQueuePoll:200,emptyQueuePoll:2000,emptyQueuePollMax:30000,emptyQueueDecay:500,emptyQueueHits:0,downServerPoll:10000});hakano.util.MessageBrokerInterceptor=Class.create();Object.extend(hakano.util.MessageBrokerInterceptor.prototype,{initialize:function()
1482
+ {},toString:function()
1483
+ {return'[hakano.util.MessageBrokerInterceptor]';},interceptQueue:function(msg,callback)
1484
+ {return true;},interceptDispatch:function(requestid,type,data,datatype)
1485
+ {return true;},interceptSendToListener:function(listener,type,msg,datatype)
1486
+ {return true;}});hakano.util.MessageBroker.poll=false;var seamlessXMLPath=HAKANO.DocumentPath+'seamless.xml';var md5=hakano.util.MD5.hex_md5(seamlessXMLPath);var mbp=hakano.util.Cookie.GetCookie('mbPath_'+md5);if(mbp)
1487
+ {var json=eval('('+mbp.decode64()+')');hakano.util.MessageBroker.serverPath=json.src;hakano.util.MessageBroker.poll=(json.poll=='true');hakano.util.MessageBroker.init=true;hakano.util.MessageBroker.startTimer();}
1488
+ else
1489
+ {new Ajax.Request(seamlessXMLPath,{asynchronous:true,method:'get',onSuccess:function(resp)
1490
+ {var re=/<messagebroker poll="(true|false)">(.*?)<\/messagebroker>/;var match=re.exec(resp.responseText);var poll=match[1];var mbPath=match[2];var template=new Template(mbPath,/(^|.|\r|\n)(@\{(.*?)\})/);var newsrc=template.evaluate(HAKANO.TEMPLATE_VARS);hakano.util.MessageBroker.serverPath=newsrc;hakano.util.MessageBroker.poll=(poll=='true');hakano.util.MessageBroker.init=true;hakano.util.MessageBroker.startTimer();var cookie={src:newsrc,poll:hakano.util.MessageBroker.poll}.toJSONString().encode64();var date=new Date();date.setTime(date.getTime()+(7*24*60*60*1000));hakano.util.Cookie.SetCookie('mbPath_'+md5,cookie,date);}});}
1491
+ window.siteUnloadedObservers.push(hakano.util.MessageBroker.destroy.bind(hakano.util.MessageBroker));var SelectorLiteAddon=Class.create();SelectorLiteAddon.prototype={initialize:function(stack){this.r=[];this.s=[];this.i=0;for(var i=stack.length-1;i>=0;i--){var s=["*","",[]];var t=stack[i];var cursor=t.length-1;do{var d=t.lastIndexOf("#");var p=t.lastIndexOf(".");cursor=Math.max(d,p);if(cursor==-1){s[0]=t.toUpperCase();}else if(d==-1||p==cursor){s[2].push(t.substring(p+1));}else if(!s[1]){s[1]=t.substring(d+1);}
1492
+ t=t.substring(0,cursor);}while(cursor>0);this.s[i]=s;}},get:function(root){this.explore(root||document,this.i==(this.s.length-1));return this.r;},explore:function(elt,leaf){var s=this.s[this.i];var r=[];if(s[1]){var e=$(s[1]);if(e&&(s[0]=="*"||e.tagName==s[0])&&e.childOf(elt)){r=[e];}}else{r=$A(elt.getElementsByTagName(s[0]));}
1493
+ if(s[2].length==1){r=r.findAll(function(o){if(o.className.indexOf(" ")==-1){return o.className==s[2][0];}else{return o.className.split(/\s+/).include(s[2][0]);}});}else if(s[2].length>0){r=r.findAll(function(o){if(o.className.indexOf(" ")==-1){return false;}else{var q=o.className.split(/\s+/);return s[2].all(function(c){return q.include(c);});}});}
1494
+ if(leaf){this.r=this.r.concat(r);}else{++this.i;r.each(function(o){this.explore(o,this.i==(this.s.length-1));}.bind(this));}}}
1495
+ var $$old=$$;var $$=function(a,b){if(b||a.indexOf("[")>=0)return $$old.apply(this,arguments);return new SelectorLiteAddon(a.split(/\s+/)).get();}
1496
+ var $S=$$;var Decorator=Class.create();Decorator={toString:function()
1497
+ {return'[Decorator]';},defaultDecorator:function(element,valid)
1498
+ {},decoratorId:0,checkInvalid:function(element,valid,decId,msg,showValid)
1499
+ {try
1500
+ {if(decId)
1501
+ {var div=$(decId);if(div)
1502
+ {if(showValid)
1503
+ {if(valid)
1504
+ {div.innerHTML='<img src="'+HAKANO.ImagePath+'confirm.png"/> <span class="success_color">'+msg+"</span>";}}
1505
+ else
1506
+ {if(!valid)
1507
+ {div.innerHTML='<img src="'+HAKANO.ImagePath+'exclamation.png"/> '+msg;}
1508
+ Element.setStyle(decId,{visibility:(valid?'hidden':'visible')});}}}
1509
+ else
1510
+ {var id='decorate_'+element.id;var div=$(id);if(!div)
1511
+ {new Insertion.After(element.id,'<span id="'+id+'" style="font-size:11px" class="error_color"></span>');div=$(id);}
1512
+ if(showValid)
1513
+ {div.innerHTML='<img src="'+HAKANO.ImagePath+'confirm.png"/> <span class="success_color">'+msg+"</span>";}
1514
+ else
1515
+ {if(!valid)
1516
+ {div.innerHTML='<img src="'+HAKANO.ImagePath+'exclamation.png"/> '+msg;}
1517
+ Element.setStyle(id,{visibility:(valid?'hidden':'visible')});}}}
1518
+ catch(e)
1519
+ {alert(e);}},termsAccepted:function(element,valid,decId)
1520
+ {this.checkInvalid(element,valid,decId,'must accept terms and conditions');},required:function(element,valid,decId)
1521
+ {this.checkInvalid(element,valid,decId,'required');},email:function(element,valid,decId)
1522
+ {this.checkInvalid(element,valid,decId,'enter a valid email address');},fullname:function(element,valid,decId)
1523
+ {this.checkInvalid(element,valid,decId,'enter first and last name');},noSpaces:function(element,valid,decId)
1524
+ {this.checkInvalid(element,valid,decId,'no spaces');},password:function(element,valid,decId)
1525
+ {this.checkInvalid(element,valid,decId,'password must be at least 6 characters');},url:function(element,valid,decId)
1526
+ {this.checkInvalid(element,valid,decId,'enter a valid URL');},length:function(element,valid,decId)
1527
+ {if(!valid)
1528
+ {var min=element.getAttribute('validatorMinLength')||'0';var max=element.getAttribute('validatorMaxLength')||'999999';this.checkInvalid(element,valid,decId,'value must be between '+min+'-'+max+' characters');}
1529
+ else
1530
+ {this.checkInvalid(element,valid,decId,element.value.length+' characters',true);}}};var Editablefield=Class.create();Object.extend(Editablefield.prototype,{initialize:function()
1531
+ {this.value="";},toString:function()
1532
+ {return'[Editablefield]';},isValid:function()
1533
+ {if(this.getViewState()=="view")
1534
+ {return true;}
1535
+ var valid=false;if(this.getType()=="select")
1536
+ {var e=$(this.getEditElementId());if(Validator[this.getValidator()].call(Validator,(e.options[e.selectedIndex].value||"")))
1537
+ {valid=true;}}
1538
+ else
1539
+ {if(Validator[this.getValidator()].call(Validator,($(this.getEditElementId()).value||"")))
1540
+ {valid=true;}}
1541
+ Decorator[this.getDecorator()].call(Decorator,$(this.getEditElementId()),valid);return valid;},setViewState:function(viewState,cancel)
1542
+ {if(this.viewState=="input"&&viewState=="view")
1543
+ {if(!cancel)
1544
+ {if(this.getType()=="select")
1545
+ {var e=$(this.getEditElementId());this.value=e.options[e.selectedIndex].text;}
1546
+ else
1547
+ {this.value=$(this.getEditElementId()).value;}}}
1548
+ else if(this.viewState=="view"&&viewState=="input")
1549
+ {this.value=$(this.getViewElementId()).innerHTML;this.setOriginalValue(this.value);}
1550
+ this.viewState=viewState;this.updateView(viewState);},updateView:function(viewState)
1551
+ {if(viewState=="input")
1552
+ {$(this.getEditParentElementId()).innerHTML=this.getInputHTML();$(this.getEditParentElementId()).style.display="block";$(this.getViewElementId()).style.display="none";if(this.getType()=="text"||this.getType()=="textarea")
1553
+ {$(this.getEditElementId()).select();$(this.getEditElementId()).focus();}}
1554
+ else
1555
+ {$(this.getViewElementId()).innerHTML=this.value;$(this.getEditParentElementId()).style.display="none";$(this.getViewElementId()).style.display="block";}},getViewState:function()
1556
+ {return(this.viewState)?this.viewState:"view";},setViewClass:function(viewclass)
1557
+ {this.viewclass=viewclass;},getViewClass:function()
1558
+ {return this.viewclass;},setOriginalValue:function(originalValue)
1559
+ {this.originalValue=originalValue;},getOriginalValue:function()
1560
+ {return this.originalValue;},getInputHTML:function()
1561
+ {if(this.getType()=="textarea")
1562
+ {return'<textarea class="'+this.getInputClass()+'" autocomplete="off" rows="'+this.getRows()+'" cols="'+this.getCols()+'" id="'+this.getEditElementId()+'">'+this.value+'</textarea>';}
1563
+ else if(this.getType()=="select")
1564
+ {return"<select class='"+this.getInputClass()+"' id='"+this.getEditElementId()+"'>"+
1565
+ Populator[this.getPopulator()].call(Populator)+"</select>";}
1566
+ else
1567
+ {var length=(this.getLength())?this.getLength():"20";return'<input class="'+this.getInputClass()+'" autocomplete="off" size="'+length+'" type="text" value="'+this.value+'" id="'+this.getEditElementId()+'"/>';}},setInputClass:function(cl)
1568
+ {this.inputClass=cl;},getInputClass:function()
1569
+ {return this.inputClass;},setRows:function(rows)
1570
+ {this.rows=rows;},getRows:function()
1571
+ {return(this.rows)?this.rows:20;},setCols:function(cols)
1572
+ {this.cols=cols;},getCols:function()
1573
+ {return(this.cols)?this.cols:3},setType:function(type)
1574
+ {this.type=type;},getType:function()
1575
+ {return this.type;},setValidator:function(validator)
1576
+ {this.validator=validator;},getValidator:function()
1577
+ {return this.validator;},setDecorator:function(decorator)
1578
+ {this.decorator=decorator;},getDecorator:function()
1579
+ {return this.decorator;},setName:function(name)
1580
+ {this.name=name;},getName:function()
1581
+ {return this.name;},setLength:function(length)
1582
+ {this.length=length;},getLength:function()
1583
+ {return this.length;},setViewElementId:function(id)
1584
+ {this.viewElementId=id;},getViewElementId:function()
1585
+ {return this.viewElementId;},setEditElementId:function(id)
1586
+ {this.editElementId=id;},getEditElementId:function()
1587
+ {return this.editElementId;},setEditParentElementId:function(id)
1588
+ {this.editParentElementId=id;},getEditParentElementId:function()
1589
+ {return this.editParentElementId;},setValue:function(value)
1590
+ {this.value=value;},getCurrentInputValue:function()
1591
+ {if(this.getViewState()=="input")
1592
+ {if(this.getType()=="select")
1593
+ {var e=$(this.getEditElementId());this.value=e.options[e.selectedIndex].value;}
1594
+ else
1595
+ {this.value=$(this.getEditElementId()).value;}}
1596
+ return(this.value)?this.value:"";},setPopulator:function(populator)
1597
+ {this.populator=populator;},getPopulator:function()
1598
+ {return this.populator;},setOnBindMessageProperty:function(onBindMessageProperty)
1599
+ {this.onBindMessageProperty=onBindMessageProperty;},getOnBindMesssageProperty:function()
1600
+ {return this.onBindMessageProperty;}});var Field=Class.create();Object.extend(Field.prototype,{initialize:function(id,name,element)
1601
+ {this.id=id;this.name=name;this.element=element;},getName:function()
1602
+ {return this.name;},getElementId:function()
1603
+ {return this.id;},getElement:function()
1604
+ {if(!this.element)
1605
+ {this.element=$(this.id);}
1606
+ return this.element;},getParentId:function()
1607
+ {return this.getElement().parentNode.id;},setViewState:function()
1608
+ {},toString:function()
1609
+ {if(!this._toString)
1610
+ {this._toString='[Field@'+this.id+']';}
1611
+ return this._toString;}});var Fieldset=Class.create();Object.extend(Fieldset.prototype,{DEBUG:false,initialize:function(editable)
1612
+ {this.currentInputField=null;this.candidateInputField=null;this.editable=editable||false;this.initialized=false;this.FIELDS=[];if(this.editable)
1613
+ {this.setupListeners();}},toString:function()
1614
+ {return'[Fieldset@'+this.name+']';},setName:function(name)
1615
+ {this.name=name;},getName:function()
1616
+ {return this.name;},setParentNode:function(node)
1617
+ {this.parentNode=node;},getParentNode:function()
1618
+ {return this.parentNode;},setOnBindMessageUpdateRequest:function(onBindMessageUpdateRequest)
1619
+ {this.onBindMessageUpdateRequest=onBindMessageUpdateRequest;},getOnBindMessageUpdateRequest:function()
1620
+ {return this.onBindMessageUpdateRequest;},setOnBindMessageUpdateResponse:function(onBindMessageUpdateResponse)
1621
+ {this.onBindMessageUpdateResponse=onBindMessageUpdateResponse;},getOnBindMessageUpdateResponse:function()
1622
+ {return this.onBindMessageUpdateResponse;},addField:function(field)
1623
+ {if(!this.FIELDS.exists(field))
1624
+ {if(this.DEBUG)$D(this+' adding field:'+field+' to fieldset:'+this.name+', existing: '+this.FIELDS);this.FIELDS.push(field);if(field.setViewState)
1625
+ {field.setViewState("view");}}},removeField:function(field)
1626
+ {this.FIELDS.remove(field);if(this.DEBUG)$D(this+' remove field:'+field+' from fieldset:'+this.name+', existing: '+this.FIELDS);return this.FIELDS.length;},getFields:function()
1627
+ {if(this.DEBUG)$D(this+', getFields returning: '+this.FIELDS);return this.FIELDS;},setupListeners:function()
1628
+ {var self=this;this.tryEditComplete=function(e,cancel)
1629
+ {var target=Event.element(e);if(target.id)
1630
+ {for(var i=0;i<self.FIELDS.length;i++)
1631
+ {var f=self.FIELDS[i];if(cancel&&f==self.currentInputField&&f.getViewState()=='input')
1632
+ {self.currentInputField=null;f.setViewState("view",true);return true;}
1633
+ if(f.getViewElementId()==target.id)
1634
+ {if(self.currentInputField==null)
1635
+ {self.currentInputField=f;f.setViewState("input");return true;}
1636
+ if(!(self.currentInputField.isValid()))
1637
+ {return true;}
1638
+ if(f.getName()!=self.currentInputField.getName())
1639
+ {self.candidateInputField=f;}
1640
+ self.saveValue();return true;}}}
1641
+ if(self.currentInputField!=null)
1642
+ {if(self.currentInputField.isValid())
1643
+ {self.saveValue();}}
1644
+ return true;};this.stopEditingFunction=function(e)
1645
+ {e=Event.getEvent(e);var target=Event.element(e);if(target.id)
1646
+ {if(self.currentInputField!=null)
1647
+ {if(target.id==self.currentInputField.getEditElementId())
1648
+ {return true;}}
1649
+ self.tryEditComplete(e);}
1650
+ return true;};this.editingKeyFunction=function(e)
1651
+ {e=Event.getEvent(e);if(Event.isEscapeKey(e))
1652
+ {Event.stop(e);self.tryEditComplete(e,true);return false;}
1653
+ return true;};this.enterKeyFunction=function(e)
1654
+ {e=Event.getEvent(e);if(Event.isEnterKey(e))
1655
+ {return self.tryEditComplete(e);}
1656
+ return true;};Event.observe(document,'click',this.stopEditingFunction.bindAsEventListener(this),false);Event.observe(document,'keyup',this.editingKeyFunction.bindAsEventListener(this),false);Event.observe(document,'keypress',this.enterKeyFunction.bindAsEventListener(this),false);},destroy:function()
1657
+ {Event.stopObserving(document,'click',this.stopEditingFunction.bindAsEventListener(this),false);Event.stopObserving(document,'keyup',this.editingKeyFunction.bindAsEventListener(this),false);Event.stopObserving(document,'keypress',this.enterKeyFunction.bindAsEventListener(this),false);hakano.util.MessageBroker.removeListener(this.bindAsEventListener(this));},toggleFields:function()
1658
+ {this.currentInputField.setViewState("view");if(this.candidateInputField!=null)
1659
+ {this.candidateInputField.setViewState("input");this.currentInputField=this.candidateInputField;}
1660
+ else
1661
+ {this.currentInputField=null;}
1662
+ this.candidateInputField=null;},saveValue:function()
1663
+ {if(!this.initialized)
1664
+ {hakano.util.MessageBroker.addListener(this);this.initialized=true;}
1665
+ if(this.currentInputField==null)
1666
+ {return;}
1667
+ if(this.currentInputField.getCurrentInputValue()==this.currentInputField.getOriginalValue())
1668
+ {this.toggleFields();return;}
1669
+ this.loadingMsgId="saving_"+this.currentInputField.getEditElementId();var loadingId=$(this.loadingMsgId);if(loadingId)
1670
+ {loadingId.parentNode.removeChild(loadingId);}
1671
+ new Insertion.After($(this.currentInputField.getEditElementId()),"<span id='"+this.loadingMsgId+"' style='color:#999999;font-size:12px;'> saving "+this.currentInputField.getName()+"...</span>");var data={};data[this.currentInputField.getOnBindMesssageProperty()]=this.currentInputField.getCurrentInputValue();var obj={type:this.getOnBindMessageUpdateRequest(),data:data};hakano.util.MessageBroker.queue(obj);},accept:function(type)
1672
+ {return[this.getOnBindMessageUpdateResponse()];},onMessage:function(type,msg)
1673
+ {if(type==this.getOnBindMessageUpdateResponse())
1674
+ {var id=$(this.loadingMsgId);if(msg['success'])
1675
+ {this.toggleFields();}
1676
+ else
1677
+ {id.innerHTML="";var errorId="decorate_"+this.currentInputField.getEditElementId();var div=$(errorId);if(div)
1678
+ {Element.setStyle(div,{visibility:'visible'});div.innerHTML=" *"+msg['message'];}
1679
+ else
1680
+ {new Insertion.After(this.currentInputField.getEditElementId(),"<span id='"+errorId+"' style='font-size:11px;color:#ff0000'> * "+msg['message']+"</span>");}}}}});var ModalDialog=Class.create();ModalDialog.install=function()
1681
+ {this.installed=true;var div=document.createElement('div');div.innerHTML='<div id="overlay" style="display:none"></div><div id="modaldialog_shadow" style="display:none"></div><div id="modaldialog" style="display:none"><div id="modaldialog_container"><div id="modaldialog_imagebar"><img src="'+HAKANO.ImagePath+'/dialog_close.gif" id="modaldialog_close_btn"/></div><div id="modaldialog_content"></div><div id="modaldialog_buttonbar"></div></div></div>';document.body.insertBefore(div,document.body.firstChild);this.onresizeFunc=this.onresize.bindAsEventListener(this);Event.observe(window,'resize',this.onresizeFunc,false);window.siteUnloadedObservers.push(ModalDialog.destroy.bind(this));};ModalDialog.destroy=function()
1682
+ {if(this.onresizeFunc)
1683
+ {Event.stopObserving(window,'resize',this.onresizeFunc,false);this.onresizeFunc=null;}};ModalDialog.onresize=function()
1684
+ {var arrayPageSize=Element.getDocumentSize();Element.setHeight('overlay',arrayPageSize[3]);var arrayPageScroll=Element.getPageScroll();if(this.options.top)
1685
+ {Element.setTop('modaldialog',this.options.top);}
1686
+ else
1687
+ {var lightboxTop=arrayPageScroll+(arrayPageSize[3]/5);Element.setTop('modaldialog',lightboxTop);}
1688
+ var w=$('modaldialog').offsetWidth;Element.setStyle('modaldialog',{left:arrayPageSize[0]/2-w/2+'px'});Position.clone('modaldialog','modaldialog_shadow')
1689
+ var shadow=$('modaldialog_shadow')
1690
+ shadow.style.width=parseInt(shadow.style.width||0)+6+'px';shadow.style.height=parseInt(shadow.style.height||0)+6+'px';if(!this.options.hideButtons)
1691
+ {$("modaldialog_buttonbar").style.top=$('modaldialog').offsetHeight-45+'px';}};ModalDialog.hide=function()
1692
+ {if(this.showing)
1693
+ {hakano.util.KeyManager.removeHandler(hakano.util.KeyManager.KEY_ENTER,null);hakano.util.KeyManager.removeHandler(hakano.util.KeyManager.KEY_ESCAPE,null);this.showing=false;Effect.Fade('overlay');['modaldialog','modaldialog_shadow'].each(Element.hide);if(this.prevHeight)
1694
+ {$('modaldialog').style.height=this.prevHeight+'px';this.prevHeight=null;}
1695
+ if(this.prevWidth)
1696
+ {$('modaldialog').style.width=this.prevWidth+'px';this.prevWidth=null;}
1697
+ if(this.prevTop)
1698
+ {$('modaldialog').style.top=this.prevTop+'px';this.prevTop=null;}}};ModalDialog.getAcceptButton=function()
1699
+ {return $("modaldialog_button1");};ModalDialog.getCancelButton=function()
1700
+ {return $("modaldialog_button2");};ModalDialog.show=function(html,options)
1701
+ {options=Object.extend({acceptText:'Accept',cancelText:'Cancel',onAccept:Prototype.emptyFunction,onCancel:Prototype.emptyFunction,onRender:Prototype.emptyFunction,autohide:true,autodisable:false,hideButtons:false},options||{});if(!this.installed)
1702
+ {this.install();}
1703
+ this.showing=true;this.options=options;var modaldialog=$("modaldialog");if(options.width)
1704
+ {this.prevWidth=parseInt(modaldialog.style.width);modaldialog.style.width=options.width+'px';}
1705
+ if(options.height)
1706
+ {this.prevHeight=parseInt(modaldialog.style.height);modaldialog.style.height=options.height+'px';}
1707
+ var arrayPageSize=Element.getDocumentSize();if(options.top)
1708
+ {this.prevTop=parseInt(modaldialog.style.top);Element.setTop('modaldialog',options.top);}
1709
+ else
1710
+ {var arrayPageScroll=Element.getPageScroll();var dialogboxTop=arrayPageScroll+(arrayPageSize[3]/5);Element.setTop('modaldialog',dialogboxTop);}
1711
+ Element.setHeight('overlay',arrayPageSize[3]);if(!Element.visible('overlay'))
1712
+ {Effect.Appear('overlay',{duration:0.2,from:0.0,to:0.8});}
1713
+ if(!options.hideButtons)
1714
+ {$("modaldialog_buttonbar").innerHTML='<form autocomplete="false"><table align="center" width="100%"><tr><td align="right"><input type="button" class="modaldialog_button" id="modaldialog_button1" value="'+options.acceptText+'"/></td><td style="width:8px;"></td><td align="left"><input type="button" class="modaldialog_button" id="modaldialog_button2" value="'+options.cancelText+'"/></td></tr></table></form>';}
1715
+ Element[options.hideButtons?'hide':'show']('modaldialog_buttonbar');$("modaldialog_content").innerHTML=html;modaldialog.style.backgroundColor=options.backgroundColor||'#fff';Element.show('modaldialog');var w=modaldialog.offsetWidth;Element.setStyle('modaldialog',{left:arrayPageSize[0]/2-w/2+'px'});if(!options.hideButtons)
1716
+ {$("modaldialog_buttonbar").style.top=modaldialog.offsetHeight-45+'px';}
1717
+ Position.clone('modaldialog','modaldialog_shadow')
1718
+ var shadow=$('modaldialog_shadow')
1719
+ shadow.style.width=parseInt(shadow.style.width)+6+'px';shadow.style.height=parseInt(shadow.style.height)+6+'px';var button=$("modaldialog_close_btn");button.onmouseover=function(e)
1720
+ {this.src=HAKANO.ImagePath+'dialog_close_hover.gif';Event.stop(Event.getEvent(e));return false;};button.onmouseout=function(e)
1721
+ {this.src=HAKANO.ImagePath+'dialog_close.gif';Event.stop(Event.getEvent(e));return false;};button.onclick=function(e)
1722
+ {ModalDialog.hide();options.onCancel();Event.stop(Event.getEvent(e));return false;};this.enterHandler=function(e)
1723
+ {if(!$('modaldialog_button1').disabled)
1724
+ {if(options.autodisable)
1725
+ {ModalDialog.getAcceptButton().disabled=true;}
1726
+ if(options.autohide)
1727
+ {ModalDialog.hide();}
1728
+ options.onAccept();}
1729
+ Event.stop(Event.getEvent(e));return false;};this.cancelHandler=function(e)
1730
+ {ModalDialog.hide();options.onCancel();Event.stop(Event.getEvent(e));return false;};if(!options.hideButtons)
1731
+ {$("modaldialog_button1").onclick=this.enterHandler;$("modaldialog_button2").onclick=this.cancelHandler;}
1732
+ hakano.util.KeyManager.installHandler(hakano.util.KeyManager.KEY_ENTER,null,this.enterHandler);hakano.util.KeyManager.installHandler(hakano.util.KeyManager.KEY_ESCAPE,null,this.cancelHandler);Element.show('modaldialog_shadow');options.onRender($('modaldialog_content'));};var Populator=Class.create();Populator={toString:function()
1733
+ {return'[Populator]';},getGenders:function()
1734
+ {var str="<option value='' selected>select gender</option>";str+=this.makeOption('male');str+=this.makeOption('female');return str;},MONTHS:['January','February','March','April','May','June','July','August','September','October','November','December'],getMonths:function()
1735
+ {var str="<option value='' selected>select birth month</option>";var self=this;this.MONTHS.each(function(m)
1736
+ {str+=self.makeOption(m);});return str;},getDays:function()
1737
+ {var str="<option value='' selected>select day</option>";for(var c=1;c<32;c++)
1738
+ {str+=makeOption(c);}
1739
+ return str;},makeOption:function(value,display)
1740
+ {return"<option value='"+value+"'>"+(display||value)+"</option>";},getYears:function()
1741
+ {var str="<option value='' selected>select year</option>";var d=new Date();var y=d.getYear();var end=y-100;for(var i=y;y>end;y--)
1742
+ {str+=this.makeOption(i,i);}
1743
+ return str;}};var Renderer=Class.create();Renderer={toString:function()
1744
+ {return'[Renderer]';},register:function(name,renderer)
1745
+ {this[name]=renderer;},unregister:function(name)
1746
+ {if(this[name])
1747
+ {delete[name];}}};var DefaultRenderer=Class.create();Object.extend(DefaultRenderer.prototype,{initialize:function()
1748
+ {},render:function(td,table,model,row,column,selected)
1749
+ {td.innerHTML=model.getCellAt(table,row,column);}});Renderer.register('default',new DefaultRenderer());var FriendlyDateRenderer=Class.create();Object.extend(FriendlyDateRenderer.prototype,{initialize:function()
1750
+ {},render:function(td,table,model,row,column,selected)
1751
+ {var rowobj=model.getRow(row);var name=table.getColumnAt(column);var value=Object.getNestedProperty(rowobj,name);var date=hakano.util.DateTime.parseJavaDate(value);td.innerHTML=hakano.util.DateTime.getFriendlyDate(date);}});Renderer.register('friendlyDate',new FriendlyDateRenderer());var DurationRenderer=Class.create();Object.extend(DurationRenderer.prototype,{initialize:function()
1752
+ {},render:function(td,table,model,row,column,selected)
1753
+ {var begin=table.getColumnAttribute(column,'beginProperty');var end=table.getColumnAttribute(column,'endProperty');var rowobj=model.getRow(row);var beginDate=hakano.util.DateTime.parseJavaDate(Object.getNestedProperty(rowobj,begin));var endDate=hakano.util.DateTime.parseJavaDate(Object.getNestedProperty(rowobj,end));td.innerHTML=hakano.util.DateTime.getDuration(beginDate,endDate);}});Renderer.register('duration',new DurationRenderer());var FriendlyDateDiffRenderer=Class.create();Object.extend(FriendlyDateDiffRenderer.prototype,{initialize:function()
1754
+ {},render:function(td,table,model,row,column,selected)
1755
+ {var rowobj=model.getRow(row);var name=table.getColumnAt(column);var value=Object.getNestedProperty(rowobj,name);var date=hakano.util.DateTime.parseJavaDate(value);td.innerHTML=(date!=null)?hakano.util.DateTime.friendlyDiff(date):'&nbsp;';}});Renderer.register('friendlyDateDiff',new FriendlyDateDiffRenderer());var ShortDateTimeRenderer=Class.create();Object.extend(ShortDateTimeRenderer.prototype,{initialize:function()
1756
+ {},render:function(td,table,model,row,column,selected)
1757
+ {var rowobj=model.getRow(row);var name=table.getColumnAt(column);var value=Object.getNestedProperty(rowobj,name);var date=hakano.util.DateTime.parseJavaDate(value);td.innerHTML=hakano.util.DateTime.getShortDateTime(date);}});Renderer.register('shortDateTime',new ShortDateTimeRenderer());var DateTimeRenderer=Class.create();Object.extend(DateTimeRenderer.prototype,{initialize:function()
1758
+ {},render:function(td,table,model,row,column,selected)
1759
+ {var rowobj=model.getRow(row);var name=table.getColumnAt(column);var value=Object.getNestedProperty(rowobj,name);var date=hakano.util.DateTime.parseJavaDate(value);td.innerHTML=(date!=null)?hakano.util.DateTime.get12HourTime(date):'&nbsp;'}});Renderer.register('dateTime',new DateTimeRenderer());var ImageRenderer=Class.create();Object.extend(ImageRenderer.prototype,{initialize:function()
1760
+ {},render:function(td,table,model,row,column,selected)
1761
+ {var value=model.getCellAt(table,row,column);var width=table.getColumnAttribute(column,'imageWidth');var height=table.getColumnAttribute(column,'imageHeight');if(width&&height)
1762
+ {td.innerHTML='<img src="'+value+'" width="'+width+'" height="'+height+'"/>';}
1763
+ else
1764
+ {td.innerHTML='<img src="'+value+'"/>';}}});Renderer.register('image',new ImageRenderer());var TemplateRenderer=Class.create();Object.extend(TemplateRenderer.prototype,{initialize:function()
1765
+ {},render:function(td,table,model,row,column,selected)
1766
+ {var id=table.getColumnAttribute(column,'templateId');var template=hakano.util.Dom.getText($(id));var rowobj=model.getRow(row);var html=template.gsub(Template.Pattern,function(match)
1767
+ {var before=match[1];if(before=='\\')return match[2];return before+(Object.getNestedProperty(rowobj,match[3])||'').toString();});td.innerHTML=html;Seamless.wire(td);}});Renderer.register('template',new TemplateRenderer());var LinkRenderer=Class.create();Object.extend(LinkRenderer.prototype,{initialize:function()
1768
+ {},REGEX:/"/g,render:function(td,table,model,row,column,selected)
1769
+ {var value=model.getCellAt(table,row,column);var rowobj=model.getRow(row);var image=table.getColumnAttribute(column,'linkImage');var anchor=document.createElement('a');anchor.innerHTML=(image)?table.getColumnAttribute(column,'linkText')+" <img src='"+image+"'/>"||value:table.getColumnAttribute(column,'linkText')||value;var hrefProperty=table.getColumnAttribute(column,'linkProperty');if(hrefProperty)
1770
+ {var href=Object.getNestedProperty(rowobj,hrefProperty)||'#';anchor.setAttribute('href',href);}
1771
+ var linkClass=table.getColumnAttribute(column,'linkClass');if(linkClass)
1772
+ {anchor.className=linkClass;}
1773
+ var msg=table.getColumnAttribute(column,'linkClickMessage');if(msg)
1774
+ {anchor.onclick=function(e)
1775
+ {var argStr=anchor.getAttribute('onClickMessageArgs');if(argStr)
1776
+ {var scope={model:model,row:row,column:column,value:value,rowdata:rowobj};var args=Object.evalWithinScope(argStr,scope);hakano.util.MessageBroker.queue({type:msg,data:args});Event.stop(e);return false;}
1777
+ return true;};}
1778
+ var args=table.getColumnAttribute(column,'linkClickMessageArgs');if(args)
1779
+ {anchor.setAttribute('onClickMessageArgs',args);}
1780
+ var argsProp=table.getColumnAttribute(column,'linkClickMessageArgsProperty');if(argsProp)
1781
+ {args={};argsProp.split(',').each(function(p)
1782
+ {args[p]=Object.getNestedProperty(rowobj,p);});anchor.setAttribute('onClickMessageArgs',args.toJSONString().replace(this.REGEX,"'"));}
1783
+ td.appendChild(anchor);}});Renderer.register('link',new LinkRenderer());var LengthLimitRenderer=Class.create();Object.extend(LengthLimitRenderer.prototype,{initialize:function()
1784
+ {},render:function(td,table,model,row,column,selected)
1785
+ {var value=model.getCellAt(table,row,column);var length=parseInt(table.getColumnAttribute(column,'length')||'80');td.innerHTML=value.limit(length);}});Renderer.register('lengthLimitRenderer',new LengthLimitRenderer());var Seamless=Class.create();var headlist=document.getElementsByTagName('head');var head=(headlist&&headlist.length>0)?headlist[0]:null;Object.extend(Seamless,hakano.util.EventBroadcaster.prototype);Object.extend(Seamless,{DEBUG:false,uniqueIdIndex:0,FIELDSETS:{},trashcan:[],prefetchURLS:[],toString:function()
1786
+ {return'[Seamless]';},queuePrefetch:function(url)
1787
+ {},prefetch:function()
1788
+ {if(this.prefetchURLS.length>0)
1789
+ {var url=this.prefetchURLS.shift();var self=this;Logger.info('prefetched '+url);new Ajax.Request(url,{asynchronous:false,method:'get',onComplete:function()
1790
+ {self.prefetch();}});}},getFieldSet:function(fieldsetName)
1791
+ {if(fieldsetName==null)alert('fieldset name cannot be null!');return this.FIELDSETS[fieldsetName];},loadFieldSet:function(element,fieldsetName,editable)
1792
+ {var fs=this.getFieldSet(fieldsetName);if(fs==null||fs==undefined)
1793
+ {fs=new Fieldset(editable);fs.setName(fieldsetName);fs.setOnBindMessageUpdateRequest(element.getAttribute("onBindMessageUpdateRequest"));fs.setOnBindMessageUpdateResponse(element.getAttribute("onBindMessageUpdateResponse"));this.FIELDSETS[fieldsetName]=fs;}
1794
+ return fs;},createUniqueId:function(element)
1795
+ {var type=element.tagName;return'seamless_'+type+'_'+this.uniqueIdIndex++;},zap:function(element)
1796
+ {var p=element.parentNode;p.removeChild(element);},FunctionTrue:function()
1797
+ {return true;},FunctionFalse:function()
1798
+ {return false;},createMessageCondition:function(cond)
1799
+ {if(typeof(cond)=='boolean'&&cond||cond=='true')
1800
+ {return this.FunctionTrue;}
1801
+ try
1802
+ {return cond.toFunction();}
1803
+ catch(e)
1804
+ {return this.FunctionFalse;}},createMessageExpression:function(expr)
1805
+ {if(typeof(expr)=='boolean'&&expr||expr=='true')
1806
+ {return this.FunctionTrue;}
1807
+ try
1808
+ {return expr.toFunction();}
1809
+ catch(e)
1810
+ {return this.FunctionFalse;}},createMessageObject:function(type,data,datatype,direction,controller,value)
1811
+ {var obj=Object.copy({},controller);return Object.extend(obj,{type:type,data:data,datatype:datatype,direction:direction,value:value});},WIDGET_BUILDERS:{},registerWidgetBuilder:function(name,builder)
1812
+ {if(typeof(builder['build'])!='function')
1813
+ {Logger.error('builder for '+name+' must have a "build" method');throw"builder must have a build method";}
1814
+ this.WIDGET_BUILDERS[name]=builder;},unregisterWidgetBuilder:function(name)
1815
+ {if(this.WIDGET_BUILDERS[name])
1816
+ {delete this.WIDGET_BUILDERS[name];}},getWidgetBuilder:function(name)
1817
+ {return this.WIDGET_BUILDERS[name];},injectWidget:function(element,controller)
1818
+ {var name=this.getTagNameWithNS(element).toLowerCase();var array=name.split(':');var widget=array.length==2?array[1]:null;if(!widget||widget=='jimmy')
1819
+ {widget=element.getAttribute('widget');}
1820
+ if(widget)
1821
+ {var builder=this.WIDGET_BUILDERS[widget];if(builder)
1822
+ {if(!element.id)
1823
+ {element.id=this.createUniqueId(element);}
1824
+ try
1825
+ {return builder.build(element,controller);}
1826
+ catch(e)
1827
+ {if(Logger.error)
1828
+ {Logger.error(this+' - error building widget:'+widget+', Exception: '+Object.getExceptionDetail(e));}}}}
1829
+ return false;},TEMPLATE_PATTERN:/(^|.|\r|\n)(@\{(.*?)\})/,evaluateTemplateURI:function(src,path)
1830
+ {var template=new Template(src,this.TEMPLATE_PATTERN);var newsrc=template.evaluate(HAKANO.TEMPLATE_VARS);return hakano.util.URI.parse(newsrc,path||HAKANO.DocumentPath);},inject:function(element,path,controller)
1831
+ {if(this.injectWidget(element,controller))
1832
+ {$D(this.toString(),'found seamless widget, id: ['+element.id+'], tag: ('+element.nodeName+')');return false;}
1833
+ return false;},load:function(element,controller,uri)
1834
+ {var self=this;try
1835
+ {this.loadURL(element,controller,uri,{onFailure:function(resp)
1836
+ {Logger.error(Seamless.toString()+' Seamless load failure for:'+uri+', Error: '+resp.status);},onException:function(e,r)
1837
+ {Logger.error(Seamless.toString()+' Seamless load failure for:'+uri+', Error: '+r);},onSuccess:function(resp)
1838
+ {$D(Seamless.toString()+' Seamless loaded: '+element.id+'('+element.nodeName+'), URI: '+uri+', status:'+(resp?resp.status:304));var handler=self.createOnLoadHandler(element.id,element,controller,uri);handler(false);},replace:true});}
1839
+ catch(e)
1840
+ {Logger.error(Seamless.toString()+' error calling Seamless.loadURL: '+e);}},implode:function(iframe)
1841
+ {var parent=iframe.parentNode
1842
+ iframe.style.border='none'
1843
+ iframe.style.margin='0'
1844
+ iframe.style.padding='0'
1845
+ iframe.style.width=parent.offsetWidth+'px'
1846
+ iframe.style.height=parent.offsetHeight+'px'},loadURL:function(element,parentController,uri,options)
1847
+ {$D(Seamless.toString()+' loading seamless: '+uri+' at element: '+element.id+', ('+element.nodeName+')');if(!String.unescapeXML)String.unescapeXML=HAKANO.unescapeXML;if(!String.escapeXML)String.escapeXML=HAKANO.escapeXML;if(!element.id)
1848
+ {element.id=this.createUniqueId(element);}
1849
+ var uriid=hakano.util.MD5.hex_md5(uri);var replace=options?options['replace']:true;var id=element.id;var parentContainerId='_jc_'+this.createUniqueId(element);var srcId='_seamless_'+uriid;var parentContainer=null;var currentController=element['seamlessController'];if(currentController!=parentController)
1850
+ {element['seamlessController']=parentController;}
1851
+ if(replace)
1852
+ {var html='<div id="'+parentContainerId+'"></div>';new Insertion.Before(element,html);element.parentNode.removeChild(element);parentContainer=$(parentContainerId);parentContainer.id=id;parentContainer.innerHTML='';parentContainerId=id;}
1853
+ else
1854
+ {element.innerHTML='<div id="'+parentContainerId+'"></div>';parentContainer=$(parentContainerId);}
1855
+ var self=this;new Ajax.Request(uri,{asynchronous:true,method:'get',onSuccess:function(resp)
1856
+ {var docElement=resp.responseXML.documentElement;var view=docElement.getElementsByTagName('view')[0];var styles=docElement.getElementsByTagName('style');var styleHTML=null;if(styles&&styles.length>0)
1857
+ {styleHTML='';for(var s=0;s<styles.length;s++)
1858
+ {var style=styles[s];styleHTML+=hakano.util.Dom.getText(style)+'\n';}}
1859
+ var controllers=docElement.getElementsByTagName('controller');var controller=null;if(controllers.length==1)
1860
+ {controller=controllers[0];}
1861
+ var data=controller?hakano.util.Dom.getText(controller):null;if(data&&data.trim().length==0)
1862
+ {data=null;}
1863
+ var script=data?data:"__dummyfoo: function(){}";var instance=null;id=self.createUniqueId(docElement);var obj=null;try
1864
+ {obj="var class_"+id+" = Class.create();\n\nObject.extend(class_"+id+".prototype, { toString: function() { return '[Seamless:"+uri+"]'; },\n initialize: function(){},\n "+String.unescapeXML(script)+"\n});\n new class_"+id+"()";instance=eval(obj);instance['addMessageListener']=function(listener)
1865
+ {this['_seamlessML'].push(listener);hakano.util.MessageBroker.addListener(listener);};instance['removeMessageListener']=function(listener)
1866
+ {this['_seamlessML'].remove(listener);hakano.util.MessageBroker.removeListener(listener);};instance['_seamlessML']=[];instance['_children']=[];instance['_addChild']=function(child)
1867
+ {this._children.push(child);};instance['parent']=parentController;if(parentController)
1868
+ {if(!parentController['_addChild'])
1869
+ {var children=parentController['_children'];if(!children)
1870
+ {children=[];parentController['_children']=children;}
1871
+ children.push(instance);}
1872
+ else
1873
+ {parentController['_addChild'](instance);}
1874
+ if(!parentController['_destroy'])
1875
+ {parentController['_destroy']=function()
1876
+ {Seamless.removeAllListeners(this);};}}
1877
+ instance['_destroy']=function()
1878
+ {if(this._children&&this._children.length>0)
1879
+ {for(var c=0,len=this._children.length;c<len;c++)
1880
+ {this._children[c]._destroy();}
1881
+ this._children=null;}
1882
+ Seamless.removeAllListeners(this);if(head&&styles&&styles.length>0)
1883
+ {var style=$('style_'+srcId);if(style)
1884
+ {style.parentNode.removeChild(style);}}};}
1885
+ catch(e)
1886
+ {alert(e);document.body.innerHTML='<div style="z-index:1500;border:2px dashed red;padding:6px;background-color:#ddd;color:#000;"><div>Ouch. Seamless is not happy! Something really bad happened evaluating the Seamless code at: <b>'+uri+'</b>.</div><div><pre style="background-color:#ffffcc;border:1px solid black;border-left:4px solid black;border-right:4px solid black;padding:5px;">'+obj+'</pre></div><div><font color=red>'+e+'</font></div></div>';return false;}
1887
+ var id=self.createUniqueId(view);var html='<div>';if(styleHTML)
1888
+ {if(HAKANO.isIE)
1889
+ {var style=(typeof document.createElementNS!="undefined")?document.createElementNS("http://www.w3.org/1999/xhtml","style"):document.createElement("style");style.setAttribute("type","text/css");style.setAttribute("media","screen");style.setAttribute("id","style_"+srcId);head.appendChild(style);var lastStyle=document.styleSheets[document.styleSheets.length-1];var re=new RegExp("(.*)\{(.*)\}");styleHTML=styleHTML.replace(/[\n\r]/g,' ');var c=0;var idx=styleHTML.indexOf('}');while(idx!=-1)
1890
+ {var rule=styleHTML.substring(c,idx)+'}';var result=re.exec(rule.trim());var selector=result[1].trim();var rules=result[2];rules.split(';').each(function(rule)
1891
+ {lastStyle.addRule(selector,rule);});c=idx+1;idx=styleHTML.indexOf('}',c);}}
1892
+ else
1893
+ {html+='<style type="text/css" id="style_'+srcId+'">';html+=styleHTML;html+="</style>\n";}}
1894
+ html+=hakano.util.Dom.toXML(view,true,'div',id,true);html+='</div>';parentContainer.innerHTML=html;instance['uri']=uri;instance['args']=hakano.util.URI.toQueryParams(uri);element['seamlessController']=instance;try
1895
+ {self.transform(parentContainer.firstChild,parentContainer.firstChild,instance,id,uri,true,true);}
1896
+ catch(e)
1897
+ {alert(e.name+','+e.message+','+e.location);}
1898
+ if(options&&options['onSuccess'])
1899
+ {options['onSuccess'](uri,parentContainer.firstChild);}
1900
+ Logger.info(self+' Load finished: '+uri);},onException:function(request,exception)
1901
+ {var description='';for(var property in exception){description+=property+'='+exception[property]+'\n';}
1902
+ if(description.indexOf("Access is denied")!=-1&&HAKANO.isIE)
1903
+ alert("IE's security settings prevent access to local files via Ajax Requests. Please test using a web server.");}});},fireSeamlessEvent:function(controller,name,arguments)
1904
+ {if(controller[name])
1905
+ {controller[name].apply(controller,arguments);}},addTrash:function(element,controller,func)
1906
+ {if(element.id)
1907
+ {var trash=controller['_seamlessTrash'];if(!trash)
1908
+ {trash=[];controller['_seamlessTrash']=trash;}
1909
+ trash.push(func);}
1910
+ else
1911
+ {Logger.error(this+" couldn't add trash for element: "+element+", it has no ID ... function:"+func);}},destroyChildren:function(element)
1912
+ {},destroy:function(controller)
1913
+ {var trash=controller['_seamlessTrash'];if(trash)
1914
+ {var count=0;for(var c=0,len=trash.length;c<len;c++)
1915
+ {var item=trash[c];if(item)
1916
+ {count++;item(false);}}
1917
+ delete controller['_seamlessTrash'];$D(this+' trashcan emptied '+count+' items');return count;}
1918
+ return 0;},destroyAll:function()
1919
+ {},transform:function(target,view,controller,uniqueId,uri,replace,ignoreAdd)
1920
+ {this.fireSeamlessEvent(controller,'onLoad',[view,target]);if(!ignoreAdd)
1921
+ {if(replace)
1922
+ {var parent=target.parentNode;var html='<div id="seamless_container_'+uniqueId+'" style="margin:0;padding:0">'+view.innerHTML+'</div>';new Insertion.Before(target,html);parent.removeChild(target);}
1923
+ else
1924
+ {target.innerHTML='<div id="seamless_container_'+uniqueId+'" style="margin:0;padding:0">'+view.innerHTML+'</div>';}
1925
+ view=$("seamless_container_"+uniqueId);}
1926
+ var id=view.id||uniqueId;target['_seamlessOnLoader']=this.createOnLoadHandler(id,view,controller,uri);this.fireSeamlessEvent(controller,'onPreWire',[view]);this.wire(view,controller,false,true,ignoreAdd);this.fireSeamlessEvent(controller,'onPostWire',[view]);this.fireSeamlessEvent(controller,'onRendered',[view]);this.addTrash(view,controller,function()
1927
+ {var destroyAction=controller['onDestroy'];if(destroyAction)
1928
+ {destroyAction.call(controller);}});target['_seamlessOnLoader'](false);},createOnLoadHandler:function(id,view,controller,uri)
1929
+ {var onLoadMessage=view.getAttribute('onLoadMessage');var onLoadMessageArgs=view.getAttribute('onLoadMessageArgs');var onLoadMessageCond=view.getAttribute('onLoadMessageCond')||true;var self=this;return function(cached)
1930
+ {try
1931
+ {if(onLoadMessage)
1932
+ {var args=onLoadMessageArgs?Object.evalWithinScope(onLoadMessageArgs,controller):{};if(!args['id'])
1933
+ {args['id']=id;}
1934
+ if(!args['uri'])
1935
+ {args['uri']=uri;}
1936
+ if(!args['args'])
1937
+ {args['args']=hakano.util.URI.toQueryParams(uri);}
1938
+ args['cached']=cached;if(onLoadMessageCond||self.evaluateBindMessageConditionAttr(onLoadMessageCond,onLoadMessage,args,'JSON','local',controller))
1939
+ {hakano.util.MessageBroker.queue({type:onLoadMessage,data:args,immediate:true});}}}
1940
+ catch(e)
1941
+ {alert(e);}};},addSeamlessListener:function(element,controller,event)
1942
+ {if(!element.id)
1943
+ {element.id=this.createUniqueId(element);}
1944
+ var eventName='on'+event.toLowerCase();var handler=element.getAttribute(eventName);if(handler)
1945
+ {element[eventName]=null;var name='seamless_'+eventName+'_dispatcher_'+element.id;if(!controller[name])
1946
+ {controller[name]=function(e)
1947
+ {e=Event.getEvent(e);var f=controller[handler];var ok=true;if(f)
1948
+ {ok=f.call(controller,e);}
1949
+ else
1950
+ {ok=eval(f);}
1951
+ if(!ok)
1952
+ {Event.stop(e);}
1953
+ return ok;};Event.observe(element,event,controller[name],false);this.addTrash(element,controller,function()
1954
+ {Event.stopObserving(element,event,controller[name],false);if(controller[name])
1955
+ {delete controller[name];}});}}
1956
+ else
1957
+ {this.createEventHandler(element,event,controller);}},serializeFieldValue:function(value)
1958
+ {if(value)
1959
+ {if(typeof(value)=='string')
1960
+ {if(value.charAt(0)=='['&&value.charAt(value.length-1)==']')
1961
+ {return value.substring(1,value.length-1).split(',');}
1962
+ else if(value.charAt(0)=='{'&&value.charAt(value.length-1)=='}')
1963
+ {return eval('('+value+')');}}
1964
+ return String.escapeXML(value);}
1965
+ return null;},getFieldValue:function(element,direction)
1966
+ {var value=null;switch(element.nodeName)
1967
+ {case'TEXTAREA':{value=element.value;break;}
1968
+ case'SELECT':{var multiple=element.getAttribute('multiple');if(multiple==null||!multiple)
1969
+ {if(element.selectedIndex!=-1)
1970
+ {value=element.options[element.selectedIndex].value||element.options[element.selectedIndex].text;}}
1971
+ else
1972
+ {var len=element.options.length;var selected=[];for(var c=0;c<len;c++)
1973
+ {if(element.options[c].selected)
1974
+ {var text=element.options[c].value||element.options[c].text.trim();if(text.length!=0)
1975
+ {selected.push(text);}}}
1976
+ if(selected.length>0)
1977
+ {var arrayType=element.getAttribute('fieldValueArray')||'true';if(arrayType=='true')
1978
+ {value='['+selected.join(',')+']';}
1979
+ else
1980
+ {value=selected.join(',');}}}
1981
+ if(value)
1982
+ {if(value.trim().length==0)
1983
+ {value=null;}
1984
+ else if(direction=='remote')
1985
+ {return this.serializeFieldValue(value);}}
1986
+ break;}
1987
+ default:{var type=element.getAttribute('type');if(!type)
1988
+ {return element.value||'';}
1989
+ value=Form.Element.Serializers.input(element);value=(value!=null)?value[1]:'';switch(type)
1990
+ {case'checkbox':case'radio':{return(value=='on'||value=='checked');}
1991
+ case'hidden':{return element.value;}}
1992
+ if(direction=='remote'&&element['_seedDataTransformer'])
1993
+ {value=element['_seedDataTransformer'](value);}
1994
+ if(direction=='remote')
1995
+ {return this.serializeFieldValue(value);}
1996
+ break;}}
1997
+ if(direction=='remote')
1998
+ {return String.escapeXML(value);}
1999
+ return value;},addFieldSet:function(element,controller)
2000
+ {var fieldsetName=element.getAttribute("fieldset");if(fieldsetName!=null)
2001
+ {var fs=this.loadFieldSet(element,fieldsetName,false);var id=element.id;if(!id)
2002
+ {id=element.id=this.createUniqueId(element);}
2003
+ var field=new Field(id,id,element);fs.addField(field);if(this.DEBUG)$D(this+' adding field:'+field+' to fieldset:'+fieldsetName+', fsobj='+fs);var self=this;this.addTrash(element,controller,function()
2004
+ {if(fs.removeField(field)==0)
2005
+ {fs.destroy();delete self.FIELDSETS[fieldsetName];}});}},BIND_GETTERS:[[/INPUT|TEXTAREA/i,function(element)
2006
+ {var prop=element.getAttribute('onBindChangeMessageProperty')||element.name||element.id;var msg={data:{}};var value=Form.Element.Serializers.input(element)[1];Object.setNestedProperty(msg.data,prop,value);return msg;}],[/SELECT/i,function(element)
2007
+ {var prop=element.getAttribute('onBindChangeMessageProperty')||element.name||element.id;var msg={data:{}};var value=[];for(var i=0;i<element.length;i++)
2008
+ {var opt=element.options[i];if(opt.selected)
2009
+ {value.push(opt.value||opt.text);}}
2010
+ Object.setNestedProperty(msg.data,prop,value);return msg;}]],BIND_SETTERS:[[['DIV','SPAN','P','LI','A','H1','H2','H3','H4','H5'],function(element,attribute,type,msg,datatype,direction,controller)
2011
+ {var prop=element.getAttribute(attribute+'Property')||element.name||element.id;var obj=Object.getNestedProperty(msg,prop);var append=element.getAttribute(attribute+'Append')=='true';obj=obj!=null?obj:(typeof(msg)=='string')?msg:(append?'':element.innerHTML);if(append)
2012
+ {element.innerHTML+=this.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller);}
2013
+ else
2014
+ {element.innerHTML=this.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller);}
2015
+ Seamless.triggerValidationIfRequired(element);}],[['IMG','IFRAME'],function(element,attribute,type,msg,datatype,direction,controller)
2016
+ {var prop=element.getAttribute(attribute+'Property')||element.name||element.id;var obj=Object.getNestedProperty(msg,prop);obj=obj!=null?obj:(typeof(msg)=='string')?msg:null;var newsrc=this.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller);if(newsrc)
2017
+ {element.src=newsrc;}}],[[/^SEAMLESS(.*)/,'JIMMY','JIMMY:JIMMY'],function(element,attribute,type,msg,datatype,direction,controller)
2018
+ {var name=this.getTagNameWithNS(element).toLowerCase();var widget_arr=name.split(':');var widget=(widget_arr.length==2?widget_arr[1]:null);if(!widget||widget=='JIMMY')
2019
+ {widget=element.getAttribute('widget');}
2020
+ if(widget)
2021
+ {try
2022
+ {var builder=Seamless.getWidgetBuilder(widget);if(builder&&builder['onBind'])
2023
+ {builder.onBind.apply(builder,[element,attribute,type,msg,datatype,direction,controller]);return;}}
2024
+ catch(e)
2025
+ {Logger.error('[Seamless]'+Object.getExceptionDetail(e));}}}],[['INPUT'],function(element,attribute,type,msg,datatype,direction,controller)
2026
+ {var prop=element.getAttribute(attribute+'Property')||element.name||element.id;type=element.getAttribute('type');switch(type)
2027
+ {case'checkbox':case'radio':var obj=Object.getNestedProperty(msg,prop);obj=obj!=null?(typeof(obj)=='boolean'?obj:obj=='true'):false;element.checked=this.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller);break;case'hidden':case'text':case'button':case'file':case'submit':case'password':var obj=Object.getNestedProperty(msg,prop);obj=obj?obj:(typeof(msg)=='string')?msg:element.value;element.value=this.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller);break;}
2028
+ Seamless.triggerValidationIfRequired(element,true);}],[['TEXTAREA'],function(element,attribute,type,msg,datatype,direction,controller)
2029
+ {var prop=element.getAttribute(attribute+'Property')||element.name||element.id;var obj=Object.getNestedProperty(msg,prop);var append=element.getAttribute(attribute+'Append')=='true';obj=obj!=null?obj:(typeof(msg)=='string')?msg:(append?'':element.value);if(append)
2030
+ {element.value+=String.unescapeXML(this.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller));}
2031
+ else
2032
+ {element.value=String.unescapeXML(this.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller));}
2033
+ Seamless.triggerValidationIfRequired(element);}],[['OPTION'],function(element,attribute,type,msg,datatype,direction,controller)
2034
+ {var prop=element.getAttribute(attribute+'Property')||element.id;var textProperty=element.getAttribute(attribute+'OptionTextProperty')||'text';var valueProperty=element.getAttribute(attribute+'OptionValueProperty')||'value';var obj=Object.getNestedProperty(msg,prop);if(obj!=null)
2035
+ {var value=obj[valueProperty]||obj;if(value)
2036
+ {var text=obj[textProperty]||value;element.value=this.evaluateBindMessageExpression(element,attribute,value,type,msg,datatype,direction,controller);element.text=this.evaluateBindMessageExpression(element,attribute,text,type,msg,datatype,direction,controller);}}
2037
+ Seamless.triggerValidationIfRequired(element);}],[['SELECT'],function(element,attribute,type,msg,datatype,direction,controller)
2038
+ {var prop=element.getAttribute(attribute+'Property')||element.name||element.id;if(prop)
2039
+ {var obj=Object.getNestedProperty(msg,prop);if(obj)
2040
+ {if('true'!=(element.getAttribute(attribute+'Append')||'false'))
2041
+ {element.options.length=0;}
2042
+ var textProperty=element.getAttribute(attribute+'OptionTextProperty')||'text';var valueProperty=element.getAttribute(attribute+'OptionValueProperty')||'value';var array=$A(obj);if(array)
2043
+ {array.each(function(a)
2044
+ {var value=a[valueProperty]||a;if(value)
2045
+ {var text=a[textProperty]||value;element.options[element.options.length]=new Option(text,value);}});}}}
2046
+ Seamless.triggerValidationIfRequired(element);}],[['UL','OL'],function(element,attribute,type,msg,datatype,direction,controller)
2047
+ {var prop=element.getAttribute(attribute+'Property')||element.name||element.id;var obj=prop?Object.getNestedProperty(msg,prop):null;if(obj)
2048
+ {var subprop=element.getAttribute(attribute+'RowProperty');var decorator=element.getAttribute(attribute+'RowDecorator');var decoratorArgs=decorator?element.getAttribute(attribute+'RowDecoratorArgs'||'{}'):'{}';var array=$A(obj);var html='';var self=this;var decoratorFunc=decorator?eval(decorator):null;array.each(function(row)
2049
+ {var value=subprop?row[subprop]:row;if(decorator)
2050
+ {var scope=Object.copy(scope,controller);var args=Object.evalWithinScope(decoratorArgs,scope);html+=decoratorFunc.apply(self,[element,row,args])||'<li></li>';}
2051
+ else
2052
+ {html+='<li>'+value+'</li>';}});element.innerHTML=html;}
2053
+ Seamless.triggerValidationIfRequired(element);}]],evaluateBindMessageConditionAttr:function(cond,type,data,datatype,direction,controller)
2054
+ {if(cond)
2055
+ {var code=this.createMessageCondition(cond);var obj=this.createMessageObject(type,data,datatype,direction,controller);try
2056
+ {return code.call(obj);}
2057
+ catch(e)
2058
+ {Logger.warn(this.toString()+' caught exception:'+e+' evaluating message condition:'+cond+' for '+data+', message:'+type);return false;}}
2059
+ return true;},evaluateBindMessageCondition:function(element,attribute,type,data,datatype,direction,controller)
2060
+ {var cond=element.getAttribute(attribute+'Cond');return this.evaluateBindMessageConditionAttr(cond,type,data,datatype,direction,controller);},evaluateBindMessageExpression:function(element,attribute,value,type,data,datatype,direction,controller)
2061
+ {var expr=element.getAttribute(attribute+'Expr');if(expr)
2062
+ {var code=this.createMessageExpression(expr);var obj=this.createMessageObject(type,data,datatype,direction,controller,value);try
2063
+ {var result=code.call(obj);return direction=='local'?result:String.escapeXML(result);}
2064
+ catch(e)
2065
+ {Logger.warn(this.toString()+' caught exception:'+e+' evaluating message expression:'+expr+' for '+data+', message:'+type+', used: '+obj.toJSONString()+' as scope');return'';}}
2066
+ return value;},getBindChangeHandler:function(element)
2067
+ {var onBindChange=element.getAttribute("onBindChangeMessage");if(onBindChange)
2068
+ {var tag=element.tagName;var getter=null;this.BIND_GETTERS.each(function(a)
2069
+ {if(tag.match(a[0]))
2070
+ {getter=a[1];throw $break;}});if(getter)
2071
+ {var self=this;return function()
2072
+ {var msg=getter.call(self,element);if(msg)
2073
+ {msg['type']=onBindChange;hakano.util.MessageBroker.queue(msg);}};}}
2074
+ return null;},addMessageBrokerListener:function(controller,listener)
2075
+ {var ml=controller['_seamlessML'];if(!ml)
2076
+ {ml=[];controller['_seamlessML']=ml;}
2077
+ ml.push(listener);hakano.util.MessageBroker.addListener(listener);},removeAllListeners:function(controller)
2078
+ {var count=0;var ml=controller['_seamlessML'];if(ml)
2079
+ {for(var c=0,len=ml.length;c<len;c++)
2080
+ {hakano.util.MessageBroker.removeListener(ml[c]);count++;}
2081
+ delete controller['_seamlessML'];}
2082
+ this.destroy(controller);return count;},createBindActionListener:function(element,controller,attribute,action,thetype)
2083
+ {if(!controller)
2084
+ {Logger.error(this+', no controller specified for '+element.id);return;}
2085
+ var self=this;var listener={toString:function()
2086
+ {if(!this._toString)
2087
+ {this._toString='[Seamless@'+thetype+'@'+element.id+']';}
2088
+ return this._toString;},accept:function(type)
2089
+ {return[thetype];},onMessage:function(type,data,datatype,direction)
2090
+ {try
2091
+ {var cond=self.evaluateBindMessageCondition(element,attribute,type,data,datatype,direction,controller);if(cond)
2092
+ {var delay=element.getAttribute(attribute+'Delay');if(delay!=null)
2093
+ {setTimeout(function()
2094
+ {action.apply(self,[element,attribute,type,data,datatype,direction,controller]);},parseInt(delay));}
2095
+ else
2096
+ {action.apply(self,[element,attribute,type,data,datatype,direction,controller]);}}}
2097
+ catch(e)
2098
+ {Logger.error('Error evaluating bind condition for: '+type+', data: '+data+', action: '+action+', error: '+Object.getExceptionDetail(e));}}};this.addMessageBrokerListener(controller,listener);this.addTrash(element,controller,function(destroyall)
2099
+ {hakano.util.MessageBroker.removeListener(listener);});},setupBindAction:function(element,controller,attribute,action,child)
2100
+ {if(!controller)
2101
+ {throw"controller required for setupBindAction";}
2102
+ var eventType=element.getAttribute(attribute);if(eventType)
2103
+ {var array=eventType.split(',');if(array.length==1)
2104
+ {this.createBindActionListener(element,controller,attribute,action,array[0].trim());}
2105
+ else
2106
+ {for(var c=0,len=array.length;c<len;c++)
2107
+ {this.createBindActionListener(element,controller,attribute,action,array[c].trim());}}
2108
+ if(!child)
2109
+ {for(var c=1;c<99;c++)
2110
+ {var name=attribute+c;if(!this.setupBindAction(element,controller,name,action,true))
2111
+ {break;}}}
2112
+ return true;}
2113
+ return false;},triggerValidationIfRequired:function(element,force)
2114
+ {if(!force)
2115
+ {switch(element.tagName)
2116
+ {case'INPUT':case'TEXTAREA':case'SELECT':case'OPTION':{var form=element.form||Element.findParentForm(element);if(form)
2117
+ {if(!element.form)element.form=form;if(form.disabled!=''||form.disabled||form.disabled=='true')
2118
+ {return false;}}
2119
+ break;}}}
2120
+ var composite=element['_seamlessCompositeValidator'];if(composite)
2121
+ {composite(true);return true;}
2122
+ return false;},addBindMessageHandler:function(element,controller)
2123
+ {if(!controller)
2124
+ {throw"controller required for addBindMessageHandler";}
2125
+ var self=this;if(element.tagName=='SELECT')
2126
+ {this.setupBindAction(element,controller,'onBindMessageSelectAll',function(element,attribute,type,data,datatype,direction)
2127
+ {for(var c=0,len=element.options.length;c<len;c++)
2128
+ {var option=element.options[c];option.selected=true;}});this.setupBindAction(element,controller,'onBindMessageSelectNone',function(element,attribute,type,data,datatype,direction)
2129
+ {for(var c=0,len=element.options.length;c<len;c++)
2130
+ {var option=element.options[c];option.selected=false;}});}
2131
+ this.setupBindAction(element,controller,'onBindMessageStyle',function(element,attribute,type,data,datatype,direction)
2132
+ {var options=element.getAttribute(attribute+'Options');if(options)
2133
+ {var obj=eval('('+options+')');Element.setStyle(element,obj);}});this.setupBindAction(element,controller,'onBindMessageAddClassName',function(element,attribute,type,data,datatype,direction)
2134
+ {var options=element.getAttribute(attribute+'Options');if(options)
2135
+ {var names=options.split(',');names.each(function(name)
2136
+ {Element.addClassName(element,name);});}});this.setupBindAction(element,controller,'onBindMessageRemoveClassName',function(element,attribute,type,data,datatype,direction)
2137
+ {var options=element.getAttribute(attribute+'Options');if(options)
2138
+ {var names=options.split(',');names.each(function(name)
2139
+ {Element.removeClassName(element,name);});}});this.setupBindAction(element,controller,'onBindMessageShow',function()
2140
+ {Element.show(element);});this.setupBindAction(element,controller,'onBindMessageToggle',function()
2141
+ {Element.toggle(element);});this.setupBindAction(element,controller,'onBindMessageScroll',function()
2142
+ {hakano.util.Scroller.smoothScrollTo(element);});this.setupBindAction(element,controller,'onBindMessageHide',function()
2143
+ {Element.hide(element);});this.setupBindAction(element,controller,'onBindMessageClear',function()
2144
+ {var validateParent=false;if(element.tagName.match(/^(H[1-4]|SPAN|DIV|UL|OL|LI|TABLE|P)$/i))
2145
+ {element.innerHTML='';}
2146
+ else if(element.tagName.match(/^(INPUT|TEXTAREA)$/i))
2147
+ {element.value='';}
2148
+ else if(element.tagName=='SELECT')
2149
+ {element.options.length=0;}
2150
+ else if(element.tagName=='OPTION')
2151
+ {var select=element.parentNode;for(var c=0;c<select.options.length;c++)
2152
+ {if(select.options[c]==element)
2153
+ {select.options[c]=null;break;}}
2154
+ validateParent=true;}
2155
+ else if(element.tagName=='IMG')
2156
+ {element.src='';}
2157
+ if(!self.triggerValidationIfRequired(element))
2158
+ {if(validateParent)
2159
+ {self.triggerValidationIfRequired(element.parentNode);}}});if(element.tagName.match(/^(INPUT|TEXTAREA|SELECT)$/i))
2160
+ {this.setupBindAction(element,controller,'onBindMessageActivate',function()
2161
+ {if(element.focus)element.focus();if(element.select)element.select();});this.setupBindAction(element,controller,'onBindMessageSelect',function()
2162
+ {if(element.select)element.select();self.triggerValidationIfRequired(element);});this.setupBindAction(element,controller,'onBindMessageReset',function()
2163
+ {if(element.reset)element.reset();self.triggerValidationIfRequired(element,true);});}
2164
+ if(element.tagName=='OPTION')
2165
+ {this.setupBindAction(element,controller,'onBindMessageSelect',function()
2166
+ {element.selected=true;if(!self.triggerValidationIfRequired(element))
2167
+ {self.triggerValidationIfRequired(element.parentNode);}});}
2168
+ this.setupBindAction(element,controller,'onBindMessageReset',function()
2169
+ {if(element.tagName=='FORM')
2170
+ {Form.reset(element);Form.Methods.getElements(element).each(function(field)
2171
+ {field.selected=false;if(!self.triggerValidationIfRequired(field))
2172
+ {self.triggerValidationIfRequired(field.parentNode);}});}
2173
+ else
2174
+ {element.selected=false;if(!self.triggerValidationIfRequired(element))
2175
+ {self.triggerValidationIfRequired(element.parentNode);}}});this.setupBindAction(element,controller,'onBindMessageRevalidate',function()
2176
+ {var ok=self.triggerValidationIfRequired(element,true);$D(Seamless+' triggered revalidation for '+element.id+', returned: '+ok);});this.setupBindAction(element,controller,'onBindMessageFocus',function()
2177
+ {if(element.focus)element.focus();});this.setupBindAction(element,controller,'onBindMessageBlur',function()
2178
+ {if(element.blur)element.blur();});this.setupBindAction(element,controller,'onBindMessageEnable',function()
2179
+ {element.disabled='';if(element.tagName=='FORM')
2180
+ {Form.Methods.enable(element);Form.getElements(element).each(function(field)
2181
+ {field['_dirty']=null;self.triggerValidationIfRequired(field);});}});this.setupBindAction(element,controller,'onBindMessageDisable',function()
2182
+ {element.disabled='true';if(element.tagName=='FORM')
2183
+ {Form.Methods.disable(element);}});this.setupBindAction(element,controller,'onBindMessageVisible',function()
2184
+ {element.style.visibility='visible';});this.setupBindAction(element,controller,'onBindMessageHidden',function()
2185
+ {element.style.visibility='hidden';});this.setupBindAction(element,controller,'onBindMessageEffect',function(element,attribute,type,data,datatype,direction)
2186
+ {var effect=element.getAttribute(attribute+'Type');if(effect)
2187
+ {if(Effect[effect])
2188
+ {var effectOptions=eval('('+(element.getAttribute(attribute+'Options')||'{}')+')');new Effect[effect](element,effectOptions);}}});if(element.getAttribute('onBindMessage'))
2189
+ {var setter=null;var tag=this.getTagNameWithNS(element).toUpperCase();for(var c=0,len=this.BIND_SETTERS.length;c<len;c++)
2190
+ {var array=this.BIND_SETTERS[c];var types=array[0];var match=false;if(types.length==1)
2191
+ {if(typeof(types[0])=='string')
2192
+ {match=types[0]==tag;}
2193
+ else
2194
+ {match=types[0].exec(tag);}}
2195
+ else
2196
+ {for(var x=0,xl=types.length;x<xl;x++)
2197
+ {if(typeof(types[x])=='string')
2198
+ {match=types[x]==tag;}
2199
+ else
2200
+ {match=types[x].exec(tag);}
2201
+ if(match)break;}}
2202
+ if(match)
2203
+ {setter=array[1];break;}
2204
+ else
2205
+ {$D(this+" couldn't find a bind setter match for "+tag+" for "+element.id);}}
2206
+ if(setter)
2207
+ {this.setupBindAction(element,controller,'onBindMessage',setter);}}},getActionValidator:function(element,controller)
2208
+ {var validatorFunc=element.getAttribute('actionValidator');var validator=null;var validatorThis=null;if(validatorFunc)
2209
+ {if(typeof controller[validatorFunc]=='function')
2210
+ {validator=controller[validatorFunc];validatorThis=controller;}
2211
+ if(!validator&&Validator[validatorFunc])
2212
+ {validatorThis=Validator;validator=Validator[validatorFunc];}
2213
+ if(!validator)
2214
+ {validatorThis=window;var func=eval(validatorFunc);if(typeof(func)=='function')
2215
+ {validator=func;}}}
2216
+ if(validator)
2217
+ {try
2218
+ {return validator.bind(validatorThis);}
2219
+ catch(e)
2220
+ {alert('Error for: '+validator+'\n'+e+'\n'+e.stack);}}
2221
+ return null;},getValidator:function(element,controller,name)
2222
+ {var validatorFunc=element.getAttribute('validator');var validator=null;var validatorThis=null;if(validatorFunc)
2223
+ {if(typeof controller[validatorFunc]=='function')
2224
+ {validator=controller[validatorFunc];validatorThis=controller;}
2225
+ if(!validator&&Validator[validatorFunc])
2226
+ {validatorThis=Validator;validator=Validator[validatorFunc];}
2227
+ if(!validator)
2228
+ {validatorThis=window;var func=eval(validatorFunc);if(typeof(func)=='function')
2229
+ {validator=func;}}}
2230
+ if(!validator)
2231
+ {validator=Validator['required'];validatorThis=Validator;}
2232
+ if(validator)
2233
+ {try
2234
+ {return validator.bind(validatorThis);}
2235
+ catch(e)
2236
+ {alert('Error getting validator:'+validator+'\n'+e+'\n'+e.stack);}}
2237
+ return Prototype.emptyFunction;},getRenderer:function(type)
2238
+ {type=type||'defaultRenderer';if(Renderer[type])
2239
+ {return Renderer[type];}
2240
+ else if(window[type])
2241
+ {return window[type];}
2242
+ else
2243
+ {Logger.error(this+" Couldn't find renderer type: "+type);return Renderer['defaultRenderer'];}},getDecorator:function(element,controller)
2244
+ {var decorator=element.getAttribute('decorator');var decoratorThis=null;var dec=null;if(decorator)
2245
+ {if(controller&&typeof controller[decorator]=='function')
2246
+ {dec=controller[decorator];decoratorThis=controller;}
2247
+ if(!decoratorThis&&Decorator[decorator])
2248
+ {dec=Decorator[decorator];decoratorThis=Decorator;}
2249
+ if(!decoratorThis)
2250
+ {decoratorThis=window;var func=eval(decorator);if(typeof(func)=='function')
2251
+ {dec=func;}}}
2252
+ if(!decoratorThis)
2253
+ {dec=Decorator["defaultDecorator"];decoratorThis=Decorator;}
2254
+ try
2255
+ {return dec.bind(decoratorThis);}
2256
+ catch(e)
2257
+ {alert('Error getting decorator:'+dec+'\n'+e+'\n'+e.stack);}
2258
+ return null;},addHashFieldInfo:function(element)
2259
+ {var onBindSecureHash=element.getAttribute('onBindSecureHash');if(onBindSecureHash)
2260
+ {var onBindSecureHashSeparator=element.getAttribute('onBindSecureHashSeparator')||':';var onBindSecureHashFormation=element.getAttribute('onBindSecureHashFormation')||'additive';element['_seedDataTransformer']=function(value)
2261
+ {var fields=onBindSecureHash.split(',');value=element.value||'';if(onBindSecureHashFormation=='additive')
2262
+ {value=hakano.util.SHA.toSHA256Hex(value);}
2263
+ for(var c=0,len=fields.length;c<len;c++)
2264
+ {var field=$(fields[c]);if(field)
2265
+ {var fv=field.value||'';if(onBindSecureHashFormation=='additive')
2266
+ {value=hakano.util.SHA.toSHA256Hex(value+onBindSecureHashSeparator+fv);}
2267
+ else
2268
+ {value+=onBindSecureHashSeparator+fv;}}}
2269
+ if(onBindSecureHashFormation!='additive')
2270
+ {value=hakano.util.SHA.toSHA256Hex(value);}
2271
+ $D(Seamless+' - fields='+fields+', before='+element.value+', after='+value);return value;};return true;}
2272
+ return false;},addSeedLoginInfo:function(element)
2273
+ {var onBindGenerateLoginSeedRequestMessage=element.getAttribute('onBindGenerateLoginSeedRequestMessage');var onBindGenerateLoginSeedMessage=element.getAttribute('onBindGenerateLoginSeedMessage');var onBindGenerateLoginSeedProperty=element.getAttribute('onBindGenerateLoginSeedProperty')||'seed';var onBindGenerateLoginChallengeProperty=element.getAttribute('onBindGenerateLoginChallengeProperty')||'challenge';var onBindGenerateLoginSessionIDCookie=element.getAttribute('onBindGenerateLoginSessionIDCookie')||'JSESSIONID';var onBindSecureHashSeparator=element.getAttribute('onBindSecureHashSeparator')||':';if(onBindGenerateLoginSeedRequestMessage&&onBindGenerateLoginSeedMessage)
2274
+ {if(!window['_seedDataListener'])
2275
+ {window['_seedDataListener']={toString:function()
2276
+ {return'[Seamless@seedDataListener]';},accept:function(type)
2277
+ {return[onBindGenerateLoginSeedMessage];},onMessage:function(type,data)
2278
+ {if(data)
2279
+ {var seed=data[onBindGenerateLoginSeedProperty];var challenge=data[onBindGenerateLoginChallengeProperty];if(seed&&challenge)
2280
+ {window['_seed']=seed;window['_seed_sent']=false;window['_challenge']=challenge;window['_seedts']=new Date().getTime();window['_sessionid']=hakano.util.Cookie.GetCookie(onBindGenerateLoginSessionIDCookie);}
2281
+ else
2282
+ {Logger.warn("[Seamless] received seed response but data didn't match expected properties. seed expected:"+onBindGenerateLoginSeedProperty+", challenge expected:"+onBindGenerateLoginChallengeProperty);}}}};hakano.util.MessageBroker.addListener(window['_seedDataListener']);this.addTrash(element,window,function(destroyall)
2283
+ {hakano.util.MessageBroker.removeListener(window['_seedDataListener']);window['_seedDataListener']=null;window['_seed']=null;window['_seed_received']=null;window['_challenge']=null;window['_sessionid']=null;window['_seedts']=null;});}
2284
+ var composite=null;if(this.addHashFieldInfo(element))
2285
+ {composite=element['_seedDataTransformer'];if(composite)
2286
+ {if(!HAKANO.isIE)
2287
+ {delete element['_seedDataTransformer'];}
2288
+ else
2289
+ {element['_seedDataTransformer']=null;}}}
2290
+ var self=this;var msg=onBindGenerateLoginSeedMessage.split(':');var dir=msg.length==2?msg[0]:'remote';var event=msg.length==2?msg[1]:msg;element['_seedDataTransformer']=function(value)
2291
+ {var fieldvalue=(composite)?composite(value):value;var seed=window['_seed'];var challenge=window['_challenge'];var sessionid=window['_sessionid'];if(seed&&challenge&&sessionid)
2292
+ {$D(Seamless+' sessionid='+sessionid+', fieldvalue='+fieldvalue);var first=hakano.util.SHA.toSHA256Hex(fieldvalue+onBindSecureHashSeparator+sessionid);var second=hakano.util.SHA.toSHA256Hex(first+onBindSecureHashSeparator+challenge);var third=hakano.util.SHA.toSHA256Hex(second+onBindSecureHashSeparator+seed);$D(Seamless+' first='+first);$D(Seamless+' second='+second);$D(Seamless+' third='+third);return third;}
2293
+ else
2294
+ {Logger.warn('[Seamless] transformer for field: '+element.id+" couldn't transform, missing properties. challenge was: "+challenge+", seed was: "+seed+", sessionid: "+sessionid);}
2295
+ return null;};element['_seedDataFocus']=function()
2296
+ {self.addSeedLoginInfo(element);return true;};Event.observe(element,'focus',element['_seedDataFocus'],false);this.addTrash(element,window,function()
2297
+ {Event.stopObserving(element,'focus',element['_seedDataFocus'],false);if(!HAKANO.isIE)
2298
+ {delete element['_seedDataTransformer'];}
2299
+ else
2300
+ {element['_seedDataTransformer']=null;}});if(!window['_seed_sent'])
2301
+ {var ts=window['_seedts'];if(ts)
2302
+ {var now=new Date().getTime();if(now-ts<60000)
2303
+ {return false;}}
2304
+ window['_seed_sent']=true;hakano.util.MessageBroker.queue({type:onBindGenerateLoginSeedRequestMessage,data:{},immediate:true});}
2305
+ return true;}
2306
+ return false;},getFieldSetValues:function(fieldsetName,data,direction)
2307
+ {if(fieldsetName)
2308
+ {var fs=this.getFieldSet(fieldsetName);if(fs)
2309
+ {var fields=fs.getFields();if(fields&&fields.length>0)
2310
+ {for(var c=0,len=fields.length;c<len;c++)
2311
+ {var field=fields[c].getElement();if(field&&field.tagName)
2312
+ {if(field.tagName.toLowerCase()=='input')
2313
+ {var type=field.getAttribute('type');if(type=='button'||type=='submit')
2314
+ {continue;}}
2315
+ if(this.DEBUG)$D(this.toString()+' adding field: '+field.id+' for fieldset:'+fieldsetName);var add=true;if(direction=='local')
2316
+ {var exclude=field.getAttribute('fieldsetLocalExclude');add=(exclude?exclude!='true':true);}
2317
+ else if(direction=='remote')
2318
+ {var exclude=field.getAttribute('fieldsetRemoteExclude');add=(exclude?exclude!='true':true);}
2319
+ if(add)
2320
+ {var value=this.getFieldValue(field,direction);var name=field.name||field.id;data[name]=value;}}}}}}
2321
+ return data;},createEventHandler:function(element,event,controller)
2322
+ {var eventName='on'+event.charAt(0).toUpperCase()+event.substring(1)+'Message';var attr=element.getAttribute(eventName);if(attr)
2323
+ {var name='seamless_'+attr+'_dispatcher_'+element.id;if(!element[name])
2324
+ {var self=this;var activators=element.getAttribute('activators');var fieldsetName=(element.getAttribute('type')=='button'||activators)?element.getAttribute('fieldset'):null;var tokens=attr.split(':');var direction=tokens.length==2?tokens[0]:'local';var argsobj=element.getAttribute(eventName+'Args');element[name]=function(e)
2325
+ {e=Event.getEvent(e);$D(self+', name='+name+', element='+element.id+', fieldsetname='+fieldsetName);try
2326
+ {var data={};if(argsobj)
2327
+ {var scope=Object.copy({},controller);data=Object.evalWithinScope(String.unescapeXML(argsobj),scope);}
2328
+ if(data.id==null&&element.id)
2329
+ {data.id=element.id;}
2330
+ self.getFieldSetValues(fieldsetName,data,direction);var msg={type:attr,data:data,immediate:true};if(direction=='local')
2331
+ {e.toJSONString=function()
2332
+ {return'null';};data['event']=e;}
2333
+ hakano.util.MessageBroker.queue(msg);}
2334
+ catch(ex)
2335
+ {if(Logger&&Logger.error)
2336
+ {Logger.error(self.toString()+', Exception firing '+event+' for '+element+'. Error: '+Object.getExceptionDetail(ex));}}
2337
+ return true;};Event.observe(element,event,element[name],false);this.addTrash(element,controller,function()
2338
+ {Event.stopObserving(element,event,element[name],false);delete element[name];});}}},createActivatorsFor:function(element,controller,activatorValidator,activators,activatorValidatorDecId,bindChangeHandler,trash)
2339
+ {if(activators)
2340
+ {var self=this;if(this.DEBUG)$D(this+', activators => '+activators+' for '+element.id);var validators=[];var compositeValidator=function(force)
2341
+ {var valid=true;for(var c=0,len=validators.length;c<len;c++)
2342
+ {var v=validators[c];var elem=v[0];if(elem)
2343
+ {var dirty=elem['_dirty'];var ok=(dirty!=null)?dirty:false;if(dirty==null||force)
2344
+ {var validator=v[1];var decorator=v[2];var decoratorId=v[3];var value=self.getFieldValue(elem,'local')||'';if(self.DEBUG)$D(self.toString(),' invoking validator for '+elem.id+' with: ['+value+'], dirty:'+dirty+',force:'+force);ok=validator(value,elem);if(self.DEBUG)$D(self.toString(),' validator for '+elem.id+' returned: ['+ok+']');decorator(elem,ok,decoratorId);if(ok&&bindChangeHandler)
2345
+ {bindChangeHandler();}
2346
+ elem['_dirty']=ok;}
2347
+ valid=valid&&ok;}}
2348
+ if(valid&&activatorValidator)
2349
+ {var aok=activatorValidator(element,activators,activatorValidatorDecId);if(self.DEBUG)$D(self.toString(),' '+element.id+' action validator returned: '+aok+'');valid=(aok==null||aok==true)?true:false;}
2350
+ if(element.tagName=='A')
2351
+ {Element[valid?'show':'hide'](element);}
2352
+ else
2353
+ {element.disabled=(valid)?'':'true';}
2354
+ if(self.DEBUG)$D(self.toString(),' '+element.id+' is valid: '+valid+'');return valid;};element['_seamlessCompositeValidator']=compositeValidator;var aarray=activators.split(',');for(var c=0,len=aarray.length;c<len;c++)
2355
+ {var elem=$(aarray[c]);if(!elem)
2356
+ {Logger.warn(self+' Invalid element id:'+aarray[c]+' for activator at element: '+element.id);continue;}
2357
+ if(elem['_seamlessValidatorE']==1&&elem['_seamlessDestructors'])
2358
+ {var d=elem['_seamlessDestructors'];for(var x=0,l=d.length;x<l;x++)
2359
+ {d[x]();}
2360
+ elem['_seamlessDestructors']=null;}
2361
+ var validator=self.getValidator(elem,controller);var decorator=self.getDecorator(elem,controller);var decoratorId=elem.getAttribute('decoratorId');validators.push([elem,validator,decorator,decoratorId]);elem['_seamlessDecorator']=decorator;elem['_seamlessCompositeValidator']=compositeValidator;var validatorFunction=function()
2362
+ {this['_dirty']=null;compositeValidator();return true;};elem['_seamlessValidator']=validatorFunction.bindAsEventListener(elem);var type=elem.getAttribute('type');if('text'==type||'password'==type||elem.nodeName=='TEXTAREA')
2363
+ {Event.observe(elem,'keyup',elem['_seamlessValidator'],false);Event.observe(elem,'change',elem['_seamlessValidator'],false);if(trash)
2364
+ {trash.push(function()
2365
+ {Event.stopObserving(elem,'keyup',elem['_seamlessValidator'],false);Event.stopObserving(elem,'change',elem['_seamlessValidator'],false);elem['_seamlessValidator']=null;});}
2366
+ else
2367
+ {self.addTrash(elem,controller,function()
2368
+ {Event.stopObserving(elem,'keyup',elem['_seamlessValidator'],false);Event.stopObserving(elem,'change',elem['_seamlessValidator'],false);elem['_seamlessValidator']=null;});}}
2369
+ else
2370
+ {Event.observe(elem,'change',elem['_seamlessValidator'],false);if(trash)
2371
+ {trash.push(function()
2372
+ {Event.stopObserving(elem,'change',elem['_seamlessValidator'],false);elem['_seamlessValidator']=null;});}
2373
+ else
2374
+ {self.addTrash(elem,controller,function()
2375
+ {Event.stopObserving(elem,'change',elem['_seamlessValidator'],false);elem['_seamlessValidator']=null;});}}}
2376
+ var initialValid=compositeValidator();$D(this+' initially valid='+initialValid+' for '+element.id);if(element.tagName=='A')
2377
+ {Element[initialValid?'show':'hide'](element);}
2378
+ else
2379
+ {element.disabled=(initialValid)?'':'true';}
2380
+ return true;}
2381
+ return false;},createActivators:function(element,controller,bindChangeHandler,trash)
2382
+ {var activators=element.getAttribute('activators');var actionValidatorDecoratorId=element.getAttribute('actionValidatorDecoratorId');var activatorValidator=this.getActionValidator(element,controller);this.createActivatorsFor(element,controller,activatorValidator,activators,actionValidatorDecoratorId,bindChangeHandler,trash);},addEventsMessageHandler:function(element,controller)
2383
+ {for(var c=0,len=this.messageEvents.length;c<len;c++)
2384
+ {this.createEventHandler(element,this.messageEvents[c],controller);}},syntaxHighlightBrushes:null,addSyntaxHighlighter:function(element)
2385
+ {var attribute=element.getAttribute('highlight');if(attribute)
2386
+ {if(!Seamless.syntaxHighlightBrushes)
2387
+ {Seamless.syntaxHighlightBrushes={};for(var brush in dp.sh.Brushes)
2388
+ {var aliases=dp.sh.Brushes[brush].Aliases;if(aliases==null)
2389
+ {continue;}
2390
+ for(var i=0;i<aliases.length;i++)
2391
+ {Seamless.syntaxHighlightBrushes[aliases[i]]=brush;}}}
2392
+ function IsOptionSet(value,list,def)
2393
+ {for(var i=0;i<list.length;i++)
2394
+ if(list[i]==value)
2395
+ return true;return def;}
2396
+ function GetOptionValue(name,list,defaultValue)
2397
+ {var regex=new RegExp('^'+name+'\\[(\\w+)\\]$','gi');var matches=null;for(var i=0;i<list.length;i++)
2398
+ if((matches=regex.exec(list[i]))!=null)
2399
+ return matches[1];return defaultValue;}
2400
+ var options=attribute.split(':');var language=options[0].toLowerCase();if(Seamless.syntaxHighlightBrushes[language]==null)
2401
+ {return;}
2402
+ var highlighter=new dp.sh.Brushes[Seamless.syntaxHighlightBrushes[language]]();element.style.display='none';highlighter.noGutter=IsOptionSet('nogutter',options,true);highlighter.addControls=!IsOptionSet('nocontrols',options,true);highlighter.collapse=IsOptionSet('collapse',options,false);highlighter.showColumns=IsOptionSet('showcolumns',options,false);highlighter.firstLine=parseInt(GetOptionValue('firstline',options,1));highlighter.Highlight(element['value']);element.parentNode.insertBefore(highlighter.div,element);}},messageEvents:['focus','blur','mousedown','mouseup','mousemove','reset','mouseover','mouseout','change'],mouseEvents:['click','dblclick','mouseover','mouseout'],inputEvents:['click','focus','blur','keyup','keydown','keypress'],seamlessNSRegex:/^seamless[:]+/,activate:function(element,controller)
2403
+ {if(!controller)
2404
+ {throw"controller required for activate";}
2405
+ element['_seamlessfied']=1;if(!element.id)
2406
+ {element.id=this.createUniqueId(element);}
2407
+ var name=this.getTagNameWithNS(element).toLowerCase();var self=this;if(name.match(this.seamlessNSRegex))
2408
+ {name='seamless';}
2409
+ switch(name)
2410
+ {case'jimmy':case'jimmy:jimmy':case'seamless':{element.originaldisplay=element.style.display;element.style.display='none';this.inject(element,null,controller);break;}
2411
+ case'table':{this.addBindMessageHandler(element,controller);break;}
2412
+ case'form':{element.setAttribute('autocomplete','off');this.addBindMessageHandler(element,controller);this.addEventsMessageHandler(element,controller);break;}
2413
+ case'div':case'span':case'h1':case'h2':case'h3':case'h4':case'h5':case'img':case'a':case'p':case'ul':case'ol':case'li':case'select':case'option':case'iframe':case'pre':case'tr':case'td':case'th':case'tbody':case'thead':case'tfoot':{for(var c=0,len=this.mouseEvents.length;c<len;c++)
2414
+ {this.addSeamlessListener(element,controller,this.mouseEvents[c]);}}
2415
+ case'input':case'textarea':{this.addFieldSet(element,controller);this.addBindMessageHandler(element,controller);this.addEventsMessageHandler(element,controller);for(var c=0,len=this.inputEvents.length;c<len;c++)
2416
+ {this.addSeamlessListener(element,controller,this.inputEvents[c]);}
2417
+ switch(name)
2418
+ {case'textarea':{var copyFrom=element.getAttribute('copyFrom');if(copyFrom)
2419
+ {copyFrom=$(copyFrom);if(copyFrom)
2420
+ {element.innerHTML=String.escapeXML(copyFrom.innerHTML);}}
2421
+ this.addSyntaxHighlighter(element);element.onfocus=function(e)
2422
+ {hakano.util.KeyManager.disable();return true;};element.onblur=function(e)
2423
+ {hakano.util.KeyManager.enable();return true;};break;}
2424
+ case'img':case'script':case'iframe':{var srcexpr=element.getAttribute('srcexpr');if(srcexpr)
2425
+ {var condAttr=element.getAttribute('cond');var cond=(condAttr)?this.createMessageCondition(condAttr):this.FunctionTrue;if(cond())
2426
+ {try
2427
+ {var expr=srcexpr.toFunction();if(expr)
2428
+ {var value=expr.call(controller,element);$D(this+' invoked srcexpr='+srcexpr+' on element='+element.id+', returned='+value);if(value!=null)
2429
+ {element.src=value;}}}
2430
+ catch(e)
2431
+ {Logger.error('Error evaluating '+element.id+' srcexpr='+srcexpr+', '+Object.getExceptionDetail(e));}}}
2432
+ break;}}
2433
+ var type=element.getAttribute('type');if(type)
2434
+ {switch(type)
2435
+ {case'button':case'radio':case'file':this.addSeamlessListener(element,controller,'click');break;case'password':{if(this.addSeedLoginInfo(element))
2436
+ {element['_seedDataFocusListener']=function()
2437
+ {self.addSeedLoginInfo(element);};Event.observe(element,'focus',element['_seedDataFocusListener'],false);this.addTrash(element,controller,function()
2438
+ {Event.stopObserving(element,'focus',element['_seedDataFocusListener'],false);delete element['_seedDataFocusListener'];});}
2439
+ else
2440
+ {this.addHashFieldInfo(element);}
2441
+ break;}}}
2442
+ var bindChangeHandler=null;switch(name)
2443
+ {case'input':case'select':case'textarea':{bindChangeHandler=this.getBindChangeHandler(element);break;}}
2444
+ if(this.createActivators(element,controller,bindChangeHandler))
2445
+ {}
2446
+ else if(!(element['_seamlessValidator'])&&(name=='input'||name=='select'||name=='textarea'))
2447
+ {var validator=this.getValidator(element,controller);var decorator=this.getDecorator(element,controller);var decoratorId=element.getAttribute('decoratorId');element['_seamlessValidatorE']=1;var value=self.getFieldValue(element,'local')||'';var valid=validator(value,element);decorator(element,valid,decoratorId);element['_seamlessDestructors']=[];var prop='onchange';if('text'==type||'password'==type||name=='select'||name=='textarea')
2448
+ {prop='onkeyup';}
2449
+ if(name!='textarea')
2450
+ {hakano.util.KeyManager.installHandler(hakano.util.KeyManager.KEY_ENTER,element,function()
2451
+ {element.enterTriggered=false;if(element.timer!=null)
2452
+ {element.timerCancelled=true;clearTimeout(element.timer);element.timer=null;}
2453
+ var value=self.getFieldValue(element,'local')||'';if(self.DEBUG)$D(self.toString(),' invoking validator for '+element.id+' with: ['+value+']');var ok=validator(value,element);if(self.DEBUG)$D(self.toString(),' validator for '+element.id+' returned: ['+ok+']');decorator(element,ok,decoratorId);if(ok&&bindChangeHandler)
2454
+ {element.enterTriggered=true;element._value=element.value;bindChangeHandler();setTimeout(function()
2455
+ {element.enterTriggered=false;},200);}});var destructor=function()
2456
+ {hakano.util.KeyManager.removeHandler(hakano.util.KeyManager.KEY_ENTER,element);};this.addTrash(element,controller,destructor);element['_seamlessDestructors'].push(destructor);}
2457
+ var timeout=parseInt(element['onBindChangeMessageTimeout']||'2000');var blurlistener=function()
2458
+ {if(element.timer!=null)
2459
+ {element.timerCancelled=true;clearTimeout(element.timer);element.timer=null;}
2460
+ if(element.value!=element._value)
2461
+ {var value=self.getFieldValue(element,'local')||'';var ok=validator(value,element);decorator(element,ok,decoratorId);if(!element.enterTriggered&&ok&&bindChangeHandler)
2462
+ {element._value=element.value;bindChangeHandler();}}
2463
+ return true;};Event.observe(element,'blur',blurlistener,false);var destructor=function()
2464
+ {Event.stopObserving(element,'blur',blurlistener,false);};this.addTrash(element,controller,destructor);element['_seamlessDestructors'].push(destructor);var addChange='onkeyup'==prop;while(true)
2465
+ {element[prop]=function(e)
2466
+ {e=Event.getEvent(e);if(element.timer!=null)
2467
+ {element.timerCancelled=true;clearTimeout(element.timer);element.timer=null;}
2468
+ var current=element._value;element._value=self.getFieldValue(element,'local')||'';if(element._value!=current)
2469
+ {var ok=validator(element._value,element);decorator(element,ok,decoratorId);if(!element.enterTriggered&&ok&&bindChangeHandler)
2470
+ {element.timer=setTimeout(function()
2471
+ {if(!element.timerCancelled&&!element.enterTriggered)
2472
+ {bindChangeHandler();}
2473
+ element.timer=null;element.enterTriggered=false;},timeout);element.timerCancelled=false;}}
2474
+ return true;};if(prop=='onchange')break;prop='onchange';}
2475
+ destructor=function()
2476
+ {if(element[prop])
2477
+ {element[prop]=null;}};this.addTrash(element,controller,destructor);element['_seamlessDestructors'].push(destructor);}
2478
+ break;}}},getTagNameWithNS:function(elem)
2479
+ {if(HAKANO.isIE)
2480
+ {if(elem.scopeName=='seamless')
2481
+ {return elem.scopeName+':'+elem.nodeName;}}
2482
+ return elem.nodeName;},wire:function(view,controller,ignoreSelf,force,replaceid)
2483
+ {if(!controller)
2484
+ {controller=window;}
2485
+ $D(this+' wire begin for: '+view.id+' ('+view+')');var ts=new Date().getTime();if(!force&&view['_seamlessfied'])
2486
+ {Logger.warn(this+' (wire) element:'+view.id+' has already been seamlessed: '+view);return;}
2487
+ if(!ignoreSelf)
2488
+ {this.activate(view,controller);}
2489
+ var nodelist=$A(view.getElementsByTagName("*"));var elemType=hakano.util.Dom.ELEMENT_NODE;var count=0;for(var c=0,len=nodelist.length;c<len;c++)
2490
+ {var child=nodelist[c];if(child.nodeType==elemType)
2491
+ {this.activate(child,controller);count++;}}
2492
+ this.fireEvent('load',view,controller);var data={};if(view==document.body)
2493
+ {data={'id':'document.body'};}
2494
+ else
2495
+ {data={'id':view.id};}
2496
+ hakano.util.MessageBroker.queue({type:'local:seamless.load',data:data});$D(this+' wire end for: '+view.id+' ('+view+'), '+(new Date().getTime()-ts)+' ms, '+count+' elements wired');}});window.siteLoadedObservers.push(function()
2497
+ {HAKANO.TEMPLATE_VARS={rootPath:HAKANO.DocumentPath,scriptPath:HAKANO.ScriptPath,imagePath:HAKANO.ImagePath,cssPath:HAKANO.DocumentPath+'css',contentPath:HAKANO.DocumentPath+'content',portletPath:HAKANO.DocumentPath+'portlets',modulePath:HAKANO.DocumentPath+'modules',soundPath:HAKANO.DocumentPath+'sounds'};});var SeamlessSearch=Class.create();Object.extend(SeamlessSearch.prototype,Ajax.Autocompleter.prototype);Object.extend(SeamlessSearch.prototype,{baseInitialize:function(element,update,options)
2498
+ {this.element=$(element);this.update=$(update);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;if(this.setOptions)
2499
+ this.setOptions(options);else
2500
+ this.options=options||{};this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(element,update)
2501
+ {if(!update.style.position||update.style.position=='absolute')
2502
+ {update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
2503
+ Effect.Appear(update,{duration:0.15});};this.options.onHide=this.options.onHide||function(element,update)
2504
+ {new Effect.Fade(update,{duration:0.15})};if(typeof(this.options.tokens)=='string')
2505
+ this.options.tokens=new Array(this.options.tokens);this.observer=null;this.element.setAttribute('autocomplete','off');Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,"keypress",this.onKeyPress.bindAsEventListener(this));hakano.util.MessageBroker.addListener(this);},destroy:function()
2506
+ {hakano.util.MessageBroker.removeListener(this);},accept:function(type)
2507
+ {return[this.options.onBindMessageResponse];},onMessage:function(type,msg)
2508
+ {if(type==this.options.onBindMessageResponse)
2509
+ {if(this.update)
2510
+ {this.update.innerHTML="";}}},sendRequest:function()
2511
+ {var data={};data[this.options.onBindMessageSearchKey]=this.element.value;var obj={type:this.options.onBindMessageRequest,data:data,immediate:true};hakano.util.MessageBroker.queue(obj);},getUpdatedChoices:function()
2512
+ {this.sendRequest();},startIndicator:function()
2513
+ {if(this.update)
2514
+ {this.update.style.display="block";this.update.innerHTML="searching for '"+this.element.value+"'...";}},hide:function()
2515
+ {},selectEntry:function()
2516
+ {}});var Validator=Class.create();var ALPHANUM_REGEX=/[0-9a-zA-Z]+/;Validator={toString:function()
2517
+ {return'[Validator]';},uniqueId:0,actionValidatorDecorator:function(element,valid,decId,msg)
2518
+ {try
2519
+ {if(decId)
2520
+ {var div=$(decId);if(div)
2521
+ {if(!valid)
2522
+ {div.innerHTML='<img src="'+HAKANO.ImagePath+'exclamation.png"> '+msg;}
2523
+ Element.setStyle(decId,{visibility:(valid?'hidden':'visible')});}}
2524
+ else
2525
+ {var id='decorate_'+element.id;var div=$(id);if(!div)
2526
+ {new Insertion.After(element.id,'<span id="'+id+'" style="font-size:11px" class="error_color"></span>');div=$(id);}
2527
+ if(!valid)
2528
+ {div.innerHTML='<img src="'+HAKANO.ImagePath+'deny.png"/> '+msg;}
2529
+ Element.setStyle(id,{visibility:(valid?'hidden':'visible')});}}
2530
+ catch(e)
2531
+ {alert(e+'\n'+e.stack);}},passwordsMatch:function(element,ids,decId)
2532
+ {var valid=false;if(ids)
2533
+ {var passwordValue=null;var retypeValue=null;var foundCount=0;var self=this;ids.split(',').each(function(n)
2534
+ {if(n=="user_password")
2535
+ {passwordValue=$(n).value;foundCount++;}
2536
+ if(n=="user_retype_password")
2537
+ {retypeValue=$(n).value;foundCount++;}
2538
+ if(foundCount==2)throw $break;});valid=(passwordValue==retypeValue);}
2539
+ this.actionValidatorDecorator(element,valid,decId,"passwords must match");return valid;},required:function(value)
2540
+ {if(typeof(value)=='boolean')
2541
+ {return value;}
2542
+ if(null==value)
2543
+ {return false;}
2544
+ return value.trim().length>0;},EMAIL_REGEXP:/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/,email:function(value)
2545
+ {return this.EMAIL_REGEXP.test(value);},fullname:function(value)
2546
+ {return((value.trim().split(" ")).length<1);},noSpaces:function(value)
2547
+ {if(!this.required(value))
2548
+ {return false;}
2549
+ return value.trim().indexOf(' ')==-1;},password:function(value)
2550
+ {return(value.length>=6);},number:function(value)
2551
+ {try
2552
+ {parseInt(value);return true;}
2553
+ catch(e)
2554
+ {return false;}},wholenumber:function(value)
2555
+ {try
2556
+ {return parseInt(value)>=0;}
2557
+ catch(e)
2558
+ {return false;}},url:function(value)
2559
+ {return hakano.util.URI.isValid(value);},checked:function(value)
2560
+ {return value||value=='on';},length:function(value,element)
2561
+ {if(value)
2562
+ {try
2563
+ {var min=parseInt(element.getAttribute('validatorMinLength')||'1');var max=parseInt(element.getAttribute('validatorMaxLength')||'999999');var v=value.length;return v>=min&&v<=max;}
2564
+ catch(e)
2565
+ {}}
2566
+ return false;},alphanumeric:function(value,element)
2567
+ {return ALPHANUM_REGEX.test(value);}};var SeamlessWidget=Class.create();Object.extend(SeamlessWidget.prototype,{initialize:function()
2568
+ {},toString:function()
2569
+ {return'[SeamlessWidget]';},build:function(element)
2570
+ {return false;},onBind:function(element,attribute,type,msg,datatype,direction)
2571
+ {}});var SeamlessWidget_Content=new SeamlessWidget();SeamlessWidget_Content.build=function(element,controller)
2572
+ {var src=element.getAttribute('src');var _id=element.id+'_content';var props='';var onLoad=element.getAttribute('onLoadMessage');if(onLoad)
2573
+ {props='onLoadMessage="'+onLoad+'"';}
2574
+ element.innerHTML='<div id="'+_id+'" '+props+'></div>';var targetElement=$(_id);var cond=element.getAttribute('cond');var ok=src;if(ok&&cond&&cond!='true')
2575
+ {var scope=Object.copy({},controller);ok=Object.evalWithinScope(cond,scope);}
2576
+ element.style.display='';$D(this.toString(),'Seamless '+element.id+'('+element.nodeName+') cond:'+cond+', ok: '+ok);if(ok)
2577
+ {$D(this.toString(),'fixing seamless src at '+element.id+'('+element.nodeName+'), src:'+src);var uri=Seamless.evaluateTemplateURI(src);$D(this.toString(),'calling loadURL: '+element.id+'('+element.nodeName+'), URI: '+uri);Seamless.load(targetElement,controller,uri);}
2578
+ Seamless.setupBindAction(element,controller,'onBindMessage',function(element,attribute,type,msg,datatype,direction,controller)
2579
+ {var prop=element.getAttribute(attribute+'Property')||element.name||element.id;var obj=Object.getNestedProperty(msg,prop);obj=obj!=null?obj:(typeof(msg)=='string')?msg:null;var newsrc=Seamless.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,direction,controller);if(newsrc)
2580
+ {element.innerHTML='<div id="'+_id+'" '+props+'></div>';targetElement=$(_id);Seamless.load(targetElement,controller,newsrc);}});};Seamless.registerWidgetBuilder('content',SeamlessWidget_Content);var SeamlessWidget_DataModel=new SeamlessWidget();SeamlessWidget_DataModel.build=function(element,controller)
2581
+ {var message=element.getAttribute('message');if(!message)
2582
+ {Logger.error("error loading data model widget, missing required 'message' attribute");return false;}
2583
+ var args=String.unescapeXML(element.getAttribute('args'));var initialCond=element.getAttribute('cond');var onBindMessage=element.getAttribute('onBindMessage');if(onBindMessage)
2584
+ {Seamless.setupBindAction(element,controller,'onBindMessage',function(element,attribute,type,data,datatype,direction,controller)
2585
+ {if(args)
2586
+ {var scope=Object.copy({},data);scope=Object.copy(scope,controller);data=Object.evalWithinScope(args,scope);}
2587
+ var msg={type:message,data:data};hakano.util.MessageBroker.queue(msg);});}
2588
+ if(initialCond)
2589
+ {var cond=Object.evalWithinScope(initialCond,controller);if(!cond)
2590
+ {return;}}
2591
+ var data={};if(args)
2592
+ {data=Object.evalWithinScope(args,controller);}
2593
+ else
2594
+ {var text=hakano.util.Dom.getText(element)||'';var t=text.trim();if(t.match(/^\{.*\}$/))
2595
+ {data=eval('('+t+')');}}
2596
+ var msg={type:message,data:data};hakano.util.MessageBroker.queue(msg);return true;};Seamless.registerWidgetBuilder('datamodel',SeamlessWidget_DataModel);var SeamlessWidget_DynamicSearch=new SeamlessWidget();SeamlessWidget_DynamicSearch.build=function(element,controller)
2597
+ {var form=document.createElement('form');var html='<input type="text" id="_'+element.id+'" ';html+=hakano.util.Dom.getAttributesString(element,['autocomplete','id','widget','progressid','onbindmessagerequest','onbindmessageresponse','searchkey','onbindmessageclear','onbindmessageclearcond','value']);html+='/>';form.innerHTML=html;var progressId=element.getAttribute("progressId");var request=element.getAttribute("onBindMessageRequest");var response=element.getAttribute("onBindMessageResponse");var key=element.getAttribute("searchKey");element.parentNode.replaceChild(form,element);var id=element.id;var i=$('_'+id);i.id=id;var search=new SeamlessSearch(id,progressId,null,{onBindMessageRequest:request,onBindMessageResponse:response,onBindMessageSearchKey:key});i.style.display='';Seamless.wire(form,controller,true,true);Seamless.addTrash(element,controller,function()
2598
+ {search.destroy();});Seamless.setupBindAction(element,controller,'onBindMessageClear',function(element,attribute,type,data,datatype,direction,controller)
2599
+ {i.value='';Field.activate(i);});return true;};Seamless.registerWidgetBuilder('dynamic-search',SeamlessWidget_DynamicSearch);var SeamlessWidget_EditInPlace=new SeamlessWidget();SeamlessWidget_EditInPlace.build=function(element,controller)
2600
+ {var fieldsetName=element.getAttribute("fieldset");if(fieldsetName!=null)
2601
+ {var fs=Seamless.loadFieldSet(element,fieldsetName,true);var field=new Editablefield();var id=Seamless.createUniqueId(element);field.setViewElementId(fieldsetName+"_view_"+id);field.setEditParentElementId(fieldsetName+"_edit_parent_"+id);field.setEditElementId(fieldsetName+"_edit_"+id);element.style.display="block";var seamless=element.cloneNode(false);seamless.id=field.getViewElementId();seamless.style.padding=(element.getAttribute("viewPadding")||"");seamless.className=(element.getAttribute("viewclass")||"");var divid=element.id;var newdiv='<div id="'+divid+'"></div>';element.id=element.id+"_parent_old";Seamless.addBindMessageHandler(seamless,controller);var editHTML=document.createElement("div");editHTML.id=field.getEditParentElementId();new Insertion.After(element,newdiv);newdiv=$(divid);newdiv.appendChild(seamless);newdiv.appendChild(editHTML);$(field.getEditParentElementId()).style.display="none";field.setValidator(element.getAttribute("validator"));field.setDecorator(element.getAttribute("decorator"));field.setType(element.getAttribute("type"));field.setName(element.getAttribute("name"));field.setPopulator(element.getAttribute("populator"));field.setViewClass(element.getAttribute("viewclass"));field.setLength(element.getAttribute("length"));field.setOnBindMessageProperty(element.getAttribute("onBindMessageProperty"));field.setRows(element.getAttribute("rows"));field.setCols(element.getAttribute("cols"));field.setInputClass(element.getAttribute("inputClass"));fs.addField(field);var widget=$(seamless.id);widget.widget=field;return true;}
2602
+ return false;};SeamlessWidget_EditInPlace.onBind=function(element,attribute,type,msg,datatype,direction,controller)
2603
+ {var prop=element.getAttribute("onBindMessageProperty");var obj=Object.getNestedProperty(msg,prop);element.innerHTML=Seamless.evaluateBindMessageExpression(element,attribute,obj,type,msg,datatype,controller);};Seamless.registerWidgetBuilder('editinplace',SeamlessWidget_EditInPlace);var SeamlessWidget_iterator=new SeamlessWidget();var PROPS=['left','right','width','top','bottom','display','visibility','border','color','border-top','border-left','border-bottom','overflow','height','background','background-color','border-right'];SeamlessWidget_iterator.build=function(element,controller)
2604
+ {try
2605
+ {var id=element.id;var display=element.originaldisplay;element.id=element.id+"_parent";var template=HAKANO.isIE?element.innerHTML:hakano.util.Dom.getText(element);var container=null;var wire=element.getAttribute('wire')=='true';var rowEvenClassName=element.getAttribute('rowEvenClassName');var rowOddClassName=element.getAttribute('rowOddClassName');function copyStyles(sourceElement,targetElement)
2606
+ {PROPS.each(function(name){targetElement.style[name]=sourceElement.style[name]});}
2607
+ Seamless.setupBindAction(element,controller,'onBindMessage',function(element,attribute,type,data,datatype,direction)
2608
+ {var html=''
2609
+ var propertyName=element.getAttribute(attribute+'Property');var array=Object.getNestedProperty(data,propertyName);for(var c=0;c<array.length;c++)
2610
+ {html+=template.gsub(Template.Pattern,function(match)
2611
+ {var before=match[1];if(before=='\\')return match[2];var value=Object.getNestedProperty(array[c],match[3]);return before+(value==null?'':value.toString());});}
2612
+ html=html.gsub(/html:/i,function(match)
2613
+ {return match[1]+match[3];});container.innerHTML=html;var c=0;for(var i=0;i<container.childNodes.length;i++)
2614
+ {if(container.childNodes[i].nodeType==hakano.util.Dom.ELEMENT_NODE)
2615
+ {container.childNodes[i].style.display='';if((c%2)==0)
2616
+ {if(rowEvenClassName)Element.addClassName(container.childNodes[i],rowEvenClassName);}
2617
+ else
2618
+ {if(rowOddClassName)Element.addClassName(container.childNodes[i],rowOddClassName);}
2619
+ c++;}}
2620
+ if(wire)
2621
+ {Seamless.wire(container,controller,false,true);}});var div=document.createElement('div');new Insertion.After(element,'<div id="'+id+'"></div>');container=$(id);copyStyles(element,container);container.style.display=display;}
2622
+ catch(e)
2623
+ {alert('exception:'+e+" -- "+Object.getExceptionDetail(e));}};Seamless.registerWidgetBuilder('iterator',SeamlessWidget_iterator);var IS_FIREFOX=navigator.userAgent.match(/Firefox/i);var SeamlessWidget_ModalDialog=new SeamlessWidget();SeamlessWidget_ModalDialog.build=function(element,controller)
2624
+ {element.style.display='none';var viewId=element.getAttribute('viewId');var acceptText=element.getAttribute('acceptText');var cancelText=element.getAttribute('cancelText');var onCancelMessage=element.getAttribute('onCancelMessage');var onCancelMessageArgs=element.getAttribute('onCancelMessageArgs')||'{}';var onAcceptMessage=element.getAttribute('onAcceptMessage');var onAcceptMessageArgs=element.getAttribute('onAcceptMessageArgs')||'{}';var width=element.getAttribute('width');var height=element.getAttribute('height');var top=element.getAttribute('top');var viewURL=element.getAttribute('viewURL');var autohide='true'==(element.getAttribute('onAcceptAutoHide')||'true');var autodisable='true'==(element.getAttribute('onAcceptDisable')||'false');var fieldsetName=element.getAttribute('fieldset');var tokens=onAcceptMessage?onAcceptMessage.split(':'):null;var direction=tokens&&tokens.length==2?tokens[0]:'local';var actionValidatorDecoratorId=element.getAttribute('actionValidatorDecoratorId');var activators=element.getAttribute('activators');var activatorValidator=Seamless.getActionValidator(element,controller);var options=null;var focusElement=element.getAttribute('focus');var hideButtons=element.getAttribute('hideButtons')||'false';var backgroundColor=element.getAttribute('backgroundColor')||'#fff';if(viewURL)
2625
+ {var uri=Seamless.evaluateTemplateURI(viewURL);var prefetch=element.getAttribute('prefetch')||'true';if(prefetch=='true')
2626
+ {Seamless.queuePrefetch(uri);}}
2627
+ Seamless.setupBindAction(element,controller,'onHideMessage',function(element,attribute,type,data,datatype,direction,controller)
2628
+ {ModalDialog.hide();if(options)
2629
+ {options['trash'].each(function(f)
2630
+ {f();});options=null;}});Seamless.setupBindAction(element,controller,'onBindMessage',function(element,attribute,type,data,datatype,dir,controller)
2631
+ {var html=viewURL?'<img src="'+HAKANO.ImagePath+'/indicator.gif"/> Loading...':$(viewId).innerHTML;options={trash:[],autohide:autohide,autodisable:autodisable};if(acceptText)
2632
+ {options['acceptText']=acceptText;}
2633
+ if(cancelText)
2634
+ {options['cancelText']=cancelText;}
2635
+ if(width)
2636
+ {options['width']=parseInt(width);}
2637
+ if(height)
2638
+ {options['height']=parseInt(height);}
2639
+ if(top)
2640
+ {options['top']=parseInt(top);}
2641
+ options['hideButtons']=hideButtons;options['backgroundColor']=backgroundColor;if(onAcceptMessage)
2642
+ {options['onAccept']=function()
2643
+ {var scope=Object.copy({},controller);var args=Object.evalWithinScope(onAcceptMessageArgs,scope);args=Seamless.getFieldSetValues(fieldsetName,args,direction);hakano.util.MessageBroker.queue({type:onAcceptMessage,data:args});};}
2644
+ else
2645
+ {options['onAccept']=function()
2646
+ {options['trash'].each(function(f)
2647
+ {f();});};}
2648
+ if(onCancelMessage)
2649
+ {options['onCancel']=function()
2650
+ {var scope=Object.copy({},controller);var args=Object.evalWithinScope(onCancelMessageArgs,scope);hakano.util.MessageBroker.queue({type:onCancelMessage,data:args});options['trash'].each(function(f)
2651
+ {f();});};}
2652
+ else
2653
+ {options['onCancel']=function()
2654
+ {options['trash'].each(function(f)
2655
+ {f();});};}
2656
+ if(viewURL)
2657
+ {options['onRender']=function(canvas)
2658
+ {var button=ModalDialog.getAcceptButton();Seamless.loadURL(canvas,controller,uri,{onSuccess:function(resp,elem)
2659
+ {if(IS_FIREFOX)
2660
+ {while(elem)
2661
+ {if(elem.nodeType==hakano.util.Dom.ELEMENT_NODE)
2662
+ {elem.parentNode.style.overflow='auto';break;}
2663
+ elem=elem.parentNode;}}
2664
+ if(focusElement)
2665
+ {var focus=$(focusElement);if(focus)
2666
+ {focus.focus();}}
2667
+ var bindChangeHandler=Seamless.getBindChangeHandler(button);Seamless.createActivatorsFor(button,controller,activatorValidator,activators,actionValidatorDecoratorId,bindChangeHandler,options['trash']);}});};}
2668
+ else
2669
+ {options['onRender']=function(canvas)
2670
+ {if(IS_FIREFOX)
2671
+ {for(var c=0;c<canvas.childNodes.length;c++)
2672
+ {var elem=canvas[c];if(elem.nodeType==hakano.util.Dom.ELEMENT_NODE)
2673
+ {elem.style.overflow='auto';break;}}}
2674
+ if(focusElement)
2675
+ {var focus=$(focusElement);if(focus)
2676
+ {focus.focus();}}
2677
+ var button=ModalDialog.getAcceptButton();var bindChangeHandler=Seamless.getBindChangeHandler(button);Seamless.createActivatorsFor(button,controller,activatorValidator,activators,actionValidatorDecoratorId,bindChangeHandler,options['trash']);};}
2678
+ ModalDialog.show(html,options);});};Seamless.registerWidgetBuilder('modaldialog',SeamlessWidget_ModalDialog);var SeamlessWidget_ProgressBar=new SeamlessWidget();SeamlessWidget_ProgressBar.build=function(element,controller)
2679
+ {var total=100;var marginSize=parseInt(hakano.util.Dom.getAndRemoveAttribute(element,'spacerWidth')||'1');var marginTotal=marginSize*total;var onColor=hakano.util.Dom.getAndRemoveAttribute(element,'onColor')||'#00f';var offColor=hakano.util.Dom.getAndRemoveAttribute(element,'offColor')||'#eee';var id='_'+element.id;var html='<div id="'+id+'" ';html+=hakano.util.Dom.getAttributesString(element,['id','widget']);html+='></div>';new Insertion.After(element,html);Seamless.zap(element);var _w=$(id);_w.id=element.id;_w.style.position='relative';_w.style.margin='0';_w.style.padding='0';_w.style.display='';var p=Element.findNonShowingAncestor(_w);if(p)
2680
+ {p.style.display='';}
2681
+ var barWidth=Math.max(_w.offsetWidth,parseInt(_w.style.width));if(isNaN(barWidth))
2682
+ {p=_w.parentNode;barWidth=p.offsetWidth;while(isNaN(barWidth))
2683
+ {barWidth=p.offsetWidth;p=p.parentNode;if(!p||!isNaN(barWidth))break;}}
2684
+ var sizeEach=Math.round((barWidth-marginTotal)/total);_w.style.width=(sizeEach+marginSize)*total+'px';if(p)
2685
+ {p.style.display='none';}
2686
+ var statusId=element.getAttribute('statusId');var startPercent=statusId?parseInt(element.getAttribute('statusStart')||'30'):null;var startTS=0;var statusDiv=statusId?$(statusId):null;var statusMsg=statusDiv?statusDiv.innerHTML:null;var prop=element.getAttribute('onBindMessageProperty');var resetOnComplete=element.getAttribute('resetOnComplete')||'true';var lastTS=0;var complete=false;var currentAmt=0;Seamless.setupBindAction(_w,controller,'onBindMessageClear',function()
2687
+ {element.innerHTML='';var statusTS=0;currentAmt=0;if(statusDiv)
2688
+ {statusDiv.innerHTML=statusMsg||'';}});Seamless.setupBindAction(_w,controller,'onBindMessage',function(element,attribute,type,data,datatype,direction,controller)
2689
+ {var percent=Object.getNestedProperty(data,prop)||data;if(percent)
2690
+ {if(typeof(percent)=='string')
2691
+ {if(percent=='1')
2692
+ {percent=1.0;}
2693
+ else
2694
+ {percent=parseFloat(percent);}}
2695
+ if(percent<=1.0)
2696
+ {percent=percent*100;}
2697
+ $D('received progress bar update of '+percent);var prevTS=lastTS;lastTS=new Date().getTime();if(statusDiv&&((percent==0&&complete)||(startTS==0&&percent<100)||(percent<100&&prevTS>0&&lastTS-prevTS>30000)))
2698
+ {startTS=lastTS;complete=false;}
2699
+ if(statusDiv&&percent>=startPercent&&percent<100&&startTS>0)
2700
+ {var taken=new Date().getTime()-startTS;var remainingPercent=Math.min(100,Math.max(0,100-percent));var avgTime=taken/percent;var guesstimate=avgTime*remainingPercent;if(guesstimate>0)
2701
+ {if(currentAmt!=0&&currentAmt<guesstimate)
2702
+ {guesstimate=currentAmt-1000;}
2703
+ var time=Math.round(guesstimate/1000);if(time>0)
2704
+ {statusDiv.innerHTML='Estimated '+time+' seconds to complete, '+Math.round(remainingPercent)+'% remaining, '+Math.round(taken/1000)+' seconds taken so far...';}
2705
+ else if(remainingPercent>=100)
2706
+ {statusDiv.innerHTML=element.getAttribute('completeMessage')||'Completed!';}
2707
+ currentAmt=guesstimate;}}
2708
+ var html='';var amt=Math.min(100,Math.round(percent));var offset=0;for(var c=0;c<total;c++)
2709
+ {var span='<span style="border:none;margin:0;padding:0;position:absolute;top:0;bottom:0;background-color:';var on=(c<=amt);span+=(on?onColor:offColor)+';width:'+Math.round(sizeEach)+'px;left:'+Math.round(offset)+'px;';span+='">&nbsp;</span>';html+=span;offset+=sizeEach+marginSize;}
2710
+ if(percent>=100)
2711
+ {startTS=0;currentAmt=0;complete=true;statusDiv.innerHTML=element.getAttribute('completeMessage')||'Completed!';var complete=element.getAttribute('onBindChangeMessage');if(complete)
2712
+ {hakano.util.MessageBroker.queue({'type':complete,'data':{'id':element.id}});}
2713
+ if(resetOnComplete=='true')
2714
+ {setTimeout(function()
2715
+ {element.innerHTML='';if(statusDiv)
2716
+ {statusDiv.innerHTML=statusMsg;}},2000);}}
2717
+ element.innerHTML=html;Element.show(element);}});_w.removeAttribute('onBindMessage');_w.removeAttribute('onBindMessageProperty');_w.removeAttribute('onBindMessageClear');Seamless.addBindMessageHandler(_w,controller);return true;};Seamless.registerWidgetBuilder('progressbar',SeamlessWidget_ProgressBar);var SeamlessWidget_Rebroadcaster=new SeamlessWidget();SeamlessWidget_Rebroadcaster.build=function(element,controller)
2718
+ {var message=element.getAttribute('message');if(message)
2719
+ {var args=element.getAttribute('args');Seamless.setupBindAction(element,controller,'onBindMessage',function(element,attribute,type,data,datatype,direction,controller)
2720
+ {var obj={};if(args)
2721
+ {obj=Seamless.createMessageObject(type,data,datatype,direction,controller);obj=Object.evalWithinScope(String.unescapeXML(args),obj);}
2722
+ hakano.util.MessageBroker.queue({type:message,data:obj});});return true;}
2723
+ return false;};Seamless.registerWidgetBuilder('rebroadcaster',SeamlessWidget_Rebroadcaster);var SeamlessWidget_Script=new SeamlessWidget();SeamlessWidget_Script.getAttribute=function(element,name)
2724
+ {var value=element.getAttribute(name);return(value=='')?null:String.unescapeXML(value);};SeamlessWidget_Script.build=function(element,controller)
2725
+ {element.style.display='none';element.style.position='absolute';element.style.top='-100px';element.style.left='-250px';try
2726
+ {var id=element.id;var msg=SeamlessWidget_Script.getAttribute(element,'message')||SeamlessWidget_Script.getAttribute(element,'onBindMessage');var cond=SeamlessWidget_Script.getAttribute(element,'cond')||SeamlessWidget_Script.getAttribute(element,'onBindMessageCond')||'true';var delay=SeamlessWidget_Script.getAttribute(element,'onBindMessageDelay')||'0';delay=parseInt(delay);var script=hakano.util.Dom.getText(element);var widget=element;$D(this+' - created script widget at: '+id+' for message: '+msg);var code=script.toFunction(true);var cond_func=Seamless.createMessageCondition(cond);if(msg)
2727
+ {msg.split(',').each(function(m)
2728
+ {var listener={toString:function()
2729
+ {if(!this._toString)
2730
+ {this._toString='[Seamless@Script@'+id+']';}
2731
+ return this._toString;},accept:function(type)
2732
+ {return[m];},invoke:function(type,data,datatype,direction)
2733
+ {var obj=Seamless.createMessageObject(type,data,datatype,direction);var outcome=cond_func.call(obj);if(outcome)
2734
+ {code.call(obj);}},onMessage:function(type,data,datatype,direction)
2735
+ {if(delay>0)
2736
+ {var self=this;setTimeout(function()
2737
+ {self.invoke.apply(self,[type,data,datatype,direction]);},delay);}
2738
+ else
2739
+ {this.invoke(type,data,datatype,direction);}}};Seamless.addMessageBrokerListener(controller,listener);Seamless.addTrash(widget,controller,function(destroyall)
2740
+ {hakano.util.MessageBroker.removeListener(listener);});});}
2741
+ else
2742
+ {if(cond_func.call(window))
2743
+ {code.call(window);}}}
2744
+ catch(e)
2745
+ {Logger.error(this+' error: '+e);}
2746
+ return true;};Seamless.registerWidgetBuilder('script',SeamlessWidget_Script);function _HAKANO_initializePage()
2747
+ {$D('[HAKANO] starting Seamless load');document.body.style.visibility='hidden';document.body.style.cursor='wait';var startTS=new Date().getTime();window.siteLoadedObservers.each(function(f)
2748
+ {try
2749
+ {f();}
2750
+ catch(e)
2751
+ {alert('Exception running: '+f+'\n\nException:'+Object.getExceptionDetail(e));}});window.siteLoadedObservers=null;Seamless.wire(document.body,window,true,true);var delay=new Date().getTime()-startTS;Logger.info('[HAKANO] Seamless Web Toolkit loaded in '+delay+' ms, site is ready. Cheers!');document.body.style.cursor='';document.body.style.visibility='visible';}
2752
+ function _HAKANO_uninitializePage()
2753
+ {$D('[HAKANO] site is being unloaded, calling Seamless.destroy');var array=window.siteUnloadedObservers;var doc=document.body;doc.style.display='none';var startTS=new Date().getTime();Seamless.destroyAll();var endTS=new Date().getTime();$D('[HAKANO] Seamless is dead ('+(endTS-startTS)+' ms), calling window.siteUnloadedObservers');array.each(function(f)
2754
+ {f();});array=null;var delay=new Date().getTime()-startTS;$D('[HAKANO] site finished, bye! ('+(new Date().getTime()-endTS)+' ms unloaded, '+delay+' ms total)');}
2755
+ Event.observe(window,'load',_HAKANO_initializePage,false);Event.observe(window,'unload',_HAKANO_uninitializePage,false);