Dashcode Widget Plugin?

Hi all,
I'm trying to create a widget with plugin, however, I am getting runtime errors with the following code:
function _lolwut(event)
var macbot = window.mbot;
var spoken = document.getElementById("textfield").value;
var speak = macbot.talkToMacbot_(spoken);
document.getElementById("text").innerText = speak;
The error is: Result of expression 'macbot' [undefined] is not an object.
I am following Apple's guide at: http://developer.apple.com/documentation/AppleApplications/Conceptual/DashboardProgTopics/ObjCFromJavaScript.html#//appleref/doc/uid/30001215-120299
I've pasted my widget plugin's header and implementation here:
Header: http://pastebin.com/m7a79eb3d
Implementation: http://pastebin.com/m69130019
Any tips would be greatly appreciated.

Have you made any progress with your code? Over the weekend I played around with a widget plug-in, though not completely successfully.
From a quick look at your code I would change:
windowScriptObject setValue:self forKey:@"MyWindowScriptObject"
to...
windowScriptObject setValue:self forKey:@"mbot"
Also, you will need at least the first of the following two methods to call the Macbot methods from JavaScript.
* Return NO to export the selector (aSelector) to the script environment.
* Return YES to prevent the selector from being exported to the script environment.
+ (BOOL) isSelectorExcludedFromWebScript:(SEL)aSelector {
return NO;
* The name of the instance variable that will be exposed to the
* script environment.
* Returns YES to hide the property, NO to export the property.
+ (BOOL) isKeyExcludedFromWebScript:(const char*)key {
return NO;
Hope this helps.

Similar Messages

  • Custom Dashcode widget works fine on mac, but not in iBooks

    I wrote a dashcode widget that works fine on my mac but not in iBooks, what am I doing wrong?
    I am trying to create a widget that performs a specific calculation when the user inputs the 2 variables. However when I go to preview it on my iPad, the button that performs the calculation disapears. It is visible in the thumbnail, but once you launch to full size... bye bye...
    Help is appreciated. Are buttons not allowed?

    tk0us wrote:
    it sets the size of the widget when displayed as a widget full screen or whatever size the png is
    That is not correct. What sets the size of the widget when it runs is the canvas size of the widget, not Default.png.
    At the link below, you can find a widget with a Default.png of 140x200 pixels. When you run the widget, it displays at 900x607 pixels.
    http://www.triodia.com/staff/michi/drumming/RopeCalc.zip
    This demonstrates that Default.png has nothing to do with the size of the widget when it runs. Default.png need not even have the same aspect ratio as the widget canvas.
    Michi.

  • Using Google GWT to create (Dashcode) widgets for iBook Author  I would like to embed interactive widgets in iBooks using iBookAuthor. The widgets in question started life in Java but GWT has allowed them to be converted to javascript and to run on web pa

    I would like to embed interactive widgets in iBooks using iBookAuthor. The widgets in question started life in Java but GWT has allowed them to be converted to javascript and to run on web pages (for example, http://softoption.us/content/node/437 scroll to the bottom). In theory, iBookAuthor can bring in most html5, and much javascript. The technique is to wrap the html in a folder, with 2 extra files, a plist and a default png and then change the extension of the folder to ‘.wdgt’. This is the technique for making Dashboard widgets for the Mac, and Apple even have the Dashcode software to do it. So what you really do is to make a Dashboard widget, then iBookAuthor can import it.  So far, so good. And some  folk have been doing this, for example http://www.prweb.com/releases/2012/2/prweb9242432.htm http://www.panophoto.org/forums/viewtopic.php?f=64&t=10417&p=158330#p158423 However, if you start with GWT and create a single page with one button and a Hello World, compile it, and get the WAR file (I use Eclipse here)… the Safari browser and others will run it properly (even on an iPad). Then if you wrap it, a proper Dashboard widget is created, which runs properly on a Mac. Then if you go to iBookAuthor and put a custom widget in the Text, then drag it in. It is accepted by the text and shown as being there. However, if you use Preview to look at it on an iPad, it is gone (or was never there in the first place). Anyone any ideas on this? [And iBook Author seems to give no warnings.] The widget is at https://dl.dropbox.com/u/46713473/Test6.wdgt.zip I have bells and whistles that I’d like to get into an iBook!
    Thanks for any insights.
    Martin

    I do have a little to add, which might help someone. Indeed, opening a blank page and dragging the widget straight in seems good in difficult cases. But, actually, I was also able to insert successfully from the Toolbar especially to blank pages. So, it may have been something to do with the columns and stuff like that. Anyway back then the insertion would show in iBooks Author but not in the Preview on the iPad. I moved on to actual Google Web Toolkit output javascript. Basically I had three at hand to try: a Hello World with a button which went straight it, one of moderate complexity, (for example with a built in Lisp interpreter), which also went straight in, and finally a more complex one that initially was rejected by iBook Author. Author complained that there was an unsupported media file (of course, Author does not tell you which one it is, that would be too easy). [Remember, this was a proper working Dashboard widget which could be installed on a Mac]. Among other things I had read remarks about .gif files. When looking through the GWT war directory at the actual javascript etc files, I noticed there were two gifs there one called ‘clear.cache.gif ‘  and a second one called  ‘0F89659FF3F324AE4116F700257E32BD.cache.gif’. (Now, there is obfuscation so the numbers here may be different from case to case.) The clear.cache.gif did not seem to be anything special. But the other one is an animation. It is three little boxes that twinkle (rather like a waiting spinning cursor).  So, I opened that file and saved it to itself (that picks the top frame of the animation and saves only that, leaving you with an unanimated gif). The resulting widget drags and drops into iBooks Author (and seems to work properly at a quick glance). So, if you are having trouble with ‘unsupported media files’ converting animated gifs into unanimated gifs might help in some cases.

  • Dashcode widget info button with eBooks Author on iPad

    I've created a simple widget using Dashcode. The widget work fine, both in Dashboard and in an eBook I created with iBooks Author, except for the standard info button.
    When I deploy the widget to my Dashboard, the info button works just fine, flips the widget over, and does all the right things.
    When I deploy the exact same widget into my eBook, the widget also works find, but the info button does not show. When I tap where the info button should be, a small rectangle the size of the button appears, but not the button image. Tapping on the rectangle does nothing.
    Does anyone know a solution for this?
    Thanks,
    Michi.

    You might try asking in one of the more general OS X forums.

  • Dashcode (Widget), Javascript and Cookies

    I am rewriting a widget (http:/macpomme.com) that has about 3000 users at the moment. The widget shows ADSL usage stats for one of Australia's ISP's. The widget currently uses an intermediary XML data feed from a free service that will be deprecated in the next few weeks, and once the free XML service is deprecated must query the ISP directly.
    The Javascript has to:
    1. Login to the ISP using an XMLHttpRequest "POST" method.
    2. Retrieve 2 html pages.
    3. Parse/extract data from 1 of the html pages that relate to usage (no XML I'm afraid).
    4. Display the usage statistics on the widget.
    The domains change between the signon and the html pages.
    The signon domain is "https://signon.bigpond.com/login".
    The html pages that must be retrieved (XMLHttpRequest "GET" methods) are in the domain "https://my.bigpond.com" + the subfolders and command references.
    A cookie is set at login (using a browser) to assure credentials are valid for the session.
    The questions I have that some may be able to help with are:
    1. Do I possibly have "referrer" issues that I must somehow deal with?
    2. Does Javascript handle cookies automatically between the login and 2 other page calls?
    3. Is this a cross-domain issue?
    Please do not assume i know what I am talking about ... this is all very new to me.
    Cheers
    Geoff/MacP

    Closed.
    I wrote a Cocoa/Objective-C plugin to do the logging in and html page retrievals. So no more Ajax in the widget for this part of its functionality.

  • Dashcode widget works in dashcode but does not deploy correctly n dashboard

    My question is exactly as stated in the subject line. I recently was working on my first widget and was creating an RSS feed from AppleInsider (I know one already exists but I want one that I made) in Dashcode in XCode 3. Everything works perfectly fine in Dashcode and nothing is wrong when I runt the debugger but when I deploy my widget in Dashboard all I see is the normal widget minus the info button and rss feed and it is blank where the rss feed would normally be seen. All I can do is move the widget around. I have tried saving the widget and then installing it in my dashboard and every other possible combination and nothing seems to work. Any information at all would be greatly appreciated. Thanks a million!!

    If I remember well, I think that there is a wrongly defined key (or totally undefined) in Info.plist that it required for the Widget to operate correctly. Check for the AllowNetWorkAccess key.
    Also, you should check the log files for possible error messages.
    Mihalis.

  • HELP!  I cannot get any of my dashcode widgets to work in Ibooks Author

    I have developed a few small widgets to work with my book in Ibooks.  They work great in dashcode but when I deploy them to my book all I see is the default image.  It does not load any of the buttons or pictures to the book when clicked on by the user.  I am fairly new to this so any help you can give me is greatly appreciated.

    Seen this?
    iBooks Author: About HTML widget creation

  • Exported Dashcode Widgets in Tiger

    I am not positive if this is the correct place to post this, but I have been getting a few problems with Dashcode.
    First of all, everything I run in Dashcode works perfectly in leopard. However, when I run a widget I am currently developing on a Tiger computer, it breaks down. This is what happens:
    1. All the static text fields disappear. The only fields that remain are the places to enter text.
    2. The widget.system() command in the javascript file does not run - it returns undefined, always!
    This is very frustrating. In Dashcode, one option is to specifically export a widget in as Tiger-compatible. Also, I am sure that widget.system() also works in Tiger, because I have used widgets that employ that function.
    I have been on the verge of publishing this widget for a while, but I am being thrown off by the widget's inability to function properly in Tiger.

    One more thing to add about the widget.system() command:
    I mentioned that it works perfectly in Leopard, however it has one slight flaw. When the command returns a string that is too long, it says "undefined" instead of the intended result. Does anyone know why this happens and how to fix it?
    Thanks in advance!

  • Dashcode Widgets in Dashboard

    Hello,
    I just made by first widget using Dashcode, and now it is not working in the dashboard. I open it up in the dashboard, I hear a ping, and the dashboard closes. This also happens for 3rd party widgets I install from Apple.com. This is really annoying, because I really want to use my new widget!
    Anyone?
    ~Christoph

    Got it!! Just Archive and Install keeping the home folder unchanged.
    C h r i s t o p h

  • Dashcode Widget for 'URL'

    In Dashcode [latest version of xCode] I have created a widget which when 'Run' in Dashcode opens the Webpage. When dragged into iBooks Author as a URL Widget and tested in iBooks Author it will open the Webpage when loaded onto the 'First Generation' iPad in Preview mode and you tap on the Icon/Image a grey screen opens and top left the 'X' to close and nothing else happens.
    This is the code for the event handler in the Widget.
    function myClickHandler(event)
    // Values you provide
    var websiteURL = "http://en.wikipedia.com/wiki/Air_New_Zealand"; // replace with the website URL to show
    // Show website code
    widget.openURL(websiteURL);
    If required I can post all the code however I thought that would not be necessary given that the above is the only changes I have made.
    Help is always appreciated.. Ant

    Thanks for that information but I have not been able to progress my issue. Perhaps you could send me a working example of the dashcode and I test it to see if it works on my iPad - iBooks Author. It would then be a simple process for me to change the URL [http://] at least it will determine where the point of failure is..... my address is [email protected]..
    And these are a copy of the code:
    This file was generated by Dashcode. 
    You may edit this file to customize your widget or web page
    according to the license.txt file included in the project.
    // Function: load()
    // Called by HTML body element's onload event when the widget is ready to start
    function load()
        dashcode.setupParts();
    // Function: remove()
    // Called when the widget has been removed from the Dashboard
    function remove()
        // Stop any timers to prevent CPU usage
        // Remove any preferences as needed
        // widget.setPreferenceForKey(null, dashcode.createInstancePreferenceKey("your-key"));
    // Function: hide()
    // Called when the widget has been hidden
    function hide()
        // Stop any timers to prevent CPU usage
    // Function: show()
    // Called when the widget has been shown
    function show()
        // Restart any timers that were stopped on hide
    // Function: sync()
    // Called when the widget has been synchronized with .Mac
    function sync()
        // Retrieve any preference values that you need to be synchronized here
        // Use this for an instance key's value:
        // instancePreferenceValue = widget.preferenceForKey(null, dashcode.createInstancePreferenceKey("your-key"));
        // Or this for global key's value:
        // globalPreferenceValue = widget.preferenceForKey(null, "your-key");
    // Function: showBack(event)
    // Called when the info button is clicked to show the back of the widget
    // event: onClick event from the info button
    function showBack(event)
    //    var front = document.getElementById("front");
    //    var back = document.getElementById("back");
    //    if (window.widget) {
    //        widget.prepareForTransition("ToBack");
    //    front.style.display = "none";
    //    back.style.display = "block";
    //    if (window.widget) {
    //        setTimeout('widget.performTransition();', 0);
    // Function: showFront(event)
    // Called when the done button is clicked from the back of the widget
    // event: onClick event from the done button
    function showFront(event)
        var front = document.getElementById("front");
        var back = document.getElementById("back");
        if (window.widget) {
            widget.prepareForTransition("ToFront");
        front.style.display="block";
        back.style.display="none";
        if (window.widget) {
            setTimeout('widget.performTransition();', 0);
    if (window.widget) {
        widget.onremove = remove;
        widget.onhide = hide;
        widget.onshow = show;
        widget.onsync = sync;
    function myClickHandler(event)
      // Values you provide
    var websiteURL = "http://en.wikipedia.com/wiki/Air_New_Zealand";          // replace with the website URL to show
    // Show website code
    widget.openURL(websiteURL);
    And
    This file was generated by Dashcode and is covered by the
    license.txt included in the project.  You may edit this file,
    however it is recommended to first turn off the Dashcode
    code generator otherwise the changes will be lost.
    var dashcodePartSupport = { "imageBgParts": {} };
    if(!window.dashcode){dashcode=new Object()}dashcode.setupParts=function(){if(dashcode.setupParts.called){return }dashcode.setupParts.called=true;var H=[];if(window.dashcodeDataSources&&!dashcode.inDesign){for(var C in dashcodeDataSources){var E=dashcodeDataSources[C];var A=dashcode.setupDataSource(C,E);if(A){A.registerWithName(C)}}}for(var C in dashcodePartSpecs){dashcode.preProcessBindings(dashcodePartSpecs[C])}if(!DC.Sup port.BorderImage){var G=dashcodePartSupport.imageBgParts;for(var B in G){var D=G[B];Element.set3PiecesBorderImage(document.getElementById(B),D[0],D[1],D[2]) }}for(var C in dashcodePartSpecs){var E=dashcodePartSpecs[C];var F=dashcode.setupPart(C,E.creationFunction,E.view,E);if(F&&F.finishLoading){H[H. length]=F}}for(var I=0;I<H.length;I++){H[I].finishLoading()}};dashcode.setupPart=function(elementO rId,creationFunction,viewClass,specDict,relativeController){var object=null;var createFunc=window[creationFunction];var node=elementOrId;if(elementOrId.nodeType!=1){node=document.getElementById(eleme ntOrId)}if(!node){return null}if(createFunc){object=createFunc(node,specDict)}else{var viewClass=null;object=DC.View.fromNode(node);if(object){return object}if(specDict.view){viewClass=eval(specDict.view)}if(dashcode.inDesign){da shcode.preProcessBindings(specDict)}if(!viewClass){viewClass=DC.View.viewClassFo rNode(node,specDict.hasBindings)||DC.View}object=new (viewClass)(node,relativeController,specDict.propertyValues,specDict);node.obje ct=object}return object};dashcode.setupDataSource=function(identifier,specDict){var dsClass=null;var dataSource=null;try{dsClass=specDict.Class?eval(specDict.Class):null}catch(e){} if(!dsClass){console.error("Couldn't create data source "+identifier+". Invalid class specified.");return null}var propertyValues=specDict.propertyValues;dataSource=new dsClass(propertyValues);return dataSource};dashcode.getDataSource=function(A){return DC.dataModel.valueForKey(A)};dashcode.preProcessBindings=function(A){if(A&&A.pr opertyValues&&!A.hasBindings){for(p in A.propertyValues){if(-1!==p.search(/Binding$/)){A.hasBindings=true;if(dashcode. inDesign){delete A.propertyValues[p]}else{break}}}}};if(window.addEventListener){window.addEvent Listener("load",dashcode.setupParts,false)}else{if(window.attachEvent){window.at tachEvent("load",dashcode.setupParts)}}dashcode.getLocalizedString=function(A){t ry{A=localizedStrings[A]||A}catch(B){}return A};dashcode.createInstancePreferenceKey=function(A){return widget.identifier+"-"+A};dashcode.getElementHeight=function(B){var A=B.offsetHeight;if(!A||A==0){A=dashcode.getElementSize(B).height}return A};dashcode.getElementWidth=function(B){var A=B.offsetWidth;if(!A||A==0){A=dashcode.getElementSize(B).width}return A};dashcode.getElementSize=function(B){var A=dashcode.getElementSizesWithAncestor([B],B);return A[0]};dashcode.getElementSizesWithAncestor=function(A,F){if(A.length<1){return[ ]}var B=new Array();var C=A[0].offsetWidth;if(!C||C==0){var G=F;while(G&&(G!=document)){var I=Element.getStyles(G,"display");var H=(I)?I:G.style.display;if((I&&H=="none")||(!I&&H!="block")){B.push({node:G,dis play:G.style.display});G.style.display="block"}G=G.parentNode}}var J=new Array();for(var E=0;E<A.length;E++){J.push({width:A[E].offsetWidth,height:A[E].offsetHeight})}f or(var E=0;E<B.length;E++){var D=B[E].node;D.style.display=B[E].display;if(D.getAttribute("style")==""){D.remo veAttribute("style")}}return J};dashcode.getElementDocumentOffset=function(B){var C=B.offsetParent;var D={x:B.offsetLeft,y:B.offsetTop};if(C){var A=dashcode.getElementDocumentOffset(C);D.x+=A.x;D.y+=A.y}return D};dashcode.pointInElement=function(A,E,D){var C=dashcode.getElementSize(D);var B=dashcode.getElementDocumentOffset(D);if(A>=B.x){if(A>B.x+C.width){return false}if(E>=B.y){if(E>B.y+C.height){return false}}else{return false}}else{return false}return true};dashcode.cloneTemplateElement=function(B,A,C){return DC.View.cloneViewsForTreeNode(B,C,null)};dashcode.processClonedTemplateElement= function(D,C,B,F,E,A){console.error("dashcode.processClonedTemplateElement is no longer available.")};var setupParts=dashcode.setupParts;var getLocalizedString=dashcode.getLocalizedString;var createInstancePreferenceKey=dashcode.createInstancePreferenceKey;var getElementHeight=dashcode.getElementHeight;var getElementWidth=dashcode.getElementWidth;var getElementSize=dashcode.getElementSize;if(!("querySelector" in document)){document.write('<script apple-no-regeneration="yes" type="text/javascript" src="../Parts/core/external/sizzle_c.js"><\/script>')};if("undefined"!==typeof (DC)){throw new Error("Library module (DC) already defined")}var DC={version:"@VERSION@",revision:"@REVISION@",generateUid:(function(){var A=0;return function(){return ++A}})()};DC.Browser={IE:!!(window.attachEvent&&!window.opera)&&(function(){var B=/MSIE (\d+)/;var A=B.exec(navigator.userAgent);return A&&parseInt(A[1],10)})(),Safari:navigator.userAgent.indexOf("AppleWebKit/")>-1, Safari2:(function(){var A=/AppleWebKit\/(\d+(?:\.\d+)?)/;var B=A.exec(navigator.userAgent);return(B&&parseInt(B[1],10)<420)})(),Mozilla:navi gator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("KHTML")==-1,Mo bileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)};DC.Support={Pro perties:("__defineGetter__" in Object.prototype),QuerySelector:("querySelector" in document),Touches:!!document.createTouch,CSS3ColorModel:false,CSSTransitions:fa lse,BorderImage:(function(){var A=document.createElement("div").style;A.cssText="-webkit-border-image: inherit; -moz-border-image: inherit;";return(A.WebkitBorderImage=="inherit")||(A.MozBorderImage=="inherit") })()};if(DC.Support.Properties){DC.Support.__defineGetter__("CSS3ColorModel",fun ction(){delete this.CSS3ColorModel;var B=document.createElement("span");try{B.style.backgroundColor="rgba(100,100,100, 0.5)";return this.CSS3ColorModel=(B.style.length===1)}catch(A){}return(this.CSS3ColorModel=f alse)});DC.Support.__defineGetter__("CSSTransitions",function(){delete this.CSSTransitions;var B=document.createElement("span");try{B.style.setProperty("-webkit-transition-du ration","1ms","");return this.CSSTransitions=(B.style.length===1)}catch(A){}return(this.CSSTransitions=f alse)})}DC.typeOf=function(B){if(null===B){return"null"}var A=typeof (B);if("object"!==A&&"function"!==A){return A}return Object.prototype.toString.call(B).slice(8,-1).toLowerCase()};DC.compareValues=f unction(F,D){var C=DC.typeOf(F);if(C!==DC.typeOf(D)){var A=String(F);var E=String(D);return A.localeCompare(E)}switch(C){case"null":return 0;case"boolean":case"number":var B=(F-D);if(0===B){return B}return(B<0?-1:1);case"regexp":case"function":break;case"string":case"array":c ase"object":if(F.localeCompare){return F.localeCompare(D)}if(F.compare){return F.compare(D)}break;case"undefined":return true;default:throw new TypeError("Unknown type for comparison: "+C)}return String(F).localeCompare(String(D))};DC.defineError=function(B){function A(C){this.message=C;this.name=B}A.prototype=new Error;A.prototype.constructor=A;A.prototype.name=B;return A};var InvalidArgumentError=DC.defineError("InvalidArgumentError");if("undefined"==typ eof (window.console)){window.console={}}if("undefined"==typeof (window.console.log)){window.console.log=function(){}}if("undefined"==typeof (window.console.error)){window.console.error=function(){}};if("undefined"!==typ eof (window.Prototype)){(function(){var A=["indexOf","lastIndexOf","forEach","filter","map","some","every","reduce","re duceRight"];for(var B=0;B<A.length;++B){delete Array.prototype[A[B]]}})()}Array.prototype.distinct=function(){var B=this.length;var A=new Array(B);var C;var E;var D=0;for(C=0;C<B;++C){E=this[C];if(-1==A.indexOf(E)){A[D++]=E}}A.length=D;return A};Array.prototype.compare=function(B){var D=this.length-B.length;if(0!==D){return D}var E;var A;var C;for(E=0,A=this.length;E<A;++E){C=DC.compareValues(this[E],B[E]);if(0!==C){ret urn C}}return 0};Array.from=function(A,B){return Array.prototype.slice.call(A,B||0)};if(!Array.prototype.reduce){Array.prototype .reduce=function(B){var A=this.length;if(typeof B!="function"){throw new TypeError()}if(0===A&&1===arguments.length){throw new TypeError()}var C=0;if(arguments.length>=2){var D=arguments[1]}else{do{if(C in this){D=this[C++];break}if(++C>=A){throw new TypeError()}}while(true)}for(;C<A;C++){if(C in this){D=B.call(null,D,this[C],C,this)}}return D}}if(!Array.prototype.reduceRight){Array.prototype.reduceRight=function(B){var A=this.length;if(typeof B!="function"){throw new TypeError()}if(0===A&&1===arguments.length){throw new TypeError()}var C=A-1;if(arguments.length>=2){var D=arguments[1]}else{do{if(C in this){D=this[C--];break}if(--C<0){throw new TypeError()}}while(true)}for(;C>=0;C--){if(C in this){D=B.call(null,D,this[C],C,this)}}return D}}if(!Array.indexOf){Array.indexOf=function(C,B,A){return Array.prototype.indexOf.call(C,B,A)}}if(!Array.lastIndexOf){Array.lastIndexOf=f unction(C,B,A){return Array.prototype.lastIndexOf.call(C,B,A)}}if(!Array.forEach){Array.forEach=funct ion(C,A,B){return Array.prototype.forEach.call(C,A,B)}}if(!Array.filter){Array.filter=function(C, A,B){return Array.prototype.filter.call(C,A,B)}}if(!Array.map){Array.map=function(C,A,B){re turn Array.prototype.map.call(C,A,B)}}if(!Array.some){Array.some=function(C,A,B){ret urn Array.prototype.some.call(C,A,B)}}if(!Array.every){Array.every=function(C,A,B){ return Array.prototype.every.call(C,A,B)}}if(!Array.reduce){Array.reduce=function(B,A) {if(arguments.length>2){return Array.prototype.reduce.apply(B,A,arguments[2])}else{return Array.prototype.reduce.apply(B,A)}}}if(!Array.reduceRight){Array.reduceRight=fu nction(B,A){if(arguments.length>2){return Array.prototype.reduceRight.apply(B,A,arguments[2])}else{return Array.prototype.reduceRight.apply(B,A)}}};function Set(){var D=this;if(D.constructor!==Set){D=new Set()}var B=arguments;if(1==B.length&&B[0] instanceof Array){B=B[0]}var C;var A=B.length;for(C=0;C<A;++C){D[B[C]]=true}return D}Set.union=function(C,B){var A=Object.clone(C);if(!B){return A}var D;for(D in B){A[D]=true}return A};Set.intersect=function(C,B){var A=new Set();var D;for(D in C){if(D in B){A[D]=true}}return A};Set.add=function(B,A){B[A]=true;return B};Set.remove=function(B,A){delete B[A];return B};Set.toArray=function(C){var B;var A=[];for(B in C){A.push(B)}return A};Set.forEach=function(E,C,B){var D;var A=0;for(D in E){C.call(B,D,A++)}};Set.join=function(D,B){var C;var A=[];for(C in D){A.push(C)}return A.join(B||"")};var $S=Set;var Class=(function(){function D(I,L){var J;if(!I&&!L){return I}if(!I){J=function(){return L.apply(this,arguments)}}else{var K=/this\.base/.test(I);if(!K&&!L){return I}if(!K){J=function(){L.call(this);return I.apply(this,arguments)}}else{J=function(){var N=this.base;this.base=L||function(){};var M=I.apply(this,arguments);this.base=N;return M}}}J.valueOf=function(){return I};J.toString=function(){return String(I)};return J}function G(I,J){var K=I.prototype.__factory__.apply(I,J);if("function"!==typeof (K)){throw new Error("Factory function doesn't return a function")}K.__factoryFn__=true;return K}function F(K){if(K.__createFactoryObjects){K.__createFactoryObjects();return }var J;var I;for(J in K.__factories__){I=K[J];if(!I.__factoryFn__){continue}K[J]=I.call(K)}}function C(I,K){if(I&&!(I instanceof Function)){throw new Error("Invalid constructor")}if(K&&!(K instanceof Function)){throw new Error("Invalid superclass")}K=K?K.valueOf():null;I=D(I,K);var J;if(I){J=function(){if(!(this instanceof J)){return G(J,arguments)}this.__uid=this.__uid||DC.generateUid();var L=I.apply(this,arguments);if(L){return L}F(this);if(this.__postConstruct instanceof Function){this.__postConstruct()}return this}}else{J=function(){if(!(this instanceof J)){return G(J,arguments)}this.__uid=this.__uid||DC.generateUid();F(this);if(this.__postCo nstruct instanceof Function){this.__postConstruct()}return this}}J.valueOf=function(){return I};J.toString=function(){return String(I||J)};return J}function B(J){function I(){}I.prototype=J.prototype;return new I()}function E(L,J,K){if(!L||!/this\.base/.test(L)){return L}function I(){var N=this.base;this.base=K[J]||function(){};var M=L.apply(this,arguments);this.base=N;return M}I.valueOf=function(){return L};I.toString=function(){return String(L)};return I}function H(J,I,K,L){if(K instanceof Function&&L){var M=K.valueOf();K=E(K,I,L);K.name=I;if(M.__factoryFn__){J.__factories__[I]=K}}J[I ]=K;return K}function A(J){var I;for(I=J.superclass;I;I=I.superclass){if("__subclassCreated__" in I){I.__subclassCreated__(J)}}}return{create:function(L,J){var I;var K={};switch(arguments.length){case 0:throw new TypeError("Missing superclass and declaration arguments");case 1:J=L;L=undefined;break;default:K=B(L);break}if("function"==typeof (J)){J=J();if(!J){throw new Error("Class declaration function did not return a prototype")}}if(J.hasOwnProperty("constructor")){I=J.constructor;delete J.constructor}I=C(I,L);I.prototype=K;I.prototype.constructor=I;I.superclass=L;i f(L){K.__factories__=Object.clone(L.prototype.__factories__)}else{K.__factories_ _={}}I.__class_id__=DC.generateUid();K.__class_id__=DC.generateUid();this.extend (I,J);A(I);return I},findPropertyName:function(L,I){var J;for(var K in L){J=L[K];if(J===I||("function"===typeof (J)&&J.valueOf()===I)){return K}}return null},extend:(function(){if(DC.Support.Properties){return function(I,J){var N=I.prototype;var P=I.superclass&&I.superclass.prototype;var K;for(var O in J){var M=J.__lookupGetter__(O);var L=J.__lookupSetter__(O);if(M||L){M&&N.__defineGetter__(O,M);L&&N.__defineSetter __(O,L)}else{H(N,O,J[O],P)}}return I}}else{return function(I,J){var K=I.prototype;var M=I.superclass&&I.superclass.prototype;for(var L in J){H(K,L,J[L],M)}}}})()}})();if(!Function.prototype.bind){Function.prototype.bi nd=function(C){var A=this;if(!arguments.length){return A}if(1==arguments.length){return function(){return A.apply(C,arguments)}}var B=Array.from(arguments,1);return function(){return A.apply(C,B.concat(Array.from(arguments)))}}}if(!Function.prototype.bindAsEvent Listener){Function.prototype.bindAsEventListener=function(C){var A=this;if(1==arguments.length){return function(D){return A.call(C,D||window.event)}}var B=Array.from(arguments);B.shift();return function(D){return A.apply(C,[D||window.event].concat(B))}}}if(!Function.prototype.delay){Function .prototype.delay=function(D){var B=this;D=D||10;if(arguments.length<2){function A(){B()}return window.setTimeout(A,D)}var C=Array.from(arguments,1);function E(){B.apply(B,C)}return window.setTimeout(E,D)}}if(!Function.prototype.bindAndDelay){Function.prototype .bindAndDelay=function(F,D){var B=this;F=F||B;D=D||10;if(arguments.length<3){function A(){B.call(F)}return window.setTimeout(A,D)}var C=Array.from(arguments,2);function E(){B.apply(F,C)}return window.setTimeout(E,D)}}Function.prototype.sync=function(){var B=arguments.length?this.bind.apply(this,arguments):this;var A={};var C=false;B.stop=function(){C=true};B.waitFor=function(D){A[D]=true;return function(){A[D]=false;for(var E in A){if(A[E]){return }}if(C){return }B()}};return B};Object.clone=function(B){var A=(function(){});A.prototype=B;return new A()};Object.applyDefaults=function(C,B){C=C||{};if(!B){return C}for(var A in B){if(A in C){continue}C[A]=B[A]}return C};Object.extend=function(C,A){C=C||{};for(var B in A){C[B]=A[B]}return C};Object.merge=function(C,A){var B={};var D;for(D in C){B[D]=C[D]}for(D in A){if(D in B){continue}B[D]=A[D]}return B};(function(){var B=Set("file","submit","image","reset","button");var D={};function E(I,H,J){var G=I[H];var F=DC.typeOf(G);if("string"===F){I[H]=[G,J]}else{if("array"===F){G.push(J)}else{ I[H]=J}}}function C(H){var F=H.name;var G=(H.type||"").toLowerCase();if(H.disabled||G in B){return }if("radio"===G||"checkbox"===G){if(H.checked){E(this,F,H.value)}}else{if(H.mul tiple){function I(J){if(J.selected){E(this,F,J.value)}}this[F]=[];Array.forEach(H.options,I,thi s)}else{E(this,F,H.value);if("image"===G){E(this,F+".x",0);E(this,F+".y",0)}}}}O bject.fromForm=function(G){var F={};Array.forEach(G.elements,C,F);return F};function A(H){H=H.split("=");if(1===H.length){return }var F=decodeURIComponent(H[0].trim());var G=decodeURIComponent(H[1].trim())||null;E(this,F,G)}Object.fromQueryString=func tion(G){if("?"==G.charAt(0)){G=G.slice(1)}G=G.split(/\s*&\s*/);var F={};G.forEach(A,F);return F};Object.toQueryString=function(K){if(!K){return""}var H;var J;var F;var G=[];function I(M){if(null!==M&&"undefined"!==typeof (M)){M=encodeURIComponent(M)}var L=M+"";if(L.length){G.push(H+"="+L)}else{G.push(H)}}for(H in K){J=K[H];F=DC.typeOf(J);if("function"===F||J===D[H]){continue}H=encodeURICompo nent(H);if("array"===F){J.forEach(I)}else{I(J)}}return G.join("&")}})();RegExp.escape=function(A){return A.replace(RegExp._escapeRegex,"\\$1")};RegExp.specialCharacters=["/",".","*","+ ","?","|","(",")","[","]","{","}","\\"];RegExp._escapeRegex=new RegExp("(\\"+RegExp.specialCharacters.join("|\\")+")","g");DC.strings={"marker. input.multipleValues":"Multiple Values","marker.input.placeholder":"","marker.input.noSelection":"No Selection","marker.text.multipleValues":"Multiple Values","marker.text.placeholder":"","marker.text.noSelection":"No Selection","error.no_description":"An unspecified error occurred.","error.invalid_value":"This value is not valid.","error.invalid_number":"This value is not a valid number."};DC.localisedString=function(A){return{toString:function(){if(A in DC.strings){return DC.strings[A]}console.log("Localisation missing string for key: "+A);return A}}};var _=DC.localisedString;DC.Error=Class.create({constructor:function(A){Object.exte nd(this,A)},description:_("error.no_description"),recoverySuggestion:null});DC.K eyInfo=Class.create({constructor:function(D,B){var A=DC.KVO.getPropertyMethodsForKeyOnObject(B,D);this.__uid=[B,DC.generateUid()]. join("_");this.reader=A.getter;this.mutator=A.mutator;this.validator=A.validator ;this.key=B;this.mutable=((this.mutator||!this.reader)?true:false);if(!this.read er&&!this.mutator){this.mutable=true}this.changeCount=0;var C=A.value;if(!C){return }var E=DC.typeOf(C);if(E in DC.KVO.typesOfKeyValuesToIgnore||!C._addParentLink){return }C._addParentLink(D,this)},get:function(B){if(this.reader){return this.reader.call(B)}var A;if(this.key in B){A=B[this.key]}else{A=null}if(A&&A._addParentLink){A._addParentLink(B,this)}r eturn A},set:function(B,A){if(this.mutator){this.mutator.call(B,A)}else{B.willChangeV alueForKey(this.key,this);B[this.key]=A;B.didChangeValueForKey(this.key,this)}}, validate:function(B,A){if(!this.validator){return A}return this.validator.call(B,A)},unlinkParentLink:function(){if(!this.parentLink){retu rn }this.parentLink.observer=null;this.parentLink.callback=null;this.parentLink=nu ll}});DC.ChangeType={setting:0,insertion:1,deletion:2,replacement:3};DC.ChangeNo tification=Class.create({constructor:function(D,A,E,C,B){this.object=D;this.chan geType=A;this.newValue=E;this.oldValue=C;this.indexes=B;this.objectKeyPath=[]},t oString:function(){var A="[ChangeNotification changeType: ";switch(this.changeType){case DC.ChangeType.setting:A+="setting";break;case DC.ChangeType.insertion:A+="insertion";break;case DC.ChangeType.deletion:A+="deletion";break;case DC.ChangeType.replacement:A+="replacement";break;default:A+="<<unknown>>";break }A+=" newValue="+this.newValue+" oldValue="+this.oldValue+(this.indexes?" indexes="+this.indexes.join(", "):"")+"]";return A}});DC.ObserverEntry=Class.create({constructor:function(A,C,B){this.observer=A ;this.callback=C;this.context=B},observeChangeForKeyPath:function(A,B){if(!this. callback||!this.observer||-1!==A.objectKeyPath.indexOf(this.observer)){return }this.callback.call(this.observer,A,B,this.context)}});DC.KVO=Class.create({con structor:function(){},__factory__:function(){var B=Array.from(arguments);var A=this;function C(){}return function(){C.prototype=A.prototype;var D=new C();A.prototype.constructor.apply(D,B);return D}},setValueForKeyPath:function(C,D){if(!D||0===D.length){throw new InvalidArgumentError("keyPath may not be empty")}if("string"==typeof (D)){D=D.split(".")}var B=D[0];if(1==D.length){this.setValueForKey(C,B);return }if("@"==B.charAt(0)){return }var A=this.valueForKey(B);if(!A){return }A.setValueForKeyPath(C,D.slice(1))},setValueForKey:function(B,A){if(!A||0===A. length){throw new InvalidArgumentError("key may not be empty")}var C=this.infoForKey(A);if(!C||!C.mutable){return }C.set(this,B)},valueForKeyPath:function(E){if(!E||0===E.length){throw new InvalidArgumentError("keyPath may not be empty")}if("string"==typeof (E)){E=E.split(".")}var D=E[0];if(1==E.length){return this.valueForKey(D)}if("@"==D.charAt(0)){var B=D.substr(1);var A=this.valueForKeyPath(E.slice(1));return DC.ArrayOperator[B](A)}var C=this.valueForKey(D);if("undefined"===typeof (C)||null===C){return undefined}return C.valueForKeyPath(E.slice(1))},valueForKey:function(A){if(!A||0===A.length){thr ow new InvalidArgumentError("the key is empty")}var B=this.infoForKey(A);if(!B){return null}return B.get(this)},validateValueForKeyPath:function(C,D){if(!D||0===D.length){throw new InvalidArgumentError("keyPath may not be empty")}if("string"==typeof (D)){D=D.split(".")}var B=D[0];if(1==D.length){return this.validateValueForKey(C,B)}var A=this.valueForKey(B);if("undefined"===typeof (A)||null===A){return C}return A.validateValueForKeyPath(C,D.slice(1))},validateValueForKey:function(B,A){if(! A||!A.length){throw new InvalidArgumentError("missing key")}var C=this.infoForKey(A);return C.validate(this,B)},observeChildObjectChangeForKeyPath:function(D,C,A){if(DC.KV O.kAllPropertiesKey!=C){C=A+"."+C}else{C=A}var B=Object.clone(D);B.object=this;this.notifyObserversOfChangeForKeyPath(B,C)},in foForKeyPath:function(D){if(!D||0===D.length){throw new InvalidArgumentError("keyPath is empty")}if("string"==typeof (D)){D=D.split(".")}var B=D[0];if(1==D.length){return this.infoForKey(B)}else{if("@"==B.charAt(0)){var C=new DC.KeyInfo(null,null);C.mutable=false;return C}else{var A=this.valueForKey(B);if(!A){return undefined}if(!A.infoForKeyPath){return undefined}return A.infoForKeyPath(D.slice(1))}}},infoForKey:function(A){var B;if(!this.__keys){this.__keys={}}if(DC.KVO.kAllPropertiesKey==A){return null}B=this.__keys[A];if(B){return B}B=new DC.KeyInfo(this,A);this.__keys[A]=B;return B},setKeysTriggerChangeNotificationsForDependentKey:function(D,C){if(!D||!D.len gth){throw new InvalidArgumentError("keys array is not valid")}if(!C){throw new InvalidArgumentError("dependentKey can not be null")}if(-1!==C.indexOf(".")){throw new InvalidArgumentError("dependentKey may not be a key path")}var B;var F;var A;var E;if("string"===typeof (D)){D=[D]}if(!this.__dependentKeys){this.__dependentKeys={}}for(A=0;A<D.length ;++A){B=D[A];if(!B){throw new InvalidArgumentError("key at index "+A+" was null")}if(!(B in this.__dependentKeys)){this.__dependentKeys[B]=[]}DC.KVO.getPropertyMethodsForK eyOnObject(B,this);E=this.__dependentKeys[B];if(-1==E.indexOf(C)){E.push(C)}}},m utableKeys:function(){var D=[];var B;var A;var C;if("__mutableKeys" in this&&this.__mutableKeys.concat){return this.__mutableKeys}var E=Set.union(DC.KVO.keysToIgnore,this.__keysToIgnore);for(B in this){if(B in E||"__"===B.substr(0,2)){continue}A=this[B];if("function"!==typeof (A)){D.push(B);continue}if(1!==A.length||"set"!==B.substr(0,3)){continue}C=B.ch arAt(3);if(C!==C.toUpperCase()){continue}B=C.toLowerCase()+B.substr(4);if(-1===D .indexOf(B)){D.push(B)}}return D},initialiseKeyValueObserving:function(){this.__uid=this.__uid||DC.generateUid ();this.__observers={}},_addParentLink:function(D,E,C){if(!this.hasOwnProperty(" __observers")){this.initialiseKeyValueObserving()}var B=this.__observers[DC.KVO.kAllPropertiesKey];if(!B){B=this.__observers[DC.KVO.k AllPropertiesKey]={}}C=C||E.__uid;if(C in B){return }var A=new DC.ObserverEntry(D,D.observeChildObjectChangeForKeyPath,E?E.key:"");B[C]=A;if(! E){return }E.unlinkParentLink();E.parentLink=A},_removeParentLink:function(C,D,B){if(!thi s.__observers){return }var A=this.__observers[DC.KVO.kAllPropertiesKey];if(!A){A=this.__observers[DC.KVO.k AllPropertiesKey]={}}B=B||D.__uid;if(D&&D.parentLink===A[B]){D.unlinkParentLink( )}delete A[B]},addObserverForKeyPath:function(A,E,D,B){if(!D||0===D.length){throw new InvalidArgumentError("keyPath is empty")}if(!A){throw new InvalidArgumentError("Observer may not be null")}if(!E){E=A.observeChangeForKeyPath}if("string"===typeof (E)){E=A[E]}if(!E){throw new InvalidArgumentError("Missing callback method")}if(!this.hasOwnProperty("__observers")){this.initialiseKeyValueObservi ng()}if(!this.__observers[D]){this.infoForKeyPath(D);this.__observers[D]=[]}var C=new DC.ObserverEntry(A,E,B);this.__observers[D].push(C)},removeObserverForKeyPath:f unction(C,F){if(!F||0===F.length){throw new InvalidArgumentError("keyPath may not be empty")}if(!C){throw new InvalidArgumentError("Observer may not be null")}if(!this.__observers||!this.__observers[F]){return }var E=this.__observers[F];var B=-1;var D;var A=E.length;for(B=0;B<A;++B){D=E[B];if(D.observer==C){E.splice(B,1);return }}},willChangeValueForKey:function(A,C){if(!A){throw new InvalidArgumentError("key may not be null")}C=(C instanceof DC.KeyInfo)?C:this.infoForKey(A);if(!C){return }if(1!==++C.changeCount){return }var B=(this.__dependentKeys&&this.__dependentKeys[A]);if(B){B.forEach(this.willChan geValueForKey,this)}C.previousValue=C.get(this)},forceChangeNotificationForKey:f unction(A,B){if(!A){throw new InvalidArgumentError("key may not be null")}B=(B instanceof DC.KeyInfo)?B:this.infoForKey(A);if(!B){return }if(0!==B.changeCount){return }B.changeCount=1;this.didChangeValueForKey(A,B)},didChangeValueForKey:function( B,F){if(!B){throw new InvalidArgumentError("key may not be null")}F=(F instanceof DC.KeyInfo)?F:this.infoForKey(B);if(!F){return }if(0!==--F.changeCount){return }var C=F.get(this);var A=F.previousValue;F.previousValue=null;if(C!==A){var E=new DC.ChangeNotification(this,DC.ChangeType.setting,C,A);this.notifyObserversOfCha ngeForKeyPath(E,B);if(A&&A._removeParentLink){A._removeParentLink(this,F)}if(C&& C._addParentLink){C._addParentLink(this,F)}}var D=(this.__dependentKeys&&this.__dependentKeys[B]);if(D){D.forEach(this.didChang eValueForKey,this)}},notifyObserversOfChangeForKeyPath:function(J,L){if(!L){thro w new InvalidArgumentError("keyPath may not be null")}if(!this.__observers){return }var G;var F;var H;F=this.__observers[DC.KVO.kAllPropertiesKey];if(F){var E=Object.clone(J);var A=J.objectKeyPath.length;J.objectKeyPath.push(this);for(G in F){var B=F[G];B.observeChangeForKeyPath(E,L)}J.objectKeyPath.length=A}if(DC.KVO.kAllPr opertiesKey==L){return }F=this.__observers[L];if(F&&F.length){H=F.length;for(G=0;G<H;++G){F[G].observe ChangeForKeyPath(J,L)}}var D=L+".";var I=D.length;var K;var M;var P;var O;var C;var N=!(null===J.oldValue||"undefined"===typeof (J.oldValue));for(M in this.__observers){if(M.substr(0,I)!=D){continue}F=this.__observers[M];if(!F||!F .length){continue}K=M.substr(I);O=J.oldValue;if(O&&O.valueForKeyPath){O=O.valueF orKeyPath(K)}else{O=null}C=J.newValue;if(C&&C.valueForKeyPath){C=C.valueForKeyPa th(K)}else{C=null}if(N&&O===C){continue}P=new DC.ChangeNotification(J.object,J.changeType,C,O,J.indexes);H=F.length;for(G=0;G <H;++G){F[G].observeChangeForKeyPath(P,M)}}}});DC.KVO.kAllPropertiesKey="*";DC.K VO.keysToIgnore=$S("__keys","__observers","__keysToIgnore","__dependentKeys","__ mutableKeys","__factories__");DC.KVO.typesOfKeyValuesToIgnore=$S("string","numbe r","boolean","date","regexp","function");DC.KVO.getPropertyMethodsForKeyOnObject =(function(){function B(H,F){F=F||"__kvo_prop_"+H;var G={getter:function(){var I=null;if(F in this){I=this[F]}var J=this.__keys?this.__keys[H]:null;if(!J){return I}if(I&&I._addParentLink){I._addParentLink(this,J)}else{J.unlinkParentLink()}re turn I},mutator:function(I){this.willChangeValueForKey(H);if("undefined"===typeof (I)){I=null}this[F]=I;this.didChangeValueForKey(H);return I}};G.mutator.__key=H;G.getter.__key=H;return G}function C(H,G){function F(J){this.willChangeValueForKey(G);var I=H.call(this,J);this.didChangeValueForKey(G);return I}F.__key=G;F.valueOf=function(){return H};F.toString=function(){return String(H)};return F}function D(F,H){function G(){var I=F.call(this);var J=this.__keys?this.__keys[H]:null;if(!J){return I}if(I&&I._addParentLink){I._addParentLink(this,J)}else{J.unlinkParentLink()}re turn I}G.__key=H;G.valueOf=function(){return F};G.toString=function(){return String(F)};return G}function E(T,K){var M=K.constructor.prototype;var J=(M==K);var L=(M!=Object.prototype&&M!=DC.KVO.prototype)?M:K;var U=T.titleCase();var P="get"+U;var Q="set"+U;var I="validate"+U;var O;var H;var S;var F=K[I];var N=("undefined"!==typeof (O=K.__lookupGetter__(T))&&"undefined"!==typeof (H=K.__lookupSetter__(T)));if(!N){P=(P in K)?P:T;O=K[P];H=K[Q]}if("function"!==typeof (O)){var R="__kvo_prop_"+T;var G=B(T,R);if(T in K){S=K[R]=("undefined"==typeof (O)?null:O);delete K[T]}O=G.getter;H=G.mutator;N=true}else{if(O&&!J){S=O.valueOf().call(K)}if(O&&T !==O.__key){O=D(O,T)}if(H&&T!==H.__key){H=C(H,T)}}if(N){L.__defineGetter__(T,O); L.__defineSetter__(T,H)}else{if(O){if(K.hasOwnProperty(P)){K[P]=O}else{L[P]=O}}i f(H){if(K.hasOwnProperty(Q)){K[Q]=H}else{L[Q]=H}}}return{getter:O,mutator:H,vali dator:F,value:S}}function A(Q,J){var L=J.constructor.prototype;var I=(L==J);var K=(L!=Object.prototype&&L!=DC.KVO.prototype)?L:J;var R=Q.titleCase();var O="set"+R;var N="get"+R;var H="validate"+R;N=(N in J)?N:Q;var M=J[N];var G=J[O];var F=J[H];var P;if("function"!==typeof (M)){if(Q in J){P=M}M=null;G=null}else{if(M&&!I){P=M.valueOf().call(J)}if(M&&Q!==M.__key){M= D(M,Q)}if(G&&Q!==G.__key){G=C(G,Q)}}if(M){if(J.hasOwnProperty(N)){J[N]=M}else{K[ N]=M}}if(G){if(J.hasOwnProperty(O)){J[O]=G}else{K[O]=G}}return{getter:M,mutator: G,validator:F,value:P}}if(DC.Support.Properties){return E}else{return A}})();DC.KVO.adapt=function(B){if(!B){throw new InvalidArgumentError("Can't adapt a null object")}var A;for(A in DC.KVO.prototype){if(A in B){continue}B[A]=DC.KVO.prototype[A]}if("keyDependencies" in B&&!("__dependentKeys" in B)){var C=B.keyDependencies;for(A in C){B.setKeysTriggerChangeNotificationsForDependentKey(C[A],A)}}return B};DC.KVO.adaptTree=function(C){DC.KVO.adapt(C);var B;var A;for(B in C){if(B in DC.KVO.keysToIgnore){continue}A=C[B];if(!A){continue}if(DC.typeOf(A) in DC.KVO.typesOfKeyValuesToIgnore){continue}DC.KVO.adaptTree(A)}return C};DC.KVO.__subclassCreated__=function(A){var D=A.superclass.prototype;var B=A.prototype;if(D.keyDependencies===B.keyDependencies){return }var E=B.keyDependencies||{};for(var C in E){B.setKeysTriggerChangeNotificationsForDependentKey(E[C],C)}};DC.Bindable=Cla ss.create(DC.KVO,{constructor:function(A){this.bindings={};this.__parameters=A;t his.__context=DC.dataModel},__createFactoryObjects:function(){var A=DC.dataModel;var C=this.__context;DC.dataModel=this.__context=this;var D;var B;for(D in this.__factories__){B=this[D];if(!B.__factoryFn__){continue}this[D]=B.call(this )}DC.dataModel=A;this.__context=C},exposedBindings:[],defaultPlaceholders:{},aut omaticallySetupBindings:true,__relativeSource:null,defaultPlaceholderForMarkerWi thBinding:function(B,C){var A=this.defaultPlaceholders[C];if(!A){return null}return A[B]||null},__createObserverMethod:function(B,C){function A(E){if(DC.ChangeType.setting!==E.changeType){throw new InvalidArgumentError('Received invalid change type for synthesized binding observer (name="'+B+'" keyPath="'+C+'")')}var D=E.newValue;this.setValueForKey(E.newValue,B)}return A},bindNameToKeyPath:function(B,G,A){var D;var F;var E={};if(!this.bindings){this.bindings={}}D=this["observe"+B.titleCase()+"Change "]||this.__createObserverMethod(B,G);if(this.bindings[B]){this.bindings[B].unbin d()}var C=this.__context;if("object"===typeof (G)){Object.extend(E,G);G=E.keypath}Object.extend(E,DC.Binding.bindingInfoFromS tring(G));if("transformValue" in E){E.transformer={transformValue:E.transformValue,reverseTransformedValue:E.rev erseTransformedValue||null};delete E.transformValue;delete E.reverseTransformedValue}if("*."===E.keypath.substr(0,2)){if(A){C=A}else{C=new DC.KVO()}E.keypath=E.keypath.substr(2)}E.name=B;E.object=C;E.observer=this;E.ob serverFn=D;F=new DC.Binding(E);F.bind();this.bindings[B]=F},__postConstruct:function(){if(!this. automaticallySetupBindings){return }this.__initialising=true;this.__copyParameters(this.__parameters||{});this.set upBindings();this.updateBindings();this.createObservers();delete this.__initialising},__copyParameters:function(C){var D;var A;var B=DC.KVO.adaptTree;for(D in C){if(-1!==D.search(/Binding$/)){continue}A=C[D];if("object"===DC.typeOf(A)&&!( "addObserverForKeyPath" in A)){B(A)}this[D]=A}this.__parameters=C},bindingInfoForName:function(A){if(!this .__parameters){return null}return this.__parameters[A+"Binding"]},__createAutoObserver:function(C,B){var A=DC.ChangeType.setting;return function(D){if(this.bindings[B]||A==D.changeType){return }C.apply(this,arguments)}},createObservers:function(){var E=this.exposedBindings;var A=E.length;var B;var D;var C;for(B=0;B<A;++B){C=E[B];D=this["observe"+C.titleCase()+"Change"];if(!D){conti nue}D=this.__createAutoObserver(D,C);this.addObserverForKeyPath(this,D,C,"__auto _observer__")}},setupBindings:function(){var D=this.exposedBindings;var B=D.length;var E;var A;var C;for(C=0;C<B;++C){A=D[C];E=this.bindingInfoForName(A);if(!E){continue}this.bin dNameToKeyPath(A,E,this.__relativeSource)}},updateBindings:function(){var E=this.bindings;var D=this.exposedBindings;var B=D.length;var A;var C;for(C=0;C<B;++C){A=E[D[C]];if(!A){continue}A.update()}},unbind:function(){for (var A in this.bindings){this.bindings[A].unbind()}}});DC.Bindable.__subclassCreated__=fu nction(C){var E=C.superclass.prototype;var D=C.prototype;if(D.hasOwnProperty("defaultPlaceholders")){var B=Object.clone(E.defaultPlaceholders);D.defaultPlaceholders=Object.extend(B,D.d efaultPlaceholders)}if(E.exposedBindings===D.exposedBindings&&!D.maskedBindings) {return }var A=(E.maskedBindings===D.maskedBindings)?{}:$S(D.maskedBindings);function F(H){return !(H in A)}var G=E.exposedBindings.filter(F);if(E.exposedBindings!==D.exposedBindings){G=G.con cat(D.exposedBindings.filter(F))}D.exposedBindings=G};DC.SortDescriptor=Class.cr eate({constructor:function(D,A,B){this.keyPath=D;this.ascending=A;this.compariso nFn=B||this.defaultCompare;var C=typeof (this.comparisonFn);if("string"!=C&&"function"!=C){throw new InvalidArgumentError("comparisonFn must be either the name of a method or a function reference")}},resolveComparisonFn:function(B){var A=this.comparisonFn;if("string"===typeof (A)){A=B[A]}if("function"!==typeof (A)){throw new TypeError("comparisonFn does not resolve to a function")}return A},compareObjects:function(C,B){if(!C.valueForKeyPath||!B.valueForKeyPath){thro w new InvalidArgumentError("Objects are not Key Value compliant")}var E=C.valueForKeyPath(this.keyPath);var D=B.valueForKeyPath(this.keyPath);var A=this.resolveComparisonFn(E);return A.call(E,D)},defaultCompare:function(A){return DC.compareValues(this,A)},reversedSortDescriptor:function(){return new DC.SortDescriptor(this.keyPath,!this.ascending,this.comparisonFn)}});DC.ValueTr ansformer=Class.create({transformedValue:function(A){return A},reverseTransformedValue:function(A){return A},__factory__:function(){var B=Array.from(arguments);var A=this;function C(){}return function(){C.prototype=A.prototype;var D=new C();A.prototype.constructor.apply(D,B);return D}}});DC.ValueTransformer.__subclassCreated__=function(A){var C=DC.ValueTransformer.prototype;var B=A.prototype;if(C.reverseTransformedValue==B.reverseTransformedValue){A.protot ype.reverseTransformedValue=null}};DC.transformer={};DC.transformerInstances={}; DC.findTransformerWithName=function(transformerName){var valueTransformer=DC.transformerInstances[transformerName.toLowerCase()];if(valu eTransformer){return valueTransformer}if(-1===transformerName.indexOf(".")){valueTransformer=DC.tran sformer[transformerName]}if(!valueTransformer){try{valueTransformer=eval(transfo rmerName)}catch(e){}}if(!valueTransformer){throw new InvalidArgumentError("The transformerName argument does not specify a valid ValueTransformer: "+transformerName)}if("function"!==typeof (valueTransformer)){return valueTransformer}if(valueTransformer.__factoryFn__){valueTransformer=valueTrans former()}else{valueTransformer=new valueTransformer()}return valueTransformer};DC.registerTransformerWithName=function(B,A){if(!B.transforme dValue){throw new InvalidArgumentError("The valueTransformer argument does not support the ValueTransformer method transformedValue")}A=A.toLowerCase();DC.transformerInstances[A]=B};DC.transform er.Not=Class.create(DC.ValueTransformer,{transformedValue:function(A){return(A?f alse:true)},reverseTransformedValue:function(A){return !!A}});DC.registerTransformerWithName(new DC.transformer.Not(),"not");DC.transformer.Boolean=Class.create(DC.ValueTransfo rmer,{constructor:function(A,B){this.trueValue=A;this.falseValue=B},transformedV alue:function(A){return(A==this.trueValue)},reverseTransformedValue:function(A){ return(A?this.trueValue:this.falseValue)}});DC.transformer.Matches=Class.create( DC.ValueTransformer,{constructor:function(A){this.trueRegex=A},transformedValue: function(A){return this.trueRegex.test(A)}});DC.transformer.Generic=Class.create(DC.ValueTransform er,{constructor:function(A,B){this.modelValues=A;this.displayValues=B},transform edValue:function(B){var A=this.modelValues.indexOf(B);var C;if(-1==A){return C}else{return this.displayValues[A]}},reverseTransformedValue:function(B){var A=this.displayValues.indexOf(B);var C;if(-1==A){return C}else{return this.modelValues[A]}}});DC.transformer.Truncated=Class.create(DC.ValueTransform er,{constructor:function(A){this.max=A||50},ellipsis:String.fromCharCode(8230),t ransformedValue:function(C){if(!C&&0!==C){return C}C=""+C;var A=C.length;if(A<=this.max){return C}var B=this.max/2-2;return[C.substr(0,B),this.ellipsis,C.substr(A-B)].join(" ")}});DC.registerTransformerWithName(new DC.transformer.Truncated(50),"truncated");DC.transformer.StringsToObjects=Class .create(DC.ValueTransformer,{constructor:function(A){this.key=A||"string"},trans formedValue:function(B){if(!B||!B.map){return B}function A(C){var D=new DC.KVO();D[this.key]=C;return D}return B.map(A,this)},reverseTransformedValue:function(B){if(!B||!B.map){return B}function A(C){return C[this.key]}return B.map(A,this)}});DC.registerTransformerWithName(new DC.transformer.StringsToObjects("string"),"StringsToObjects");DC.transformer.Fi rstObject=Class.create(DC.ValueTransformer,{transformedValue:function(A){if(DC.t ypeOf(A)=="array"){return A[0]}return A}});Object.extend(DC,{NoSelectionMarkerType:"noSelection",MultipleValuesMarker Type:"multipleValues",NullValueMarkerType:"nullValue"});DC.Binding=Class.create( {constructor:function(A){Object.extend(this,A);if("string"===typeof (this.transformer)){this.transformer=DC.findTransformerWithName(this.transforme r)}if("function"===typeof (this.transformer)){if(this.transformer.__factoryFn__){this.transformer=this.tr ansformer()}else{this.transformer=new this.transformer()}}this.refresh()},bind:function(){this.object.addObserverForK eyPath(this,this.observeChangeForKeyPath,this.keypath)},unbind:function(){this.o bject.removeObserverForKeyPath(this,this.keypath)},refresh:function(){var A=this.object.valueForKeyPath(this.keypath);this.cachedOriginalValue=A;this.mar kerType=this.markerTypeFromValue(A);if(this.markerType){if((this.markerType+"Pla ceholder") in this){A=this[this.markerType+"Placeholder"]}else{A=this.observer.defaultPlaceho lderForMarkerWithBinding(this.markerType,this.name)}}else{A=this.transformedValu e(A)}this.cachedValue=A},transformedValue:function(A){if(!this.transformer){retu rn A}return this.transformer.transformedValue(A)},validateProposedValue:function(B){if(this .transformer){if(!this.transformer.reverseTransformedValue){throw new Error("Can't validate a value when the transformer doesn't have a reverseTransformedValue method")}B=this.transformer.reverseTransformedValue(B)}var A=this.object.validateValueForKeyPath(B,this.keypath);if(A instanceof DC.Error){return A}return this.transformedValue(A)},setValue:function(A){if(this.cachedValue===A){return }this.markerType=this.markerTypeFromValue(A);this.cachedValue=A;if(this.transfo rmer){if(!this.transformer.reverseTransformedValue){return }A=this.transformer.reverseTransformedValue(A)}this.cachedOriginalValue=A;var B=this.updating;this.updating=true;this.object.setValueForKeyPath(A,this.keypat h);this.updating=B},mutable:function(){if(this.transformer&&!this.transformer.re verseTransformedValue){return false}var A=this.object.infoForKeyPath(this.keypath);return A&&A.mutable},value:function(){return this.cachedValue},update:function(){var B=this.value();var C=new DC.ChangeNotification(this.object,DC.ChangeType.setting,B);this.updating=true;t ry{this.observerFn.call(this.observer,C,this.keypath)}catch(A){console.error('Ex ception while bindng "'+this.name+'" to keypath "'+this.keypath+' ": '+A)}this.updating=false},observerFn:function(C,A,B){},markerTypeFromValue:func tion(A){if(null===A||"undefined"===typeof (A)||""===A){return DC.NullValueMarkerType}if(DC.Markers.MultipleValues===A){return DC.MultipleValuesMarkerType}if(DC.Markers.NoSelection===A){return DC.NoSelectionMarkerType}return null},placeholderValue:function(){var A;if((this.markerType+"Placeholder") in this){A=this[this.markerType+"Placeholder"]}else{A=this.observer.defaultPlaceho lderForMarkerWithBinding(this.markerType,this.name)}if("function"===typeof (A)){A=A.call(this.object)}return A},observeChangeForKeyPath:function(G,A,B){if(this.updating&&G.newValue===this. cachedOriginalValue){return }this.cachedOriginalValue=G.newValue;var E=G.newValue;this.markerType=this.markerTypeFromValue(E);if(this.markerType){E= this.placeholderValue()}else{E=this.transformedValue(E)}var C=Object.clone(G);C.newValue=E;if(DC.ChangeType.setting===G.changeType){this.ca chedValue=E}var F=this.updating;this.updating=true;try{this.observerFn.call(this.observer,C,A,B )}catch(D){console.error('Exception while bindng "'+this.name+'" to keypath "'+this.keypath+' ": '+D)}this.updating=F}});DC.Binding.bindingRegex=/^(.*?)(?:\((.*)\))?$/;DC.Bindi ng.compoundRegex=/^\s*([^&|].*?)\s*(\&\&|\|\|)\s*(\S.+)\s*$/;DC.Binding.bindingI nfoFromString=function(B){var A;var C;A=B.match(DC.Binding.bindingRegex);if(!A||A.length<3){throw new InvalidArgumentError("bindingString isn't in correct format")}var D={keypath:A[1]};if(A[2]){D.transformer=DC.findTransformerWithName(A[2])}return D};Class.extend(Array,{containsObject:function(A){return -1!==this.indexOf(A)},valueForKey:function(D){if(!D||0===D.length){throw new InvalidArgumentError("the key is empty")}if("@count"==D){return this.length}var E=new Array(this.length);var C;var A=this.length;var B;for(C=0;C<A;++C){B=this[C];E[C]=B?B.valueForKey(D):null}return E},setValueForKey:function(D,C){if(!C||0===C.length){throw new InvalidArgumentError("key is empty")}var B;var A=this.length;for(B=0;B<A;++B){this[B].setValueForKey(D,C)}},indexesOfObjects:f unction(E){var D;var B=E.length;var A=[];var C;for(D=0;D<B;++D){C=this.indexOf(E[D]);if(-1===C){continue}A.push(C)}return A},addObject:function(B){var A=this.length;var C=new DC.ChangeNotification(this,DC.ChangeType.insertion,[B],null,[A]);this.push(B);t his.observeElementAtIndex(A);this.notifyObserversOfChangeForKeyPath(C,DC.KVO.kAl lPropertiesKey)},addObjects:function(G){var B=G.length;var E=this.length;var C=[];var A=[];var F=new DC.ChangeNotification(this,DC.ChangeType.insertion,C,null,A);for(index=0;index< B;++index){var D=G[index];this.push(D);this.observeElementAtIndex(E);C.push(D);A.push(E++)}thi s.notifyObserversOfChangeForKeyPath(F,DC.KVO.kAllPropertiesKey)},insertObjectAtI ndex:function(B,A){if(A<0||A>this.length){throw new RangeError("index must be within the bounds of the array")}var C=new DC.ChangeNotification(this,DC.ChangeType.insertion,[B],null,[A]);this.splice(A, 0,B);this.observeElementAtIndex(A);this.notifyObserversOfChangeForKeyPath(C,DC.K VO.kAllPropertiesKey)},insertObjectsAtIndexes:function(E,C){if(E.length!==C.leng th){throw new InvalidArgumentError("length of objects and indexes parameters must be equal")}var A=E.length;var D;var B;for(D=0;D<A;++D){B=C[D];this.splice(B,0,E[D]);this.observeElementAtIndex(B)}v ar F=new DC.ChangeNotification(this,DC.ChangeType.insertion,E,null,C);this.notifyObserve rsOfChangeForKeyPath(F,DC.KVO.kAllPropertiesKey)},replaceObjectAtIndex:function( C,B){var A=this[B];this[B]=C;var D=new DC.ChangeNotification(this,DC.ChangeType.replacement,[C],[A],[B]);this.notifyOb serversOfChangeForKeyPath(D,DC.KVO.kAllPropertiesKey)},replaceObjectsAtIndexes:f unction(F,D){var B=[];var A=F.length;var E;var C;for(E=0;E<A;++E){C=D[E];B[E]=this[C];this.stopObservingElementAtIndex(C);this [C]=F[E];this.observeElementAtIndex(C)}var G=new DC.ChangeNotification(this,DC.ChangeType.replacement,F,null,D);this.notifyObser versOfChangeForKeyPath(G,DC.KVO.kAllPropertiesKey)},removeObject:function(B){var A=this.indexOf(B);if(-1===A){return }this.removeObjectAtIndex(A)},removeObjects:function(D){var A=D.length;var B;for(var C=0;C<A;++C){B=this.indexOf(D[C]);if(-1===B){continue}this.removeObjectAtIndex( B)}},removeObjectsAtIndexes:function(D){var C;var E=D.sort(function(I,H){return H-I});var A=D.length;var B=[];for(C=0;C<A;++C){var F=E[C];this.stopObservingElementAtIndex(F);B.push(this[F]);this.splice(F,1)}var G=new DC.ChangeNotification(this,DC.ChangeType.deletion,null,B,E);this.notifyObserver sOfChangeForKeyPath(G,DC.KVO.kAllPropertiesKey)},removeObjectAtIndex:function(B) {if(B<0||B>=this.length){throw new RangeError("index must be within the bounds of the array")}this.stopObservingElementAtIndex(B);var A=this.splice(B,1);var C=new DC.ChangeNotification(this,DC.ChangeType.deletion,null,A,[B]);this.notifyObserv ersOfChangeForKeyPath(C,DC.KVO.kAllPropertiesKey)},removeAllObjects:function(){v ar D;var C=[];var A=this.length;C.length=A;for(D=0;D<A;++D){this.stopObservingElementAtIndex(D);C [D]=D}var B=this.splice(0,A);var E=new DC.ChangeNotification(this,DC.ChangeType.deletion,null,B,C);this.notifyObserver sOfChangeForKeyPath(E,DC.KVO.kAllPropertiesKey)},objectsAtIndexes:function(C){va r D;var B=[];var A=C.length;B.length=C.length;for(D=0;D<A;++D){B[D]=this[C[D]]}return B},observeChildObjectChangeForKeyPath:function(F,E,B){var D=F.object;var C=this.indexOf(D);if(!this.__uid){this.initialiseKeyValueObserving()}if(-1===C) {D._removeParentLink(this,null,this.__uid);return }var A=new DC.ChangeNotification(D,DC.ChangeType.replacement,[F.newValue],[F.oldValue],[C] );this.notifyObserversOfChangeForKeyPath(A,E)},observeElementAtIndex:function(A) {var B=this[A];if(!B||!B._addParentLink){return }if(!this.__uid){this.initialiseKeyValueObserving()}B._addParentLink(this,null, this.__uid)},stopObservingElementAtIndex:function(A){var B=this[A];if(!B||!B._removeParentLink){return }if(!this.__uid){this.initialiseKeyValueObserving()}B._removeParentLink(this,nu ll,this.__uid)},initialiseKeyValueObserving:function(){var B;var A=this.length;this.__observers={};this.__uid=this.__uid||DC.generateUid();for(B =0;B<A;++B){this.observeElementAtIndex(B)}}});DC.KVO.adapt(Array.prototype);DC.A rrayOperator={avg:function(A){return this.sum(A)/A.length},count:function(A){throw new InvalidArgumentError("@count operator must end the keyPath")},distinctUnionOfArrays:function(A){return this.unionOfArrays(A).distinct()},distinctUnionOfObjects:function(A){return A.distinct()},max:function(D){var B=null;var E;var A;var C;for(E=0,A=D.length;E<A;++E){C=D[E];if(null===B||C>B){B=C}}return B},min:function(C){var E=null;var D;var A;var B;for(D=0,A=C.length;D<A;++D){B=C[D];if(null===E||B<E){E=B}}return E},sum:function(B){var D=0;var A=B.length;var C;for(C=0;C<A;++C){D+=B[C]}return D},unionOfArrays:function(B){var D=[];var A;var C;for(C=0,A=B.length;C<A;++C){D=D.concat(B[C])}return D},unionOfObjects:function(A){return A}};Object.extend(DC,{dataModel:new DC.KVO(),registerModelWithName:function(B,A){DC.dataModel.setValueForKey(B,A)}, unregisterModelWithName:function(A){delete DC.dataModel[A]}});String.prototype.titleCase=function(){return this.charAt(0).toUpperCase()+this.substr(1)};String.prototype.trim=function(){v ar B=this.replace(/^\s+/,"");for(var A=B.length-1;A>0;--A){if(/\S/.test(B.charAt(A))){B=B.substring(0,A+1);break}}re turn B};String.prototype.beginsWith=function(A){return A===this.substring(0,A.length)};if(!String.prototype.localeCompare){String.prot otype.localeCompare=function(A){if(this<A){return -1}else{if(this>A){return 1}else{return 0}}}}String.prototype.expand=function(C,A){function B(F,D){var E=C[D];if(null===E||"undefined"===typeof (E)){return A}return E}return this.replace(/\$\{(\w+)\}/g,B)};var CancelledError=DC.defineError("CancelledError");var InvalidStateError=DC.defineError("InvalidStateError");(function(){var C=-1;var A=0;var B=1;DC.Deferred=Class.create({constructor:function(D){this.canceller=D;this._re sult=null;this._status=C;this._callbacks=[]},_fire:function(D){while(this._callb acks.length){this._status=(D instanceof Error)?B:A;this._result=D;var E=this._callbacks.shift()[this._status];if(!E){continue}D=E(D);if(D instanceof DC.Deferred){var F=this;function G(H){F._fire(H);return H}D.addMethods(G,G);return }}this._status=(D instanceof Error)?B:A;this._result=D},result:function(){return this._result},cancel:function(){if(C!==this._status){throw new InvalidStateError("Can not cancel Deferred because it is already complete")}var D=(this.canceller&&this.canceller());if(!(D instanceof Error)){D=new CancelledError("Deferred operation cancelled")}this.failure(D)},addMethods:function(D,E){this._callbacks.push([D,E ]);if(C===this._status){return this}this._fire(this._result);return this},addCallback:function(D){return this.addMethods(D,null)},addErrorHandler:function(D){return this.addMethods(null,D)},callback:function(D){if(C!==this._status){throw new InvalidStateError("Can not signal callback because Deferred is already complete: result="+D)}this._fire(D)},failure:function(D){if(C!==this._status){throw new InvalidStateError("Can not signal failure because Deferred is already complete: error="+D)}this._fire(D)}})})();window.XHR=(function(){var getTransport=function(){throw new Error("XMLHttpRequest not available.")};if(!DC.Browser.IE){getTransport=function(){return new XMLHttpRequest()}}else{var progIdCandidates=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];va r len=progIdCandidates.length;var progId;var xhr;for(var i=0;i<len;++i){try{progId=progIdCandidates[i];xhr=new ActiveXObject(progId);getTransport=function(){return new ActiveXObject(progId)};break}catch(e){}}}function send(url,method,options){var timeout;function noop(){}function cancel(){xhr.onreadystatechange=noop;xhr.abort()}function readyStateChanged(xhrEvent){if(4!==xhr.readyState){return }if(timeout){clearTimeout(timeout)}if(xhrSent===false){arguments.callee.delay(0 );return }var status=xhr.status;var succeeded=(status>=200&&status<300)||304==status;if(0===status||"undefined"===t ypeof (status)){var protocol=window.location.protocol;succeeded="file:"===protocol||"chrome:"===pro tocol}var result=xhr.responseText;var err;if(succeeded){if("HEAD"==method){result={};try{var headers=xhr.getAllResponseHeaders();if(headers){headers=headers.split("\n");hea ders.forEach(function(header){var match=header.match(/^([^:]+):(.+)$/m);var name=match[1].trim();result[name]=match[2].trim()})}}catch(e){}}else{var contentType=options.responseContentType||xhr.getResponseHeader("Content-Type"); if(contentType.match(/(?:application\/(?:x-)?json)|(?:text\/json)/)){try{result= eval("("+result+")")}catch(e){err=e;succeeded=false}}if(contentType.match(/(?:ap plication|text)\/xml/)){result=xhr.responseXML}}}else{err=new Error("XHR request failed");err.url=url;err.method=method;err.xhr=xhr;err.status=xhr.status;err.st atusText="Failed to load resource."}if(succeeded){deferred.callback(result)}else{deferred.failure(err)}x hr.onreadystatechange=noop;xhr=null}var xhr=getTransport();var queryString=Object.toQueryString(options.parameters||{});var body=options.body||"";var async=!options.sync;var deferred=new DC.Deferred(cancel);var xhrSent=false;method=(method||"GET").toUpperCase();try{if("GET"==method){if(que ryString&&-1===url.indexOf("?")){url=url+"?"+queryString}else{if(queryString&&-1 !==url.indexOf("?")){url=url+"&"+queryString}else{if("&"===url.slice(-1)){url=ur l+queryString}else{url=url+queryString}}}}if(options.responseContentType&&xhr.ov errideMimeType){xhr.overrideMimeType(options.responseContentType)}if(options.use r){xhr.open(method,url,async,options.user,options.password||"")}else{xhr.open(me thod,url,async)}var headers=options.headers||{};for(var h in headers){xhr.setRequestHeader(h,headers[h])}if("POST"==method){xhr.setRequestHe ader("Content-Type",options.contentType||"application/x-www-form-urlencoded");bo dy=queryString}if(async){xhr.onreadystatechange=readyStateChanged;timeout=setTim eout(function(){xhr.abort()},30000)}xhr.send(body);xhrSent=true;if(!async){ready StateChanged()}}catch(e){var err=new Error("XHR request failed");err.url=url;err.method=method;err.xhr=xhr;err.status=-1;err.statusText ="Failed to load resource.";deferred.failure(err)}return deferred}return{get:function(url,parameters,options){return XHR.request("GET",url,parameters,options)},post:function(url,parameters,options ){return XHR.request("POST",url,parameters,options)},request:function(method,url,paramet ers,options){method=method.toUpperCase();options=options||{};options.parameters= parameters;return send(url,method,options)}}})();DC.Controller=Class.create(DC.Bindable,{construc tor:function(A){this.base(A)},registerWithName:function(A){if(!A){return }this.name=A;DC.registerModelWithName(this,A)}});DC.Markers={MultipleValues:"Th isIsAnUniqueStringThatRepresentsMultipleValues",NoSelection:"ThisIsAnUniqueStrin gThatRepresentsNoSelection"};DC.SelectionProxy=Class.create(DC.KVO,{constructor: function(A){this.controller=A;this.mutable=true},infoForKey:function(B){var A=this.controller.selectedObjects();var C=A.infoForKey(B);C.mutable&=this.mutable;return C},infoForKeyPath:function(C){var A=this.controller.selectedObjects();var B=A.infoForKeyPath(C);B.mutable&=this.mutable;return B},translateValue:function(D){if("array"!==DC.typeOf(D)){return D}if(1===D.length){return D[0]}var C;var A;var B=D[0];for(C=1,A=D.length;C<A;++C){if(0!==DC.compareValues(B,D[C])){return DC.Markers.MultipleValues}}return B},valueForKey:function(C){var B=this.controller.selectedObjects();if(0===B.length){return DC.Markers.NoSelection}var A=B.valueForKey(C);return this.translateValue(A)},validateValueForKeyPath:function(E,F){var B=this.controller.selectedObjects();var A=B.length;var D;if(0===A){return E}var C;for(D=0;D<A;++D){C=B[D].validateValueForKeyPath(E,F);if(C instanceof DC.Error){return C}}return C},valueForKeyPath:function(C){var B=this.controller.selectedObjects();if(0===B.length){return DC.Markers.NoSelection}var A=B.valueForKeyPath(C);return this.translateValue(A)},setValueForKey:function(D,C){if(!this.mutable){return }var B=this.controller.selectedObjects();var A=this.valueForKey(C);B.setValueForKey(D,C);var E=this.valueForKey(C);if(A===E){return }var F=new DC.ChangeNotification(this,DC.ChangeType.setting,E,A);this.notifyObserversOfCha ngeForKeyPath(F,C)},setValueForKeyPath:function(C,F){if(!this.mutable){return }var B=this.controller.selectedObjects();var A=this.valueForKeyPath(F);B.setValueForKeyPath(C,F);var D=this.valueForKeyPath(F);if(A===D){return }var E=new DC.ChangeNotification(this,DC.ChangeType.setting,D,A);this.notifyObserversOfCha ngeForKeyPath(E,F)}});DC.ObjectController=Class.create(DC.Controller,{constructo r:function(A){this.base(A);this.objectClass=DC.KVO;this.__content=null;this.__ed itable=true;this.__selectedObjects=[];this.__selection=new DC.SelectionProxy(this)},observeChildObjectChangeForKeyPath:function(F,E,B){thi s.base(F,E,B);if("selectedObjects"!==B){return }var C="selection."+E;var D=this.valueForKeyPath(C);var A=new DC.ChangeNotification(this,DC.ChangeType.setting,D,null);this.notifyObserversOf ChangeForKeyPath(A,C)},keyDependencies:{},exposedBindings:["editable","content"] ,editable:function(){var A=this.__editable;if(this.bindings.content){A&=this.bindings.content.mutable()} return A},setEditable:function(A){if(this.bindings.content){A&=this.bindings.content.m utable()}if(this.bindings.editable){this.bingings.editable.setValue(A)}this.__ed itable=A},content:function(){return this.__content},setContent:function(A){if(this.bindings.content){this.bindings. content.setValue(A)}this.__content=A;this.willChangeValueForKey("selectedObjects ");if(!A){this.__selectedObjects=[]}else{this.__selectedObjects=[A]}this.didChan geValueForKey("selectedObjects");this.forceChangeNotificationForKey("selection") },selectedObjects:function(){return this.__selectedObjects},selection:function(){return this.__selection}});DC.AjaxController=Class.create(DC.ObjectController,{flushCo ntentBeforeQuery:false,fetchesInitially:true,constructor:function(A){this.queryD elay=0;this.url="";this.method="GET";this.base(A);if(this.parameters){DC.KVO.ada ptTree(this.parameters)}else{this.parameters=new DC.KVO()}this.addObserverForKeyPath(this,this.queryUpdated,"url");this.addObser verForKeyPath(this,this.queryUpdated,"method")},__postConstruct:function(){this. base();if(this.fetchesInitially&&this.url&&this.url.length&&this.validateParamet ers()){this.forceChangeNotificationForKey("url")}},validateParameters:function() {return true},fullURL:function(){var H={};var E=this.parameters.mutableKeys();var A=E.length;var B=this.url;var D;var G;for(var C=0;C<A;++C){G=E[C];if(this.parameters.hasOwnProperty(G)){H[G]=this.parameters[ G]}}D=Object.

  • Dashcode Widget

    I have created a widget in dashcode and placed it in the book.
    The widget contains a form supported with jScript.
    The form requires user input.
    At the moment the cursor stays in one position on the screen and the next input field with the focus moves that fixed
    position on the screen.
    What I was expecting was that the form would not move and that the input focus would move from input field to input field.
    Help with this issue would be greatly appreciated.

    See:
    iBooks Author: About HTML widget creation
    Using DashCode to create an interactive widget
    Just remember that tabbing from one entry field to another with a touch interface is different from a desktop OS, especially when the onscreen keyboard may expect the user to tap | Previous | Next |
    As well:
    Creating Books with JavaScript Interactivity
    With OS X Mavericks, iBooks customers can read interactive books on both iOS and OS X. Interactive features like drag-and-drop or user-initiated animations are supported on both platforms. Interactivity on iOS requires touch events, while interactivity on OS X requires mouse events. Ensure that your script supports both touch and mouse input.

  • Can't POST FormData from iBooks widget on iPad

    I have a Dashcode widget that simply submits contact information from a three-field form to a PHP script on our server. It works properly when run/debugged from Dashcode. But when I drop it into iBooks Author and preview it on an iPad (either v2 or v3), the XMLHttpRequest POST no longer works properly. On the server, the form is ocassionally received with a request type of "OPTIONS" instead of "POST" so none of the form data is available to the server-side script. The content length is also reported as 0 (zero) on the server. Other times, the data is received correctly, but the widget's onerror function fires instead of onload, even when a 200 status is returned from the server.
    The code worked fine in both Dashcode and on the iPad in a test iBook. Then I tested it after disabling wifi to ensure that errors would be handled properly. It hasn't worked again since enabling wifi. It could be a coincidence. I've relaunched iBooks, deleted and reinstalled the book, restarted the iPad, restarted Dashcode and iBooks Author. I've even created a new widget with nothing but a Submit button and hard-coded form values:
    function submit(event)
        var formData = new FormData();
        formData.append("name", 'Name');
        formData.append("email", 'Email');
        formData.append("question", 'Question');
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "http://www.example.com/example.php");
        xhr.onload = function(e) {
            if (this.readyState == 4) {
                if (this.status == 200) {
                    helloText.innerText = 'Success';
        xhr.onerror = function(e) {
            helloText.innerText = 'Error: ' + this.status + ': ' + this.responseText;
        xhr.send(formData);
    The widget is set to Allow Network Access and "10.4.0 (backward-compatible)". Any tips will be greatly appreciated.

    I tried saving the .ibooks file and sync'ing it through iTunes instead of using Preview, but see the same result. The post data was received successfully on the server. Although the server sends a 200 status code, the widget's onerror function fires and reports a status of "0" and empty responseText.
    This is a step in the right direction. But we can't use it if we can't properly provide success/failure feedback to the user.

  • Widgets in iBookAuthor

    Hello,
    I have developed a small HTML Widget (using Dashcode 3) and the dashcode widget in a standalone
    work properly. However when i add that in the ibooksAuthor, it does not seem to wrok. Any idea
    what am i doing wrong here?
    The WIdget is a smiple Audio sample file. I have a m4a file (AAC is supported per Apple's ibookAuthor's page)
    which gets played when a button is pressed. The code does not work in ibooksAuthor however the widget
    works perfectly fine as a standalone on Mac. Could you please help me  here?
    Thanks,
    Jayasimha

    Yeah, I could not get it to work either from a simple HTML widget (see below). Says "cannot play audio file".
    Can anyone confirm if this is possible? If so can you post a snippet and working audio file so I can try it out.
    -J
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" style="width: 100%; height: 100%; border: 0px; margin: 0px;">
    <head>
    </head>
    <body>
        <audio  controls="controls" >
             <source src="sound.m4a"  />
        </audio>
    </body>
    </html>

  • Dashcode DataSource Computed Properties/Bindings

    Hi guys. I've been working with Dashcode widgets for a while now, but since moving to 3.0 and being introduced to the Data Source/Binding model, I'm still unconvinced that it can do what I need it to. I've read through the documentation but it does not provide much in the way of any explanation.
    What I want to do it concatenate two input values from the XML results that I receive and place them into one field. I have tried binding two fields to one input, but that's not allowed. I have also investigated and considered creating my own transformer for the value, but this is only applicable to a single object.
    Is there a simple way to do this (I'd think) relatively common task? Perhaps I need to set up a binding for the entire object that is returned to create the new value? Still seems a bit much and a little unclear there. Any suggestions?

    I too need to create a computed field from a datasource, anyone have any information on how to do this?

  • Scrolling inside HTML widgets

    Hey everyone,
    After successfully making my HTML widgets large, I was wondering if there was any way to easily allow scrolling inside of them, like you would have in Safari. I am mostly using them as little views into other sites, so it would be great to be able to scroll around. In the present iteration I am incorporating a small Wolfram widget that lets students play with trigonometric functions, but the output gets cut off because the widget is too small. It'd be fine if the students could just scroll down, but I can't seem to be able to do that. Any suggestions?

    OK, the solution by Tars Tarkis worked great- in iBooks Author.  But the scrolling does not work correctly in iBooks.  I was able to get horizontal scrolling to work, sort of.  No vertical scrolling in iBooks, even though scrolling in both directions worked fine in Author.
    I am trying to embed a Google Docs form.  The embedding with a Dashcode widget works great, but the form is long enough that vertical scrolling will be necessary.  Again, Tars' solution worked in Author, but not in iBooks. 
    Any other suggestions for making a HTML widget scroll correctly?

Maybe you are looking for

  • Indesign CC won't print color while exported pdf from the same document can!

    Hello, I tried everything I know. Even reseting indesign.. As I mentioned in the title, when I try the pdf file that I exported from indesign it just works fine. And  I have no problem printing with color in Illustrator, Photoshop or any other softwa

  • Is it possible for a theme to 'not work'

    Hi all, Twice I've made a movie in iMovie, saved it with chapters, opened up a new theme in iDVD, droped the iMovie file in the iDVD window and saved as a disk image. It works fine, but when I burn to disc it just won't play on my stand-alone player.

  • DMIS 2010 SP10 replication is not clearing the logging table

    Hello, We have installed the DMIS2010 SP10 on our test environment and for some table the replication is getting extreme slow. Initially I had a case when I started to load a new table and all the logs collected during the initial load was not proces

  • E-Fax Problems

    On my old ibook I downloaded and easily used e-fax messenger to send and receive faxes. I upgraded to a MacBook pro with Tiger 10.4.6 and now when I go to send a fax, OS 10 shuts down and said it shut down unexpectedly and do I want to report it to A

  • Imporving the performance of a query

    Hi, I have the following query in Oracle: SELECT distinct VECTOR_ID FROM SUMMARY_VECTOR where CASE_NAME like 'BASECASE_112_ECLIPSE100' "SUMMARY_VECTOR" contains approximately 120 million records or tuples. So the total time for this query is about 62