diff --git a/source/java/org/alfresco/web/app/servlet/ajax/AjaxCommand.java b/source/java/org/alfresco/web/app/servlet/ajax/AjaxCommand.java new file mode 100644 index 0000000000..17eba223be --- /dev/null +++ b/source/java/org/alfresco/web/app/servlet/ajax/AjaxCommand.java @@ -0,0 +1,37 @@ +package org.alfresco.web.app.servlet.ajax; + +import java.io.IOException; + +import javax.faces.context.FacesContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Interface for all Ajax commands executed by this servlet. + * + * The method is responsible for invoking the underlying managed bean + * and dealing with the response. + * + * @author gavinc + */ +public interface AjaxCommand +{ + /** + * Invokes the relevant method on the bean represented by the given + * expression. Parameters required to call the method can be retrieved + * from the request. + * + * Currently the content type of the response will always be text/html, in the + * future sublcasses may provide a mechanism to allow the content type to be set + * dynamically. + * + * @param facesContext FacesContext + * @param expression The binding expression + * @param request The request + * @param response The response + */ + public abstract void execute(FacesContext facesContext, String expression, + HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException; +} diff --git a/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java b/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java new file mode 100644 index 0000000000..d968c77b5f --- /dev/null +++ b/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java @@ -0,0 +1,176 @@ +package org.alfresco.web.app.servlet.ajax; + +import java.io.IOException; +import java.util.Enumeration; +import java.util.StringTokenizer; + +import javax.faces.context.FacesContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.web.app.servlet.AuthenticationStatus; +import org.alfresco.web.app.servlet.BaseServlet; +import org.alfresco.web.app.servlet.FacesHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Servlet responsible for processing AJAX requests. + * + * The URL to the servlet should be in the form: + *
/alfresco/ajax/command/Bean.binding.expression
+ *

+ * where 'command' is one of 'invoke', 'get' or 'set'. + *

+ * TODO: Explain what the commands do... + *

+ * Like most Alfresco servlets, the URL may be followed by a valid 'ticket' argument for authentication: + * ?ticket=1234567890 + * + * @author gavinc + */ +public class AjaxServlet extends BaseServlet +{ + public static final String AJAX_LOG_KEY = "alfresco.ajax"; + + protected enum Command { invoke, get, set}; + + private static final long serialVersionUID = -7654769105419391840L; + private static Log logger = LogFactory.getLog(AJAX_LOG_KEY); + private static Log headersLogger = LogFactory.getLog(AJAX_LOG_KEY + ".headers"); + + /** + * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + */ + protected void service(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException + { + try + { + String uri = request.getRequestURI(); + + if (logger.isDebugEnabled()) + { + String queryString = request.getQueryString(); + logger.debug("Processing URL: " + uri + + ((queryString != null && queryString.length() > 0) ? ("?" + queryString) : "")); + } + + // dump the request headers + if (headersLogger.isDebugEnabled()) + { + Enumeration headers = request.getHeaderNames(); + while (headers.hasMoreElements()) + { + String name = (String)headers.nextElement(); + headersLogger.debug(name + ": " + request.getHeader(name)); + } + } + + // ************ + // TODO: Need to send in a flag to method to stop it from redirecting + // to login page, we can then throw an error in here!! + + AuthenticationStatus status = servletAuthenticate(request, response); + if (status == AuthenticationStatus.Failure) + { + return; + } + + uri = uri.substring(request.getContextPath().length()); + StringTokenizer t = new StringTokenizer(uri, "/"); + int tokenCount = t.countTokens(); + if (tokenCount < 3) + { + throw new AlfrescoRuntimeException("Servlet URL did not contain all required args: " + uri); + } + + // skip the servlet name + t.nextToken(); + + // retrieve the command from the URL + String commandName = t.nextToken(); + + // retrieve the binding expression from the URL + String expression = t.nextToken(); + + // setup the faces context + FacesContext facesContext = FacesHelper.getFacesContext(request, response, getServletContext()); + + // instantiate the relevant command + AjaxCommand command = null; + if (Command.invoke.toString().equals(commandName)) + { + command = new InvokeCommand(); + } + else if (Command.get.toString().equals(commandName)) + { + command = new GetCommand(); + } +// else if (Command.set.toString().equals(commandName)) +// { +// command = new SetCommand(); +// } + else + { + throw new AlfrescoRuntimeException("Unrecognised command received: " + commandName); + } + + // execute the command + command.execute(facesContext, expression, request, response); + } + catch (RuntimeException error) + { + handleError(response, error); + } + } + + /** + * Handles any error that occurs during the execution of the servlet + * + * @param response The response + * @param cause The cause of the error + */ + protected void handleError(HttpServletResponse response, RuntimeException cause) + throws ServletException, IOException + { + // if we can send back the 500 error with the error from the top of the + // stack as the error status message. + + // NOTE: if we use the built in support for generating error pages for + // 500 errors we can tailor the output for AJAX calls so that the + // body of the response can be used to show the error details. + + if (!response.isCommitted()) + { + // dump the error if debugging is enabled + if (logger.isDebugEnabled()) + { + logger.error(cause); + Throwable theCause = cause.getCause(); + if (theCause != null) + { + logger.error("caused by: ", theCause); + } + } + + // extract a message from the exception + String msg = cause.getMessage(); + if (msg == null) + { + msg = cause.toString(); + } + + // send the error + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg); + } + else + { + // the response has already been comitted, not much we can do but + // let the error through and let the container deal with it + throw cause; + } + } +} diff --git a/source/java/org/alfresco/web/app/servlet/ajax/BaseAjaxCommand.java b/source/java/org/alfresco/web/app/servlet/ajax/BaseAjaxCommand.java new file mode 100644 index 0000000000..0ed97ccbc4 --- /dev/null +++ b/source/java/org/alfresco/web/app/servlet/ajax/BaseAjaxCommand.java @@ -0,0 +1,19 @@ +package org.alfresco.web.app.servlet.ajax; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Base class for all Ajax based commands + * + * @author gavinc + */ +public abstract class BaseAjaxCommand implements AjaxCommand +{ + protected static Log logger = LogFactory.getLog(AjaxServlet.AJAX_LOG_KEY); + + public String makeBindingExpression(String expression) + { + return "#{" + expression + "}"; + } +} diff --git a/source/java/org/alfresco/web/app/servlet/ajax/GetCommand.java b/source/java/org/alfresco/web/app/servlet/ajax/GetCommand.java new file mode 100644 index 0000000000..be3363f41f --- /dev/null +++ b/source/java/org/alfresco/web/app/servlet/ajax/GetCommand.java @@ -0,0 +1,66 @@ +package org.alfresco.web.app.servlet.ajax; + +import java.io.IOException; + +import javax.faces.context.FacesContext; +import javax.faces.el.ValueBinding; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.transaction.UserTransaction; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.web.bean.repository.Repository; + +/** + * Command that executes the given value binding expression. + *

+ * This command is intended to be used for calling existing managed + * bean methods. The result of the value binding is added to + * the response as is i.e. by calling toString(). + * The content type of the response is always text/html. + * + * @author gavinc + */ +public class GetCommand extends BaseAjaxCommand +{ + public void execute(FacesContext facesContext, String expression, + HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException + { + // create the JSF binding expression + String bindingExpr = makeBindingExpression(expression); + + if (logger.isDebugEnabled()) + logger.debug("Retrieving value from value binding: " + bindingExpr); + + UserTransaction tx = null; + try + { + // create the value binding + ValueBinding binding = facesContext.getApplication(). + createValueBinding(bindingExpr); + + if (binding != null) + { + // setup the transaction + tx = Repository.getUserTransaction(facesContext, true); + tx.begin(); + + // get the value from the value binding + Object value = binding.getValue(facesContext); + response.getWriter().write(value.toString()); + + // commit + tx.commit(); + } + } + catch (Throwable err) + { + // rollback the transaction + try { if (tx != null) {tx.rollback();} } catch (Exception ex) {} + + throw new AlfrescoRuntimeException("Failed to retrieve value: " + err.getMessage(), err); + } + } +} diff --git a/source/java/org/alfresco/web/app/servlet/ajax/InvokeCommand.java b/source/java/org/alfresco/web/app/servlet/ajax/InvokeCommand.java new file mode 100644 index 0000000000..3c5e905804 --- /dev/null +++ b/source/java/org/alfresco/web/app/servlet/ajax/InvokeCommand.java @@ -0,0 +1,97 @@ +package org.alfresco.web.app.servlet.ajax; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; + +import javax.faces.FactoryFinder; +import javax.faces.component.UIViewRoot; +import javax.faces.context.FacesContext; +import javax.faces.context.ResponseWriter; +import javax.faces.el.MethodBinding; +import javax.faces.render.RenderKit; +import javax.faces.render.RenderKitFactory; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.transaction.UserTransaction; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.web.bean.repository.Repository; + +/** + * Command that invokes the method represented by the expression. + *

+ * The managed bean method called is responsible for writing the response + * by getting hold of the JSF ResponseWriter. Parameters can also be + * retrieved via the JSF ExternalContext object. + *

+ * In a future release (if required) annotations may be used to state + * what content type to use for the response. + * + * @author gavinc + */ +public class InvokeCommand extends BaseAjaxCommand +{ + public void execute(FacesContext facesContext, String expression, + HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException + { + // setup the JSF response writer. + + // NOTE: it doesn't seem to matter what the content type of the response is (at least with Dojo), + // it determines it's behaviour from the mimetype specified in the AJAX call on the client, + // therefore, for now we will always return a content type of text/html. + // In the future we may use annotations on the method to be called to specify what content + // type should be used for the response. + + OutputStream os = response.getOutputStream(); + UIViewRoot viewRoot = facesContext.getViewRoot(); + RenderKitFactory renderFactory = (RenderKitFactory)FactoryFinder. + getFactory(FactoryFinder.RENDER_KIT_FACTORY); + RenderKit renderKit = renderFactory.getRenderKit(facesContext, + viewRoot.getRenderKitId()); + ResponseWriter writer = renderKit.createResponseWriter( + new OutputStreamWriter(os), MimetypeMap.MIMETYPE_HTML, "UTF-8"); + facesContext.setResponseWriter(writer); + response.setContentType(writer.getContentType()); + + // create the JSF binding expression + String bindingExpr = makeBindingExpression(expression); + + if (logger.isDebugEnabled()) + logger.debug("Invoking method represented by " + bindingExpr); + + UserTransaction tx = null; + try + { + // create the method binding from the expression + MethodBinding binding = facesContext.getApplication().createMethodBinding( + bindingExpr, new Class[] {}); + + if (binding != null) + { + // setup the transaction + tx = Repository.getUserTransaction(facesContext); + tx.begin(); + + // invoke the method + binding.invoke(facesContext, new Object[] {}); + + // commit + tx.commit(); + } + } + catch (Throwable err) + { + // rollback the transaction + try { if (tx != null) {tx.rollback();} } catch (Exception ex) {} + + throw new AlfrescoRuntimeException("Failed to execute method: " + err.getMessage(), err); + } + + // force the output back to the client + writer.close(); + } +} diff --git a/source/java/org/alfresco/web/bean/ajax/BaseAjaxBean.java b/source/java/org/alfresco/web/bean/ajax/BaseAjaxBean.java new file mode 100644 index 0000000000..6dbd25f18d --- /dev/null +++ b/source/java/org/alfresco/web/bean/ajax/BaseAjaxBean.java @@ -0,0 +1,51 @@ +package org.alfresco.web.bean.ajax; + +import java.io.IOException; + +import javax.faces.context.FacesContext; +import javax.faces.context.ResponseWriter; + +/** + * Base class for all Ajax managed beans. + * + * It is not necessary to extend this bean but it provides + * helper methods. + * + * @author gavinc + */ +public abstract class BaseAjaxBean +{ + private ResponseWriter writer; + + /** + * Writes the given string to the response writer for this bean + * + * @param str The string to send back to the client + */ + public void write(String str) + { + try + { + getWriter().write(str); + } + catch (IOException ioe) + { + // not much we can do here, ignore + } + } + + /** + * Returns the ResponseWriter for this bean + * + * @return The JSF ResponseWriter + */ + public ResponseWriter getWriter() + { + if (this.writer == null) + { + this.writer = FacesContext.getCurrentInstance().getResponseWriter(); + } + + return this.writer; + } +} diff --git a/source/web/WEB-INF/web.xml b/source/web/WEB-INF/web.xml index 0f53fbdbb6..643f854213 100644 --- a/source/web/WEB-INF/web.xml +++ b/source/web/WEB-INF/web.xml @@ -155,6 +155,11 @@ org.alfresco.web.app.servlet.CommandServlet + + ajaxServlet + org.alfresco.web.app.servlet.ajax.AjaxServlet + + axis org.apache.axis.transport.http.AxisServlet @@ -205,6 +210,11 @@ /command/* + + ajaxServlet + /ajax/* + + axis /api/* diff --git a/source/web/scripts/ajax.js b/source/web/scripts/ajax.js new file mode 100644 index 0000000000..4327134502 --- /dev/null +++ b/source/web/scripts/ajax.js @@ -0,0 +1,62 @@ +// +// Alfresco AJAX support library +// Gavin Cornwell 14-07-2006 +// + +/** + * Makes an AJAX request to the server using POST. A text/html response + * is presumed. + * + * @param context The name of the application, normally "/alfresco" + * @param command The AJAX command to call, either 'invoke', 'get' or 'set' + * @param expression The managed bean expression + * @param callbackHandler The function to callback when the request completes + */ +function ajaxPostRequest(context, command, expression, callbackHandler) +{ + makeAjaxRequest(context, command, expression, null, callbackHandler, + "post", "text/html"); +} + +/** + * Makes an AJAX request to the server using POST. + * + * @param context The name of the application, normally "/alfresco" + * @param command The AJAX command to call, either 'invoke', 'get' or 'set' + * @param expression The managed bean expression + * @param parameters Set of parameters to pass with the request + * @param callbackHandler The function to callback when the request completes + * @param method The HTTP method to use for the request either "get" or "post" + * @param contentType The mimetype to expect from the server + */ +function makeAjaxRequest(context, command, expression, parameters, + callbackHandler, method, contentType) +{ + // use dojo to do the actual work + dojo.io.bind({ + method: method, + url: context + "/ajax/" + command + "/" + expression, + content: parameters, + load: callbackHandler, + error: handleErrorDojo, + mimetype: contentType + }); +} + +/** + * Default handler for errors + */ +function handleErrorDojo(type, errObj) +{ + // remove the dojo prefix from the message + var errorStart = "XMLHttpTransport Error: 500 "; + var msg = errObj.message; + + if (msg.indexOf(errorStart) != -1) + { + msg = msg.substring(errorStart.length); + } + + // TODO: Show a nicer error page, an alert will do for now! + alert(msg); +} \ No newline at end of file diff --git a/source/web/scripts/dojo.js b/source/web/scripts/dojo.js new file mode 100644 index 0000000000..038afe584f --- /dev/null +++ b/source/web/scripts/dojo.js @@ -0,0 +1,5593 @@ +/* + Copyright (c) 2004-2006, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +if(typeof dojo=="undefined"){ +var dj_global=this; +function dj_undef(_1,_2){ +if(_2==null){ +_2=dj_global; +} +return (typeof _2[_1]=="undefined"); +} +if(dj_undef("djConfig")){ +var djConfig={}; +} +if(dj_undef("dojo")){ +var dojo={}; +} +dojo.version={major:0,minor:3,patch:1,flag:"",revision:Number("$Rev: 4342 $".match(/[0-9]+/)[0]),toString:function(){ +with(dojo.version){ +return major+"."+minor+"."+patch+flag+" ("+revision+")"; +} +}}; +dojo.evalProp=function(_3,_4,_5){ +return (_4&&!dj_undef(_3,_4)?_4[_3]:(_5?(_4[_3]={}):undefined)); +}; +dojo.parseObjPath=function(_6,_7,_8){ +var _9=(_7!=null?_7:dj_global); +var _a=_6.split("."); +var _b=_a.pop(); +for(var i=0,l=_a.length;i1){ +dh.modulesLoadedListeners.push(function(){ +obj[_3d](); +}); +} +} +if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){ +dh.callLoaded(); +} +}; +dojo.addOnUnload=function(obj,_40){ +var dh=dojo.hostenv; +if(arguments.length==1){ +dh.unloadListeners.push(obj); +}else{ +if(arguments.length>1){ +dh.unloadListeners.push(function(){ +obj[_40](); +}); +} +} +}; +dojo.hostenv.modulesLoaded=function(){ +if(this.post_load_){ +return; +} +if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){ +if(this.inFlightCount>0){ +dojo.debug("files still in flight!"); +return; +} +dojo.hostenv.callLoaded(); +} +}; +dojo.hostenv.callLoaded=function(){ +if(typeof setTimeout=="object"){ +setTimeout("dojo.hostenv.loaded();",0); +}else{ +dojo.hostenv.loaded(); +} +}; +dojo.hostenv.getModuleSymbols=function(_42){ +var _43=_42.split("."); +for(var i=_43.length-1;i>0;i--){ +var _45=_43.slice(0,i).join("."); +var _46=this.getModulePrefix(_45); +if(_46!=_45){ +_43.splice(0,i,_46); +break; +} +} +return _43; +}; +dojo.hostenv._global_omit_module_check=false; +dojo.hostenv.loadModule=function(_47,_48,_49){ +if(!_47){ +return; +} +_49=this._global_omit_module_check||_49; +var _4a=this.findModule(_47,false); +if(_4a){ +return _4a; +} +if(dj_undef(_47,this.loading_modules_)){ +this.addedToLoadingCount.push(_47); +} +this.loading_modules_[_47]=1; +var _4b=_47.replace(/\./g,"/")+".js"; +var _4c=this.getModuleSymbols(_47); +var _4d=((_4c[0].charAt(0)!="/")&&(!_4c[0].match(/^\w+:/))); +var _4e=_4c[_4c.length-1]; +var _4f=_47.split("."); +if(_4e=="*"){ +_47=(_4f.slice(0,-1)).join("."); +while(_4c.length){ +_4c.pop(); +_4c.push(this.pkgFileName); +_4b=_4c.join("/")+".js"; +if(_4d&&(_4b.charAt(0)=="/")){ +_4b=_4b.slice(1); +} +ok=this.loadPath(_4b,((!_49)?_47:null)); +if(ok){ +break; +} +_4c.pop(); +} +}else{ +_4b=_4c.join("/")+".js"; +_47=_4f.join("."); +var ok=this.loadPath(_4b,((!_49)?_47:null)); +if((!ok)&&(!_48)){ +_4c.pop(); +while(_4c.length){ +_4b=_4c.join("/")+".js"; +ok=this.loadPath(_4b,((!_49)?_47:null)); +if(ok){ +break; +} +_4c.pop(); +_4b=_4c.join("/")+"/"+this.pkgFileName+".js"; +if(_4d&&(_4b.charAt(0)=="/")){ +_4b=_4b.slice(1); +} +ok=this.loadPath(_4b,((!_49)?_47:null)); +if(ok){ +break; +} +} +} +if((!ok)&&(!_49)){ +dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'"); +} +} +if(!_49&&!this["isXDomain"]){ +_4a=this.findModule(_47,false); +if(!_4a){ +dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'"); +} +} +return _4a; +}; +dojo.hostenv.startPackage=function(_51){ +var _52=dojo.evalObjPath((_51.split(".").slice(0,-1)).join(".")); +this.loaded_modules_[(new String(_51)).toLowerCase()]=_52; +var _53=_51.split(/\./); +if(_53[_53.length-1]=="*"){ +_53.pop(); +} +return dojo.evalObjPath(_53.join("."),true); +}; +dojo.hostenv.findModule=function(_54,_55){ +var lmn=(new String(_54)).toLowerCase(); +if(this.loaded_modules_[lmn]){ +return this.loaded_modules_[lmn]; +} +var _57=dojo.evalObjPath(_54); +if((_54)&&(typeof _57!="undefined")&&(_57)){ +this.loaded_modules_[lmn]=_57; +return _57; +} +if(_55){ +dojo.raise("no loaded module named '"+_54+"'"); +} +return null; +}; +dojo.kwCompoundRequire=function(_58){ +var _59=_58["common"]||[]; +var _5a=(_58[dojo.hostenv.name_])?_59.concat(_58[dojo.hostenv.name_]||[]):_59.concat(_58["default"]||[]); +for(var x=0;x<_5a.length;x++){ +var _5c=_5a[x]; +if(_5c.constructor==Array){ +dojo.hostenv.loadModule.apply(dojo.hostenv,_5c); +}else{ +dojo.hostenv.loadModule(_5c); +} +} +}; +dojo.require=function(){ +dojo.hostenv.loadModule.apply(dojo.hostenv,arguments); +}; +dojo.requireIf=function(){ +if((arguments[0]===true)||(arguments[0]=="common")||(arguments[0]&&dojo.render[arguments[0]].capable)){ +var _5d=[]; +for(var i=1;i1){ +var _67=_66[1]; +var _68=_67.split("&"); +for(var x in _68){ +var sp=_68[x].split("="); +if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){ +var opt=sp[0].substr(9); +try{ +djConfig[opt]=eval(sp[1]); +} +catch(e){ +djConfig[opt]=sp[1]; +} +} +} +} +} +if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){ +var _6c=document.getElementsByTagName("script"); +var _6d=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i; +for(var i=0;i<_6c.length;i++){ +var src=_6c[i].getAttribute("src"); +if(!src){ +continue; +} +var m=src.match(_6d); +if(m){ +var _71=src.substring(0,m.index); +if(src.indexOf("bootstrap1")>-1){ +_71+="../"; +} +if(!this["djConfig"]){ +djConfig={}; +} +if(djConfig["baseScriptUri"]==""){ +djConfig["baseScriptUri"]=_71; +} +if(djConfig["baseRelativePath"]==""){ +djConfig["baseRelativePath"]=_71; +} +break; +} +} +} +var dr=dojo.render; +var drh=dojo.render.html; +var drs=dojo.render.svg; +var dua=drh.UA=navigator.userAgent; +var dav=drh.AV=navigator.appVersion; +var t=true; +var f=false; +drh.capable=t; +drh.support.builtin=t; +dr.ver=parseFloat(drh.AV); +dr.os.mac=dav.indexOf("Macintosh")>=0; +dr.os.win=dav.indexOf("Windows")>=0; +dr.os.linux=dav.indexOf("X11")>=0; +drh.opera=dua.indexOf("Opera")>=0; +drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0); +drh.safari=dav.indexOf("Safari")>=0; +var _79=dua.indexOf("Gecko"); +drh.mozilla=drh.moz=(_79>=0)&&(!drh.khtml); +if(drh.mozilla){ +drh.geckoVersion=dua.substring(_79+6,_79+14); +} +drh.ie=(document.all)&&(!drh.opera); +drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0; +drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0; +drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0; +drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0; +dojo.locale=(drh.ie?navigator.userLanguage:navigator.language).toLowerCase(); +dr.vml.capable=drh.ie; +drs.capable=f; +drs.support.plugin=f; +drs.support.builtin=f; +if(document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("org.w3c.dom.svg","1.0")){ +drs.capable=t; +drs.support.builtin=t; +drs.support.plugin=f; +} +})(); +dojo.hostenv.startPackage("dojo.hostenv"); +dojo.render.name=dojo.hostenv.name_="browser"; +dojo.hostenv.searchIds=[]; +dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"]; +dojo.hostenv.getXmlhttpObject=function(){ +var _7a=null; +var _7b=null; +try{ +_7a=new XMLHttpRequest(); +} +catch(e){ +} +if(!_7a){ +for(var i=0;i<3;++i){ +var _7d=dojo.hostenv._XMLHTTP_PROGIDS[i]; +try{ +_7a=new ActiveXObject(_7d); +} +catch(e){ +_7b=e; +} +if(_7a){ +dojo.hostenv._XMLHTTP_PROGIDS=[_7d]; +break; +} +} +} +if(!_7a){ +return dojo.raise("XMLHTTP not available",_7b); +} +return _7a; +}; +dojo.hostenv.getText=function(uri,_7f,_80){ +var _81=this.getXmlhttpObject(); +if(_7f){ +_81.onreadystatechange=function(){ +if(4==_81.readyState){ +if((!_81["status"])||((200<=_81.status)&&(300>_81.status))){ +_7f(_81.responseText); +} +} +}; +} +_81.open("GET",uri,_7f?true:false); +try{ +_81.send(null); +if(_7f){ +return null; +} +if((_81["status"])&&((200>_81.status)||(300<=_81.status))){ +throw Error("Unable to load "+uri+" status:"+_81.status); +} +} +catch(e){ +if((_80)&&(!_7f)){ +return null; +}else{ +throw e; +} +} +return _81.responseText; +}; +dojo.hostenv.defaultDebugContainerId="dojoDebug"; +dojo.hostenv._println_buffer=[]; +dojo.hostenv._println_safe=false; +dojo.hostenv.println=function(_82){ +if(!dojo.hostenv._println_safe){ +dojo.hostenv._println_buffer.push(_82); +}else{ +try{ +var _83=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId); +if(!_83){ +_83=document.getElementsByTagName("body")[0]||document.body; +} +var div=document.createElement("div"); +div.appendChild(document.createTextNode(_82)); +_83.appendChild(div); +} +catch(e){ +try{ +document.write("

"+_82+"
"); +} +catch(e2){ +window.status=_82; +} +} +} +}; +dojo.addOnLoad(function(){ +dojo.hostenv._println_safe=true; +while(dojo.hostenv._println_buffer.length>0){ +dojo.hostenv.println(dojo.hostenv._println_buffer.shift()); +} +}); +function dj_addNodeEvtHdlr(_85,_86,fp,_88){ +var _89=_85["on"+_86]||function(){ +}; +_85["on"+_86]=function(){ +fp.apply(_85,arguments); +_89.apply(_85,arguments); +}; +return true; +} +dj_addNodeEvtHdlr(window,"load",function(){ +if(arguments.callee.initialized){ +return; +} +arguments.callee.initialized=true; +var _8a=function(){ +if(dojo.render.html.ie){ +dojo.hostenv.makeWidgets(); +} +}; +if(dojo.hostenv.inFlightCount==0){ +_8a(); +dojo.hostenv.modulesLoaded(); +}else{ +dojo.addOnLoad(_8a); +} +}); +dj_addNodeEvtHdlr(window,"unload",function(){ +dojo.hostenv.unloaded(); +}); +dojo.hostenv.makeWidgets=function(){ +var _8b=[]; +if(djConfig.searchIds&&djConfig.searchIds.length>0){ +_8b=_8b.concat(djConfig.searchIds); +} +if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){ +_8b=_8b.concat(dojo.hostenv.searchIds); +} +if((djConfig.parseWidgets)||(_8b.length>0)){ +if(dojo.evalObjPath("dojo.widget.Parse")){ +var _8c=new dojo.xml.Parse(); +if(_8b.length>0){ +for(var x=0;x<_8b.length;x++){ +var _8e=document.getElementById(_8b[x]); +if(!_8e){ +continue; +} +var _8f=_8c.parseElement(_8e,null,true); +dojo.widget.getParser().createComponents(_8f); +} +}else{ +if(djConfig.parseWidgets){ +var _8f=_8c.parseElement(document.getElementsByTagName("body")[0]||document.body,null,true); +dojo.widget.getParser().createComponents(_8f); +} +} +} +} +}; +dojo.addOnLoad(function(){ +if(!dojo.render.html.ie){ +dojo.hostenv.makeWidgets(); +} +}); +try{ +if(dojo.render.html.ie){ +document.write(""); +document.write(""); +} +} +catch(e){ +} +dojo.hostenv.writeIncludes=function(){ +}; +dojo.byId=function(id,doc){ +if(id&&(typeof id=="string"||id instanceof String)){ +if(!doc){ +doc=document; +} +return doc.getElementById(id); +} +return id; +}; +(function(){ +if(typeof dj_usingBootstrap!="undefined"){ +return; +} +var _92=false; +var _93=false; +var _94=false; +if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){ +_92=true; +}else{ +if(typeof this["load"]=="function"){ +_93=true; +}else{ +if(window.widget){ +_94=true; +} +} +} +var _95=[]; +if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){ +_95.push("debug.js"); +} +if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_92)&&(!_94)){ +_95.push("browser_debug.js"); +} +if((this["djConfig"])&&(djConfig["compat"])){ +_95.push("compat/"+djConfig["compat"]+".js"); +} +var _96=djConfig["baseScriptUri"]; +if((this["djConfig"])&&(djConfig["baseLoaderUri"])){ +_96=djConfig["baseLoaderUri"]; +} +for(var x=0;x<_95.length;x++){ +var _98=_96+"src/"+_95[x]; +if(_92||_93){ +load(_98); +}else{ +try{ +document.write(""); +} +catch(e){ +var _99=document.createElement("script"); +_99.src=_98; +document.getElementsByTagName("head")[0].appendChild(_99); +} +} +} +})(); +dojo.fallback_locale="en"; +dojo.normalizeLocale=function(_9a){ +return _9a?_9a.toLowerCase():dojo.locale; +}; +dojo.requireLocalization=function(_9b,_9c,_9d){ +dojo.debug("EXPERIMENTAL: dojo.requireLocalization"); +var _9e=dojo.hostenv.getModuleSymbols(_9b); +var _9f=_9e.concat("nls").join("/"); +_9d=dojo.normalizeLocale(_9d); +var _a0=_9d.split("-"); +var _a1=[]; +for(var i=_a0.length;i>0;i--){ +_a1.push(_a0.slice(0,i).join("-")); +} +if(_a1[_a1.length-1]!=dojo.fallback_locale){ +_a1.push(dojo.fallback_locale); +} +var _a3=[_9b,"_nls",_9c].join("."); +var _a4=dojo.hostenv.startPackage(_a3); +dojo.hostenv.loaded_modules_[_a3]=_a4; +var _a5=false; +for(var i=_a1.length-1;i>=0;i--){ +var loc=_a1[i]; +var pkg=[_a3,loc].join("."); +var _a8=false; +if(!dojo.hostenv.findModule(pkg)){ +dojo.hostenv.loaded_modules_[pkg]=null; +var _a9=[_9f,loc,_9c].join("/")+".js"; +_a8=dojo.hostenv.loadPath(_a9,null,function(_aa){ +_a4[loc]=_aa; +if(_a5){ +for(var x in _a5){ +if(!_a4[loc][x]){ +_a4[loc][x]=_a5[x]; +} +} +} +}); +}else{ +_a8=true; +} +if(_a8&&_a4[loc]){ +_a5=_a4[loc]; +} +} +}; +dojo.provide("dojo.string.common"); +dojo.require("dojo.string"); +dojo.string.trim=function(str,wh){ +if(!str.replace){ +return str; +} +if(!str.length){ +return str; +} +var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g); +return str.replace(re,""); +}; +dojo.string.trimStart=function(str){ +return dojo.string.trim(str,1); +}; +dojo.string.trimEnd=function(str){ +return dojo.string.trim(str,-1); +}; +dojo.string.repeat=function(str,_b2,_b3){ +var out=""; +for(var i=0;i<_b2;i++){ +out+=str; +if(_b3&&i<_b2-1){ +out+=_b3; +} +} +return out; +}; +dojo.string.pad=function(str,len,c,dir){ +var out=String(str); +if(!c){ +c="0"; +} +if(!dir){ +dir=1; +} +while(out.length0){ +out=c+out; +}else{ +out+=c; +} +} +return out; +}; +dojo.string.padLeft=function(str,len,c){ +return dojo.string.pad(str,len,c,1); +}; +dojo.string.padRight=function(str,len,c){ +return dojo.string.pad(str,len,c,-1); +}; +dojo.provide("dojo.string"); +dojo.require("dojo.string.common"); +dojo.provide("dojo.lang.common"); +dojo.require("dojo.lang"); +dojo.lang._mixin=function(obj,_c2){ +var _c3={}; +for(var x in _c2){ +if(typeof _c3[x]=="undefined"||_c3[x]!=_c2[x]){ +obj[x]=_c2[x]; +} +} +if(dojo.render.html.ie&&dojo.lang.isFunction(_c2["toString"])&&_c2["toString"]!=obj["toString"]){ +obj.toString=_c2.toString; +} +return obj; +}; +dojo.lang.mixin=function(obj,_c6){ +for(var i=1,l=arguments.length;i-1; +}; +dojo.lang.isObject=function(wh){ +if(typeof wh=="undefined"){ +return false; +} +return (typeof wh=="object"||wh===null||dojo.lang.isArray(wh)||dojo.lang.isFunction(wh)); +}; +dojo.lang.isArray=function(wh){ +return (wh instanceof Array||typeof wh=="array"); +}; +dojo.lang.isArrayLike=function(wh){ +if(dojo.lang.isString(wh)){ +return false; +} +if(dojo.lang.isFunction(wh)){ +return false; +} +if(dojo.lang.isArray(wh)){ +return true; +} +if(typeof wh!="undefined"&&wh&&dojo.lang.isNumber(wh.length)&&isFinite(wh.length)){ +return true; +} +return false; +}; +dojo.lang.isFunction=function(wh){ +if(!wh){ +return false; +} +return (wh instanceof Function||typeof wh=="function"); +}; +dojo.lang.isString=function(wh){ +return (wh instanceof String||typeof wh=="string"); +}; +dojo.lang.isAlien=function(wh){ +if(!wh){ +return false; +} +return !dojo.lang.isFunction()&&/\{\s*\[native code\]\s*\}/.test(String(wh)); +}; +dojo.lang.isBoolean=function(wh){ +return (wh instanceof Boolean||typeof wh=="boolean"); +}; +dojo.lang.isNumber=function(wh){ +return (wh instanceof Number||typeof wh=="number"); +}; +dojo.lang.isUndefined=function(wh){ +return ((wh==undefined)&&(typeof wh=="undefined")); +}; +dojo.provide("dojo.lang.extras"); +dojo.require("dojo.lang.common"); +dojo.lang.setTimeout=function(_e2,_e3){ +var _e4=window,argsStart=2; +if(!dojo.lang.isFunction(_e2)){ +_e4=_e2; +_e2=_e3; +_e3=arguments[2]; +argsStart++; +} +if(dojo.lang.isString(_e2)){ +_e2=_e4[_e2]; +} +var _e5=[]; +for(var i=argsStart;i=4){ +this.changeUrl=_f7; +} +} +}; +dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(_f8,_f9,evt){ +},error:function(_fb,_fc){ +},timeout:function(_fd){ +},handle:function(){ +},timeoutSeconds:0,abort:function(){ +},fromKwArgs:function(_fe){ +if(_fe["url"]){ +_fe.url=_fe.url.toString(); +} +if(_fe["formNode"]){ +_fe.formNode=dojo.byId(_fe.formNode); +} +if(!_fe["method"]&&_fe["formNode"]&&_fe["formNode"].method){ +_fe.method=_fe["formNode"].method; +} +if(!_fe["handle"]&&_fe["handler"]){ +_fe.handle=_fe.handler; +} +if(!_fe["load"]&&_fe["loaded"]){ +_fe.load=_fe.loaded; +} +if(!_fe["changeUrl"]&&_fe["changeURL"]){ +_fe.changeUrl=_fe.changeURL; +} +_fe.encoding=dojo.lang.firstValued(_fe["encoding"],djConfig["bindEncoding"],""); +_fe.sendTransport=dojo.lang.firstValued(_fe["sendTransport"],djConfig["ioSendTransport"],false); +var _ff=dojo.lang.isFunction; +for(var x=0;x0){ +dojo.io.bind(dojo.io._bindQueue.shift()); +}else{ +dojo.io._queueBindInFlight=false; +} +} +}; +dojo.io._bindQueue=[]; +dojo.io._queueBindInFlight=false; +dojo.io.argsFromMap=function(map,_110,last){ +var enc=/utf/i.test(_110||"")?encodeURIComponent:dojo.string.encodeAscii; +var _113=[]; +var _114=new Object(); +for(var name in map){ +var _116=function(elt){ +var val=enc(name)+"="+enc(elt); +_113[(last==name)?"push":"unshift"](val); +}; +if(!_114[name]){ +var _119=map[name]; +if(dojo.lang.isArray(_119)){ +dojo.lang.forEach(_119,_116); +}else{ +_116(_119); +} +} +} +return _113.join("&"); +}; +dojo.io.setIFrameSrc=function(_11a,src,_11c){ +try{ +var r=dojo.render.html; +if(!_11c){ +if(r.safari){ +_11a.location=src; +}else{ +frames[_11a.name].location=src; +} +}else{ +var idoc; +if(r.ie){ +idoc=_11a.contentWindow.document; +}else{ +if(r.safari){ +idoc=_11a.document; +}else{ +idoc=_11a.contentWindow; +} +} +if(!idoc){ +_11a.location=src; +return; +}else{ +idoc.location.replace(src); +} +} +} +catch(e){ +dojo.debug(e); +dojo.debug("setIFrameSrc: "+e); +} +}; +dojo.provide("dojo.lang.array"); +dojo.require("dojo.lang.common"); +dojo.lang.has=function(obj,name){ +try{ +return (typeof obj[name]!="undefined"); +} +catch(e){ +return false; +} +}; +dojo.lang.isEmpty=function(obj){ +if(dojo.lang.isObject(obj)){ +var tmp={}; +var _123=0; +for(var x in obj){ +if(obj[x]&&(!tmp[x])){ +_123++; +break; +} +} +return (_123==0); +}else{ +if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){ +return obj.length==0; +} +} +}; +dojo.lang.map=function(arr,obj,_127){ +var _128=dojo.lang.isString(arr); +if(_128){ +arr=arr.split(""); +} +if(dojo.lang.isFunction(obj)&&(!_127)){ +_127=obj; +obj=dj_global; +}else{ +if(dojo.lang.isFunction(obj)&&_127){ +var _129=obj; +obj=_127; +_127=_129; +} +} +if(Array.map){ +var _12a=Array.map(arr,_127,obj); +}else{ +var _12a=[]; +for(var i=0;i=3){ +dojo.raise("thisObject doesn't exist!"); +} +_13e=dj_global; +} +var _140=[]; +for(var i=0;i/gm,">").replace(/"/gm,"""); +if(!_183){ +str=str.replace(/'/gm,"'"); +} +return str; +}; +dojo.string.escapeSql=function(str){ +return str.replace(/'/gm,"''"); +}; +dojo.string.escapeRegExp=function(str){ +return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1"); +}; +dojo.string.escapeJavaScript=function(str){ +return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1"); +}; +dojo.string.escapeString=function(str){ +return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r"); +}; +dojo.string.summary=function(str,len){ +if(!len||str.length<=len){ +return str; +}else{ +return str.substring(0,len).replace(/\.+$/,"")+"..."; +} +}; +dojo.string.endsWith=function(str,end,_18c){ +if(_18c){ +str=str.toLowerCase(); +end=end.toLowerCase(); +} +if((str.length-end.length)<0){ +return false; +} +return str.lastIndexOf(end)==str.length-end.length; +}; +dojo.string.endsWithAny=function(str){ +for(var i=1;i-1){ +return true; +} +} +return false; +}; +dojo.string.normalizeNewlines=function(text,_197){ +if(_197=="\n"){ +text=text.replace(/\r\n/g,"\n"); +text=text.replace(/\r/g,"\n"); +}else{ +if(_197=="\r"){ +text=text.replace(/\r\n/g,"\r"); +text=text.replace(/\n/g,"\r"); +}else{ +text=text.replace(/([^\r])\n/g,"$1\r\n"); +text=text.replace(/\r([^\n])/g,"\r\n$1"); +} +} +return text; +}; +dojo.string.splitEscaped=function(str,_199){ +var _19a=[]; +for(var i=0,prevcomma=0;i5)&&(_1a1[x].indexOf("dojo-")>=0)){ +return "dojo:"+_1a1[x].substr(5).toLowerCase(); +} +} +} +} +} +return _19e.toLowerCase(); +}; +dojo.dom.getUniqueId=function(){ +do{ +var id="dj_unique_"+(++arguments.callee._idIncrement); +}while(document.getElementById(id)); +return id; +}; +dojo.dom.getUniqueId._idIncrement=0; +dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_1a4,_1a5){ +var node=_1a4.firstChild; +while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){ +node=node.nextSibling; +} +if(_1a5&&node&&node.tagName&&node.tagName.toLowerCase()!=_1a5.toLowerCase()){ +node=dojo.dom.nextElement(node,_1a5); +} +return node; +}; +dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_1a7,_1a8){ +var node=_1a7.lastChild; +while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){ +node=node.previousSibling; +} +if(_1a8&&node&&node.tagName&&node.tagName.toLowerCase()!=_1a8.toLowerCase()){ +node=dojo.dom.prevElement(node,_1a8); +} +return node; +}; +dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_1ab){ +if(!node){ +return null; +} +do{ +node=node.nextSibling; +}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE); +if(node&&_1ab&&_1ab.toLowerCase()!=node.tagName.toLowerCase()){ +return dojo.dom.nextElement(node,_1ab); +} +return node; +}; +dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_1ad){ +if(!node){ +return null; +} +if(_1ad){ +_1ad=_1ad.toLowerCase(); +} +do{ +node=node.previousSibling; +}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE); +if(node&&_1ad&&_1ad.toLowerCase()!=node.tagName.toLowerCase()){ +return dojo.dom.prevElement(node,_1ad); +} +return node; +}; +dojo.dom.moveChildren=function(_1ae,_1af,trim){ +var _1b1=0; +if(trim){ +while(_1ae.hasChildNodes()&&_1ae.firstChild.nodeType==dojo.dom.TEXT_NODE){ +_1ae.removeChild(_1ae.firstChild); +} +while(_1ae.hasChildNodes()&&_1ae.lastChild.nodeType==dojo.dom.TEXT_NODE){ +_1ae.removeChild(_1ae.lastChild); +} +} +while(_1ae.hasChildNodes()){ +_1af.appendChild(_1ae.firstChild); +_1b1++; +} +return _1b1; +}; +dojo.dom.copyChildren=function(_1b2,_1b3,trim){ +var _1b5=_1b2.cloneNode(true); +return this.moveChildren(_1b5,_1b3,trim); +}; +dojo.dom.removeChildren=function(node){ +var _1b7=node.childNodes.length; +while(node.hasChildNodes()){ +node.removeChild(node.firstChild); +} +return _1b7; +}; +dojo.dom.replaceChildren=function(node,_1b9){ +dojo.dom.removeChildren(node); +node.appendChild(_1b9); +}; +dojo.dom.removeNode=function(node){ +if(node&&node.parentNode){ +return node.parentNode.removeChild(node); +} +}; +dojo.dom.getAncestors=function(node,_1bc,_1bd){ +var _1be=[]; +var _1bf=dojo.lang.isFunction(_1bc); +while(node){ +if(!_1bf||_1bc(node)){ +_1be.push(node); +} +if(_1bd&&_1be.length>0){ +return _1be[0]; +} +node=node.parentNode; +} +if(_1bd){ +return null; +} +return _1be; +}; +dojo.dom.getAncestorsByTag=function(node,tag,_1c2){ +tag=tag.toLowerCase(); +return dojo.dom.getAncestors(node,function(el){ +return ((el.tagName)&&(el.tagName.toLowerCase()==tag)); +},_1c2); +}; +dojo.dom.getFirstAncestorByTag=function(node,tag){ +return dojo.dom.getAncestorsByTag(node,tag,true); +}; +dojo.dom.isDescendantOf=function(node,_1c7,_1c8){ +if(_1c8&&node){ +node=node.parentNode; +} +while(node){ +if(node==_1c7){ +return true; +} +node=node.parentNode; +} +return false; +}; +dojo.dom.innerXML=function(node){ +if(node.innerXML){ +return node.innerXML; +}else{ +if(node.xml){ +return node.xml; +}else{ +if(typeof XMLSerializer!="undefined"){ +return (new XMLSerializer()).serializeToString(node); +} +} +} +}; +dojo.dom.createDocument=function(){ +var doc=null; +if(!dj_undef("ActiveXObject")){ +var _1cb=["MSXML2","Microsoft","MSXML","MSXML3"]; +for(var i=0;i<_1cb.length;i++){ +try{ +doc=new ActiveXObject(_1cb[i]+".XMLDOM"); +} +catch(e){ +} +if(doc){ +break; +} +} +}else{ +if((document.implementation)&&(document.implementation.createDocument)){ +doc=document.implementation.createDocument("","",null); +} +} +return doc; +}; +dojo.dom.createDocumentFromText=function(str,_1ce){ +if(!_1ce){ +_1ce="text/xml"; +} +if(!dj_undef("DOMParser")){ +var _1cf=new DOMParser(); +return _1cf.parseFromString(str,_1ce); +}else{ +if(!dj_undef("ActiveXObject")){ +var _1d0=dojo.dom.createDocument(); +if(_1d0){ +_1d0.async=false; +_1d0.loadXML(str); +return _1d0; +}else{ +dojo.debug("toXml didn't work?"); +} +}else{ +if(document.createElement){ +var tmp=document.createElement("xml"); +tmp.innerHTML=str; +if(document.implementation&&document.implementation.createDocument){ +var _1d2=document.implementation.createDocument("foo","",null); +for(var i=0;i"); +} +} +catch(e){ +} +if(dojo.render.html.opera){ +dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work."); +} +dojo.undo.browser={initialHref:window.location.href,initialHash:window.location.hash,moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(args){ +this.initialState={"url":this.initialHref,"kwArgs":args,"urlHash":this.initialHash}; +},addToHistory:function(args){ +var hash=null; +if(!this.historyIframe){ +this.historyIframe=window.frames["djhistory"]; +} +if(!this.bookmarkAnchor){ +this.bookmarkAnchor=document.createElement("a"); +(document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor); +this.bookmarkAnchor.style.display="none"; +} +if((!args["changeUrl"])||(dojo.render.html.ie)){ +var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime(); +this.moveForward=true; +dojo.io.setIFrameSrc(this.historyIframe,url,false); +} +if(args["changeUrl"]){ +this.changingUrl=true; +hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime()); +setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;",1); +this.bookmarkAnchor.href=hash; +if(dojo.render.html.ie){ +var _1f4=args["back"]||args["backButton"]||args["handle"]; +var tcb=function(_1f6){ +if(window.location.hash!=""){ +setTimeout("window.location.href = '"+hash+"';",1); +} +_1f4.apply(this,[_1f6]); +}; +if(args["back"]){ +args.back=tcb; +}else{ +if(args["backButton"]){ +args.backButton=tcb; +}else{ +if(args["handle"]){ +args.handle=tcb; +} +} +} +this.forwardStack=[]; +var _1f7=args["forward"]||args["forwardButton"]||args["handle"]; +var tfw=function(_1f9){ +if(window.location.hash!=""){ +window.location.href=hash; +} +if(_1f7){ +_1f7.apply(this,[_1f9]); +} +}; +if(args["forward"]){ +args.forward=tfw; +}else{ +if(args["forwardButton"]){ +args.forwardButton=tfw; +}else{ +if(args["handle"]){ +args.handle=tfw; +} +} +} +}else{ +if(dojo.render.html.moz){ +if(!this.locationTimer){ +this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200); +} +} +} +} +this.historyStack.push({"url":url,"kwArgs":args,"urlHash":hash}); +},checkLocation:function(){ +if(!this.changingUrl){ +var hsl=this.historyStack.length; +if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(hsl==1)){ +this.handleBackButton(); +return; +} +if(this.forwardStack.length>0){ +if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){ +this.handleForwardButton(); +return; +} +} +if((hsl>=2)&&(this.historyStack[hsl-2])){ +if(this.historyStack[hsl-2].urlHash==window.location.hash){ +this.handleBackButton(); +return; +} +} +} +},iframeLoaded:function(evt,_1fc){ +if(!dojo.render.html.opera){ +var _1fd=this._getUrlQuery(_1fc.href); +if(_1fd==null){ +if(this.historyStack.length==1){ +this.handleBackButton(); +} +return; +} +if(this.moveForward){ +this.moveForward=false; +return; +} +if(this.historyStack.length>=2&&_1fd==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){ +this.handleBackButton(); +}else{ +if(this.forwardStack.length>0&&_1fd==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){ +this.handleForwardButton(); +} +} +} +},handleBackButton:function(){ +var _1fe=this.historyStack.pop(); +if(!_1fe){ +return; +} +var last=this.historyStack[this.historyStack.length-1]; +if(!last&&this.historyStack.length==0){ +last=this.initialState; +} +if(last){ +if(last.kwArgs["back"]){ +last.kwArgs["back"](); +}else{ +if(last.kwArgs["backButton"]){ +last.kwArgs["backButton"](); +}else{ +if(last.kwArgs["handle"]){ +last.kwArgs.handle("back"); +} +} +} +} +this.forwardStack.push(_1fe); +},handleForwardButton:function(){ +var last=this.forwardStack.pop(); +if(!last){ +return; +} +if(last.kwArgs["forward"]){ +last.kwArgs.forward(); +}else{ +if(last.kwArgs["forwardButton"]){ +last.kwArgs.forwardButton(); +}else{ +if(last.kwArgs["handle"]){ +last.kwArgs.handle("forward"); +} +} +} +this.historyStack.push(last); +},_getUrlQuery:function(url){ +var _202=url.split("?"); +if(_202.length<2){ +return null; +}else{ +return _202[1]; +} +}}; +dojo.provide("dojo.io.BrowserIO"); +dojo.require("dojo.io"); +dojo.require("dojo.lang.array"); +dojo.require("dojo.lang.func"); +dojo.require("dojo.string.extras"); +dojo.require("dojo.dom"); +dojo.require("dojo.undo.browser"); +dojo.io.checkChildrenForFile=function(node){ +var _204=false; +var _205=node.getElementsByTagName("input"); +dojo.lang.forEach(_205,function(_206){ +if(_204){ +return; +} +if(_206.getAttribute("type")=="file"){ +_204=true; +} +}); +return _204; +}; +dojo.io.formHasFile=function(_207){ +return dojo.io.checkChildrenForFile(_207); +}; +dojo.io.updateNode=function(node,_209){ +node=dojo.byId(node); +var args=_209; +if(dojo.lang.isString(_209)){ +args={url:_209}; +} +args.mimetype="text/html"; +args.load=function(t,d,e){ +while(node.firstChild){ +if(dojo["event"]){ +try{ +dojo.event.browser.clean(node.firstChild); +} +catch(e){ +} +} +node.removeChild(node.firstChild); +} +node.innerHTML=d; +}; +dojo.io.bind(args); +}; +dojo.io.formFilter=function(node){ +var type=(node.type||"").toLowerCase(); +return !node.disabled&&node.name&&!dojo.lang.inArray(type,["file","submit","image","reset","button"]); +}; +dojo.io.encodeForm=function(_210,_211,_212){ +if((!_210)||(!_210.tagName)||(!_210.tagName.toLowerCase()=="form")){ +dojo.raise("Attempted to encode a non-form element."); +} +if(!_212){ +_212=dojo.io.formFilter; +} +var enc=/utf/i.test(_211||"")?encodeURIComponent:dojo.string.encodeAscii; +var _214=[]; +for(var i=0;i<_210.elements.length;i++){ +var elm=_210.elements[i]; +if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_212(elm)){ +continue; +} +var name=enc(elm.name); +var type=elm.type.toLowerCase(); +if(type=="select-multiple"){ +for(var j=0;j=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){ +var ret; +if(_23b.method.toLowerCase()=="head"){ +var _241=http.getAllResponseHeaders(); +ret={}; +ret.toString=function(){ +return _241; +}; +var _242=_241.split(/[\r\n]+/g); +for(var i=0;i<_242.length;i++){ +var pair=_242[i].match(/^([^:]+)\s*:\s*(.+)$/i); +if(pair){ +ret[pair[1]]=pair[2]; +} +} +}else{ +if(_23b.mimetype=="text/javascript"){ +try{ +ret=dj_eval(http.responseText); +} +catch(e){ +dojo.debug(e); +dojo.debug(http.responseText); +ret=null; +} +}else{ +if(_23b.mimetype=="text/json"){ +try{ +ret=dj_eval("("+http.responseText+")"); +} +catch(e){ +dojo.debug(e); +dojo.debug(http.responseText); +ret=false; +} +}else{ +if((_23b.mimetype=="application/xml")||(_23b.mimetype=="text/xml")){ +ret=http.responseXML; +if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){ +ret=dojo.dom.createDocumentFromText(http.responseText); +} +}else{ +ret=http.responseText; +} +} +} +} +if(_23f){ +addToCache(url,_23e,_23b.method,http); +} +_23b[(typeof _23b.load=="function")?"load":"handle"]("load",ret,http,_23b); +}else{ +var _245=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText); +_23b[(typeof _23b.error=="function")?"error":"handle"]("error",_245,http,_23b); +} +} +function setHeaders(http,_247){ +if(_247["headers"]){ +for(var _248 in _247["headers"]){ +if(_248.toLowerCase()=="content-type"&&!_247["contentType"]){ +_247["contentType"]=_247["headers"][_248]; +}else{ +http.setRequestHeader(_248,_247["headers"][_248]); +} +} +} +} +this.inFlight=[]; +this.inFlightTimer=null; +this.startWatchingInFlight=function(){ +if(!this.inFlightTimer){ +this.inFlightTimer=setInterval("dojo.io.XMLHTTPTransport.watchInFlight();",10); +} +}; +this.watchInFlight=function(){ +var now=null; +for(var x=this.inFlight.length-1;x>=0;x--){ +var tif=this.inFlight[x]; +if(!tif){ +this.inFlight.splice(x,1); +continue; +} +if(4==tif.http.readyState){ +this.inFlight.splice(x,1); +doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache); +}else{ +if(tif.startTime){ +if(!now){ +now=(new Date()).getTime(); +} +if(tif.startTime+(tif.req.timeoutSeconds*1000)-1){ +dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url); +url=url.split("#")[0]; +} +if(_24e["file"]){ +_24e.method="post"; +} +if(!_24e["method"]){ +_24e.method="get"; +} +if(_24e.method.toLowerCase()=="get"){ +_24e.multipart=false; +}else{ +if(_24e["file"]){ +_24e.multipart=true; +}else{ +if(!_24e["multipart"]){ +_24e.multipart=false; +} +} +} +if(_24e["backButton"]||_24e["back"]||_24e["changeUrl"]){ +dojo.undo.browser.addToHistory(_24e); +} +var _253=_24e["content"]||{}; +if(_24e.sendTransport){ +_253["dojo.transport"]="xmlhttp"; +} +do{ +if(_24e.postContent){ +_250=_24e.postContent; +break; +} +if(_253){ +_250+=dojo.io.argsFromMap(_253,_24e.encoding); +} +if(_24e.method.toLowerCase()=="get"||!_24e.multipart){ +break; +} +var t=[]; +if(_250.length){ +var q=_250.split("&"); +for(var i=0;i-1?"&":"?")+_250; +} +if(_25a){ +_260+=(dojo.string.endsWithAny(_260,"?","&")?"":(_260.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf(); +} +http.open(_24e.method.toUpperCase(),_260,_259); +setHeaders(http,_24e); +try{ +http.send(null); +} +catch(e){ +if(typeof http.abort=="function"){ +http.abort(); +} +doLoad(_24e,{status:404},url,_250,_25b); +} +} +if(!_259){ +doLoad(_24e,http,url,_250,_25b); +} +_24e.abort=function(){ +return http.abort(); +}; +return; +}; +dojo.io.transports.addTransport("XMLHTTPTransport"); +}; +dojo.provide("dojo.event"); +dojo.require("dojo.lang.array"); +dojo.require("dojo.lang.extras"); +dojo.require("dojo.lang.func"); +dojo.event=new function(){ +this.canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]); +function interpolateArgs(args,_262){ +var dl=dojo.lang; +var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false}; +switch(args.length){ +case 0: +return; +case 1: +return; +case 2: +ao.srcFunc=args[0]; +ao.adviceFunc=args[1]; +break; +case 3: +if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){ +ao.adviceType="after"; +ao.srcObj=args[0]; +ao.srcFunc=args[1]; +ao.adviceFunc=args[2]; +}else{ +if((dl.isString(args[1]))&&(dl.isString(args[2]))){ +ao.srcFunc=args[1]; +ao.adviceFunc=args[2]; +}else{ +if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){ +ao.adviceType="after"; +ao.srcObj=args[0]; +ao.srcFunc=args[1]; +var _265=dl.nameAnonFunc(args[2],ao.adviceObj,_262); +ao.adviceFunc=_265; +}else{ +if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){ +ao.adviceType="after"; +ao.srcObj=dj_global; +var _265=dl.nameAnonFunc(args[0],ao.srcObj,_262); +ao.srcFunc=_265; +ao.adviceObj=args[1]; +ao.adviceFunc=args[2]; +} +} +} +} +break; +case 4: +if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){ +ao.adviceType="after"; +ao.srcObj=args[0]; +ao.srcFunc=args[1]; +ao.adviceObj=args[2]; +ao.adviceFunc=args[3]; +}else{ +if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){ +ao.adviceType=args[0]; +ao.srcObj=dj_global; +ao.srcFunc=args[1]; +ao.adviceObj=args[2]; +ao.adviceFunc=args[3]; +}else{ +if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){ +ao.adviceType=args[0]; +ao.srcObj=dj_global; +var _265=dl.nameAnonFunc(args[1],dj_global,_262); +ao.srcFunc=_265; +ao.adviceObj=args[2]; +ao.adviceFunc=args[3]; +}else{ +if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){ +ao.srcObj=args[1]; +ao.srcFunc=args[2]; +var _265=dl.nameAnonFunc(args[3],dj_global,_262); +ao.adviceObj=dj_global; +ao.adviceFunc=_265; +}else{ +if(dl.isObject(args[1])){ +ao.srcObj=args[1]; +ao.srcFunc=args[2]; +ao.adviceObj=dj_global; +ao.adviceFunc=args[3]; +}else{ +if(dl.isObject(args[2])){ +ao.srcObj=dj_global; +ao.srcFunc=args[1]; +ao.adviceObj=args[2]; +ao.adviceFunc=args[3]; +}else{ +ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global; +ao.srcFunc=args[1]; +ao.adviceFunc=args[2]; +ao.aroundFunc=args[3]; +} +} +} +} +} +} +break; +case 6: +ao.srcObj=args[1]; +ao.srcFunc=args[2]; +ao.adviceObj=args[3]; +ao.adviceFunc=args[4]; +ao.aroundFunc=args[5]; +ao.aroundObj=dj_global; +break; +default: +ao.srcObj=args[1]; +ao.srcFunc=args[2]; +ao.adviceObj=args[3]; +ao.adviceFunc=args[4]; +ao.aroundObj=args[5]; +ao.aroundFunc=args[6]; +ao.once=args[7]; +ao.delay=args[8]; +ao.rate=args[9]; +ao.adviceMsg=args[10]; +break; +} +if(dl.isFunction(ao.aroundFunc)){ +var _265=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_262); +ao.aroundFunc=_265; +} +if(dl.isFunction(ao.srcFunc)){ +ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc); +} +if(dl.isFunction(ao.adviceFunc)){ +ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc); +} +if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){ +ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc); +} +if(!ao.srcObj){ +dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc); +} +if(!ao.adviceObj){ +dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc); +} +return ao; +} +this.connect=function(){ +if(arguments.length==1){ +var ao=arguments[0]; +}else{ +var ao=interpolateArgs(arguments,true); +} +if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){ +var _267={}; +for(var x in ao){ +_267[x]=ao[x]; +} +var mjps=[]; +dojo.lang.forEach(ao.srcObj,function(src){ +if((dojo.render.html.capable)&&(dojo.lang.isString(src))){ +src=dojo.byId(src); +} +_267.srcObj=src; +mjps.push(dojo.event.connect.call(dojo.event,_267)); +}); +return mjps; +} +var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc); +if(ao.adviceFunc){ +var mjp2=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc); +} +mjp.kwAddAdvice(ao); +return mjp; +}; +this.log=function(a1,a2){ +var _26f; +if((arguments.length==1)&&(typeof a1=="object")){ +_26f=a1; +}else{ +_26f={srcObj:a1,srcFunc:a2}; +} +_26f.adviceFunc=function(){ +var _270=[]; +for(var x=0;x=this.jp_.around.length){ +return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args); +}else{ +var ti=this.jp_.around[this.around_index]; +var mobj=ti[0]||dj_global; +var meth=ti[1]; +return mobj[meth].call(mobj,this); +} +}; +dojo.event.MethodJoinPoint=function(obj,_287){ +this.object=obj||dj_global; +this.methodname=_287; +this.methodfunc=this.object[_287]; +this.before=[]; +this.after=[]; +this.around=[]; +}; +dojo.event.MethodJoinPoint.getForMethod=function(obj,_289){ +if(!obj){ +obj=dj_global; +} +if(!obj[_289]){ +obj[_289]=function(){ +}; +if(!obj[_289]){ +dojo.raise("Cannot set do-nothing method on that object "+_289); +} +}else{ +if((!dojo.lang.isFunction(obj[_289]))&&(!dojo.lang.isAlien(obj[_289]))){ +return null; +} +} +var _28a=_289+"$joinpoint"; +var _28b=_289+"$joinpoint$method"; +var _28c=obj[_28a]; +if(!_28c){ +var _28d=false; +if(dojo.event["browser"]){ +if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){ +_28d=true; +dojo.event.browser.addClobberNodeAttrs(obj,[_28a,_28b,_289]); +} +} +var _28e=obj[_289].length; +obj[_28b]=obj[_289]; +_28c=obj[_28a]=new dojo.event.MethodJoinPoint(obj,_28b); +obj[_289]=function(){ +var args=[]; +if((_28d)&&(!arguments.length)){ +var evt=null; +try{ +if(obj.ownerDocument){ +evt=obj.ownerDocument.parentWindow.event; +}else{ +if(obj.documentElement){ +evt=obj.documentElement.ownerDocument.parentWindow.event; +}else{ +evt=window.event; +} +} +} +catch(e){ +evt=window.event; +} +if(evt){ +args.push(dojo.event.browser.fixEvent(evt,this)); +} +}else{ +for(var x=0;x0){ +dojo.lang.forEach(this.before,_296); +} +var _2a6; +if(this.around.length>0){ +var mi=new dojo.event.MethodInvocation(this,obj,args); +_2a6=mi.proceed(); +}else{ +if(this.methodfunc){ +_2a6=this.object[this.methodname].apply(this.object,args); +} +} +if(this.after.length>0){ +dojo.lang.forEach(this.after,_296); +} +return (this.methodfunc)?_2a6:null; +},getArr:function(kind){ +var arr=this.after; +if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){ +arr=this.before; +}else{ +if(kind=="around"){ +arr=this.around; +} +} +return arr; +},kwAddAdvice:function(args){ +this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]); +},addAdvice:function(_2ab,_2ac,_2ad,_2ae,_2af,_2b0,once,_2b2,rate,_2b4){ +var arr=this.getArr(_2af); +if(!arr){ +dojo.raise("bad this: "+this); +} +var ao=[_2ab,_2ac,_2ad,_2ae,_2b2,rate,_2b4]; +if(once){ +if(this.hasAdvice(_2ab,_2ac,_2af,arr)>=0){ +return; +} +} +if(_2b0=="first"){ +arr.unshift(ao); +}else{ +arr.push(ao); +} +},hasAdvice:function(_2b7,_2b8,_2b9,arr){ +if(!arr){ +arr=this.getArr(_2b9); +} +var ind=-1; +for(var x=0;x=0;i=i-1){ +var el=na[i]; +if(el["__clobberAttrs__"]){ +for(var j=0;j0){ +this.duration=_319; +} +if(_31c){ +this.repeatCount=_31c; +} +if(rate){ +this.rate=rate; +} +if(_318){ +this.handler=_318.handler; +this.beforeBegin=_318.beforeBegin; +this.onBegin=_318.onBegin; +this.onEnd=_318.onEnd; +this.onPlay=_318.onPlay; +this.onPause=_318.onPause; +this.onStop=_318.onStop; +this.onAnimate=_318.onAnimate; +} +if(_31b&&dojo.lang.isFunction(_31b)){ +this.easing=_31b; +} +}; +dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation); +dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_31e,_31f){ +if(_31f){ +clearTimeout(this._timer); +this._active=false; +this._paused=false; +this._percent=0; +}else{ +if(this._active&&!this._paused){ +return this; +} +} +this.fire("handler",["beforeBegin"]); +this.fire("beforeBegin"); +if(_31e>0){ +setTimeout(dojo.lang.hitch(this,function(){ +this.play(null,_31f); +}),_31e); +return this; +} +this._startTime=new Date().valueOf(); +if(this._paused){ +this._startTime-=(this.duration*this._percent/100); +} +this._endTime=this._startTime+this.duration; +this._active=true; +this._paused=false; +var step=this._percent/100; +var _321=this.curve.getValue(step); +if(this._percent==0){ +if(!this._startRepeatCount){ +this._startRepeatCount=this.repeatCount; +} +this.fire("handler",["begin",_321]); +this.fire("onBegin",[_321]); +} +this.fire("handler",["play",_321]); +this.fire("onPlay",[_321]); +this._cycle(); +return this; +},pause:function(){ +clearTimeout(this._timer); +if(!this._active){ +return this; +} +this._paused=true; +var _322=this.curve.getValue(this._percent/100); +this.fire("handler",["pause",_322]); +this.fire("onPause",[_322]); +return this; +},gotoPercent:function(pct,_324){ +clearTimeout(this._timer); +this._active=true; +this._paused=true; +this._percent=pct; +if(_324){ +this.play(); +} +},stop:function(_325){ +clearTimeout(this._timer); +var step=this._percent/100; +if(_325){ +step=1; +} +var _327=this.curve.getValue(step); +this.fire("handler",["stop",_327]); +this.fire("onStop",[_327]); +this._active=false; +this._paused=false; +return this; +},status:function(){ +if(this._active){ +return this._paused?"paused":"playing"; +}else{ +return "stopped"; +} +},_cycle:function(){ +clearTimeout(this._timer); +if(this._active){ +var curr=new Date().valueOf(); +var step=(curr-this._startTime)/(this._endTime-this._startTime); +if(step>=1){ +step=1; +this._percent=100; +}else{ +this._percent=step*100; +} +if((this.easing)&&(dojo.lang.isFunction(this.easing))){ +step=this.easing(step); +} +var _32a=this.curve.getValue(step); +this.fire("handler",["animate",_32a]); +this.fire("onAnimate",[_32a]); +if(step<1){ +this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate); +}else{ +this._active=false; +this.fire("handler",["end"]); +this.fire("onEnd"); +if(this.repeatCount>0){ +this.repeatCount--; +this.play(null,true); +}else{ +if(this.repeatCount==-1){ +this.play(null,true); +}else{ +if(this._startRepeatCount){ +this.repeatCount=this._startRepeatCount; +this._startRepeatCount=0; +} +} +} +} +} +return this; +}}); +dojo.lfx.Combine=function(){ +dojo.lfx.IAnimation.call(this); +this._anims=[]; +this._animsEnded=0; +var _32b=arguments; +if(_32b.length==1&&(dojo.lang.isArray(_32b[0])||dojo.lang.isArrayLike(_32b[0]))){ +_32b=_32b[0]; +} +var _32c=this; +dojo.lang.forEach(_32b,function(anim){ +_32c._anims.push(anim); +var _32e=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_32e(); +_32c._onAnimsEnded(); +}; +}); +}; +dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation); +dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_32f,_330){ +if(!this._anims.length){ +return this; +} +this.fire("beforeBegin"); +if(_32f>0){ +setTimeout(dojo.lang.hitch(this,function(){ +this.play(null,_330); +}),_32f); +return this; +} +if(_330||this._anims[0].percent==0){ +this.fire("onBegin"); +} +this.fire("onPlay"); +this._animsCall("play",null,_330); +return this; +},pause:function(){ +this.fire("onPause"); +this._animsCall("pause"); +return this; +},stop:function(_331){ +this.fire("onStop"); +this._animsCall("stop",_331); +return this; +},_onAnimsEnded:function(){ +this._animsEnded++; +if(this._animsEnded>=this._anims.length){ +this.fire("onEnd"); +} +return this; +},_animsCall:function(_332){ +var args=[]; +if(arguments.length>1){ +for(var i=1;i0){ +setTimeout(dojo.lang.hitch(this,function(){ +this.play(null,_33e); +}),_33d); +return this; +} +if(_33f){ +if(this._currAnim==0){ +this.fire("handler",["begin",this._currAnim]); +this.fire("onBegin",[this._currAnim]); +} +this.fire("onPlay",[this._currAnim]); +_33f.play(null,_33e); +} +return this; +},pause:function(){ +if(this._anims[this._currAnim]){ +this._anims[this._currAnim].pause(); +this.fire("onPause",[this._currAnim]); +} +return this; +},playPause:function(){ +if(this._anims.length==0){ +return this; +} +if(this._currAnim==-1){ +this._currAnim=0; +} +var _340=this._anims[this._currAnim]; +if(_340){ +if(!_340._active||_340._paused){ +this.play(); +}else{ +this.pause(); +} +} +return this; +},stop:function(){ +var _341=this._anims[this._currAnim]; +if(_341){ +_341.stop(); +this.fire("onStop",[this._currAnim]); +} +return _341; +},_playNext:function(){ +if(this._currAnim==-1||this._anims.length==0){ +return this; +} +this._currAnim++; +if(this._anims[this._currAnim]){ +this._anims[this._currAnim].play(null,true); +} +return this; +}}); +dojo.lfx.combine=function(){ +var _342=arguments; +if(dojo.lang.isArray(arguments[0])){ +_342=arguments[0]; +} +return new dojo.lfx.Combine(_342); +}; +dojo.lfx.chain=function(){ +var _343=arguments; +if(dojo.lang.isArray(arguments[0])){ +_343=arguments[0]; +} +return new dojo.lfx.Chain(_343); +}; +dojo.provide("dojo.graphics.color"); +dojo.require("dojo.lang.array"); +dojo.graphics.color.Color=function(r,g,b,a){ +if(dojo.lang.isArray(r)){ +this.r=r[0]; +this.g=r[1]; +this.b=r[2]; +this.a=r[3]||1; +}else{ +if(dojo.lang.isString(r)){ +var rgb=dojo.graphics.color.extractRGB(r); +this.r=rgb[0]; +this.g=rgb[1]; +this.b=rgb[2]; +this.a=g||1; +}else{ +if(r instanceof dojo.graphics.color.Color){ +this.r=r.r; +this.b=r.b; +this.g=r.g; +this.a=r.a; +}else{ +this.r=r; +this.g=g; +this.b=b; +this.a=a; +} +} +} +}; +dojo.graphics.color.Color.fromArray=function(arr){ +return new dojo.graphics.color.Color(arr[0],arr[1],arr[2],arr[3]); +}; +dojo.lang.extend(dojo.graphics.color.Color,{toRgb:function(_34a){ +if(_34a){ +return this.toRgba(); +}else{ +return [this.r,this.g,this.b]; +} +},toRgba:function(){ +return [this.r,this.g,this.b,this.a]; +},toHex:function(){ +return dojo.graphics.color.rgb2hex(this.toRgb()); +},toCss:function(){ +return "rgb("+this.toRgb().join()+")"; +},toString:function(){ +return this.toHex(); +},blend:function(_34b,_34c){ +return dojo.graphics.color.blend(this.toRgb(),new dojo.graphics.color.Color(_34b).toRgb(),_34c); +}}); +dojo.graphics.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]}; +dojo.graphics.color.blend=function(a,b,_34f){ +if(typeof a=="string"){ +return dojo.graphics.color.blendHex(a,b,_34f); +} +if(!_34f){ +_34f=0; +}else{ +if(_34f>1){ +_34f=1; +}else{ +if(_34f<-1){ +_34f=-1; +} +} +} +var c=new Array(3); +for(var i=0;i<3;i++){ +var half=Math.abs(a[i]-b[i])/2; +c[i]=Math.floor(Math.min(a[i],b[i])+half+(half*_34f)); +} +return c; +}; +dojo.graphics.color.blendHex=function(a,b,_355){ +return dojo.graphics.color.rgb2hex(dojo.graphics.color.blend(dojo.graphics.color.hex2rgb(a),dojo.graphics.color.hex2rgb(b),_355)); +}; +dojo.graphics.color.extractRGB=function(_356){ +var hex="0123456789abcdef"; +_356=_356.toLowerCase(); +if(_356.indexOf("rgb")==0){ +var _358=_356.match(/rgba*\((\d+), *(\d+), *(\d+)/i); +var ret=_358.splice(1,3); +return ret; +}else{ +var _35a=dojo.graphics.color.hex2rgb(_356); +if(_35a){ +return _35a; +}else{ +return dojo.graphics.color.named[_356]||[255,255,255]; +} +} +}; +dojo.graphics.color.hex2rgb=function(hex){ +var _35c="0123456789ABCDEF"; +var rgb=new Array(3); +if(hex.indexOf("#")==0){ +hex=hex.substring(1); +} +hex=hex.toUpperCase(); +if(hex.replace(new RegExp("["+_35c+"]","g"),"")!=""){ +return null; +} +if(hex.length==3){ +rgb[0]=hex.charAt(0)+hex.charAt(0); +rgb[1]=hex.charAt(1)+hex.charAt(1); +rgb[2]=hex.charAt(2)+hex.charAt(2); +}else{ +rgb[0]=hex.substring(0,2); +rgb[1]=hex.substring(2,4); +rgb[2]=hex.substring(4); +} +for(var i=0;i0&&!(j==1&&segs[0]=="")&&segs[j]==".."&&segs[j-1]!=".."){ +if(j==segs.length-1){ +segs.splice(j,1); +segs[j-1]=""; +}else{ +segs.splice(j-1,2); +j-=2; +} +} +} +} +_36a.path=segs.join("/"); +} +} +} +} +uri=""; +if(_36a.scheme!=null){ +uri+=_36a.scheme+":"; +} +if(_36a.authority!=null){ +uri+="//"+_36a.authority; +} +uri+=_36a.path; +if(_36a.query!=null){ +uri+="?"+_36a.query; +} +if(_36a.fragment!=null){ +uri+="#"+_36a.fragment; +} +} +this.uri=uri.toString(); +var _36f="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"; +var r=this.uri.match(new RegExp(_36f)); +this.scheme=r[2]||(r[1]?"":null); +this.authority=r[4]||(r[3]?"":null); +this.path=r[5]; +this.query=r[7]||(r[6]?"":null); +this.fragment=r[9]||(r[8]?"":null); +if(this.authority!=null){ +_36f="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$"; +r=this.authority.match(new RegExp(_36f)); +this.user=r[3]||null; +this.password=r[4]||null; +this.host=r[5]; +this.port=r[7]||null; +} +this.toString=function(){ +return this.uri; +}; +}; +}; +dojo.provide("dojo.style"); +dojo.require("dojo.graphics.color"); +dojo.require("dojo.uri.Uri"); +dojo.require("dojo.lang.common"); +(function(){ +var h=dojo.render.html; +var ds=dojo.style; +var db=document["body"]||document["documentElement"]; +ds.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"}; +var bs=ds.boxSizing; +ds.getBoxSizing=function(node){ +if((h.ie)||(h.opera)){ +var cm=document["compatMode"]; +if((cm=="BackCompat")||(cm=="QuirksMode")){ +return bs.BORDER_BOX; +}else{ +return bs.CONTENT_BOX; +} +}else{ +if(arguments.length==0){ +node=document.documentElement; +} +var _377=ds.getStyle(node,"-moz-box-sizing"); +if(!_377){ +_377=ds.getStyle(node,"box-sizing"); +} +return (_377?_377:bs.CONTENT_BOX); +} +}; +ds.isBorderBox=function(node){ +return (ds.getBoxSizing(node)==bs.BORDER_BOX); +}; +ds.getUnitValue=function(node,_37a,_37b){ +var s=ds.getComputedStyle(node,_37a); +if((!s)||((s=="auto")&&(_37b))){ +return {value:0,units:"px"}; +} +if(dojo.lang.isUndefined(s)){ +return ds.getUnitValue.bad; +} +var _37d=s.match(/(\-?[\d.]+)([a-z%]*)/i); +if(!_37d){ +return ds.getUnitValue.bad; +} +return {value:Number(_37d[1]),units:_37d[2].toLowerCase()}; +}; +ds.getUnitValue.bad={value:NaN,units:""}; +ds.getPixelValue=function(node,_37f,_380){ +var _381=ds.getUnitValue(node,_37f,_380); +if(isNaN(_381.value)){ +return 0; +} +if((_381.value)&&(_381.units!="px")){ +return NaN; +} +return _381.value; +}; +ds.getNumericStyle=function(){ +dojo.deprecated("dojo.(style|html).getNumericStyle","in favor of dojo.(style|html).getPixelValue","0.4"); +return ds.getPixelValue.apply(this,arguments); +}; +ds.setPositivePixelValue=function(node,_383,_384){ +if(isNaN(_384)){ +return false; +} +node.style[_383]=Math.max(0,_384)+"px"; +return true; +}; +ds._sumPixelValues=function(node,_386,_387){ +var _388=0; +for(var x=0;x<_386.length;x++){ +_388+=ds.getPixelValue(node,_386[x],_387); +} +return _388; +}; +ds.isPositionAbsolute=function(node){ +return (ds.getComputedStyle(node,"position")=="absolute"); +}; +ds.getBorderExtent=function(node,side){ +return (ds.getStyle(node,"border-"+side+"-style")=="none"?0:ds.getPixelValue(node,"border-"+side+"-width")); +}; +ds.getMarginWidth=function(node){ +return ds._sumPixelValues(node,["margin-left","margin-right"],ds.isPositionAbsolute(node)); +}; +ds.getBorderWidth=function(node){ +return ds.getBorderExtent(node,"left")+ds.getBorderExtent(node,"right"); +}; +ds.getPaddingWidth=function(node){ +return ds._sumPixelValues(node,["padding-left","padding-right"],true); +}; +ds.getPadBorderWidth=function(node){ +return ds.getPaddingWidth(node)+ds.getBorderWidth(node); +}; +ds.getContentBoxWidth=function(node){ +node=dojo.byId(node); +return node.offsetWidth-ds.getPadBorderWidth(node); +}; +ds.getBorderBoxWidth=function(node){ +node=dojo.byId(node); +return node.offsetWidth; +}; +ds.getMarginBoxWidth=function(node){ +return ds.getInnerWidth(node)+ds.getMarginWidth(node); +}; +ds.setContentBoxWidth=function(node,_395){ +node=dojo.byId(node); +if(ds.isBorderBox(node)){ +_395+=ds.getPadBorderWidth(node); +} +return ds.setPositivePixelValue(node,"width",_395); +}; +ds.setMarginBoxWidth=function(node,_397){ +node=dojo.byId(node); +if(!ds.isBorderBox(node)){ +_397-=ds.getPadBorderWidth(node); +} +_397-=ds.getMarginWidth(node); +return ds.setPositivePixelValue(node,"width",_397); +}; +ds.getContentWidth=ds.getContentBoxWidth; +ds.getInnerWidth=ds.getBorderBoxWidth; +ds.getOuterWidth=ds.getMarginBoxWidth; +ds.setContentWidth=ds.setContentBoxWidth; +ds.setOuterWidth=ds.setMarginBoxWidth; +ds.getMarginHeight=function(node){ +return ds._sumPixelValues(node,["margin-top","margin-bottom"],ds.isPositionAbsolute(node)); +}; +ds.getBorderHeight=function(node){ +return ds.getBorderExtent(node,"top")+ds.getBorderExtent(node,"bottom"); +}; +ds.getPaddingHeight=function(node){ +return ds._sumPixelValues(node,["padding-top","padding-bottom"],true); +}; +ds.getPadBorderHeight=function(node){ +return ds.getPaddingHeight(node)+ds.getBorderHeight(node); +}; +ds.getContentBoxHeight=function(node){ +node=dojo.byId(node); +return node.offsetHeight-ds.getPadBorderHeight(node); +}; +ds.getBorderBoxHeight=function(node){ +node=dojo.byId(node); +return node.offsetHeight; +}; +ds.getMarginBoxHeight=function(node){ +return ds.getInnerHeight(node)+ds.getMarginHeight(node); +}; +ds.setContentBoxHeight=function(node,_3a0){ +node=dojo.byId(node); +if(ds.isBorderBox(node)){ +_3a0+=ds.getPadBorderHeight(node); +} +return ds.setPositivePixelValue(node,"height",_3a0); +}; +ds.setMarginBoxHeight=function(node,_3a2){ +node=dojo.byId(node); +if(!ds.isBorderBox(node)){ +_3a2-=ds.getPadBorderHeight(node); +} +_3a2-=ds.getMarginHeight(node); +return ds.setPositivePixelValue(node,"height",_3a2); +}; +ds.getContentHeight=ds.getContentBoxHeight; +ds.getInnerHeight=ds.getBorderBoxHeight; +ds.getOuterHeight=ds.getMarginBoxHeight; +ds.setContentHeight=ds.setContentBoxHeight; +ds.setOuterHeight=ds.setMarginBoxHeight; +ds.getAbsolutePosition=ds.abs=function(node,_3a4){ +node=dojo.byId(node); +var ret=[]; +ret.x=ret.y=0; +var st=dojo.html.getScrollTop(); +var sl=dojo.html.getScrollLeft(); +if(h.ie){ +with(node.getBoundingClientRect()){ +ret.x=left-2; +ret.y=top-2; +} +}else{ +if(document.getBoxObjectFor){ +var bo=document.getBoxObjectFor(node); +ret.x=bo.x-ds.sumAncestorProperties(node,"scrollLeft"); +ret.y=bo.y-ds.sumAncestorProperties(node,"scrollTop"); +}else{ +if(node["offsetParent"]){ +var _3a9; +if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){ +_3a9=db; +}else{ +_3a9=db.parentNode; +} +if(node.parentNode!=db){ +var nd=node; +if(window.opera){ +nd=db; +} +ret.x-=ds.sumAncestorProperties(nd,"scrollLeft"); +ret.y-=ds.sumAncestorProperties(nd,"scrollTop"); +} +do{ +var n=node["offsetLeft"]; +ret.x+=isNaN(n)?0:n; +var m=node["offsetTop"]; +ret.y+=isNaN(m)?0:m; +node=node.offsetParent; +}while((node!=_3a9)&&(node!=null)); +}else{ +if(node["x"]&&node["y"]){ +ret.x+=isNaN(node.x)?0:node.x; +ret.y+=isNaN(node.y)?0:node.y; +} +} +} +} +if(_3a4){ +ret.y+=st; +ret.x+=sl; +} +ret[0]=ret.x; +ret[1]=ret.y; +return ret; +}; +ds.sumAncestorProperties=function(node,prop){ +node=dojo.byId(node); +if(!node){ +return 0; +} +var _3af=0; +while(node){ +var val=node[prop]; +if(val){ +_3af+=val-0; +if(node==document.body){ +break; +} +} +node=node.parentNode; +} +return _3af; +}; +ds.getTotalOffset=function(node,type,_3b3){ +return ds.abs(node,_3b3)[(type=="top")?"y":"x"]; +}; +ds.getAbsoluteX=ds.totalOffsetLeft=function(node,_3b5){ +return ds.getTotalOffset(node,"left",_3b5); +}; +ds.getAbsoluteY=ds.totalOffsetTop=function(node,_3b7){ +return ds.getTotalOffset(node,"top",_3b7); +}; +ds.styleSheet=null; +ds.insertCssRule=function(_3b8,_3b9,_3ba){ +if(!ds.styleSheet){ +if(document.createStyleSheet){ +ds.styleSheet=document.createStyleSheet(); +}else{ +if(document.styleSheets[0]){ +ds.styleSheet=document.styleSheets[0]; +}else{ +return null; +} +} +} +if(arguments.length<3){ +if(ds.styleSheet.cssRules){ +_3ba=ds.styleSheet.cssRules.length; +}else{ +if(ds.styleSheet.rules){ +_3ba=ds.styleSheet.rules.length; +}else{ +return null; +} +} +} +if(ds.styleSheet.insertRule){ +var rule=_3b8+" { "+_3b9+" }"; +return ds.styleSheet.insertRule(rule,_3ba); +}else{ +if(ds.styleSheet.addRule){ +return ds.styleSheet.addRule(_3b8,_3b9,_3ba); +}else{ +return null; +} +} +}; +ds.removeCssRule=function(_3bc){ +if(!ds.styleSheet){ +dojo.debug("no stylesheet defined for removing rules"); +return false; +} +if(h.ie){ +if(!_3bc){ +_3bc=ds.styleSheet.rules.length; +ds.styleSheet.removeRule(_3bc); +} +}else{ +if(document.styleSheets[0]){ +if(!_3bc){ +_3bc=ds.styleSheet.cssRules.length; +} +ds.styleSheet.deleteRule(_3bc); +} +} +return true; +}; +ds.insertCssFile=function(URI,doc,_3bf){ +if(!URI){ +return; +} +if(!doc){ +doc=document; +} +var _3c0=dojo.hostenv.getText(URI); +_3c0=ds.fixPathsInCssText(_3c0,URI); +if(_3bf){ +var _3c1=doc.getElementsByTagName("style"); +var _3c2=""; +for(var i=0;i<_3c1.length;i++){ +_3c2=(_3c1[i].styleSheet&&_3c1[i].styleSheet.cssText)?_3c1[i].styleSheet.cssText:_3c1[i].innerHTML; +if(_3c0==_3c2){ +return; +} +} +} +var _3c4=ds.insertCssText(_3c0); +if(_3c4&&djConfig.isDebug){ +_3c4.setAttribute("dbgHref",URI); +} +return _3c4; +}; +ds.insertCssText=function(_3c5,doc,URI){ +if(!_3c5){ +return; +} +if(!doc){ +doc=document; +} +if(URI){ +_3c5=ds.fixPathsInCssText(_3c5,URI); +} +var _3c8=doc.createElement("style"); +_3c8.setAttribute("type","text/css"); +var head=doc.getElementsByTagName("head")[0]; +if(!head){ +dojo.debug("No head tag in document, aborting styles"); +return; +}else{ +head.appendChild(_3c8); +} +if(_3c8.styleSheet){ +_3c8.styleSheet.cssText=_3c5; +}else{ +var _3ca=doc.createTextNode(_3c5); +_3c8.appendChild(_3ca); +} +return _3c8; +}; +ds.fixPathsInCssText=function(_3cb,URI){ +if(!_3cb||!URI){ +return; +} +var pos=0; +var str=""; +var url=""; +while(pos!=-1){ +pos=0; +url=""; +pos=_3cb.indexOf("url(",pos); +if(pos<0){ +break; +} +str+=_3cb.slice(0,pos+4); +_3cb=_3cb.substring(pos+4,_3cb.length); +url+=_3cb.match(/^[\t\s\w()\/.\\'"-:#=&?]*\)/)[0]; +_3cb=_3cb.substring(url.length-1,_3cb.length); +url=url.replace(/^[\s\t]*(['"]?)([\w()\/.\\'"-:#=&?]*)\1[\s\t]*?\)/,"$2"); +if(url.search(/(file|https?|ftps?):\/\//)==-1){ +url=(new dojo.uri.Uri(URI,url).toString()); +} +str+=url; +} +return str+_3cb; +}; +ds.getBackgroundColor=function(node){ +node=dojo.byId(node); +var _3d1; +do{ +_3d1=ds.getStyle(node,"background-color"); +if(_3d1.toLowerCase()=="rgba(0, 0, 0, 0)"){ +_3d1="transparent"; +} +if(node==document.getElementsByTagName("body")[0]){ +node=null; +break; +} +node=node.parentNode; +}while(node&&dojo.lang.inArray(_3d1,["transparent",""])); +if(_3d1=="transparent"){ +_3d1=[255,255,255,0]; +}else{ +_3d1=dojo.graphics.color.extractRGB(_3d1); +} +return _3d1; +}; +ds.getComputedStyle=function(node,_3d3,_3d4){ +node=dojo.byId(node); +var _3d3=ds.toSelectorCase(_3d3); +var _3d5=ds.toCamelCase(_3d3); +if(!node||!node.style){ +return _3d4; +}else{ +if(document.defaultView){ +try{ +var cs=document.defaultView.getComputedStyle(node,""); +if(cs){ +return cs.getPropertyValue(_3d3); +} +} +catch(e){ +if(node.style.getPropertyValue){ +return node.style.getPropertyValue(_3d3); +}else{ +return _3d4; +} +} +}else{ +if(node.currentStyle){ +return node.currentStyle[_3d5]; +} +} +} +if(node.style.getPropertyValue){ +return node.style.getPropertyValue(_3d3); +}else{ +return _3d4; +} +}; +ds.getStyleProperty=function(node,_3d8){ +node=dojo.byId(node); +return (node&&node.style?node.style[ds.toCamelCase(_3d8)]:undefined); +}; +ds.getStyle=function(node,_3da){ +var _3db=ds.getStyleProperty(node,_3da); +return (_3db?_3db:ds.getComputedStyle(node,_3da)); +}; +ds.setStyle=function(node,_3dd,_3de){ +node=dojo.byId(node); +if(node&&node.style){ +var _3df=ds.toCamelCase(_3dd); +node.style[_3df]=_3de; +} +}; +ds.toCamelCase=function(_3e0){ +var arr=_3e0.split("-"),cc=arr[0]; +for(var i=1;i=1){ +if(h.ie){ +ds.clearOpacity(node); +return; +}else{ +_3e5=0.999999; +} +}else{ +if(_3e5<0){ +_3e5=0; +} +} +} +if(h.ie){ +if(node.nodeName.toLowerCase()=="tr"){ +var tds=node.getElementsByTagName("td"); +for(var x=0;x=0.999999?1:Number(opac); +}; +ds.clearOpacity=function clearOpacity(node){ +node=dojo.byId(node); +var ns=node.style; +if(h.ie){ +try{ +if(node.filters&&node.filters.alpha){ +ns.filter=""; +} +} +catch(e){ +} +}else{ +if(h.moz){ +ns.opacity=1; +ns.MozOpacity=1; +}else{ +if(h.safari){ +ns.opacity=1; +ns.KhtmlOpacity=1; +}else{ +ns.opacity=1; +} +} +} +}; +ds.setStyleAttributes=function(node,_3ee){ +var _3ef={"opacity":dojo.style.setOpacity,"content-height":dojo.style.setContentHeight,"content-width":dojo.style.setContentWidth,"outer-height":dojo.style.setOuterHeight,"outer-width":dojo.style.setOuterWidth}; +var _3f0=_3ee.replace(/(;)?\s*$/,"").split(";"); +for(var i=0;i<_3f0.length;i++){ +var _3f2=_3f0[i].split(":"); +var name=_3f2[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase(); +var _3f4=_3f2[1].replace(/\s*$/,"").replace(/^\s*/,""); +if(dojo.lang.has(_3ef,name)){ +_3ef[name](node,_3f4); +}else{ +node.style[dojo.style.toCamelCase(name)]=_3f4; +} +} +}; +ds._toggle=function(node,_3f6,_3f7){ +node=dojo.byId(node); +_3f7(node,!_3f6(node)); +return _3f6(node); +}; +ds.show=function(node){ +node=dojo.byId(node); +if(ds.getStyleProperty(node,"display")=="none"){ +ds.setStyle(node,"display",(node.dojoDisplayCache||"")); +node.dojoDisplayCache=undefined; +} +}; +ds.hide=function(node){ +node=dojo.byId(node); +if(typeof node["dojoDisplayCache"]=="undefined"){ +var d=ds.getStyleProperty(node,"display"); +if(d!="none"){ +node.dojoDisplayCache=d; +} +} +ds.setStyle(node,"display","none"); +}; +ds.setShowing=function(node,_3fc){ +ds[(_3fc?"show":"hide")](node); +}; +ds.isShowing=function(node){ +return (ds.getStyleProperty(node,"display")!="none"); +}; +ds.toggleShowing=function(node){ +return ds._toggle(node,ds.isShowing,ds.setShowing); +}; +ds.displayMap={tr:"",td:"",th:"",img:"inline",span:"inline",input:"inline",button:"inline"}; +ds.suggestDisplayByTagName=function(node){ +node=dojo.byId(node); +if(node&&node.tagName){ +var tag=node.tagName.toLowerCase(); +return (tag in ds.displayMap?ds.displayMap[tag]:"block"); +} +}; +ds.setDisplay=function(node,_402){ +ds.setStyle(node,"display",(dojo.lang.isString(_402)?_402:(_402?ds.suggestDisplayByTagName(node):"none"))); +}; +ds.isDisplayed=function(node){ +return (ds.getComputedStyle(node,"display")!="none"); +}; +ds.toggleDisplay=function(node){ +return ds._toggle(node,ds.isDisplayed,ds.setDisplay); +}; +ds.setVisibility=function(node,_406){ +ds.setStyle(node,"visibility",(dojo.lang.isString(_406)?_406:(_406?"visible":"hidden"))); +}; +ds.isVisible=function(node){ +return (ds.getComputedStyle(node,"visibility")!="hidden"); +}; +ds.toggleVisibility=function(node){ +return ds._toggle(node,ds.isVisible,ds.setVisibility); +}; +ds.toCoordinateArray=function(_409,_40a){ +if(dojo.lang.isArray(_409)){ +while(_409.length<4){ +_409.push(0); +} +while(_409.length>4){ +_409.pop(); +} +var ret=_409; +}else{ +var node=dojo.byId(_409); +var pos=ds.getAbsolutePosition(node,_40a); +var ret=[pos.x,pos.y,ds.getBorderBoxWidth(node),ds.getBorderBoxHeight(node)]; +} +ret.x=ret[0]; +ret.y=ret[1]; +ret.w=ret[2]; +ret.h=ret[3]; +return ret; +}; +})(); +dojo.provide("dojo.html"); +dojo.require("dojo.lang.func"); +dojo.require("dojo.dom"); +dojo.require("dojo.style"); +dojo.require("dojo.string"); +dojo.lang.mixin(dojo.html,dojo.dom); +dojo.lang.mixin(dojo.html,dojo.style); +dojo.html.clearSelection=function(){ +try{ +if(window["getSelection"]){ +if(dojo.render.html.safari){ +window.getSelection().collapse(); +}else{ +window.getSelection().removeAllRanges(); +} +}else{ +if(document.selection){ +if(document.selection.empty){ +document.selection.empty(); +}else{ +if(document.selection.clear){ +document.selection.clear(); +} +} +} +} +return true; +} +catch(e){ +dojo.debug(e); +return false; +} +}; +dojo.html.disableSelection=function(_40e){ +_40e=dojo.byId(_40e)||document.body; +var h=dojo.render.html; +if(h.mozilla){ +_40e.style.MozUserSelect="none"; +}else{ +if(h.safari){ +_40e.style.KhtmlUserSelect="none"; +}else{ +if(h.ie){ +_40e.unselectable="on"; +}else{ +return false; +} +} +} +return true; +}; +dojo.html.enableSelection=function(_410){ +_410=dojo.byId(_410)||document.body; +var h=dojo.render.html; +if(h.mozilla){ +_410.style.MozUserSelect=""; +}else{ +if(h.safari){ +_410.style.KhtmlUserSelect=""; +}else{ +if(h.ie){ +_410.unselectable="off"; +}else{ +return false; +} +} +} +return true; +}; +dojo.html.selectElement=function(_412){ +_412=dojo.byId(_412); +if(document.selection&&document.body.createTextRange){ +var _413=document.body.createTextRange(); +_413.moveToElementText(_412); +_413.select(); +}else{ +if(window["getSelection"]){ +var _414=window.getSelection(); +if(_414["selectAllChildren"]){ +_414.selectAllChildren(_412); +} +} +} +}; +dojo.html.selectInputText=function(_415){ +_415=dojo.byId(_415); +if(document.selection&&document.body.createTextRange){ +var _416=_415.createTextRange(); +_416.moveStart("character",0); +_416.moveEnd("character",_415.value.length); +_416.select(); +}else{ +if(window["getSelection"]){ +var _417=window.getSelection(); +_415.setSelectionRange(0,_415.value.length); +} +} +_415.focus(); +}; +dojo.html.isSelectionCollapsed=function(){ +if(document["selection"]){ +return document.selection.createRange().text==""; +}else{ +if(window["getSelection"]){ +var _418=window.getSelection(); +if(dojo.lang.isString(_418)){ +return _418==""; +}else{ +return _418.isCollapsed; +} +} +} +}; +dojo.html.getEventTarget=function(evt){ +if(!evt){ +evt=window.event||{}; +} +var t=(evt.srcElement?evt.srcElement:(evt.target?evt.target:null)); +while((t)&&(t.nodeType!=1)){ +t=t.parentNode; +} +return t; +}; +dojo.html.getDocumentWidth=function(){ +dojo.deprecated("dojo.html.getDocument*","replaced by dojo.html.getViewport*","0.4"); +return dojo.html.getViewportWidth(); +}; +dojo.html.getDocumentHeight=function(){ +dojo.deprecated("dojo.html.getDocument*","replaced by dojo.html.getViewport*","0.4"); +return dojo.html.getViewportHeight(); +}; +dojo.html.getDocumentSize=function(){ +dojo.deprecated("dojo.html.getDocument*","replaced of dojo.html.getViewport*","0.4"); +return dojo.html.getViewportSize(); +}; +dojo.html.getViewportWidth=function(){ +var w=0; +if(window.innerWidth){ +w=window.innerWidth; +} +if(dojo.exists(document,"documentElement.clientWidth")){ +var w2=document.documentElement.clientWidth; +if(!w||w2&&w2=left&&_456.x<=_45a&&_456.y>=top&&_456.y<=_458); +}; +dojo.html.setActiveStyleSheet=function(_45b){ +var i=0,a,els=document.getElementsByTagName("link"); +while(a=els[i++]){ +if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){ +a.disabled=true; +if(a.getAttribute("title")==_45b){ +a.disabled=false; +} +} +} +}; +dojo.html.getActiveStyleSheet=function(){ +var i=0,a,els=document.getElementsByTagName("link"); +while(a=els[i++]){ +if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")&&!a.disabled){ +return a.getAttribute("title"); +} +} +return null; +}; +dojo.html.getPreferredStyleSheet=function(){ +var i=0,a,els=document.getElementsByTagName("link"); +while(a=els[i++]){ +if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("rel").indexOf("alt")==-1&&a.getAttribute("title")){ +return a.getAttribute("title"); +} +} +return null; +}; +dojo.html.body=function(){ +return document.body||document.getElementsByTagName("body")[0]; +}; +dojo.html.isTag=function(node){ +node=dojo.byId(node); +if(node&&node.tagName){ +var arr=dojo.lang.map(dojo.lang.toArray(arguments,1),function(a){ +return String(a).toLowerCase(); +}); +return arr[dojo.lang.find(node.tagName.toLowerCase(),arr)]||""; +} +return ""; +}; +dojo.html.copyStyle=function(_462,_463){ +if(dojo.lang.isUndefined(_463.style.cssText)){ +_462.setAttribute("style",_463.getAttribute("style")); +}else{ +_462.style.cssText=_463.style.cssText; +} +dojo.html.addClass(_462,dojo.html.getClass(_463)); +}; +dojo.html._callExtrasDeprecated=function(_464,args){ +var _466="dojo.html.extras"; +dojo.deprecated("dojo.html."+_464,"moved to "+_466,"0.4"); +dojo["require"](_466); +return dojo.html[_464].apply(dojo.html,args); +}; +dojo.html.createNodesFromText=function(){ +return dojo.html._callExtrasDeprecated("createNodesFromText",arguments); +}; +dojo.html.gravity=function(){ +return dojo.html._callExtrasDeprecated("gravity",arguments); +}; +dojo.html.placeOnScreen=function(){ +return dojo.html._callExtrasDeprecated("placeOnScreen",arguments); +}; +dojo.html.placeOnScreenPoint=function(){ +return dojo.html._callExtrasDeprecated("placeOnScreenPoint",arguments); +}; +dojo.html.renderedTextContent=function(){ +return dojo.html._callExtrasDeprecated("renderedTextContent",arguments); +}; +dojo.html.BackgroundIframe=function(){ +return dojo.html._callExtrasDeprecated("BackgroundIframe",arguments); +}; +dojo.provide("dojo.lfx.html"); +dojo.require("dojo.lfx.Animation"); +dojo.require("dojo.html"); +dojo.lfx.html._byId=function(_467){ +if(!_467){ +return []; +} +if(dojo.lang.isArray(_467)){ +if(!_467.alreadyChecked){ +var n=[]; +dojo.lang.forEach(_467,function(node){ +n.push(dojo.byId(node)); +}); +n.alreadyChecked=true; +return n; +}else{ +return _467; +} +}else{ +var n=[]; +n.push(dojo.byId(_467)); +n.alreadyChecked=true; +return n; +} +}; +dojo.lfx.html.propertyAnimation=function(_46a,_46b,_46c,_46d){ +_46a=dojo.lfx.html._byId(_46a); +if(_46a.length==1){ +dojo.lang.forEach(_46b,function(prop){ +if(typeof prop["start"]=="undefined"){ +if(prop.property!="opacity"){ +prop.start=parseInt(dojo.style.getComputedStyle(_46a[0],prop.property)); +}else{ +prop.start=dojo.style.getOpacity(_46a[0]); +} +} +}); +} +var _46f=function(_470){ +var _471=new Array(_470.length); +for(var i=0;i<_470.length;i++){ +_471[i]=Math.round(_470[i]); +} +return _471; +}; +var _473=function(n,_475){ +n=dojo.byId(n); +if(!n||!n.style){ +return; +} +for(var s in _475){ +if(s=="opacity"){ +dojo.style.setOpacity(n,_475[s]); +}else{ +n.style[s]=_475[s]; +} +} +}; +var _477=function(_478){ +this._properties=_478; +this.diffs=new Array(_478.length); +dojo.lang.forEach(_478,function(prop,i){ +if(dojo.lang.isArray(prop.start)){ +this.diffs[i]=null; +}else{ +if(prop.start instanceof dojo.graphics.color.Color){ +prop.startRgb=prop.start.toRgb(); +prop.endRgb=prop.end.toRgb(); +}else{ +this.diffs[i]=prop.end-prop.start; +} +} +},this); +this.getValue=function(n){ +var ret={}; +dojo.lang.forEach(this._properties,function(prop,i){ +var _47f=null; +if(dojo.lang.isArray(prop.start)){ +}else{ +if(prop.start instanceof dojo.graphics.color.Color){ +_47f=(prop.units||"rgb")+"("; +for(var j=0;j1){ +return dojo.lfx.combine(_4a2); +}else{ +return _4a2[0]; +} +}; +dojo.lfx.html.wipeOut=function(_4a7,_4a8,_4a9,_4aa){ +_4a7=dojo.lfx.html._byId(_4a7); +var _4ab=[]; +dojo.lang.forEach(_4a7,function(node){ +var _4ad=dojo.style.getStyle(node,"overflow"); +if(_4ad=="visible"){ +node.style.overflow="hidden"; +} +dojo.style.show(node); +var anim=dojo.lfx.propertyAnimation(node,[{property:"height",start:dojo.style.getContentBoxHeight(node),end:0}],_4a8,_4a9); +var _4af=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_4af(); +dojo.style.hide(node); +node.style.overflow=_4ad; +if(_4aa){ +_4aa(node,anim); +} +}; +_4ab.push(anim); +}); +if(_4a7.length>1){ +return dojo.lfx.combine(_4ab); +}else{ +return _4ab[0]; +} +}; +dojo.lfx.html.slideTo=function(_4b0,_4b1,_4b2,_4b3,_4b4){ +_4b0=dojo.lfx.html._byId(_4b0); +var _4b5=[]; +dojo.lang.forEach(_4b0,function(node){ +var top=null; +var left=null; +var init=(function(){ +var _4ba=node; +return function(){ +top=_4ba.offsetTop; +left=_4ba.offsetLeft; +if(!dojo.style.isPositionAbsolute(_4ba)){ +var ret=dojo.style.abs(_4ba,true); +dojo.style.setStyleAttributes(_4ba,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;"); +top=ret.y; +left=ret.x; +} +}; +})(); +init(); +var anim=dojo.lfx.propertyAnimation(node,[{property:"top",start:top,end:_4b1[0]},{property:"left",start:left,end:_4b1[1]}],_4b2,_4b3); +var _4bd=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){ +}; +anim.beforeBegin=function(){ +_4bd(); +init(); +}; +if(_4b4){ +var _4be=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_4be(); +_4b4(_4b0,anim); +}; +} +_4b5.push(anim); +}); +if(_4b0.length>1){ +return dojo.lfx.combine(_4b5); +}else{ +return _4b5[0]; +} +}; +dojo.lfx.html.slideBy=function(_4bf,_4c0,_4c1,_4c2,_4c3){ +_4bf=dojo.lfx.html._byId(_4bf); +var _4c4=[]; +dojo.lang.forEach(_4bf,function(node){ +var top=null; +var left=null; +var init=(function(){ +var _4c9=node; +return function(){ +top=node.offsetTop; +left=node.offsetLeft; +if(!dojo.style.isPositionAbsolute(_4c9)){ +var ret=dojo.style.abs(_4c9); +dojo.style.setStyleAttributes(_4c9,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;"); +top=ret.y; +left=ret.x; +} +}; +})(); +init(); +var anim=dojo.lfx.propertyAnimation(node,[{property:"top",start:top,end:top+_4c0[0]},{property:"left",start:left,end:left+_4c0[1]}],_4c1,_4c2); +var _4cc=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){ +}; +anim.beforeBegin=function(){ +_4cc(); +init(); +}; +if(_4c3){ +var _4cd=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_4cd(); +_4c3(_4bf,anim); +}; +} +_4c4.push(anim); +}); +if(_4bf.length>1){ +return dojo.lfx.combine(_4c4); +}else{ +return _4c4[0]; +} +}; +dojo.lfx.html.explode=function(_4ce,_4cf,_4d0,_4d1,_4d2){ +_4ce=dojo.byId(_4ce); +_4cf=dojo.byId(_4cf); +var _4d3=dojo.style.toCoordinateArray(_4ce,true); +var _4d4=document.createElement("div"); +dojo.html.copyStyle(_4d4,_4cf); +with(_4d4.style){ +position="absolute"; +display="none"; +} +document.body.appendChild(_4d4); +with(_4cf.style){ +visibility="hidden"; +display="block"; +} +var _4d5=dojo.style.toCoordinateArray(_4cf,true); +with(_4cf.style){ +display="none"; +visibility="visible"; +} +var anim=new dojo.lfx.propertyAnimation(_4d4,[{property:"height",start:_4d3[3],end:_4d5[3]},{property:"width",start:_4d3[2],end:_4d5[2]},{property:"top",start:_4d3[1],end:_4d5[1]},{property:"left",start:_4d3[0],end:_4d5[0]},{property:"opacity",start:0.3,end:1}],_4d0,_4d1); +anim.beforeBegin=function(){ +dojo.style.setDisplay(_4d4,"block"); +}; +anim.onEnd=function(){ +dojo.style.setDisplay(_4cf,"block"); +_4d4.parentNode.removeChild(_4d4); +}; +if(_4d2){ +var _4d7=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_4d7(); +_4d2(_4cf,anim); +}; +} +return anim; +}; +dojo.lfx.html.implode=function(_4d8,end,_4da,_4db,_4dc){ +_4d8=dojo.byId(_4d8); +end=dojo.byId(end); +var _4dd=dojo.style.toCoordinateArray(_4d8,true); +var _4de=dojo.style.toCoordinateArray(end,true); +var _4df=document.createElement("div"); +dojo.html.copyStyle(_4df,_4d8); +dojo.style.setOpacity(_4df,0.3); +with(_4df.style){ +position="absolute"; +display="none"; +} +document.body.appendChild(_4df); +var anim=new dojo.lfx.propertyAnimation(_4df,[{property:"height",start:_4dd[3],end:_4de[3]},{property:"width",start:_4dd[2],end:_4de[2]},{property:"top",start:_4dd[1],end:_4de[1]},{property:"left",start:_4dd[0],end:_4de[0]},{property:"opacity",start:1,end:0.3}],_4da,_4db); +anim.beforeBegin=function(){ +dojo.style.hide(_4d8); +dojo.style.show(_4df); +}; +anim.onEnd=function(){ +_4df.parentNode.removeChild(_4df); +}; +if(_4dc){ +var _4e1=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_4e1(); +_4dc(_4d8,anim); +}; +} +return anim; +}; +dojo.lfx.html.highlight=function(_4e2,_4e3,_4e4,_4e5,_4e6){ +_4e2=dojo.lfx.html._byId(_4e2); +var _4e7=[]; +dojo.lang.forEach(_4e2,function(node){ +var _4e9=dojo.style.getBackgroundColor(node); +var bg=dojo.style.getStyle(node,"background-color").toLowerCase(); +var _4eb=dojo.style.getStyle(node,"background-image"); +var _4ec=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)"); +while(_4e9.length>3){ +_4e9.pop(); +} +var rgb=new dojo.graphics.color.Color(_4e3); +var _4ee=new dojo.graphics.color.Color(_4e9); +var anim=dojo.lfx.propertyAnimation(node,[{property:"background-color",start:rgb,end:_4ee}],_4e4,_4e5); +var _4f0=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){ +}; +anim.beforeBegin=function(){ +_4f0(); +if(_4eb){ +node.style.backgroundImage="none"; +} +node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")"; +}; +var _4f1=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_4f1(); +if(_4eb){ +node.style.backgroundImage=_4eb; +} +if(_4ec){ +node.style.backgroundColor="transparent"; +} +if(_4e6){ +_4e6(node,anim); +} +}; +_4e7.push(anim); +}); +if(_4e2.length>1){ +return dojo.lfx.combine(_4e7); +}else{ +return _4e7[0]; +} +}; +dojo.lfx.html.unhighlight=function(_4f2,_4f3,_4f4,_4f5,_4f6){ +_4f2=dojo.lfx.html._byId(_4f2); +var _4f7=[]; +dojo.lang.forEach(_4f2,function(node){ +var _4f9=new dojo.graphics.color.Color(dojo.style.getBackgroundColor(node)); +var rgb=new dojo.graphics.color.Color(_4f3); +var _4fb=dojo.style.getStyle(node,"background-image"); +var anim=dojo.lfx.propertyAnimation(node,[{property:"background-color",start:_4f9,end:rgb}],_4f4,_4f5); +var _4fd=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){ +}; +anim.beforeBegin=function(){ +_4fd(); +if(_4fb){ +node.style.backgroundImage="none"; +} +node.style.backgroundColor="rgb("+_4f9.toRgb().join(",")+")"; +}; +var _4fe=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){ +}; +anim.onEnd=function(){ +_4fe(); +if(_4f6){ +_4f6(node,anim); +} +}; +_4f7.push(anim); +}); +if(_4f2.length>1){ +return dojo.lfx.combine(_4f7); +}else{ +return _4f7[0]; +} +}; +dojo.lang.mixin(dojo.lfx,dojo.lfx.html); +dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]}); +dojo.provide("dojo.lfx.*"); +