Skip to content

Instantly share code, notes, and snippets.

@jimevans
Created April 27, 2012 21:51
Show Gist options
  • Save jimevans/2513693 to your computer and use it in GitHub Desktop.
Save jimevans/2513693 to your computer and use it in GitHub Desktop.
#This is the addition to $/javascript/webdriver/atoms/build.desc to build the compiled JavaScript
js_fragment(name = "synthetic_sendkeys",
module = "webdriver.atoms.inputs",
function = "webdriver.atoms.inputs.sendKeys",
deps = [ ":deps" ],
minify = "false")
// To use this, open IE, navigate to http://www.google.com, open the developer tools,
// change to the Script tab, paste this code into the script console, and execute it.
// You'll receive "Unable to set value of the property 'Unicode': object is null or undefined".
// This is because goog.string is declared in a provides() block, but the object is never
// actually instantiated so that the Unicode property can be set on it. This is a larger problem
// than just this single provides() call. If you were to manually fix that one, others would exhibit
// this problem.
var keys_fn=function(){return function(){var COMPILED=false;var goog=goog||{};goog.global=this;goog.DEBUG=true;goog.LOCALE="en";goog.provide=function(name){if(!COMPILED){if(goog.isProvided_(name))throw Error('Namespace "'+name+'" already declared.');delete goog.implicitNamespaces_[name];var namespace=name;while(namespace=namespace.substring(0,namespace.lastIndexOf("."))){if(goog.getObjectByName(namespace))break;goog.implicitNamespaces_[namespace]=true}}goog.exportPath_(name)};
goog.setTestOnly=function(opt_message){if(COMPILED&&!goog.DEBUG){opt_message=opt_message||"";throw Error("Importing test-only code into non-debug environment"+opt_message?": "+opt_message:".");}};if(!COMPILED){goog.isProvided_=function(name){return!goog.implicitNamespaces_[name]&&!!goog.getObjectByName(name)};goog.implicitNamespaces_={}}
goog.exportPath_=function(name,opt_object,opt_objectToExportTo){var parts=name.split(".");var cur=opt_objectToExportTo||goog.global;if(!(parts[0]in cur)&&cur.execScript)cur.execScript("var "+parts[0]);for(var part;parts.length&&(part=parts.shift());)if(!parts.length&&goog.isDef(opt_object))cur[part]=opt_object;else if(cur[part])cur=cur[part];else cur=cur[part]={}};
goog.getObjectByName=function(name,opt_obj){var parts=name.split(".");var cur=opt_obj||goog.global;for(var part;part=parts.shift();)if(goog.isDefAndNotNull(cur[part]))cur=cur[part];else return null;return cur};goog.globalize=function(obj,opt_global){var global=opt_global||goog.global;for(var x in obj)global[x]=obj[x]};
goog.addDependency=function(relPath,provides,requires){if(!COMPILED){var provide,require;var path=relPath.replace(/\\/g,"/");var deps=goog.dependencies_;for(var i=0;provide=provides[i];i++){deps.nameToPath[provide]=path;if(!(path in deps.pathToNames))deps.pathToNames[path]={};deps.pathToNames[path][provide]=true}for(var j=0;require=requires[j];j++){if(!(path in deps.requires))deps.requires[path]={};deps.requires[path][require]=true}}};goog.ENABLE_DEBUG_LOADER=true;
goog.require=function(name){if(!COMPILED){if(goog.isProvided_(name))return;if(goog.ENABLE_DEBUG_LOADER){var path=goog.getPathFromDeps_(name);if(path){goog.included_[path]=true;goog.writeScripts_();return}}var errorMessage="goog.require could not find: "+name;if(goog.global.console)goog.global.console["error"](errorMessage);throw Error(errorMessage);}};goog.basePath="";goog.global.CLOSURE_BASE_PATH;goog.global.CLOSURE_NO_DEPS;goog.global.CLOSURE_IMPORT_SCRIPT;goog.nullFunction=function(){};
goog.identityFunction=function(var_args){return arguments[0]};goog.abstractMethod=function(){throw Error("unimplemented abstract method");};goog.addSingletonGetter=function(ctor){ctor.getInstance=function(){return ctor.instance_||(ctor.instance_=new ctor)}};
if(!COMPILED&&goog.ENABLE_DEBUG_LOADER){goog.included_={};goog.dependencies_={pathToNames:{},nameToPath:{},requires:{},visited:{},written:{}};goog.inHtmlDocument_=function(){var doc=goog.global.document;return typeof doc!="undefined"&&"write"in doc};goog.findBasePath_=function(){if(goog.global.CLOSURE_BASE_PATH){goog.basePath=goog.global.CLOSURE_BASE_PATH;return}else if(!goog.inHtmlDocument_())return;var doc=goog.global.document;var scripts=doc.getElementsByTagName("script");for(var i=scripts.length-
1;i>=0;--i){var src=scripts[i].src;var qmark=src.lastIndexOf("?");var l=qmark==-1?src.length:qmark;if(src.substr(l-7,7)=="base.js"){goog.basePath=src.substr(0,l-7);return}}};goog.importScript_=function(src){var importScript=goog.global.CLOSURE_IMPORT_SCRIPT||goog.writeScriptTag_;if(!goog.dependencies_.written[src]&&importScript(src))goog.dependencies_.written[src]=true};goog.writeScriptTag_=function(src){if(goog.inHtmlDocument_()){var doc=goog.global.document;doc.write('<script type="text/javascript" src="'+
src+'"></'+"script>");return true}else return false};goog.writeScripts_=function(){var scripts=[];var seenScript={};var deps=goog.dependencies_;function visitNode(path){if(path in deps.written)return;if(path in deps.visited){if(!(path in seenScript)){seenScript[path]=true;scripts.push(path)}return}deps.visited[path]=true;if(path in deps.requires)for(var requireName in deps.requires[path])if(!goog.isProvided_(requireName))if(requireName in deps.nameToPath)visitNode(deps.nameToPath[requireName]);else throw Error("Undefined nameToPath for "+
requireName);if(!(path in seenScript)){seenScript[path]=true;scripts.push(path)}}for(var path in goog.included_)if(!deps.written[path])visitNode(path);for(var i=0;i<scripts.length;i++)if(scripts[i])goog.importScript_(goog.basePath+scripts[i]);else throw Error("Undefined script input");};goog.getPathFromDeps_=function(rule){if(rule in goog.dependencies_.nameToPath)return goog.dependencies_.nameToPath[rule];else return null};goog.findBasePath_();if(!goog.global.CLOSURE_NO_DEPS)goog.importScript_(goog.basePath+
"deps.js")}
goog.typeOf=function(value){var s=typeof value;if(s=="object")if(value){if(value instanceof Array)return"array";else if(value instanceof Object)return s;var className=Object.prototype.toString.call(value);if(className=="[object Window]")return"object";if(className=="[object Array]"||typeof value.length=="number"&&typeof value.splice!="undefined"&&typeof value.propertyIsEnumerable!="undefined"&&!value.propertyIsEnumerable("splice"))return"array";if(className=="[object Function]"||typeof value.call!="undefined"&&
typeof value.propertyIsEnumerable!="undefined"&&!value.propertyIsEnumerable("call"))return"function"}else return"null";else if(s=="function"&&typeof value.call=="undefined")return"object";return s};goog.propertyIsEnumerableCustom_=function(object,propName){if(propName in object)for(var key in object)if(key==propName&&Object.prototype.hasOwnProperty.call(object,propName))return true;return false};
goog.propertyIsEnumerable_=function(object,propName){if(object instanceof Object)return Object.prototype.propertyIsEnumerable.call(object,propName);else return goog.propertyIsEnumerableCustom_(object,propName)};goog.isDef=function(val){return val!==undefined};goog.isNull=function(val){return val===null};goog.isDefAndNotNull=function(val){return val!=null};goog.isArray=function(val){return goog.typeOf(val)=="array"};
goog.isArrayLike=function(val){var type=goog.typeOf(val);return type=="array"||type=="object"&&typeof val.length=="number"};goog.isDateLike=function(val){return goog.isObject(val)&&typeof val.getFullYear=="function"};goog.isString=function(val){return typeof val=="string"};goog.isBoolean=function(val){return typeof val=="boolean"};goog.isNumber=function(val){return typeof val=="number"};goog.isFunction=function(val){return goog.typeOf(val)=="function"};
goog.isObject=function(val){var type=goog.typeOf(val);return type=="object"||type=="array"||type=="function"};goog.getUid=function(obj){return obj[goog.UID_PROPERTY_]||(obj[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.removeUid=function(obj){if("removeAttribute"in obj)obj.removeAttribute(goog.UID_PROPERTY_);try{delete obj[goog.UID_PROPERTY_]}catch(ex){}};goog.UID_PROPERTY_="closure_uid_"+Math.floor(Math.random()*2147483648).toString(36);goog.uidCounter_=0;goog.getHashCode=goog.getUid;
goog.removeHashCode=goog.removeUid;goog.cloneObject=function(obj){var type=goog.typeOf(obj);if(type=="object"||type=="array"){if(obj.clone)return obj.clone();var clone=type=="array"?[]:{};for(var key in obj)clone[key]=goog.cloneObject(obj[key]);return clone}return obj};Object.prototype.clone;goog.bindNative_=function(fn,selfObj,var_args){return fn.call.apply(fn.bind,arguments)};
goog.bindJs_=function(fn,selfObj,var_args){if(!fn)throw new Error;if(arguments.length>2){var boundArgs=Array.prototype.slice.call(arguments,2);return function(){var newArgs=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(newArgs,boundArgs);return fn.apply(selfObj,newArgs)}}else return function(){return fn.apply(selfObj,arguments)}};
goog.bind=function(fn,selfObj,var_args){if(Function.prototype.bind&&Function.prototype.bind.toString().indexOf("native code")!=-1)goog.bind=goog.bindNative_;else goog.bind=goog.bindJs_;return goog.bind.apply(null,arguments)};goog.partial=function(fn,var_args){var args=Array.prototype.slice.call(arguments,1);return function(){var newArgs=Array.prototype.slice.call(arguments);newArgs.unshift.apply(newArgs,args);return fn.apply(this,newArgs)}};
goog.mixin=function(target,source){for(var x in source)target[x]=source[x]};goog.now=Date.now||function(){return+new Date};
goog.globalEval=function(script){if(goog.global.execScript)goog.global.execScript(script,"JavaScript");else if(goog.global.eval){if(goog.evalWorksForGlobals_==null){goog.global.eval("var _et_ = 1;");if(typeof goog.global["_et_"]!="undefined"){delete goog.global["_et_"];goog.evalWorksForGlobals_=true}else goog.evalWorksForGlobals_=false}if(goog.evalWorksForGlobals_)goog.global.eval(script);else{var doc=goog.global.document;var scriptElt=doc.createElement("script");scriptElt.type="text/javascript";
scriptElt.defer=false;scriptElt.appendChild(doc.createTextNode(script));doc.body.appendChild(scriptElt);doc.body.removeChild(scriptElt)}}else throw Error("goog.globalEval not available");};goog.evalWorksForGlobals_=null;goog.cssNameMapping_;goog.cssNameMappingStyle_;
goog.getCssName=function(className,opt_modifier){var getMapping=function(cssName){return goog.cssNameMapping_[cssName]||cssName};var renameByParts=function(cssName){var parts=cssName.split("-");var mapped=[];for(var i=0;i<parts.length;i++)mapped.push(getMapping(parts[i]));return mapped.join("-")};var rename;if(goog.cssNameMapping_)rename=goog.cssNameMappingStyle_=="BY_WHOLE"?getMapping:renameByParts;else rename=function(a){return a};if(opt_modifier)return className+"-"+rename(opt_modifier);else return rename(className)};
goog.setCssNameMapping=function(mapping,opt_style){goog.cssNameMapping_=mapping;goog.cssNameMappingStyle_=opt_style};goog.global.CLOSURE_CSS_NAME_MAPPING;if(!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING)goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING;goog.getMsg=function(str,opt_values){var values=opt_values||{};for(var key in values){var value=(""+values[key]).replace(/\$/g,"$$$$");str=str.replace(new RegExp("\\{\\$"+key+"\\}","gi"),value)}return str};
goog.exportSymbol=function(publicPath,object,opt_objectToExportTo){goog.exportPath_(publicPath,object,opt_objectToExportTo)};goog.exportProperty=function(object,publicName,symbol){object[publicName]=symbol};goog.inherits=function(childCtor,parentCtor){function tempCtor(){}tempCtor.prototype=parentCtor.prototype;childCtor.superClass_=parentCtor.prototype;childCtor.prototype=new tempCtor;childCtor.prototype.constructor=childCtor};
goog.base=function(me,opt_methodName,var_args){var caller=arguments.callee.caller;if(caller.superClass_)return caller.superClass_.constructor.apply(me,Array.prototype.slice.call(arguments,1));var args=Array.prototype.slice.call(arguments,2);var foundCaller=false;for(var ctor=me.constructor;ctor;ctor=ctor.superClass_&&ctor.superClass_.constructor)if(ctor.prototype[opt_methodName]===caller)foundCaller=true;else if(foundCaller)return ctor.prototype[opt_methodName].apply(me,args);if(me[opt_methodName]===
caller)return me.constructor.prototype[opt_methodName].apply(me,args);else throw Error("goog.base called from a method of one name "+"to a method of a different name");};goog.scope=function(fn){fn.call(goog.global)};goog.provide("goog.string");goog.provide("goog.string.Unicode");goog.string.Unicode={NBSP:"\u00a0"};goog.string.startsWith=function(str,prefix){return str.lastIndexOf(prefix,0)==0};goog.string.endsWith=function(str,suffix){var l=str.length-suffix.length;return l>=0&&str.indexOf(suffix,l)==l};goog.string.caseInsensitiveStartsWith=function(str,prefix){return goog.string.caseInsensitiveCompare(prefix,str.substr(0,prefix.length))==0};
goog.string.caseInsensitiveEndsWith=function(str,suffix){return goog.string.caseInsensitiveCompare(suffix,str.substr(str.length-suffix.length,suffix.length))==0};goog.string.subs=function(str,var_args){for(var i=1;i<arguments.length;i++){var replacement=String(arguments[i]).replace(/\$/g,"$$$$");str=str.replace(/\%s/,replacement)}return str};goog.string.collapseWhitespace=function(str){return str.replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")};goog.string.isEmpty=function(str){return/^[\s\xa0]*$/.test(str)};
goog.string.isEmptySafe=function(str){return goog.string.isEmpty(goog.string.makeSafe(str))};goog.string.isBreakingWhitespace=function(str){return!/[^\t\n\r ]/.test(str)};goog.string.isAlpha=function(str){return!/[^a-zA-Z]/.test(str)};goog.string.isNumeric=function(str){return!/[^0-9]/.test(str)};goog.string.isAlphaNumeric=function(str){return!/[^a-zA-Z0-9]/.test(str)};goog.string.isSpace=function(ch){return ch==" "};
goog.string.isUnicodeChar=function(ch){return ch.length==1&&ch>=" "&&ch<="~"||ch>="\u0080"&&ch<="\ufffd"};goog.string.stripNewlines=function(str){return str.replace(/(\r\n|\r|\n)+/g," ")};goog.string.canonicalizeNewlines=function(str){return str.replace(/(\r\n|\r|\n)/g,"\n")};goog.string.normalizeWhitespace=function(str){return str.replace(/\xa0|\s/g," ")};goog.string.normalizeSpaces=function(str){return str.replace(/\xa0|[ \t]+/g," ")};
goog.string.collapseBreakingSpaces=function(str){return str.replace(/[\t\r\n ]+/g," ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g,"")};goog.string.trim=function(str){return str.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};goog.string.trimLeft=function(str){return str.replace(/^[\s\xa0]+/,"")};goog.string.trimRight=function(str){return str.replace(/[\s\xa0]+$/,"")};
goog.string.caseInsensitiveCompare=function(str1,str2){var test1=String(str1).toLowerCase();var test2=String(str2).toLowerCase();if(test1<test2)return-1;else if(test1==test2)return 0;else return 1};goog.string.numerateCompareRegExp_=/(\.\d+)|(\d+)|(\D+)/g;
goog.string.numerateCompare=function(str1,str2){if(str1==str2)return 0;if(!str1)return-1;if(!str2)return 1;var tokens1=str1.toLowerCase().match(goog.string.numerateCompareRegExp_);var tokens2=str2.toLowerCase().match(goog.string.numerateCompareRegExp_);var count=Math.min(tokens1.length,tokens2.length);for(var i=0;i<count;i++){var a=tokens1[i];var b=tokens2[i];if(a!=b){var num1=parseInt(a,10);if(!isNaN(num1)){var num2=parseInt(b,10);if(!isNaN(num2)&&num1-num2)return num1-num2}return a<b?-1:1}}if(tokens1.length!=
tokens2.length)return tokens1.length-tokens2.length;return str1<str2?-1:1};goog.string.encodeUriRegExp_=/^[a-zA-Z0-9\-_.!~*'()]*$/;goog.string.urlEncode=function(str){str=String(str);if(!goog.string.encodeUriRegExp_.test(str))return encodeURIComponent(str);return str};goog.string.urlDecode=function(str){return decodeURIComponent(str.replace(/\+/g," "))};goog.string.newLineToBr=function(str,opt_xml){return str.replace(/(\r\n|\r|\n)/g,opt_xml?"<br />":"<br>")};
goog.string.htmlEscape=function(str,opt_isLikelyToContainHtmlChars){if(opt_isLikelyToContainHtmlChars)return str.replace(goog.string.amperRe_,"&amp;").replace(goog.string.ltRe_,"&lt;").replace(goog.string.gtRe_,"&gt;").replace(goog.string.quotRe_,"&quot;");else{if(!goog.string.allRe_.test(str))return str;if(str.indexOf("&")!=-1)str=str.replace(goog.string.amperRe_,"&amp;");if(str.indexOf("<")!=-1)str=str.replace(goog.string.ltRe_,"&lt;");if(str.indexOf(">")!=-1)str=str.replace(goog.string.gtRe_,"&gt;");
if(str.indexOf('"')!=-1)str=str.replace(goog.string.quotRe_,"&quot;");return str}};goog.string.amperRe_=/&/g;goog.string.ltRe_=/</g;goog.string.gtRe_=/>/g;goog.string.quotRe_=/\"/g;goog.string.allRe_=/[&<>\"]/;goog.string.unescapeEntities=function(str){if(goog.string.contains(str,"&"))if("document"in goog.global)return goog.string.unescapeEntitiesUsingDom_(str);else return goog.string.unescapePureXmlEntities_(str);return str};
goog.string.unescapeEntitiesUsingDom_=function(str){var seen={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"'};var div=document.createElement("div");return str.replace(goog.string.HTML_ENTITY_PATTERN_,function(s,entity){var value=seen[s];if(value)return value;if(entity.charAt(0)=="#"){var n=Number("0"+entity.substr(1));if(!isNaN(n))value=String.fromCharCode(n)}if(!value){div.innerHTML=s+" ";value=div.firstChild.nodeValue.slice(0,-1)}return seen[s]=value})};
goog.string.unescapePureXmlEntities_=function(str){return str.replace(/&([^;]+);/g,function(s,entity){switch(entity){case "amp":return"&";case "lt":return"<";case "gt":return">";case "quot":return'"';default:if(entity.charAt(0)=="#"){var n=Number("0"+entity.substr(1));if(!isNaN(n))return String.fromCharCode(n)}return s}})};goog.string.HTML_ENTITY_PATTERN_=/&([^;\s<&]+);?/g;goog.string.whitespaceEscape=function(str,opt_xml){return goog.string.newLineToBr(str.replace(/ /g," &#160;"),opt_xml)};
goog.string.stripQuotes=function(str,quoteChars){var length=quoteChars.length;for(var i=0;i<length;i++){var quoteChar=length==1?quoteChars:quoteChars.charAt(i);if(str.charAt(0)==quoteChar&&str.charAt(str.length-1)==quoteChar)return str.substring(1,str.length-1)}return str};
goog.string.truncate=function(str,chars,opt_protectEscapedCharacters){if(opt_protectEscapedCharacters)str=goog.string.unescapeEntities(str);if(str.length>chars)str=str.substring(0,chars-3)+"...";if(opt_protectEscapedCharacters)str=goog.string.htmlEscape(str);return str};
goog.string.truncateMiddle=function(str,chars,opt_protectEscapedCharacters,opt_trailingChars){if(opt_protectEscapedCharacters)str=goog.string.unescapeEntities(str);if(opt_trailingChars&&str.length>chars){if(opt_trailingChars>chars)opt_trailingChars=chars;var endPoint=str.length-opt_trailingChars;var startPoint=chars-opt_trailingChars;str=str.substring(0,startPoint)+"..."+str.substring(endPoint)}else if(str.length>chars){var half=Math.floor(chars/2);var endPos=str.length-half;half+=chars%2;str=str.substring(0,
half)+"..."+str.substring(endPos)}if(opt_protectEscapedCharacters)str=goog.string.htmlEscape(str);return str};goog.string.specialEscapeChars_={"\x00":"\\0","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\x0B":"\\x0B",'"':'\\"',"\\":"\\\\"};goog.string.jsEscapeCache_={"'":"\\'"};
goog.string.quote=function(s){s=String(s);if(s.quote)return s.quote();else{var sb=['"'];for(var i=0;i<s.length;i++){var ch=s.charAt(i);var cc=ch.charCodeAt(0);sb[i+1]=goog.string.specialEscapeChars_[ch]||(cc>31&&cc<127?ch:goog.string.escapeChar(ch))}sb.push('"');return sb.join("")}};goog.string.escapeString=function(str){var sb=[];for(var i=0;i<str.length;i++)sb[i]=goog.string.escapeChar(str.charAt(i));return sb.join("")};
goog.string.escapeChar=function(c){if(c in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[c];if(c in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[c]=goog.string.specialEscapeChars_[c];var rv=c;var cc=c.charCodeAt(0);if(cc>31&&cc<127)rv=c;else{if(cc<256){rv="\\x";if(cc<16||cc>256)rv+="0"}else{rv="\\u";if(cc<4096)rv+="0"}rv+=cc.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[c]=rv};
goog.string.toMap=function(s){var rv={};for(var i=0;i<s.length;i++)rv[s.charAt(i)]=true;return rv};goog.string.contains=function(s,ss){return s.indexOf(ss)!=-1};goog.string.countOf=function(s,ss){return s&&ss?s.split(ss).length-1:0};goog.string.removeAt=function(s,index,stringLength){var resultStr=s;if(index>=0&&index<s.length&&stringLength>0)resultStr=s.substr(0,index)+s.substr(index+stringLength,s.length-index-stringLength);return resultStr};
goog.string.remove=function(s,ss){var re=new RegExp(goog.string.regExpEscape(ss),"");return s.replace(re,"")};goog.string.removeAll=function(s,ss){var re=new RegExp(goog.string.regExpEscape(ss),"g");return s.replace(re,"")};goog.string.regExpEscape=function(s){return String(s).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")};goog.string.repeat=function(string,length){return(new Array(length+1)).join(string)};
goog.string.padNumber=function(num,length,opt_precision){var s=goog.isDef(opt_precision)?num.toFixed(opt_precision):String(num);var index=s.indexOf(".");if(index==-1)index=s.length;return goog.string.repeat("0",Math.max(0,length-index))+s};goog.string.makeSafe=function(obj){return obj==null?"":String(obj)};goog.string.buildString=function(var_args){return Array.prototype.join.call(arguments,"")};
goog.string.getRandomString=function(){var x=2147483648;return Math.floor(Math.random()*x).toString(36)+Math.abs(Math.floor(Math.random()*x)^goog.now()).toString(36)};
goog.string.compareVersions=function(version1,version2){var order=0;var v1Subs=goog.string.trim(String(version1)).split(".");var v2Subs=goog.string.trim(String(version2)).split(".");var subCount=Math.max(v1Subs.length,v2Subs.length);for(var subIdx=0;order==0&&subIdx<subCount;subIdx++){var v1Sub=v1Subs[subIdx]||"";var v2Sub=v2Subs[subIdx]||"";var v1CompParser=new RegExp("(\\d*)(\\D*)","g");var v2CompParser=new RegExp("(\\d*)(\\D*)","g");do{var v1Comp=v1CompParser.exec(v1Sub)||["","",""];var v2Comp=
v2CompParser.exec(v2Sub)||["","",""];if(v1Comp[0].length==0&&v2Comp[0].length==0)break;var v1CompNum=v1Comp[1].length==0?0:parseInt(v1Comp[1],10);var v2CompNum=v2Comp[1].length==0?0:parseInt(v2Comp[1],10);order=goog.string.compareElements_(v1CompNum,v2CompNum)||goog.string.compareElements_(v1Comp[2].length==0,v2Comp[2].length==0)||goog.string.compareElements_(v1Comp[2],v2Comp[2])}while(order==0)}return order};
goog.string.compareElements_=function(left,right){if(left<right)return-1;else if(left>right)return 1;return 0};goog.string.HASHCODE_MAX_=4294967296;goog.string.hashCode=function(str){var result=0;for(var i=0;i<str.length;++i){result=31*result+str.charCodeAt(i);result%=goog.string.HASHCODE_MAX_}return result};goog.string.uniqueStringCounter_=Math.random()*2147483648|0;goog.string.createUniqueString=function(){return"goog_"+goog.string.uniqueStringCounter_++};
goog.string.toNumber=function(str){var num=Number(str);if(num==0&&goog.string.isEmpty(str))return NaN;return num};goog.string.toCamelCaseCache_={};goog.string.toCamelCase=function(str){return goog.string.toCamelCaseCache_[str]||(goog.string.toCamelCaseCache_[str]=String(str).replace(/\-([a-z])/g,function(all,match){return match.toUpperCase()}))};goog.string.toSelectorCaseCache_={};
goog.string.toSelectorCase=function(str){return goog.string.toSelectorCaseCache_[str]||(goog.string.toSelectorCaseCache_[str]=String(str).replace(/([A-Z])/g,"-$1").toLowerCase())};goog.provide("goog.userAgent");goog.require("goog.string");goog.userAgent.ASSUME_IE=false;goog.userAgent.ASSUME_GECKO=false;goog.userAgent.ASSUME_WEBKIT=false;goog.userAgent.ASSUME_MOBILE_WEBKIT=false;goog.userAgent.ASSUME_OPERA=false;goog.userAgent.ASSUME_ANY_VERSION=false;goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA;
goog.userAgent.getUserAgentString=function(){return goog.global["navigator"]?goog.global["navigator"].userAgent:null};goog.userAgent.getNavigator=function(){return goog.global["navigator"]};
goog.userAgent.init_=function(){goog.userAgent.detectedOpera_=false;goog.userAgent.detectedIe_=false;goog.userAgent.detectedWebkit_=false;goog.userAgent.detectedMobile_=false;goog.userAgent.detectedGecko_=false;var ua;if(!goog.userAgent.BROWSER_KNOWN_&&(ua=goog.userAgent.getUserAgentString())){var navigator=goog.userAgent.getNavigator();goog.userAgent.detectedOpera_=ua.indexOf("Opera")==0;goog.userAgent.detectedIe_=!goog.userAgent.detectedOpera_&&ua.indexOf("MSIE")!=-1;goog.userAgent.detectedWebkit_=
!goog.userAgent.detectedOpera_&&ua.indexOf("WebKit")!=-1;goog.userAgent.detectedMobile_=goog.userAgent.detectedWebkit_&&ua.indexOf("Mobile")!=-1;goog.userAgent.detectedGecko_=!goog.userAgent.detectedOpera_&&!goog.userAgent.detectedWebkit_&&navigator.product=="Gecko"}};if(!goog.userAgent.BROWSER_KNOWN_)goog.userAgent.init_();goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.userAgent.detectedOpera_;
goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.userAgent.detectedIe_;goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.userAgent.detectedGecko_;goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.userAgent.detectedWebkit_;goog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.detectedMobile_;goog.userAgent.SAFARI=goog.userAgent.WEBKIT;
goog.userAgent.determinePlatform_=function(){var navigator=goog.userAgent.getNavigator();return navigator&&navigator.platform||""};goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_();goog.userAgent.ASSUME_MAC=false;goog.userAgent.ASSUME_WINDOWS=false;goog.userAgent.ASSUME_LINUX=false;goog.userAgent.ASSUME_X11=false;goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11;
goog.userAgent.initPlatform_=function(){goog.userAgent.detectedMac_=goog.string.contains(goog.userAgent.PLATFORM,"Mac");goog.userAgent.detectedWindows_=goog.string.contains(goog.userAgent.PLATFORM,"Win");goog.userAgent.detectedLinux_=goog.string.contains(goog.userAgent.PLATFORM,"Linux");goog.userAgent.detectedX11_=!!goog.userAgent.getNavigator()&&goog.string.contains(goog.userAgent.getNavigator()["appVersion"]||"","X11")};if(!goog.userAgent.PLATFORM_KNOWN_)goog.userAgent.initPlatform_();
goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.userAgent.detectedMac_;goog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.userAgent.detectedWindows_;goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.detectedLinux_;goog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.detectedX11_;
goog.userAgent.determineVersion_=function(){var version="",re;if(goog.userAgent.OPERA&&goog.global["opera"]){var operaVersion=goog.global["opera"].version;version=typeof operaVersion=="function"?operaVersion():operaVersion}else{if(goog.userAgent.GECKO)re=/rv\:([^\);]+)(\)|;)/;else if(goog.userAgent.IE)re=/MSIE\s+([^\);]+)(\)|;)/;else if(goog.userAgent.WEBKIT)re=/WebKit\/(\S+)/;if(re){var arr=re.exec(goog.userAgent.getUserAgentString());version=arr?arr[1]:""}}if(goog.userAgent.IE){var docMode=goog.userAgent.getDocumentMode_();
if(docMode>parseFloat(version))return String(docMode)}return version};goog.userAgent.getDocumentMode_=function(){var doc=goog.global["document"];return doc?doc["documentMode"]:undefined};goog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(v1,v2){return goog.string.compareVersions(v1,v2)};goog.userAgent.isVersionCache_={};
goog.userAgent.isVersion=function(version){return goog.userAgent.ASSUME_ANY_VERSION||goog.userAgent.isVersionCache_[version]||(goog.userAgent.isVersionCache_[version]=goog.string.compareVersions(goog.userAgent.VERSION,version)>=0)};goog.userAgent.isDocumentModeCache_={};goog.userAgent.isDocumentMode=function(documentMode){return goog.userAgent.isDocumentModeCache_[documentMode]||(goog.userAgent.isDocumentModeCache_[documentMode]=goog.userAgent.IE&&document.documentMode&&document.documentMode>=documentMode)};goog.provide("bot");goog.require("goog.userAgent");try{bot.window_=window}catch(ignored){bot.window_=goog.global}bot.getWindow=function(){return bot.window_};bot.setWindow=function(win){bot.window_=win};bot.getDocument=function(){return bot.window_.document};goog.provide("goog.object");goog.object.forEach=function(obj,f,opt_obj){for(var key in obj)f.call(opt_obj,obj[key],key,obj)};goog.object.filter=function(obj,f,opt_obj){var res={};for(var key in obj)if(f.call(opt_obj,obj[key],key,obj))res[key]=obj[key];return res};goog.object.map=function(obj,f,opt_obj){var res={};for(var key in obj)res[key]=f.call(opt_obj,obj[key],key,obj);return res};goog.object.some=function(obj,f,opt_obj){for(var key in obj)if(f.call(opt_obj,obj[key],key,obj))return true;return false};
goog.object.every=function(obj,f,opt_obj){for(var key in obj)if(!f.call(opt_obj,obj[key],key,obj))return false;return true};goog.object.getCount=function(obj){var rv=0;for(var key in obj)rv++;return rv};goog.object.getAnyKey=function(obj){for(var key in obj)return key};goog.object.getAnyValue=function(obj){for(var key in obj)return obj[key]};goog.object.contains=function(obj,val){return goog.object.containsValue(obj,val)};
goog.object.getValues=function(obj){var res=[];var i=0;for(var key in obj)res[i++]=obj[key];return res};goog.object.getKeys=function(obj){var res=[];var i=0;for(var key in obj)res[i++]=key;return res};goog.object.getValueByKeys=function(obj,var_args){var isArrayLike=goog.isArrayLike(var_args);var keys=isArrayLike?var_args:arguments;for(var i=isArrayLike?0:1;i<keys.length;i++){obj=obj[keys[i]];if(!goog.isDef(obj))break}return obj};goog.object.containsKey=function(obj,key){return key in obj};
goog.object.containsValue=function(obj,val){for(var key in obj)if(obj[key]==val)return true;return false};goog.object.findKey=function(obj,f,opt_this){for(var key in obj)if(f.call(opt_this,obj[key],key,obj))return key;return undefined};goog.object.findValue=function(obj,f,opt_this){var key=goog.object.findKey(obj,f,opt_this);return key&&obj[key]};goog.object.isEmpty=function(obj){for(var key in obj)return false;return true};goog.object.clear=function(obj){for(var i in obj)delete obj[i]};
goog.object.remove=function(obj,key){var rv;if(rv=key in obj)delete obj[key];return rv};goog.object.add=function(obj,key,val){if(key in obj)throw Error('The object already contains the key "'+key+'"');goog.object.set(obj,key,val)};goog.object.get=function(obj,key,opt_val){if(key in obj)return obj[key];return opt_val};goog.object.set=function(obj,key,value){obj[key]=value};goog.object.setIfUndefined=function(obj,key,value){return key in obj?obj[key]:obj[key]=value};
goog.object.clone=function(obj){var res={};for(var key in obj)res[key]=obj[key];return res};goog.object.unsafeClone=function(obj){var type=goog.typeOf(obj);if(type=="object"||type=="array"){if(obj.clone)return obj.clone();var clone=type=="array"?[]:{};for(var key in obj)clone[key]=goog.object.unsafeClone(obj[key]);return clone}return obj};goog.object.transpose=function(obj){var transposed={};for(var key in obj)transposed[obj[key]]=key;return transposed};
goog.object.PROTOTYPE_FIELDS_=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"];goog.object.extend=function(target,var_args){var key,source;for(var i=1;i<arguments.length;i++){source=arguments[i];for(key in source)target[key]=source[key];for(var j=0;j<goog.object.PROTOTYPE_FIELDS_.length;j++){key=goog.object.PROTOTYPE_FIELDS_[j];if(Object.prototype.hasOwnProperty.call(source,key))target[key]=source[key]}}};
goog.object.create=function(var_args){var argLength=arguments.length;if(argLength==1&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(argLength%2)throw Error("Uneven number of arguments");var rv={};for(var i=0;i<argLength;i+=2)rv[arguments[i]]=arguments[i+1];return rv};
goog.object.createSet=function(var_args){var argLength=arguments.length;if(argLength==1&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);var rv={};for(var i=0;i<argLength;i++)rv[arguments[i]]=true;return rv};goog.provide("bot.Error");goog.provide("bot.ErrorCode");goog.require("goog.object");
bot.ErrorCode={SUCCESS:0,NO_SUCH_ELEMENT:7,NO_SUCH_FRAME:8,UNKNOWN_COMMAND:9,UNSUPPORTED_OPERATION:9,STALE_ELEMENT_REFERENCE:10,ELEMENT_NOT_VISIBLE:11,INVALID_ELEMENT_STATE:12,UNKNOWN_ERROR:13,ELEMENT_NOT_SELECTABLE:15,JAVASCRIPT_ERROR:17,XPATH_LOOKUP_ERROR:19,TIMEOUT:21,NO_SUCH_WINDOW:23,INVALID_COOKIE_DOMAIN:24,UNABLE_TO_SET_COOKIE:25,MODAL_DIALOG_OPENED:26,NO_MODAL_DIALOG_OPEN:27,SCRIPT_TIMEOUT:28,INVALID_ELEMENT_COORDINATES:29,INVALID_SELECTOR_ERROR:32,SQL_DATABASE_ERROR:33,MOVE_TARGET_OUT_OF_BOUNDS:34,
IME_ENGINE_ACTIVATION_FAILED:35,IME_NOT_AVAILABLE:36};bot.Error=function(code,opt_message){this.code=code;this.message=opt_message||"";this.name=bot.Error.NAMES_[code]||bot.Error.NAMES_[bot.ErrorCode.UNKNOWN_ERROR];var template=new Error(this.message);template.name=this.name;this.stack=template.stack||""};goog.inherits(bot.Error,Error);
bot.Error.NAMES_=goog.object.create(bot.ErrorCode.NO_SUCH_ELEMENT,"NoSuchElementError",bot.ErrorCode.NO_SUCH_FRAME,"NoSuchFrameError",bot.ErrorCode.UNKNOWN_COMMAND,"UnknownCommandError",bot.ErrorCode.STALE_ELEMENT_REFERENCE,"StaleElementReferenceError",bot.ErrorCode.ELEMENT_NOT_VISIBLE,"ElementNotVisibleError",bot.ErrorCode.INVALID_ELEMENT_STATE,"InvalidElementStateError",bot.ErrorCode.UNKNOWN_ERROR,"UnknownError",bot.ErrorCode.ELEMENT_NOT_SELECTABLE,"ElementNotSelectableError",bot.ErrorCode.XPATH_LOOKUP_ERROR,
"XPathLookupError",bot.ErrorCode.NO_SUCH_WINDOW,"NoSuchWindowError",bot.ErrorCode.INVALID_COOKIE_DOMAIN,"InvalidCookieDomainError",bot.ErrorCode.UNABLE_TO_SET_COOKIE,"UnableToSetCookieError",bot.ErrorCode.MODAL_DIALOG_OPENED,"ModalDialogOpenedError",bot.ErrorCode.NO_MODAL_DIALOG_OPEN,"NoModalDialogOpenError",bot.ErrorCode.SCRIPT_TIMEOUT,"ScriptTimeoutError",bot.ErrorCode.INVALID_SELECTOR_ERROR,"InvalidSelectorError",bot.ErrorCode.SQL_DATABASE_ERROR,"SqlDatabaseError",bot.ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS,
"MoveTargetOutOfBoundsError");bot.Error.prototype.isAutomationError=true;if(goog.DEBUG)bot.Error.prototype.toString=function(){return"["+this.name+"] "+this.message};goog.provide("goog.debug.Error");goog.debug.Error=function(opt_msg){this.stack=(new Error).stack||"";if(opt_msg)this.message=String(opt_msg)};goog.inherits(goog.debug.Error,Error);goog.debug.Error.prototype.name="CustomError";goog.provide("goog.asserts");goog.provide("goog.asserts.AssertionError");goog.require("goog.debug.Error");goog.require("goog.string");goog.asserts.ENABLE_ASSERTS=goog.DEBUG;goog.asserts.AssertionError=function(messagePattern,messageArgs){messageArgs.unshift(messagePattern);goog.debug.Error.call(this,goog.string.subs.apply(null,messageArgs));messageArgs.shift();this.messagePattern=messagePattern};goog.inherits(goog.asserts.AssertionError,goog.debug.Error);
goog.asserts.AssertionError.prototype.name="AssertionError";goog.asserts.doAssertFailure_=function(defaultMessage,defaultArgs,givenMessage,givenArgs){var message="Assertion failed";if(givenMessage){message+=": "+givenMessage;var args=givenArgs}else if(defaultMessage){message+=": "+defaultMessage;args=defaultArgs}throw new goog.asserts.AssertionError(""+message,args||[]);};
goog.asserts.assert=function(condition,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!condition)goog.asserts.doAssertFailure_("",null,opt_message,Array.prototype.slice.call(arguments,2));return condition};goog.asserts.fail=function(opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS)throw new goog.asserts.AssertionError("Failure"+(opt_message?": "+opt_message:""),Array.prototype.slice.call(arguments,1));};
goog.asserts.assertNumber=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(value))goog.asserts.doAssertFailure_("Expected number but got %s: %s.",[goog.typeOf(value),value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertString=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isString(value))goog.asserts.doAssertFailure_("Expected string but got %s: %s.",[goog.typeOf(value),value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertFunction=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(value))goog.asserts.doAssertFailure_("Expected function but got %s: %s.",[goog.typeOf(value),value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertObject=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isObject(value))goog.asserts.doAssertFailure_("Expected object but got %s: %s.",[goog.typeOf(value),value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertArray=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isArray(value))goog.asserts.doAssertFailure_("Expected array but got %s: %s.",[goog.typeOf(value),value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertBoolean=function(value,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!goog.isBoolean(value))goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.",[goog.typeOf(value),value],opt_message,Array.prototype.slice.call(arguments,2));return value};
goog.asserts.assertInstanceof=function(value,type,opt_message,var_args){if(goog.asserts.ENABLE_ASSERTS&&!(value instanceof type))goog.asserts.doAssertFailure_("instanceof check failed.",null,opt_message,Array.prototype.slice.call(arguments,3))};goog.provide("goog.array");goog.provide("goog.array.ArrayLike");goog.require("goog.asserts");goog.NATIVE_ARRAY_PROTOTYPES=true;goog.array.ArrayLike;goog.array.peek=function(array){return array[array.length-1]};goog.array.ARRAY_PROTOTYPE_=Array.prototype;
goog.array.indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.indexOf?function(arr,obj,opt_fromIndex){goog.asserts.assert(arr.length!=null);return goog.array.ARRAY_PROTOTYPE_.indexOf.call(arr,obj,opt_fromIndex)}:function(arr,obj,opt_fromIndex){var fromIndex=opt_fromIndex==null?0:opt_fromIndex<0?Math.max(0,arr.length+opt_fromIndex):opt_fromIndex;if(goog.isString(arr)){if(!goog.isString(obj)||obj.length!=1)return-1;return arr.indexOf(obj,fromIndex)}for(var i=fromIndex;i<arr.length;i++)if(i in
arr&&arr[i]===obj)return i;return-1};
goog.array.lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.lastIndexOf?function(arr,obj,opt_fromIndex){goog.asserts.assert(arr.length!=null);var fromIndex=opt_fromIndex==null?arr.length-1:opt_fromIndex;return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(arr,obj,fromIndex)}:function(arr,obj,opt_fromIndex){var fromIndex=opt_fromIndex==null?arr.length-1:opt_fromIndex;if(fromIndex<0)fromIndex=Math.max(0,arr.length+fromIndex);if(goog.isString(arr)){if(!goog.isString(obj)||obj.length!=
1)return-1;return arr.lastIndexOf(obj,fromIndex)}for(var i=fromIndex;i>=0;i--)if(i in arr&&arr[i]===obj)return i;return-1};goog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.forEach?function(arr,f,opt_obj){goog.asserts.assert(arr.length!=null);goog.array.ARRAY_PROTOTYPE_.forEach.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2)f.call(opt_obj,arr2[i],i,arr)};
goog.array.forEachRight=function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=l-1;i>=0;--i)if(i in arr2)f.call(opt_obj,arr2[i],i,arr)};
goog.array.filter=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.filter?function(arr,f,opt_obj){goog.asserts.assert(arr.length!=null);return goog.array.ARRAY_PROTOTYPE_.filter.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var res=[];var resLength=0;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2){var val=arr2[i];if(f.call(opt_obj,val,i,arr))res[resLength++]=val}return res};
goog.array.map=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.map?function(arr,f,opt_obj){goog.asserts.assert(arr.length!=null);return goog.array.ARRAY_PROTOTYPE_.map.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var res=new Array(l);var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2)res[i]=f.call(opt_obj,arr2[i],i,arr);return res};
goog.array.reduce=function(arr,f,val,opt_obj){if(arr.reduce)if(opt_obj)return arr.reduce(goog.bind(f,opt_obj),val);else return arr.reduce(f,val);var rval=val;goog.array.forEach(arr,function(val,index){rval=f.call(opt_obj,rval,val,index,arr)});return rval};
goog.array.reduceRight=function(arr,f,val,opt_obj){if(arr.reduceRight)if(opt_obj)return arr.reduceRight(goog.bind(f,opt_obj),val);else return arr.reduceRight(f,val);var rval=val;goog.array.forEachRight(arr,function(val,index){rval=f.call(opt_obj,rval,val,index,arr)});return rval};
goog.array.some=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.some?function(arr,f,opt_obj){goog.asserts.assert(arr.length!=null);return goog.array.ARRAY_PROTOTYPE_.some.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2&&f.call(opt_obj,arr2[i],i,arr))return true;return false};
goog.array.every=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.every?function(arr,f,opt_obj){goog.asserts.assert(arr.length!=null);return goog.array.ARRAY_PROTOTYPE_.every.call(arr,f,opt_obj)}:function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2&&!f.call(opt_obj,arr2[i],i,arr))return false;return true};
goog.array.find=function(arr,f,opt_obj){var i=goog.array.findIndex(arr,f,opt_obj);return i<0?null:goog.isString(arr)?arr.charAt(i):arr[i]};goog.array.findIndex=function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=0;i<l;i++)if(i in arr2&&f.call(opt_obj,arr2[i],i,arr))return i;return-1};goog.array.findRight=function(arr,f,opt_obj){var i=goog.array.findIndexRight(arr,f,opt_obj);return i<0?null:goog.isString(arr)?arr.charAt(i):arr[i]};
goog.array.findIndexRight=function(arr,f,opt_obj){var l=arr.length;var arr2=goog.isString(arr)?arr.split(""):arr;for(var i=l-1;i>=0;i--)if(i in arr2&&f.call(opt_obj,arr2[i],i,arr))return i;return-1};goog.array.contains=function(arr,obj){return goog.array.indexOf(arr,obj)>=0};goog.array.isEmpty=function(arr){return arr.length==0};goog.array.clear=function(arr){if(!goog.isArray(arr))for(var i=arr.length-1;i>=0;i--)delete arr[i];arr.length=0};
goog.array.insert=function(arr,obj){if(!goog.array.contains(arr,obj))arr.push(obj)};goog.array.insertAt=function(arr,obj,opt_i){goog.array.splice(arr,opt_i,0,obj)};goog.array.insertArrayAt=function(arr,elementsToAdd,opt_i){goog.partial(goog.array.splice,arr,opt_i,0).apply(null,elementsToAdd)};goog.array.insertBefore=function(arr,obj,opt_obj2){var i;if(arguments.length==2||(i=goog.array.indexOf(arr,opt_obj2))<0)arr.push(obj);else goog.array.insertAt(arr,obj,i)};
goog.array.remove=function(arr,obj){var i=goog.array.indexOf(arr,obj);var rv;if(rv=i>=0)goog.array.removeAt(arr,i);return rv};goog.array.removeAt=function(arr,i){goog.asserts.assert(arr.length!=null);return goog.array.ARRAY_PROTOTYPE_.splice.call(arr,i,1).length==1};goog.array.removeIf=function(arr,f,opt_obj){var i=goog.array.findIndex(arr,f,opt_obj);if(i>=0){goog.array.removeAt(arr,i);return true}return false};
goog.array.concat=function(var_args){return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_,arguments)};goog.array.clone=function(arr){if(goog.isArray(arr))return goog.array.concat(arr);else{var rv=[];for(var i=0,len=arr.length;i<len;i++)rv[i]=arr[i];return rv}};goog.array.toArray=function(object){if(goog.isArray(object))return goog.array.concat(object);return goog.array.clone(object)};
goog.array.extend=function(arr1,var_args){for(var i=1;i<arguments.length;i++){var arr2=arguments[i];var isArrayLike;if(goog.isArray(arr2)||(isArrayLike=goog.isArrayLike(arr2))&&arr2.hasOwnProperty("callee"))arr1.push.apply(arr1,arr2);else if(isArrayLike){var len1=arr1.length;var len2=arr2.length;for(var j=0;j<len2;j++)arr1[len1+j]=arr2[j]}else arr1.push(arr2)}};
goog.array.splice=function(arr,index,howMany,var_args){goog.asserts.assert(arr.length!=null);return goog.array.ARRAY_PROTOTYPE_.splice.apply(arr,goog.array.slice(arguments,1))};goog.array.slice=function(arr,start,opt_end){goog.asserts.assert(arr.length!=null);if(arguments.length<=2)return goog.array.ARRAY_PROTOTYPE_.slice.call(arr,start);else return goog.array.ARRAY_PROTOTYPE_.slice.call(arr,start,opt_end)};
goog.array.removeDuplicates=function(arr,opt_rv){var returnArray=opt_rv||arr;var seen={},cursorInsert=0,cursorRead=0;while(cursorRead<arr.length){var current=arr[cursorRead++];var key=goog.isObject(current)?"o"+goog.getUid(current):(typeof current).charAt(0)+current;if(!Object.prototype.hasOwnProperty.call(seen,key)){seen[key]=true;returnArray[cursorInsert++]=current}}returnArray.length=cursorInsert};
goog.array.binarySearch=function(arr,target,opt_compareFn){return goog.array.binarySearch_(arr,opt_compareFn||goog.array.defaultCompare,false,target)};goog.array.binarySelect=function(arr,evaluator,opt_obj){return goog.array.binarySearch_(arr,evaluator,true,undefined,opt_obj)};
goog.array.binarySearch_=function(arr,compareFn,isEvaluator,opt_target,opt_selfObj){var left=0;var right=arr.length;var found;while(left<right){var middle=left+right>>1;var compareResult;if(isEvaluator)compareResult=compareFn.call(opt_selfObj,arr[middle],middle,arr);else compareResult=compareFn(opt_target,arr[middle]);if(compareResult>0)left=middle+1;else{right=middle;found=!compareResult}}return found?left:~left};
goog.array.sort=function(arr,opt_compareFn){goog.asserts.assert(arr.length!=null);goog.array.ARRAY_PROTOTYPE_.sort.call(arr,opt_compareFn||goog.array.defaultCompare)};
goog.array.stableSort=function(arr,opt_compareFn){for(var i=0;i<arr.length;i++)arr[i]={index:i,value:arr[i]};var valueCompareFn=opt_compareFn||goog.array.defaultCompare;function stableCompareFn(obj1,obj2){return valueCompareFn(obj1.value,obj2.value)||obj1.index-obj2.index}goog.array.sort(arr,stableCompareFn);for(var i=0;i<arr.length;i++)arr[i]=arr[i].value};
goog.array.sortObjectsByKey=function(arr,key,opt_compareFn){var compare=opt_compareFn||goog.array.defaultCompare;goog.array.sort(arr,function(a,b){return compare(a[key],b[key])})};goog.array.isSorted=function(arr,opt_compareFn,opt_strict){var compare=opt_compareFn||goog.array.defaultCompare;for(var i=1;i<arr.length;i++){var compareResult=compare(arr[i-1],arr[i]);if(compareResult>0||compareResult==0&&opt_strict)return false}return true};
goog.array.equals=function(arr1,arr2,opt_equalsFn){if(!goog.isArrayLike(arr1)||!goog.isArrayLike(arr2)||arr1.length!=arr2.length)return false;var l=arr1.length;var equalsFn=opt_equalsFn||goog.array.defaultCompareEquality;for(var i=0;i<l;i++)if(!equalsFn(arr1[i],arr2[i]))return false;return true};goog.array.compare=function(arr1,arr2,opt_equalsFn){return goog.array.equals(arr1,arr2,opt_equalsFn)};
goog.array.compare3=function(arr1,arr2,opt_compareFn){var compare=opt_compareFn||goog.array.defaultCompare;var l=Math.min(arr1.length,arr2.length);for(var i=0;i<l;i++){var result=compare(arr1[i],arr2[i]);if(result!=0)return result}return goog.array.defaultCompare(arr1.length,arr2.length)};goog.array.defaultCompare=function(a,b){return a>b?1:a<b?-1:0};goog.array.defaultCompareEquality=function(a,b){return a===b};
goog.array.binaryInsert=function(array,value,opt_compareFn){var index=goog.array.binarySearch(array,value,opt_compareFn);if(index<0){goog.array.insertAt(array,value,-(index+1));return true}return false};goog.array.binaryRemove=function(array,value,opt_compareFn){var index=goog.array.binarySearch(array,value,opt_compareFn);return index>=0?goog.array.removeAt(array,index):false};
goog.array.bucket=function(array,sorter){var buckets={};for(var i=0;i<array.length;i++){var value=array[i];var key=sorter(value,i,array);if(goog.isDef(key)){var bucket=buckets[key]||(buckets[key]=[]);bucket.push(value)}}return buckets};goog.array.repeat=function(value,n){var array=[];for(var i=0;i<n;i++)array[i]=value;return array};
goog.array.flatten=function(var_args){var result=[];for(var i=0;i<arguments.length;i++){var element=arguments[i];if(goog.isArray(element))result.push.apply(result,goog.array.flatten.apply(null,element));else result.push(element)}return result};goog.array.rotate=function(array,n){goog.asserts.assert(array.length!=null);if(array.length){n%=array.length;if(n>0)goog.array.ARRAY_PROTOTYPE_.unshift.apply(array,array.splice(-n,n));else if(n<0)goog.array.ARRAY_PROTOTYPE_.push.apply(array,array.splice(0,-n))}return array};
goog.array.zip=function(var_args){if(!arguments.length)return[];var result=[];for(var i=0;true;i++){var value=[];for(var j=0;j<arguments.length;j++){var arr=arguments[j];if(i>=arr.length)return result;value.push(arr[i])}result.push(value)}};goog.array.shuffle=function(arr,opt_randFn){var randFn=opt_randFn||Math.random;for(var i=arr.length-1;i>0;i--){var j=Math.floor(randFn()*(i+1));var tmp=arr[i];arr[i]=arr[j];arr[j]=tmp}};goog.provide("goog.dom.BrowserFeature");goog.require("goog.userAgent");goog.dom.BrowserFeature={CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE||goog.userAgent.isDocumentMode(9),CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO&&!goog.userAgent.IE||goog.userAgent.IE&&goog.userAgent.isDocumentMode(9)||goog.userAgent.GECKO&&goog.userAgent.isVersion("1.9.1"),CAN_USE_INNER_TEXT:goog.userAgent.IE&&!goog.userAgent.isVersion("9"),INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};goog.provide("goog.dom.TagName");
goog.dom.TagName={A:"A",ABBR:"ABBR",ACRONYM:"ACRONYM",ADDRESS:"ADDRESS",APPLET:"APPLET",AREA:"AREA",B:"B",BASE:"BASE",BASEFONT:"BASEFONT",BDO:"BDO",BIG:"BIG",BLOCKQUOTE:"BLOCKQUOTE",BODY:"BODY",BR:"BR",BUTTON:"BUTTON",CANVAS:"CANVAS",CAPTION:"CAPTION",CENTER:"CENTER",CITE:"CITE",CODE:"CODE",COL:"COL",COLGROUP:"COLGROUP",DD:"DD",DEL:"DEL",DFN:"DFN",DIR:"DIR",DIV:"DIV",DL:"DL",DT:"DT",EM:"EM",FIELDSET:"FIELDSET",FONT:"FONT",FORM:"FORM",FRAME:"FRAME",FRAMESET:"FRAMESET",H1:"H1",H2:"H2",H3:"H3",H4:"H4",
H5:"H5",H6:"H6",HEAD:"HEAD",HR:"HR",HTML:"HTML",I:"I",IFRAME:"IFRAME",IMG:"IMG",INPUT:"INPUT",INS:"INS",ISINDEX:"ISINDEX",KBD:"KBD",LABEL:"LABEL",LEGEND:"LEGEND",LI:"LI",LINK:"LINK",MAP:"MAP",MENU:"MENU",META:"META",NOFRAMES:"NOFRAMES",NOSCRIPT:"NOSCRIPT",OBJECT:"OBJECT",OL:"OL",OPTGROUP:"OPTGROUP",OPTION:"OPTION",P:"P",PARAM:"PARAM",PRE:"PRE",Q:"Q",S:"S",SAMP:"SAMP",SCRIPT:"SCRIPT",SELECT:"SELECT",SMALL:"SMALL",SPAN:"SPAN",STRIKE:"STRIKE",STRONG:"STRONG",STYLE:"STYLE",SUB:"SUB",SUP:"SUP",TABLE:"TABLE",
TBODY:"TBODY",TD:"TD",TEXTAREA:"TEXTAREA",TFOOT:"TFOOT",TH:"TH",THEAD:"THEAD",TITLE:"TITLE",TR:"TR",TT:"TT",U:"U",UL:"UL",VAR:"VAR"};goog.provide("goog.dom.classes");goog.require("goog.array");goog.dom.classes.set=function(element,className){element.className=className};goog.dom.classes.get=function(element){var className=element.className;return className&&typeof className.split=="function"?className.split(/\s+/):[]};goog.dom.classes.add=function(element,var_args){var classes=goog.dom.classes.get(element);var args=goog.array.slice(arguments,1);var b=goog.dom.classes.add_(classes,args);element.className=classes.join(" ");return b};
goog.dom.classes.remove=function(element,var_args){var classes=goog.dom.classes.get(element);var args=goog.array.slice(arguments,1);var b=goog.dom.classes.remove_(classes,args);element.className=classes.join(" ");return b};goog.dom.classes.add_=function(classes,args){var rv=0;for(var i=0;i<args.length;i++)if(!goog.array.contains(classes,args[i])){classes.push(args[i]);rv++}return rv==args.length};
goog.dom.classes.remove_=function(classes,args){var rv=0;for(var i=0;i<classes.length;i++)if(goog.array.contains(args,classes[i])){goog.array.splice(classes,i--,1);rv++}return rv==args.length};goog.dom.classes.swap=function(element,fromClass,toClass){var classes=goog.dom.classes.get(element);var removed=false;for(var i=0;i<classes.length;i++)if(classes[i]==fromClass){goog.array.splice(classes,i--,1);removed=true}if(removed){classes.push(toClass);element.className=classes.join(" ")}return removed};
goog.dom.classes.addRemove=function(element,classesToRemove,classesToAdd){var classes=goog.dom.classes.get(element);if(goog.isString(classesToRemove))goog.array.remove(classes,classesToRemove);else if(goog.isArray(classesToRemove))goog.dom.classes.remove_(classes,classesToRemove);if(goog.isString(classesToAdd)&&!goog.array.contains(classes,classesToAdd))classes.push(classesToAdd);else if(goog.isArray(classesToAdd))goog.dom.classes.add_(classes,classesToAdd);element.className=classes.join(" ")};
goog.dom.classes.has=function(element,className){return goog.array.contains(goog.dom.classes.get(element),className)};goog.dom.classes.enable=function(element,className,enabled){if(enabled)goog.dom.classes.add(element,className);else goog.dom.classes.remove(element,className)};goog.dom.classes.toggle=function(element,className){var add=!goog.dom.classes.has(element,className);goog.dom.classes.enable(element,className,add);return add};goog.provide("goog.math.Coordinate");goog.math.Coordinate=function(opt_x,opt_y){this.x=goog.isDef(opt_x)?opt_x:0;this.y=goog.isDef(opt_y)?opt_y:0};goog.math.Coordinate.prototype.clone=function(){return new goog.math.Coordinate(this.x,this.y)};if(goog.DEBUG)goog.math.Coordinate.prototype.toString=function(){return"("+this.x+", "+this.y+")"};goog.math.Coordinate.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.x==b.x&&a.y==b.y};
goog.math.Coordinate.distance=function(a,b){var dx=a.x-b.x;var dy=a.y-b.y;return Math.sqrt(dx*dx+dy*dy)};goog.math.Coordinate.squaredDistance=function(a,b){var dx=a.x-b.x;var dy=a.y-b.y;return dx*dx+dy*dy};goog.math.Coordinate.difference=function(a,b){return new goog.math.Coordinate(a.x-b.x,a.y-b.y)};goog.math.Coordinate.sum=function(a,b){return new goog.math.Coordinate(a.x+b.x,a.y+b.y)};goog.provide("goog.math.Size");goog.math.Size=function(width,height){this.width=width;this.height=height};goog.math.Size.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.width==b.width&&a.height==b.height};goog.math.Size.prototype.clone=function(){return new goog.math.Size(this.width,this.height)};if(goog.DEBUG)goog.math.Size.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};goog.math.Size.prototype.getLongest=function(){return Math.max(this.width,this.height)};
goog.math.Size.prototype.getShortest=function(){return Math.min(this.width,this.height)};goog.math.Size.prototype.area=function(){return this.width*this.height};goog.math.Size.prototype.perimeter=function(){return(this.width+this.height)*2};goog.math.Size.prototype.aspectRatio=function(){return this.width/this.height};goog.math.Size.prototype.isEmpty=function(){return!this.area()};goog.math.Size.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};
goog.math.Size.prototype.fitsInside=function(target){return this.width<=target.width&&this.height<=target.height};goog.math.Size.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};goog.math.Size.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};goog.math.Size.prototype.scale=function(s){this.width*=s;this.height*=s;return this};
goog.math.Size.prototype.scaleToFit=function(target){var s=this.aspectRatio()>target.aspectRatio()?target.width/this.width:target.height/this.height;return this.scale(s)};goog.provide("goog.dom");goog.provide("goog.dom.DomHelper");goog.provide("goog.dom.NodeType");goog.require("goog.array");goog.require("goog.dom.BrowserFeature");goog.require("goog.dom.TagName");goog.require("goog.dom.classes");goog.require("goog.math.Coordinate");goog.require("goog.math.Size");goog.require("goog.object");goog.require("goog.string");goog.require("goog.userAgent");goog.dom.ASSUME_QUIRKS_MODE=false;goog.dom.ASSUME_STANDARDS_MODE=false;
goog.dom.COMPAT_MODE_KNOWN_=goog.dom.ASSUME_QUIRKS_MODE||goog.dom.ASSUME_STANDARDS_MODE;goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12};goog.dom.getDomHelper=function(opt_element){return opt_element?new goog.dom.DomHelper(goog.dom.getOwnerDocument(opt_element)):goog.dom.defaultDomHelper_||(goog.dom.defaultDomHelper_=new goog.dom.DomHelper)};goog.dom.defaultDomHelper_;
goog.dom.getDocument=function(){return document};goog.dom.getElement=function(element){return goog.isString(element)?document.getElementById(element):element};goog.dom.$=goog.dom.getElement;goog.dom.getElementsByTagNameAndClass=function(opt_tag,opt_class,opt_el){return goog.dom.getElementsByTagNameAndClass_(document,opt_tag,opt_class,opt_el)};
goog.dom.getElementsByClass=function(className,opt_el){var parent=opt_el||document;if(goog.dom.canUseQuerySelector_(parent))return parent.querySelectorAll("."+className);else if(parent.getElementsByClassName)return parent.getElementsByClassName(className);return goog.dom.getElementsByTagNameAndClass_(document,"*",className,opt_el)};
goog.dom.getElementByClass=function(className,opt_el){var parent=opt_el||document;var retVal=null;if(goog.dom.canUseQuerySelector_(parent))retVal=parent.querySelector("."+className);else retVal=goog.dom.getElementsByClass(className,opt_el)[0];return retVal||null};goog.dom.canUseQuerySelector_=function(parent){return parent.querySelectorAll&&parent.querySelector&&(!goog.userAgent.WEBKIT||goog.dom.isCss1CompatMode_(document)||goog.userAgent.isVersion("528"))};
goog.dom.getElementsByTagNameAndClass_=function(doc,opt_tag,opt_class,opt_el){var parent=opt_el||doc;var tagName=opt_tag&&opt_tag!="*"?opt_tag.toUpperCase():"";if(goog.dom.canUseQuerySelector_(parent)&&(tagName||opt_class)){var query=tagName+(opt_class?"."+opt_class:"");return parent.querySelectorAll(query)}if(opt_class&&parent.getElementsByClassName){var els=parent.getElementsByClassName(opt_class);if(tagName){var arrayLike={};var len=0;for(var i=0,el;el=els[i];i++)if(tagName==el.nodeName)arrayLike[len++]=
el;arrayLike.length=len;return arrayLike}else return els}var els=parent.getElementsByTagName(tagName||"*");if(opt_class){var arrayLike={};var len=0;for(var i=0,el;el=els[i];i++){var className=el.className;if(typeof className.split=="function"&&goog.array.contains(className.split(/\s+/),opt_class))arrayLike[len++]=el}arrayLike.length=len;return arrayLike}else return els};goog.dom.$$=goog.dom.getElementsByTagNameAndClass;
goog.dom.setProperties=function(element,properties){goog.object.forEach(properties,function(val,key){if(key=="style")element.style.cssText=val;else if(key=="class")element.className=val;else if(key=="for")element.htmlFor=val;else if(key in goog.dom.DIRECT_ATTRIBUTE_MAP_)element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key],val);else if(goog.string.startsWith(key,"aria-"))element.setAttribute(key,val);else element[key]=val})};
goog.dom.DIRECT_ATTRIBUTE_MAP_={"cellpadding":"cellPadding","cellspacing":"cellSpacing","colspan":"colSpan","rowspan":"rowSpan","valign":"vAlign","height":"height","width":"width","usemap":"useMap","frameborder":"frameBorder","maxlength":"maxLength","type":"type"};goog.dom.getViewportSize=function(opt_window){return goog.dom.getViewportSize_(opt_window||window)};
goog.dom.getViewportSize_=function(win){var doc=win.document;if(goog.userAgent.WEBKIT&&!goog.userAgent.isVersion("500")&&!goog.userAgent.MOBILE){if(typeof win.innerHeight=="undefined")win=window;var innerHeight=win.innerHeight;var scrollHeight=win.document.documentElement.scrollHeight;if(win==win.top)if(scrollHeight<innerHeight)innerHeight-=15;return new goog.math.Size(win.innerWidth,innerHeight)}var el=goog.dom.isCss1CompatMode_(doc)?doc.documentElement:doc.body;return new goog.math.Size(el.clientWidth,
el.clientHeight)};goog.dom.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(window)};
goog.dom.getDocumentHeight_=function(win){var doc=win.document;var height=0;if(doc){var vh=goog.dom.getViewportSize_(win).height;var body=doc.body;var docEl=doc.documentElement;if(goog.dom.isCss1CompatMode_(doc)&&docEl.scrollHeight)height=docEl.scrollHeight!=vh?docEl.scrollHeight:docEl.offsetHeight;else{var sh=docEl.scrollHeight;var oh=docEl.offsetHeight;if(docEl.clientHeight!=oh){sh=body.scrollHeight;oh=body.offsetHeight}if(sh>vh)height=sh>oh?sh:oh;else height=sh<oh?sh:oh}}return height};
goog.dom.getPageScroll=function(opt_window){var win=opt_window||goog.global||window;return goog.dom.getDomHelper(win.document).getDocumentScroll()};goog.dom.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(document)};goog.dom.getDocumentScroll_=function(doc){var el=goog.dom.getDocumentScrollElement_(doc);var win=goog.dom.getWindow_(doc);return new goog.math.Coordinate(win.pageXOffset||el.scrollLeft,win.pageYOffset||el.scrollTop)};goog.dom.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(document)};
goog.dom.getDocumentScrollElement_=function(doc){return!goog.userAgent.WEBKIT&&goog.dom.isCss1CompatMode_(doc)?doc.documentElement:doc.body};goog.dom.getWindow=function(opt_doc){return opt_doc?goog.dom.getWindow_(opt_doc):window};goog.dom.getWindow_=function(doc){return doc.parentWindow||doc.defaultView};goog.dom.createDom=function(tagName,opt_attributes,var_args){return goog.dom.createDom_(document,arguments)};
goog.dom.createDom_=function(doc,args){var tagName=args[0];var attributes=args[1];if(!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES&&attributes&&(attributes.name||attributes.type)){var tagNameArr=["<",tagName];if(attributes.name)tagNameArr.push(' name="',goog.string.htmlEscape(attributes.name),'"');if(attributes.type){tagNameArr.push(' type="',goog.string.htmlEscape(attributes.type),'"');var clone={};goog.object.extend(clone,attributes);attributes=clone;delete attributes.type}tagNameArr.push(">");
tagName=tagNameArr.join("")}var element=doc.createElement(tagName);if(attributes)if(goog.isString(attributes))element.className=attributes;else if(goog.isArray(attributes))goog.dom.classes.add.apply(null,[element].concat(attributes));else goog.dom.setProperties(element,attributes);if(args.length>2)goog.dom.append_(doc,element,args,2);return element};
goog.dom.append_=function(doc,parent,args,startIndex){function childHandler(child){if(child)parent.appendChild(goog.isString(child)?doc.createTextNode(child):child)}for(var i=startIndex;i<args.length;i++){var arg=args[i];if(goog.isArrayLike(arg)&&!goog.dom.isNodeLike(arg))goog.array.forEach(goog.dom.isNodeList(arg)?goog.array.clone(arg):arg,childHandler);else childHandler(arg)}};goog.dom.$dom=goog.dom.createDom;goog.dom.createElement=function(name){return document.createElement(name)};
goog.dom.createTextNode=function(content){return document.createTextNode(content)};goog.dom.createTable=function(rows,columns,opt_fillWithNbsp){return goog.dom.createTable_(document,rows,columns,!!opt_fillWithNbsp)};
goog.dom.createTable_=function(doc,rows,columns,fillWithNbsp){var rowHtml=["<tr>"];for(var i=0;i<columns;i++)rowHtml.push(fillWithNbsp?"<td>&nbsp;</td>":"<td></td>");rowHtml.push("</tr>");rowHtml=rowHtml.join("");var totalHtml=["<table>"];for(i=0;i<rows;i++)totalHtml.push(rowHtml);totalHtml.push("</table>");var elem=doc.createElement(goog.dom.TagName.DIV);elem.innerHTML=totalHtml.join("");return elem.removeChild(elem.firstChild)};
goog.dom.htmlToDocumentFragment=function(htmlString){return goog.dom.htmlToDocumentFragment_(document,htmlString)};
goog.dom.htmlToDocumentFragment_=function(doc,htmlString){var tempDiv=doc.createElement("div");if(goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT){tempDiv.innerHTML="<br>"+htmlString;tempDiv.removeChild(tempDiv.firstChild)}else tempDiv.innerHTML=htmlString;if(tempDiv.childNodes.length==1)return tempDiv.removeChild(tempDiv.firstChild);else{var fragment=doc.createDocumentFragment();while(tempDiv.firstChild)fragment.appendChild(tempDiv.firstChild);return fragment}};
goog.dom.getCompatMode=function(){return goog.dom.isCss1CompatMode()?"CSS1Compat":"BackCompat"};goog.dom.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(document)};goog.dom.isCss1CompatMode_=function(doc){if(goog.dom.COMPAT_MODE_KNOWN_)return goog.dom.ASSUME_STANDARDS_MODE;return doc.compatMode=="CSS1Compat"};goog.dom.canHaveChildren=function(node){if(node.nodeType!=goog.dom.NodeType.ELEMENT)return false;switch(node.tagName){case goog.dom.TagName.APPLET:case goog.dom.TagName.AREA:case goog.dom.TagName.BASE:case goog.dom.TagName.BR:case goog.dom.TagName.COL:case goog.dom.TagName.FRAME:case goog.dom.TagName.HR:case goog.dom.TagName.IMG:case goog.dom.TagName.INPUT:case goog.dom.TagName.IFRAME:case goog.dom.TagName.ISINDEX:case goog.dom.TagName.LINK:case goog.dom.TagName.NOFRAMES:case goog.dom.TagName.NOSCRIPT:case goog.dom.TagName.META:case goog.dom.TagName.OBJECT:case goog.dom.TagName.PARAM:case goog.dom.TagName.SCRIPT:case goog.dom.TagName.STYLE:return false}return true};
goog.dom.appendChild=function(parent,child){parent.appendChild(child)};goog.dom.append=function(parent,var_args){goog.dom.append_(goog.dom.getOwnerDocument(parent),parent,arguments,1)};goog.dom.removeChildren=function(node){var child;while(child=node.firstChild)node.removeChild(child)};goog.dom.insertSiblingBefore=function(newNode,refNode){if(refNode.parentNode)refNode.parentNode.insertBefore(newNode,refNode)};
goog.dom.insertSiblingAfter=function(newNode,refNode){if(refNode.parentNode)refNode.parentNode.insertBefore(newNode,refNode.nextSibling)};goog.dom.insertChildAt=function(parent,child,index){parent.insertBefore(child,parent.childNodes[index]||null)};goog.dom.removeNode=function(node){return node&&node.parentNode?node.parentNode.removeChild(node):null};goog.dom.replaceNode=function(newNode,oldNode){var parent=oldNode.parentNode;if(parent)parent.replaceChild(newNode,oldNode)};
goog.dom.flattenElement=function(element){var child,parent=element.parentNode;if(parent&&parent.nodeType!=goog.dom.NodeType.DOCUMENT_FRAGMENT)if(element.removeNode)return element.removeNode(false);else{while(child=element.firstChild)parent.insertBefore(child,element);return goog.dom.removeNode(element)}};
goog.dom.getChildren=function(element){if(goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE&&element.children!=undefined)return element.children;return goog.array.filter(element.childNodes,function(node){return node.nodeType==goog.dom.NodeType.ELEMENT})};goog.dom.getFirstElementChild=function(node){if(node.firstElementChild!=undefined)return node.firstElementChild;return goog.dom.getNextElementNode_(node.firstChild,true)};
goog.dom.getLastElementChild=function(node){if(node.lastElementChild!=undefined)return node.lastElementChild;return goog.dom.getNextElementNode_(node.lastChild,false)};goog.dom.getNextElementSibling=function(node){if(node.nextElementSibling!=undefined)return node.nextElementSibling;return goog.dom.getNextElementNode_(node.nextSibling,true)};
goog.dom.getPreviousElementSibling=function(node){if(node.previousElementSibling!=undefined)return node.previousElementSibling;return goog.dom.getNextElementNode_(node.previousSibling,false)};goog.dom.getNextElementNode_=function(node,forward){while(node&&node.nodeType!=goog.dom.NodeType.ELEMENT)node=forward?node.nextSibling:node.previousSibling;return node};
goog.dom.getNextNode=function(node){if(!node)return null;if(node.firstChild)return node.firstChild;while(node&&!node.nextSibling)node=node.parentNode;return node?node.nextSibling:null};goog.dom.getPreviousNode=function(node){if(!node)return null;if(!node.previousSibling)return node.parentNode;node=node.previousSibling;while(node&&node.lastChild)node=node.lastChild;return node};goog.dom.isNodeLike=function(obj){return goog.isObject(obj)&&obj.nodeType>0};
goog.dom.isElement=function(obj){return goog.isObject(obj)&&obj.nodeType==goog.dom.NodeType.ELEMENT};goog.dom.isWindow=function(obj){return goog.isObject(obj)&&obj["window"]==obj};
goog.dom.contains=function(parent,descendant){if(parent.contains&&descendant.nodeType==goog.dom.NodeType.ELEMENT)return parent==descendant||parent.contains(descendant);if(typeof parent.compareDocumentPosition!="undefined")return parent==descendant||Boolean(parent.compareDocumentPosition(descendant)&16);while(descendant&&parent!=descendant)descendant=descendant.parentNode;return descendant==parent};
goog.dom.compareNodeOrder=function(node1,node2){if(node1==node2)return 0;if(node1.compareDocumentPosition)return node1.compareDocumentPosition(node2)&2?1:-1;if("sourceIndex"in node1||node1.parentNode&&"sourceIndex"in node1.parentNode){var isElement1=node1.nodeType==goog.dom.NodeType.ELEMENT;var isElement2=node2.nodeType==goog.dom.NodeType.ELEMENT;if(isElement1&&isElement2)return node1.sourceIndex-node2.sourceIndex;else{var parent1=node1.parentNode;var parent2=node2.parentNode;if(parent1==parent2)return goog.dom.compareSiblingOrder_(node1,
node2);if(!isElement1&&goog.dom.contains(parent1,node2))return-1*goog.dom.compareParentsDescendantNodeIe_(node1,node2);if(!isElement2&&goog.dom.contains(parent2,node1))return goog.dom.compareParentsDescendantNodeIe_(node2,node1);return(isElement1?node1.sourceIndex:parent1.sourceIndex)-(isElement2?node2.sourceIndex:parent2.sourceIndex)}}var doc=goog.dom.getOwnerDocument(node1);var range1,range2;range1=doc.createRange();range1.selectNode(node1);range1.collapse(true);range2=doc.createRange();range2.selectNode(node2);
range2.collapse(true);return range1.compareBoundaryPoints(goog.global["Range"].START_TO_END,range2)};goog.dom.compareParentsDescendantNodeIe_=function(textNode,node){var parent=textNode.parentNode;if(parent==node)return-1;var sibling=node;while(sibling.parentNode!=parent)sibling=sibling.parentNode;return goog.dom.compareSiblingOrder_(sibling,textNode)};goog.dom.compareSiblingOrder_=function(node1,node2){var s=node2;while(s=s.previousSibling)if(s==node1)return-1;return 1};
goog.dom.findCommonAncestor=function(var_args){var i,count=arguments.length;if(!count)return null;else if(count==1)return arguments[0];var paths=[];var minLength=Infinity;for(i=0;i<count;i++){var ancestors=[];var node=arguments[i];while(node){ancestors.unshift(node);node=node.parentNode}paths.push(ancestors);minLength=Math.min(minLength,ancestors.length)}var output=null;for(i=0;i<minLength;i++){var first=paths[0][i];for(var j=1;j<count;j++)if(first!=paths[j][i])return output;output=first}return output};
goog.dom.getOwnerDocument=function(node){return node.nodeType==goog.dom.NodeType.DOCUMENT?node:node.ownerDocument||node.document};goog.dom.getFrameContentDocument=function(frame){var doc=frame.contentDocument||frame.contentWindow.document;return doc};goog.dom.getFrameContentWindow=function(frame){return frame.contentWindow||goog.dom.getWindow_(goog.dom.getFrameContentDocument(frame))};
goog.dom.setTextContent=function(element,text){if("textContent"in element)element.textContent=text;else if(element.firstChild&&element.firstChild.nodeType==goog.dom.NodeType.TEXT){while(element.lastChild!=element.firstChild)element.removeChild(element.lastChild);element.firstChild.data=text}else{goog.dom.removeChildren(element);var doc=goog.dom.getOwnerDocument(element);element.appendChild(doc.createTextNode(text))}};
goog.dom.getOuterHtml=function(element){if("outerHTML"in element)return element.outerHTML;else{var doc=goog.dom.getOwnerDocument(element);var div=doc.createElement("div");div.appendChild(element.cloneNode(true));return div.innerHTML}};goog.dom.findNode=function(root,p){var rv=[];var found=goog.dom.findNodes_(root,p,rv,true);return found?rv[0]:undefined};goog.dom.findNodes=function(root,p){var rv=[];goog.dom.findNodes_(root,p,rv,false);return rv};
goog.dom.findNodes_=function(root,p,rv,findOne){if(root!=null){var child=root.firstChild;while(child){if(p(child)){rv.push(child);if(findOne)return true}if(goog.dom.findNodes_(child,p,rv,findOne))return true;child=child.nextSibling}}return false};goog.dom.TAGS_TO_IGNORE_={"SCRIPT":1,"STYLE":1,"HEAD":1,"IFRAME":1,"OBJECT":1};goog.dom.PREDEFINED_TAG_VALUES_={"IMG":" ","BR":"\n"};
goog.dom.isFocusableTabIndex=function(element){var attrNode=element.getAttributeNode("tabindex");if(attrNode&&attrNode.specified){var index=element.tabIndex;return goog.isNumber(index)&&index>=0&&index<32768}return false};goog.dom.setFocusableTabIndex=function(element,enable){if(enable)element.tabIndex=0;else{element.tabIndex=-1;element.removeAttribute("tabIndex")}};
goog.dom.getTextContent=function(node){var textContent;if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT&&"innerText"in node)textContent=goog.string.canonicalizeNewlines(node.innerText);else{var buf=[];goog.dom.getTextContent_(node,buf,true);textContent=buf.join("")}textContent=textContent.replace(/ \xAD /g," ").replace(/\xAD/g,"");textContent=textContent.replace(/\u200B/g,"");if(!goog.dom.BrowserFeature.CAN_USE_INNER_TEXT)textContent=textContent.replace(/ +/g," ");if(textContent!=" ")textContent=textContent.replace(/^\s*/,
"");return textContent};goog.dom.getRawTextContent=function(node){var buf=[];goog.dom.getTextContent_(node,buf,false);return buf.join("")};
goog.dom.getTextContent_=function(node,buf,normalizeWhitespace){if(node.nodeName in goog.dom.TAGS_TO_IGNORE_);else if(node.nodeType==goog.dom.NodeType.TEXT)if(normalizeWhitespace)buf.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g,""));else buf.push(node.nodeValue);else if(node.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)buf.push(goog.dom.PREDEFINED_TAG_VALUES_[node.nodeName]);else{var child=node.firstChild;while(child){goog.dom.getTextContent_(child,buf,normalizeWhitespace);child=child.nextSibling}}};
goog.dom.getNodeTextLength=function(node){return goog.dom.getTextContent(node).length};goog.dom.getNodeTextOffset=function(node,opt_offsetParent){var root=opt_offsetParent||goog.dom.getOwnerDocument(node).body;var buf=[];while(node&&node!=root){var cur=node;while(cur=cur.previousSibling)buf.unshift(goog.dom.getTextContent(cur));node=node.parentNode}return goog.string.trimLeft(buf.join("")).replace(/ +/g," ").length};
goog.dom.getNodeAtOffset=function(parent,offset,opt_result){var stack=[parent],pos=0,cur;while(stack.length>0&&pos<offset){cur=stack.pop();if(cur.nodeName in goog.dom.TAGS_TO_IGNORE_);else if(cur.nodeType==goog.dom.NodeType.TEXT){var text=cur.nodeValue.replace(/(\r\n|\r|\n)/g,"").replace(/ +/g," ");pos+=text.length}else if(cur.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)pos+=goog.dom.PREDEFINED_TAG_VALUES_[cur.nodeName].length;else for(var i=cur.childNodes.length-1;i>=0;i--)stack.push(cur.childNodes[i])}if(goog.isObject(opt_result)){opt_result.remainder=
cur?cur.nodeValue.length+offset-pos-1:0;opt_result.node=cur}return cur};goog.dom.isNodeList=function(val){if(val&&typeof val.length=="number")if(goog.isObject(val))return typeof val.item=="function"||typeof val.item=="string";else if(goog.isFunction(val))return typeof val.item=="function";return false};
goog.dom.getAncestorByTagNameAndClass=function(element,opt_tag,opt_class){var tagName=opt_tag?opt_tag.toUpperCase():null;return goog.dom.getAncestor(element,function(node){return(!tagName||node.nodeName==tagName)&&(!opt_class||goog.dom.classes.has(node,opt_class))},true)};goog.dom.getAncestorByClass=function(element,opt_class){return goog.dom.getAncestorByTagNameAndClass(element,null,opt_class)};
goog.dom.getAncestor=function(element,matcher,opt_includeNode,opt_maxSearchSteps){if(!opt_includeNode)element=element.parentNode;var ignoreSearchSteps=opt_maxSearchSteps==null;var steps=0;while(element&&(ignoreSearchSteps||steps<=opt_maxSearchSteps)){if(matcher(element))return element;element=element.parentNode;steps++}return null};goog.dom.getActiveElement=function(doc){try{return doc&&doc.activeElement}catch(e){}return null};
goog.dom.DomHelper=function(opt_document){this.document_=opt_document||goog.global.document||document};goog.dom.DomHelper.prototype.getDomHelper=goog.dom.getDomHelper;goog.dom.DomHelper.prototype.setDocument=function(document){this.document_=document};goog.dom.DomHelper.prototype.getDocument=function(){return this.document_};goog.dom.DomHelper.prototype.getElement=function(element){if(goog.isString(element))return this.document_.getElementById(element);else return element};
goog.dom.DomHelper.prototype.$=goog.dom.DomHelper.prototype.getElement;goog.dom.DomHelper.prototype.getElementsByTagNameAndClass=function(opt_tag,opt_class,opt_el){return goog.dom.getElementsByTagNameAndClass_(this.document_,opt_tag,opt_class,opt_el)};goog.dom.DomHelper.prototype.getElementsByClass=function(className,opt_el){var doc=opt_el||this.document_;return goog.dom.getElementsByClass(className,doc)};
goog.dom.DomHelper.prototype.getElementByClass=function(className,opt_el){var doc=opt_el||this.document_;return goog.dom.getElementByClass(className,doc)};goog.dom.DomHelper.prototype.$$=goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;goog.dom.DomHelper.prototype.setProperties=goog.dom.setProperties;goog.dom.DomHelper.prototype.getViewportSize=function(opt_window){return goog.dom.getViewportSize(opt_window||this.getWindow())};goog.dom.DomHelper.prototype.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(this.getWindow())};
goog.dom.Appendable;goog.dom.DomHelper.prototype.createDom=function(tagName,opt_attributes,var_args){return goog.dom.createDom_(this.document_,arguments)};goog.dom.DomHelper.prototype.$dom=goog.dom.DomHelper.prototype.createDom;goog.dom.DomHelper.prototype.createElement=function(name){return this.document_.createElement(name)};goog.dom.DomHelper.prototype.createTextNode=function(content){return this.document_.createTextNode(content)};
goog.dom.DomHelper.prototype.createTable=function(rows,columns,opt_fillWithNbsp){return goog.dom.createTable_(this.document_,rows,columns,!!opt_fillWithNbsp)};goog.dom.DomHelper.prototype.htmlToDocumentFragment=function(htmlString){return goog.dom.htmlToDocumentFragment_(this.document_,htmlString)};goog.dom.DomHelper.prototype.getCompatMode=function(){return this.isCss1CompatMode()?"CSS1Compat":"BackCompat"};goog.dom.DomHelper.prototype.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(this.document_)};
goog.dom.DomHelper.prototype.getWindow=function(){return goog.dom.getWindow_(this.document_)};goog.dom.DomHelper.prototype.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(this.document_)};goog.dom.DomHelper.prototype.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(this.document_)};goog.dom.DomHelper.prototype.appendChild=goog.dom.appendChild;goog.dom.DomHelper.prototype.append=goog.dom.append;goog.dom.DomHelper.prototype.removeChildren=goog.dom.removeChildren;
goog.dom.DomHelper.prototype.insertSiblingBefore=goog.dom.insertSiblingBefore;goog.dom.DomHelper.prototype.insertSiblingAfter=goog.dom.insertSiblingAfter;goog.dom.DomHelper.prototype.removeNode=goog.dom.removeNode;goog.dom.DomHelper.prototype.replaceNode=goog.dom.replaceNode;goog.dom.DomHelper.prototype.flattenElement=goog.dom.flattenElement;goog.dom.DomHelper.prototype.getFirstElementChild=goog.dom.getFirstElementChild;goog.dom.DomHelper.prototype.getLastElementChild=goog.dom.getLastElementChild;
goog.dom.DomHelper.prototype.getNextElementSibling=goog.dom.getNextElementSibling;goog.dom.DomHelper.prototype.getPreviousElementSibling=goog.dom.getPreviousElementSibling;goog.dom.DomHelper.prototype.getNextNode=goog.dom.getNextNode;goog.dom.DomHelper.prototype.getPreviousNode=goog.dom.getPreviousNode;goog.dom.DomHelper.prototype.isNodeLike=goog.dom.isNodeLike;goog.dom.DomHelper.prototype.contains=goog.dom.contains;goog.dom.DomHelper.prototype.getOwnerDocument=goog.dom.getOwnerDocument;
goog.dom.DomHelper.prototype.getFrameContentDocument=goog.dom.getFrameContentDocument;goog.dom.DomHelper.prototype.getFrameContentWindow=goog.dom.getFrameContentWindow;goog.dom.DomHelper.prototype.setTextContent=goog.dom.setTextContent;goog.dom.DomHelper.prototype.findNode=goog.dom.findNode;goog.dom.DomHelper.prototype.findNodes=goog.dom.findNodes;goog.dom.DomHelper.prototype.getTextContent=goog.dom.getTextContent;goog.dom.DomHelper.prototype.getNodeTextLength=goog.dom.getNodeTextLength;
goog.dom.DomHelper.prototype.getNodeTextOffset=goog.dom.getNodeTextOffset;goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass=goog.dom.getAncestorByTagNameAndClass;goog.dom.DomHelper.prototype.getAncestorByClass=goog.dom.getAncestorByClass;goog.dom.DomHelper.prototype.getAncestor=goog.dom.getAncestor;goog.provide("bot.locators.xpath");goog.require("bot");goog.require("bot.Error");goog.require("bot.ErrorCode");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.NodeType");goog.require("goog.userAgent");bot.locators.XPathResult_={ORDERED_NODE_SNAPSHOT_TYPE:7,FIRST_ORDERED_NODE_TYPE:9};bot.locators.xpath.DEFAULT_RESOLVER_=function(){var namespaces={svg:"http://www.w3.org/2000/svg"};return function(prefix){return namespaces[prefix]||null}}();
bot.locators.xpath.evaluate_=function(node,path,resultType){var doc=goog.dom.getOwnerDocument(node);if(!doc.implementation.hasFeature("XPath","3.0"))return null;try{var resolver=doc.createNSResolver?doc.createNSResolver(doc.documentElement):bot.locators.xpath.DEFAULT_RESOLVER_;return doc.evaluate(path,node,resolver,resultType,null)}catch(ex){if(!(goog.userAgent.GECKO&&ex.name=="NS_ERROR_ILLEGAL_VALUE"))throw new bot.Error(bot.ErrorCode.INVALID_SELECTOR_ERROR,"Unable to locate an element with the xpath expression "+
path+" because of the following error:\n"+ex);}};bot.locators.xpath.checkElement_=function(node,path){if(!node||node.nodeType!=goog.dom.NodeType.ELEMENT)throw new bot.Error(bot.ErrorCode.INVALID_SELECTOR_ERROR,'The result of the xpath expression "'+path+'" is: '+node+". It should be an element.");};
bot.locators.xpath.single=function(target,root){function selectSingleNode(){var result=bot.locators.xpath.evaluate_(root,target,bot.locators.XPathResult_.FIRST_ORDERED_NODE_TYPE);if(result){var node=result.singleNodeValue;return goog.userAgent.OPERA?node:node||null}else if(root.selectSingleNode){var doc=goog.dom.getOwnerDocument(root);if(doc.setProperty)doc.setProperty("SelectionLanguage","XPath");return root.selectSingleNode(target)}return null}var node=selectSingleNode();if(!goog.isNull(node))bot.locators.xpath.checkElement_(node,
target);return node};
bot.locators.xpath.many=function(target,root){function selectNodes(){var result=bot.locators.xpath.evaluate_(root,target,bot.locators.XPathResult_.ORDERED_NODE_SNAPSHOT_TYPE);if(result){var count=result.snapshotLength;if(goog.userAgent.OPERA&&!goog.isDef(count))bot.locators.xpath.checkElement_(null,target);var results=[];for(var i=0;i<count;++i)results.push(result.snapshotItem(i));return results}else if(root.selectNodes){var doc=goog.dom.getOwnerDocument(root);if(doc.setProperty)doc.setProperty("SelectionLanguage","XPath");
return root.selectNodes(target)}return[]}var nodes=selectNodes();goog.array.forEach(nodes,function(n){bot.locators.xpath.checkElement_(n,target)});return nodes};goog.provide("goog.userAgent.product");goog.require("goog.userAgent");goog.userAgent.product.ASSUME_FIREFOX=false;goog.userAgent.product.ASSUME_CAMINO=false;goog.userAgent.product.ASSUME_IPHONE=false;goog.userAgent.product.ASSUME_IPAD=false;goog.userAgent.product.ASSUME_ANDROID=false;goog.userAgent.product.ASSUME_CHROME=false;goog.userAgent.product.ASSUME_SAFARI=false;
goog.userAgent.product.PRODUCT_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_OPERA||goog.userAgent.product.ASSUME_FIREFOX||goog.userAgent.product.ASSUME_CAMINO||goog.userAgent.product.ASSUME_IPHONE||goog.userAgent.product.ASSUME_IPAD||goog.userAgent.product.ASSUME_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI;
goog.userAgent.product.init_=function(){goog.userAgent.product.detectedFirefox_=false;goog.userAgent.product.detectedCamino_=false;goog.userAgent.product.detectedIphone_=false;goog.userAgent.product.detectedIpad_=false;goog.userAgent.product.detectedAndroid_=false;goog.userAgent.product.detectedChrome_=false;goog.userAgent.product.detectedSafari_=false;var ua=goog.userAgent.getUserAgentString();if(!ua)return;if(ua.indexOf("Firefox")!=-1)goog.userAgent.product.detectedFirefox_=true;else if(ua.indexOf("Camino")!=
-1)goog.userAgent.product.detectedCamino_=true;else if(ua.indexOf("iPhone")!=-1||ua.indexOf("iPod")!=-1)goog.userAgent.product.detectedIphone_=true;else if(ua.indexOf("iPad")!=-1)goog.userAgent.product.detectedIpad_=true;else if(ua.indexOf("Android")!=-1)goog.userAgent.product.detectedAndroid_=true;else if(ua.indexOf("Chrome")!=-1)goog.userAgent.product.detectedChrome_=true;else if(ua.indexOf("Safari")!=-1)goog.userAgent.product.detectedSafari_=true};if(!goog.userAgent.product.PRODUCT_KNOWN_)goog.userAgent.product.init_();
goog.userAgent.product.OPERA=goog.userAgent.OPERA;goog.userAgent.product.IE=goog.userAgent.IE;goog.userAgent.product.FIREFOX=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_FIREFOX:goog.userAgent.product.detectedFirefox_;goog.userAgent.product.CAMINO=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CAMINO:goog.userAgent.product.detectedCamino_;goog.userAgent.product.IPHONE=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPHONE:goog.userAgent.product.detectedIphone_;
goog.userAgent.product.IPAD=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPAD:goog.userAgent.product.detectedIpad_;goog.userAgent.product.ANDROID=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_ANDROID:goog.userAgent.product.detectedAndroid_;goog.userAgent.product.CHROME=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CHROME:goog.userAgent.product.detectedChrome_;
goog.userAgent.product.SAFARI=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_SAFARI:goog.userAgent.product.detectedSafari_;goog.provide("goog.userAgent.product.isVersion");goog.require("goog.userAgent.product");
goog.userAgent.product.determineVersion_=function(){var version="",re,combine;if(goog.userAgent.product.FIREFOX)re=/Firefox\/([0-9.]+)/;else if(goog.userAgent.product.IE||goog.userAgent.product.OPERA)return goog.userAgent.VERSION;else if(goog.userAgent.product.CHROME)re=/Chrome\/([0-9.]+)/;else if(goog.userAgent.product.SAFARI)re=/Version\/([0-9.]+)/;else if(goog.userAgent.product.IPHONE||goog.userAgent.product.IPAD){re=/Version\/(\S+).*Mobile\/(\S+)/;combine=true}else if(goog.userAgent.product.ANDROID)re=
/Android\s+([0-9.]+)(?:.*Version\/([0-9.]+))?/;else if(goog.userAgent.product.CAMINO)re=/Camino\/([0-9.]+)/;if(re){var arr=re.exec(goog.userAgent.getUserAgentString());if(arr)version=combine?arr[1]+"."+arr[2]:arr[2]||arr[1];else version=""}return version};goog.userAgent.product.VERSION=goog.userAgent.product.determineVersion_();goog.userAgent.product.isVersion=function(version){return goog.string.compareVersions(goog.userAgent.product.VERSION,version)>=0};goog.provide("bot.userAgent");goog.require("goog.string");goog.require("goog.userAgent");goog.require("goog.userAgent.product");goog.require("goog.userAgent.product.isVersion");bot.userAgent.isEngineVersion=function(version){if(bot.userAgent.FIREFOX_EXTENSION)return bot.userAgent.FIREFOX_EXTENSION_IS_ENGINE_VERSION_(version);else if(goog.userAgent.IE)return goog.string.compareVersions(document.documentMode,version)>=0;else return goog.userAgent.isVersion(version)};
bot.userAgent.isProductVersion=function(version){if(bot.userAgent.FIREFOX_EXTENSION)return bot.userAgent.FIREFOX_EXTENSION_IS_PRODUCT_VERSION_(version);else if(goog.userAgent.product.ANDROID)return goog.string.compareVersions(bot.userAgent.ANDROID_VERSION_,version)>=0;else return goog.userAgent.product.isVersion(version)};bot.userAgent.FIREFOX_EXTENSION_IS_ENGINE_VERSION_;bot.userAgent.FIREFOX_EXTENSION_IS_PRODUCT_VERSION_;
bot.userAgent.FIREFOX_EXTENSION=function(){if(!goog.userAgent.GECKO)return false;var Components=goog.global.Components;if(!Components)return false;try{if(!Components["classes"])return false}catch(e){return false}var cc=Components["classes"];var ci=Components["interfaces"];var versionComparator=cc["@mozilla.org/xpcom/version-comparator;1"]["getService"](ci["nsIVersionComparator"]);var appInfo=cc["@mozilla.org/xre/app-info;1"]["getService"](ci["nsIXULAppInfo"]);var geckoVersion=appInfo["platformVersion"];
var firefoxVersion=appInfo["version"];bot.userAgent.FIREFOX_EXTENSION_IS_ENGINE_VERSION_=function(version){return versionComparator.compare(geckoVersion,""+version)>=0};bot.userAgent.FIREFOX_EXTENSION_IS_PRODUCT_VERSION_=function(version){return versionComparator.compare(firefoxVersion,""+version)>=0};return true}();bot.userAgent.IOS=goog.userAgent.product.IPAD||goog.userAgent.product.IPHONE;bot.userAgent.MOBILE=bot.userAgent.IOS||goog.userAgent.product.ANDROID;
bot.userAgent.ANDROID_VERSION_=function(){if(goog.userAgent.product.ANDROID){var userAgentString=goog.userAgent.getUserAgentString();var match=/Android\s+([0-9\.]+)/.exec(userAgentString);return match?match[1]:"0"}else return"0"}();bot.userAgent.IE_DOC_9=goog.userAgent.IE&&document.documentMode>=9;bot.userAgent.IE_DOC_PRE9=goog.userAgent.IE&&!bot.userAgent.IE_DOC_9;goog.provide("goog.iter");goog.provide("goog.iter.Iterator");goog.provide("goog.iter.StopIteration");goog.require("goog.array");goog.require("goog.asserts");goog.iter.Iterable;if("StopIteration"in goog.global)goog.iter.StopIteration=goog.global["StopIteration"];else goog.iter.StopIteration=Error("StopIteration");goog.iter.Iterator=function(){};goog.iter.Iterator.prototype.next=function(){throw goog.iter.StopIteration;};goog.iter.Iterator.prototype.__iterator__=function(opt_keys){return this};
goog.iter.toIterator=function(iterable){if(iterable instanceof goog.iter.Iterator)return iterable;if(typeof iterable.__iterator__=="function")return iterable.__iterator__(false);if(goog.isArrayLike(iterable)){var i=0;var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){if(i>=iterable.length)throw goog.iter.StopIteration;if(!(i in iterable)){i++;continue}return iterable[i++]}};return newIter}throw Error("Not implemented");};
goog.iter.forEach=function(iterable,f,opt_obj){if(goog.isArrayLike(iterable))try{goog.array.forEach(iterable,f,opt_obj)}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}else{iterable=goog.iter.toIterator(iterable);try{while(true)f.call(opt_obj,iterable.next(),undefined,iterable)}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}}};
goog.iter.filter=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){var val=iterable.next();if(f.call(opt_obj,val,undefined,iterable))return val}};return newIter};
goog.iter.range=function(startOrStop,opt_stop,opt_step){var start=0;var stop=startOrStop;var step=opt_step||1;if(arguments.length>1){start=startOrStop;stop=opt_stop}if(step==0)throw Error("Range step argument must not be zero");var newIter=new goog.iter.Iterator;newIter.next=function(){if(step>0&&start>=stop||step<0&&start<=stop)throw goog.iter.StopIteration;var rv=start;start+=step;return rv};return newIter};goog.iter.join=function(iterable,deliminator){return goog.iter.toArray(iterable).join(deliminator)};
goog.iter.map=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){var val=iterable.next();return f.call(opt_obj,val,undefined,iterable)}};return newIter};goog.iter.reduce=function(iterable,f,val,opt_obj){var rval=val;goog.iter.forEach(iterable,function(val){rval=f.call(opt_obj,rval,val)});return rval};
goog.iter.some=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);try{while(true)if(f.call(opt_obj,iterable.next(),undefined,iterable))return true}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}return false};goog.iter.every=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);try{while(true)if(!f.call(opt_obj,iterable.next(),undefined,iterable))return false}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;}return true};
goog.iter.chain=function(var_args){var args=arguments;var length=args.length;var i=0;var newIter=new goog.iter.Iterator;newIter.next=function(){try{if(i>=length)throw goog.iter.StopIteration;var current=goog.iter.toIterator(args[i]);return current.next()}catch(ex){if(ex!==goog.iter.StopIteration||i>=length)throw ex;else{i++;return this.next()}}};return newIter};
goog.iter.dropWhile=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;var dropping=true;newIter.next=function(){while(true){var val=iterable.next();if(dropping&&f.call(opt_obj,val,undefined,iterable))continue;else dropping=false;return val}};return newIter};
goog.iter.takeWhile=function(iterable,f,opt_obj){iterable=goog.iter.toIterator(iterable);var newIter=new goog.iter.Iterator;var taking=true;newIter.next=function(){while(true)if(taking){var val=iterable.next();if(f.call(opt_obj,val,undefined,iterable))return val;else taking=false}else throw goog.iter.StopIteration;};return newIter};
goog.iter.toArray=function(iterable){if(goog.isArrayLike(iterable))return goog.array.toArray(iterable);iterable=goog.iter.toIterator(iterable);var array=[];goog.iter.forEach(iterable,function(val){array.push(val)});return array};
goog.iter.equals=function(iterable1,iterable2){iterable1=goog.iter.toIterator(iterable1);iterable2=goog.iter.toIterator(iterable2);var b1,b2;try{while(true){b1=b2=false;var val1=iterable1.next();b1=true;var val2=iterable2.next();b2=true;if(val1!=val2)return false}}catch(ex){if(ex!==goog.iter.StopIteration)throw ex;else{if(b1&&!b2)return false;if(!b2)try{val2=iterable2.next();return false}catch(ex1){if(ex1!==goog.iter.StopIteration)throw ex1;return true}}}return false};
goog.iter.nextOrValue=function(iterable,defaultValue){try{return goog.iter.toIterator(iterable).next()}catch(e){if(e!=goog.iter.StopIteration)throw e;return defaultValue}};
goog.iter.product=function(var_args){var someArrayEmpty=goog.array.some(arguments,function(arr){return!arr.length});if(someArrayEmpty||!arguments.length)return new goog.iter.Iterator;var iter=new goog.iter.Iterator;var arrays=arguments;var indicies=goog.array.repeat(0,arrays.length);iter.next=function(){if(indicies){var retVal=goog.array.map(indicies,function(valueIndex,arrayIndex){return arrays[arrayIndex][valueIndex]});for(var i=indicies.length-1;i>=0;i--){goog.asserts.assert(indicies);if(indicies[i]<
arrays[i].length-1){indicies[i]++;break}if(i==0){indicies=null;break}indicies[i]=0}return retVal}throw goog.iter.StopIteration;};return iter};
goog.iter.cycle=function(iterable){var baseIterator=goog.iter.toIterator(iterable);var cache=[];var cacheIndex=0;var iter=new goog.iter.Iterator;var useCache=false;iter.next=function(){var returnElement=null;if(!useCache)try{returnElement=baseIterator.next();cache.push(returnElement);return returnElement}catch(e){if(e!=goog.iter.StopIteration||goog.array.isEmpty(cache))throw e;useCache=true}returnElement=cache[cacheIndex];cacheIndex=(cacheIndex+1)%cache.length;return returnElement};return iter};goog.provide("goog.dom.TagIterator");goog.provide("goog.dom.TagWalkType");goog.require("goog.dom.NodeType");goog.require("goog.iter.Iterator");goog.require("goog.iter.StopIteration");goog.dom.TagWalkType={START_TAG:1,OTHER:0,END_TAG:-1};
goog.dom.TagIterator=function(opt_node,opt_reversed,opt_unconstrained,opt_tagType,opt_depth){this.reversed=!!opt_reversed;if(opt_node)this.setPosition(opt_node,opt_tagType);this.depth=opt_depth!=undefined?opt_depth:this.tagType||0;if(this.reversed)this.depth*=-1;this.constrained=!opt_unconstrained};goog.inherits(goog.dom.TagIterator,goog.iter.Iterator);goog.dom.TagIterator.prototype.node=null;goog.dom.TagIterator.prototype.tagType=goog.dom.TagWalkType.OTHER;goog.dom.TagIterator.prototype.depth;goog.dom.TagIterator.prototype.reversed;
goog.dom.TagIterator.prototype.constrained;goog.dom.TagIterator.prototype.started_=false;goog.dom.TagIterator.prototype.setPosition=function(node,opt_tagType,opt_depth){this.node=node;if(node)if(goog.isNumber(opt_tagType))this.tagType=opt_tagType;else this.tagType=this.node.nodeType!=goog.dom.NodeType.ELEMENT?goog.dom.TagWalkType.OTHER:this.reversed?goog.dom.TagWalkType.END_TAG:goog.dom.TagWalkType.START_TAG;if(goog.isNumber(opt_depth))this.depth=opt_depth};
goog.dom.TagIterator.prototype.copyFrom=function(other){this.node=other.node;this.tagType=other.tagType;this.depth=other.depth;this.reversed=other.reversed;this.constrained=other.constrained};goog.dom.TagIterator.prototype.clone=function(){return new goog.dom.TagIterator(this.node,this.reversed,!this.constrained,this.tagType,this.depth)};
goog.dom.TagIterator.prototype.skipTag=function(){var check=this.reversed?goog.dom.TagWalkType.END_TAG:goog.dom.TagWalkType.START_TAG;if(this.tagType==check){this.tagType=check*-1;this.depth+=this.tagType*(this.reversed?-1:1)}};goog.dom.TagIterator.prototype.restartTag=function(){var check=this.reversed?goog.dom.TagWalkType.START_TAG:goog.dom.TagWalkType.END_TAG;if(this.tagType==check){this.tagType=check*-1;this.depth+=this.tagType*(this.reversed?-1:1)}};
goog.dom.TagIterator.prototype.next=function(){var node;if(this.started_){if(!this.node||this.constrained&&this.depth==0)throw goog.iter.StopIteration;node=this.node;var startType=this.reversed?goog.dom.TagWalkType.END_TAG:goog.dom.TagWalkType.START_TAG;if(this.tagType==startType){var child=this.reversed?node.lastChild:node.firstChild;if(child)this.setPosition(child);else this.setPosition(node,startType*-1)}else{var sibling=this.reversed?node.previousSibling:node.nextSibling;if(sibling)this.setPosition(sibling);
else this.setPosition(node.parentNode,startType*-1)}this.depth+=this.tagType*(this.reversed?-1:1)}else this.started_=true;node=this.node;if(!this.node)throw goog.iter.StopIteration;return node};goog.dom.TagIterator.prototype.isStarted=function(){return this.started_};goog.dom.TagIterator.prototype.isStartTag=function(){return this.tagType==goog.dom.TagWalkType.START_TAG};goog.dom.TagIterator.prototype.isEndTag=function(){return this.tagType==goog.dom.TagWalkType.END_TAG};
goog.dom.TagIterator.prototype.isNonElement=function(){return this.tagType==goog.dom.TagWalkType.OTHER};goog.dom.TagIterator.prototype.equals=function(other){return other.node==this.node&&(!this.node||other.tagType==this.tagType)};
goog.dom.TagIterator.prototype.splice=function(var_args){var node=this.node;this.restartTag();this.reversed=!this.reversed;goog.dom.TagIterator.prototype.next.call(this);this.reversed=!this.reversed;var arr=goog.isArrayLike(arguments[0])?arguments[0]:arguments;for(var i=arr.length-1;i>=0;i--)goog.dom.insertSiblingAfter(arr[i],node);goog.dom.removeNode(node)};goog.provide("goog.dom.NodeIterator");goog.require("goog.dom.TagIterator");goog.dom.NodeIterator=function(opt_node,opt_reversed,opt_unconstrained,opt_depth){goog.dom.TagIterator.call(this,opt_node,opt_reversed,opt_unconstrained,null,opt_depth)};goog.inherits(goog.dom.NodeIterator,goog.dom.TagIterator);goog.dom.NodeIterator.prototype.next=function(){do goog.dom.NodeIterator.superClass_.next.call(this);while(this.isEndTag());return this.node};goog.provide("goog.math.Box");goog.require("goog.math.Coordinate");goog.math.Box=function(top,right,bottom,left){this.top=top;this.right=right;this.bottom=bottom;this.left=left};
goog.math.Box.boundingBox=function(var_args){var box=new goog.math.Box(arguments[0].y,arguments[0].x,arguments[0].y,arguments[0].x);for(var i=1;i<arguments.length;i++){var coord=arguments[i];box.top=Math.min(box.top,coord.y);box.right=Math.max(box.right,coord.x);box.bottom=Math.max(box.bottom,coord.y);box.left=Math.min(box.left,coord.x)}return box};goog.math.Box.prototype.clone=function(){return new goog.math.Box(this.top,this.right,this.bottom,this.left)};
if(goog.DEBUG)goog.math.Box.prototype.toString=function(){return"("+this.top+"t, "+this.right+"r, "+this.bottom+"b, "+this.left+"l)"};goog.math.Box.prototype.contains=function(other){return goog.math.Box.contains(this,other)};goog.math.Box.prototype.expand=function(top,opt_right,opt_bottom,opt_left){if(goog.isObject(top)){this.top-=top.top;this.right+=top.right;this.bottom+=top.bottom;this.left-=top.left}else{this.top-=top;this.right+=opt_right;this.bottom+=opt_bottom;this.left-=opt_left}return this};
goog.math.Box.prototype.expandToInclude=function(box){this.left=Math.min(this.left,box.left);this.top=Math.min(this.top,box.top);this.right=Math.max(this.right,box.right);this.bottom=Math.max(this.bottom,box.bottom)};goog.math.Box.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.top==b.top&&a.right==b.right&&a.bottom==b.bottom&&a.left==b.left};
goog.math.Box.contains=function(box,other){if(!box||!other)return false;if(other instanceof goog.math.Box)return other.left>=box.left&&other.right<=box.right&&other.top>=box.top&&other.bottom<=box.bottom;return other.x>=box.left&&other.x<=box.right&&other.y>=box.top&&other.y<=box.bottom};
goog.math.Box.distance=function(box,coord){if(coord.x>=box.left&&coord.x<=box.right){if(coord.y>=box.top&&coord.y<=box.bottom)return 0;return coord.y<box.top?box.top-coord.y:coord.y-box.bottom}if(coord.y>=box.top&&coord.y<=box.bottom)return coord.x<box.left?box.left-coord.x:coord.x-box.right;return goog.math.Coordinate.distance(coord,new goog.math.Coordinate(coord.x<box.left?box.left:box.right,coord.y<box.top?box.top:box.bottom))};
goog.math.Box.intersects=function(a,b){return a.left<=b.right&&b.left<=a.right&&a.top<=b.bottom&&b.top<=a.bottom};goog.math.Box.intersectsWithPadding=function(a,b,padding){return a.left<=b.right+padding&&b.left<=a.right+padding&&a.top<=b.bottom+padding&&b.top<=a.bottom+padding};goog.provide("goog.math.Rect");goog.require("goog.math.Box");goog.require("goog.math.Size");goog.math.Rect=function(x,y,w,h){this.left=x;this.top=y;this.width=w;this.height=h};goog.math.Rect.prototype.clone=function(){return new goog.math.Rect(this.left,this.top,this.width,this.height)};goog.math.Rect.prototype.toBox=function(){var right=this.left+this.width;var bottom=this.top+this.height;return new goog.math.Box(this.top,right,bottom,this.left)};
goog.math.Rect.createFromBox=function(box){return new goog.math.Rect(box.left,box.top,box.right-box.left,box.bottom-box.top)};if(goog.DEBUG)goog.math.Rect.prototype.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"};goog.math.Rect.equals=function(a,b){if(a==b)return true;if(!a||!b)return false;return a.left==b.left&&a.width==b.width&&a.top==b.top&&a.height==b.height};
goog.math.Rect.prototype.intersection=function(rect){var x0=Math.max(this.left,rect.left);var x1=Math.min(this.left+this.width,rect.left+rect.width);if(x0<=x1){var y0=Math.max(this.top,rect.top);var y1=Math.min(this.top+this.height,rect.top+rect.height);if(y0<=y1){this.left=x0;this.top=y0;this.width=x1-x0;this.height=y1-y0;return true}}return false};
goog.math.Rect.intersection=function(a,b){var x0=Math.max(a.left,b.left);var x1=Math.min(a.left+a.width,b.left+b.width);if(x0<=x1){var y0=Math.max(a.top,b.top);var y1=Math.min(a.top+a.height,b.top+b.height);if(y0<=y1)return new goog.math.Rect(x0,y0,x1-x0,y1-y0)}return null};goog.math.Rect.intersects=function(a,b){return a.left<=b.left+b.width&&b.left<=a.left+a.width&&a.top<=b.top+b.height&&b.top<=a.top+a.height};
goog.math.Rect.prototype.intersects=function(rect){return goog.math.Rect.intersects(this,rect)};
goog.math.Rect.difference=function(a,b){var intersection=goog.math.Rect.intersection(a,b);if(!intersection||!intersection.height||!intersection.width)return[a.clone()];var result=[];var top=a.top;var height=a.height;var ar=a.left+a.width;var ab=a.top+a.height;var br=b.left+b.width;var bb=b.top+b.height;if(b.top>a.top){result.push(new goog.math.Rect(a.left,a.top,a.width,b.top-a.top));top=b.top;height-=b.top-a.top}if(bb<ab){result.push(new goog.math.Rect(a.left,bb,a.width,ab-bb));height=bb-top}if(b.left>
a.left)result.push(new goog.math.Rect(a.left,top,b.left-a.left,height));if(br<ar)result.push(new goog.math.Rect(br,top,ar-br,height));return result};goog.math.Rect.prototype.difference=function(rect){return goog.math.Rect.difference(this,rect)};
goog.math.Rect.prototype.boundingRect=function(rect){var right=Math.max(this.left+this.width,rect.left+rect.width);var bottom=Math.max(this.top+this.height,rect.top+rect.height);this.left=Math.min(this.left,rect.left);this.top=Math.min(this.top,rect.top);this.width=right-this.left;this.height=bottom-this.top};goog.math.Rect.boundingRect=function(a,b){if(!a||!b)return null;var clone=a.clone();clone.boundingRect(b);return clone};
goog.math.Rect.prototype.contains=function(another){if(another instanceof goog.math.Rect)return this.left<=another.left&&this.left+this.width>=another.left+another.width&&this.top<=another.top&&this.top+this.height>=another.top+another.height;else return another.x>=this.left&&another.x<=this.left+this.width&&another.y>=this.top&&another.y<=this.top+this.height};goog.math.Rect.prototype.getSize=function(){return new goog.math.Size(this.width,this.height)};goog.provide("goog.style");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.math.Box");goog.require("goog.math.Coordinate");goog.require("goog.math.Rect");goog.require("goog.math.Size");goog.require("goog.object");goog.require("goog.string");goog.require("goog.userAgent");goog.style.setStyle=function(element,style,opt_value){if(goog.isString(style))goog.style.setStyle_(element,opt_value,style);else goog.object.forEach(style,goog.partial(goog.style.setStyle_,element))};
goog.style.setStyle_=function(element,value,style){element.style[goog.string.toCamelCase(style)]=value};goog.style.getStyle=function(element,property){return element.style[goog.string.toCamelCase(property)]||""};goog.style.getComputedStyle=function(element,property){var doc=goog.dom.getOwnerDocument(element);if(doc.defaultView&&doc.defaultView.getComputedStyle){var styles=doc.defaultView.getComputedStyle(element,null);if(styles)return styles[property]||styles.getPropertyValue(property)}return""};
goog.style.getCascadedStyle=function(element,style){return element.currentStyle?element.currentStyle[style]:null};goog.style.getStyle_=function(element,style){return goog.style.getComputedStyle(element,style)||goog.style.getCascadedStyle(element,style)||element.style&&element.style[style]};goog.style.getComputedPosition=function(element){return goog.style.getStyle_(element,"position")};goog.style.getBackgroundColor=function(element){return goog.style.getStyle_(element,"backgroundColor")};
goog.style.getComputedOverflowX=function(element){return goog.style.getStyle_(element,"overflowX")};goog.style.getComputedOverflowY=function(element){return goog.style.getStyle_(element,"overflowY")};goog.style.getComputedZIndex=function(element){return goog.style.getStyle_(element,"zIndex")};goog.style.getComputedTextAlign=function(element){return goog.style.getStyle_(element,"textAlign")};goog.style.getComputedCursor=function(element){return goog.style.getStyle_(element,"cursor")};
goog.style.setPosition=function(el,arg1,opt_arg2){var x,y;var buggyGeckoSubPixelPos=goog.userAgent.GECKO&&(goog.userAgent.MAC||goog.userAgent.X11)&&goog.userAgent.isVersion("1.9");if(arg1 instanceof goog.math.Coordinate){x=arg1.x;y=arg1.y}else{x=arg1;y=opt_arg2}el.style.left=goog.style.getPixelStyleValue_(x,buggyGeckoSubPixelPos);el.style.top=goog.style.getPixelStyleValue_(y,buggyGeckoSubPixelPos)};goog.style.getPosition=function(element){return new goog.math.Coordinate(element.offsetLeft,element.offsetTop)};
goog.style.getClientViewportElement=function(opt_node){var doc;if(opt_node)if(opt_node.nodeType==goog.dom.NodeType.DOCUMENT)doc=opt_node;else doc=goog.dom.getOwnerDocument(opt_node);else doc=goog.dom.getDocument();if(goog.userAgent.IE&&!goog.userAgent.isDocumentMode(9)&&!goog.dom.getDomHelper(doc).isCss1CompatMode())return doc.body;return doc.documentElement};
goog.style.getBoundingClientRect_=function(el){var rect=el.getBoundingClientRect();if(goog.userAgent.IE){var doc=el.ownerDocument;rect.left-=doc.documentElement.clientLeft+doc.body.clientLeft;rect.top-=doc.documentElement.clientTop+doc.body.clientTop}return rect};
goog.style.getOffsetParent=function(element){if(goog.userAgent.IE&&!goog.userAgent.isDocumentMode(8))return element.offsetParent;var doc=goog.dom.getOwnerDocument(element);var positionStyle=goog.style.getStyle_(element,"position");var skipStatic=positionStyle=="fixed"||positionStyle=="absolute";for(var parent=element.parentNode;parent&&parent!=doc;parent=parent.parentNode){positionStyle=goog.style.getStyle_(parent,"position");skipStatic=skipStatic&&positionStyle=="static"&&parent!=doc.documentElement&&
parent!=doc.body;if(!skipStatic&&(parent.scrollWidth>parent.clientWidth||parent.scrollHeight>parent.clientHeight||positionStyle=="fixed"||positionStyle=="absolute"||positionStyle=="relative"))return parent}return null};
goog.style.getVisibleRectForElement=function(element){var visibleRect=new goog.math.Box(0,Infinity,Infinity,0);var dom=goog.dom.getDomHelper(element);var body=dom.getDocument().body;var documentElement=dom.getDocument().documentElement;var scrollEl=dom.getDocumentScrollElement();for(var el=element;el=goog.style.getOffsetParent(el);)if((!goog.userAgent.IE||el.clientWidth!=0)&&(!goog.userAgent.WEBKIT||el.clientHeight!=0||el!=body)&&el!=body&&el!=documentElement&&goog.style.getStyle_(el,"overflow")!=
"visible"){var pos=goog.style.getPageOffset(el);var client=goog.style.getClientLeftTop(el);pos.x+=client.x;pos.y+=client.y;visibleRect.top=Math.max(visibleRect.top,pos.y);visibleRect.right=Math.min(visibleRect.right,pos.x+el.clientWidth);visibleRect.bottom=Math.min(visibleRect.bottom,pos.y+el.clientHeight);visibleRect.left=Math.max(visibleRect.left,pos.x)}var scrollX=scrollEl.scrollLeft,scrollY=scrollEl.scrollTop;visibleRect.left=Math.max(visibleRect.left,scrollX);visibleRect.top=Math.max(visibleRect.top,
scrollY);var winSize=dom.getViewportSize();visibleRect.right=Math.min(visibleRect.right,scrollX+winSize.width);visibleRect.bottom=Math.min(visibleRect.bottom,scrollY+winSize.height);return visibleRect.top>=0&&visibleRect.left>=0&&visibleRect.bottom>visibleRect.top&&visibleRect.right>visibleRect.left?visibleRect:null};
goog.style.scrollIntoContainerView=function(element,container,opt_center){var elementPos=goog.style.getPageOffset(element);var containerPos=goog.style.getPageOffset(container);var containerBorder=goog.style.getBorderBox(container);var relX=elementPos.x-containerPos.x-containerBorder.left;var relY=elementPos.y-containerPos.y-containerBorder.top;var spaceX=container.clientWidth-element.offsetWidth;var spaceY=container.clientHeight-element.offsetHeight;if(opt_center){container.scrollLeft+=relX-spaceX/
2;container.scrollTop+=relY-spaceY/2}else{container.scrollLeft+=Math.min(relX,Math.max(relX-spaceX,0));container.scrollTop+=Math.min(relY,Math.max(relY-spaceY,0))}};
goog.style.getClientLeftTop=function(el){if(goog.userAgent.GECKO&&!goog.userAgent.isVersion("1.9")){var left=parseFloat(goog.style.getComputedStyle(el,"borderLeftWidth"));if(goog.style.isRightToLeft(el)){var scrollbarWidth=el.offsetWidth-el.clientWidth-left-parseFloat(goog.style.getComputedStyle(el,"borderRightWidth"));left+=scrollbarWidth}return new goog.math.Coordinate(left,parseFloat(goog.style.getComputedStyle(el,"borderTopWidth")))}return new goog.math.Coordinate(el.clientLeft,el.clientTop)};
goog.style.getPageOffset=function(el){var box,doc=goog.dom.getOwnerDocument(el);var positionStyle=goog.style.getStyle_(el,"position");var BUGGY_GECKO_BOX_OBJECT=goog.userAgent.GECKO&&doc.getBoxObjectFor&&!el.getBoundingClientRect&&positionStyle=="absolute"&&(box=doc.getBoxObjectFor(el))&&(box.screenX<0||box.screenY<0);var pos=new goog.math.Coordinate(0,0);var viewportElement=goog.style.getClientViewportElement(doc);if(el==viewportElement)return pos;if(el.getBoundingClientRect){box=goog.style.getBoundingClientRect_(el);
var scrollCoord=goog.dom.getDomHelper(doc).getDocumentScroll();pos.x=box.left+scrollCoord.x;pos.y=box.top+scrollCoord.y}else if(doc.getBoxObjectFor&&!BUGGY_GECKO_BOX_OBJECT){box=doc.getBoxObjectFor(el);var vpBox=doc.getBoxObjectFor(viewportElement);pos.x=box.screenX-vpBox.screenX;pos.y=box.screenY-vpBox.screenY}else{var parent=el;do{pos.x+=parent.offsetLeft;pos.y+=parent.offsetTop;if(parent!=el){pos.x+=parent.clientLeft||0;pos.y+=parent.clientTop||0}if(goog.userAgent.WEBKIT&&goog.style.getComputedPosition(parent)==
"fixed"){pos.x+=doc.body.scrollLeft;pos.y+=doc.body.scrollTop;break}parent=parent.offsetParent}while(parent&&parent!=el);if(goog.userAgent.OPERA||goog.userAgent.WEBKIT&&positionStyle=="absolute")pos.y-=doc.body.offsetTop;for(parent=el;(parent=goog.style.getOffsetParent(parent))&&parent!=doc.body&&parent!=viewportElement;){pos.x-=parent.scrollLeft;if(!goog.userAgent.OPERA||parent.tagName!="TR")pos.y-=parent.scrollTop}}return pos};goog.style.getPageOffsetLeft=function(el){return goog.style.getPageOffset(el).x};
goog.style.getPageOffsetTop=function(el){return goog.style.getPageOffset(el).y};
goog.style.getFramedPageOffset=function(el,relativeWin){var position=new goog.math.Coordinate(0,0);var currentWin=goog.dom.getWindow(goog.dom.getOwnerDocument(el));var currentEl=el;do{var offset=currentWin==relativeWin?goog.style.getPageOffset(currentEl):goog.style.getClientPosition(currentEl);position.x+=offset.x;position.y+=offset.y}while(currentWin&&currentWin!=relativeWin&&(currentEl=currentWin.frameElement)&&(currentWin=currentWin.parent));return position};
goog.style.translateRectForAnotherFrame=function(rect,origBase,newBase){if(origBase.getDocument()!=newBase.getDocument()){var body=origBase.getDocument().body;var pos=goog.style.getFramedPageOffset(body,newBase.getWindow());pos=goog.math.Coordinate.difference(pos,goog.style.getPageOffset(body));if(goog.userAgent.IE&&!origBase.isCss1CompatMode())pos=goog.math.Coordinate.difference(pos,origBase.getDocumentScroll());rect.left+=pos.x;rect.top+=pos.y}};
goog.style.getRelativePosition=function(a,b){var ap=goog.style.getClientPosition(a);var bp=goog.style.getClientPosition(b);return new goog.math.Coordinate(ap.x-bp.x,ap.y-bp.y)};
goog.style.getClientPosition=function(el){var pos=new goog.math.Coordinate;if(el.nodeType==goog.dom.NodeType.ELEMENT)if(el.getBoundingClientRect){var box=goog.style.getBoundingClientRect_(el);pos.x=box.left;pos.y=box.top}else{var scrollCoord=goog.dom.getDomHelper(el).getDocumentScroll();var pageCoord=goog.style.getPageOffset(el);pos.x=pageCoord.x-scrollCoord.x;pos.y=pageCoord.y-scrollCoord.y}else{var isAbstractedEvent=goog.isFunction(el.getBrowserEvent);var targetEvent=el;if(el.targetTouches)targetEvent=
el.targetTouches[0];else if(isAbstractedEvent&&el.getBrowserEvent().targetTouches)targetEvent=el.getBrowserEvent().targetTouches[0];pos.x=targetEvent.clientX;pos.y=targetEvent.clientY}return pos};goog.style.setPageOffset=function(el,x,opt_y){var cur=goog.style.getPageOffset(el);if(x instanceof goog.math.Coordinate){opt_y=x.y;x=x.x}var dx=x-cur.x;var dy=opt_y-cur.y;goog.style.setPosition(el,el.offsetLeft+dx,el.offsetTop+dy)};
goog.style.setSize=function(element,w,opt_h){var h;if(w instanceof goog.math.Size){h=w.height;w=w.width}else{if(opt_h==undefined)throw Error("missing height argument");h=opt_h}goog.style.setWidth(element,w);goog.style.setHeight(element,h)};goog.style.getPixelStyleValue_=function(value,round){if(typeof value=="number")value=(round?Math.round(value):value)+"px";return value};goog.style.setHeight=function(element,height){element.style.height=goog.style.getPixelStyleValue_(height,true)};
goog.style.setWidth=function(element,width){element.style.width=goog.style.getPixelStyleValue_(width,true)};
goog.style.getSize=function(element){if(goog.style.getStyle_(element,"display")!="none")return goog.style.getSizeWithDisplay_(element);var style=element.style;var originalDisplay=style.display;var originalVisibility=style.visibility;var originalPosition=style.position;style.visibility="hidden";style.position="absolute";style.display="inline";var size=goog.style.getSizeWithDisplay_(element);style.display=originalDisplay;style.position=originalPosition;style.visibility=originalVisibility;return size};
goog.style.getSizeWithDisplay_=function(element){var offsetWidth=element.offsetWidth;var offsetHeight=element.offsetHeight;var webkitOffsetsZero=goog.userAgent.WEBKIT&&!offsetWidth&&!offsetHeight;if((!goog.isDef(offsetWidth)||webkitOffsetsZero)&&element.getBoundingClientRect){var clientRect=goog.style.getBoundingClientRect_(element);return new goog.math.Size(clientRect.right-clientRect.left,clientRect.bottom-clientRect.top)}return new goog.math.Size(offsetWidth,offsetHeight)};
goog.style.getBounds=function(element){var o=goog.style.getPageOffset(element);var s=goog.style.getSize(element);return new goog.math.Rect(o.x,o.y,s.width,s.height)};goog.style.toCamelCase=function(selector){return goog.string.toCamelCase(String(selector))};goog.style.toSelectorCase=function(selector){return goog.string.toSelectorCase(selector)};
goog.style.getOpacity=function(el){var style=el.style;var result="";if("opacity"in style)result=style.opacity;else if("MozOpacity"in style)result=style.MozOpacity;else if("filter"in style){var match=style.filter.match(/alpha\(opacity=([\d.]+)\)/);if(match)result=String(match[1]/100)}return result==""?result:Number(result)};
goog.style.setOpacity=function(el,alpha){var style=el.style;if("opacity"in style)style.opacity=alpha;else if("MozOpacity"in style)style.MozOpacity=alpha;else if("filter"in style)if(alpha==="")style.filter="";else style.filter="alpha(opacity="+alpha*100+")"};
goog.style.setTransparentBackgroundImage=function(el,src){var style=el.style;if(goog.userAgent.IE&&!goog.userAgent.isVersion("8"))style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader("+'src="'+src+'", sizingMethod="crop")';else{style.backgroundImage="url("+src+")";style.backgroundPosition="top left";style.backgroundRepeat="no-repeat"}};goog.style.clearTransparentBackgroundImage=function(el){var style=el.style;if("filter"in style)style.filter="";else style.backgroundImage="none"};
goog.style.showElement=function(el,display){el.style.display=display?"":"none"};goog.style.isElementShown=function(el){return el.style.display!="none"};
goog.style.installStyles=function(stylesString,opt_node){var dh=goog.dom.getDomHelper(opt_node);var styleSheet=null;if(goog.userAgent.IE){styleSheet=dh.getDocument().createStyleSheet();goog.style.setStyles(styleSheet,stylesString)}else{var head=dh.getElementsByTagNameAndClass("head")[0];if(!head){var body=dh.getElementsByTagNameAndClass("body")[0];head=dh.createDom("head");body.parentNode.insertBefore(head,body)}styleSheet=dh.createDom("style");goog.style.setStyles(styleSheet,stylesString);dh.appendChild(head,
styleSheet)}return styleSheet};goog.style.uninstallStyles=function(styleSheet){var node=styleSheet.ownerNode||styleSheet.owningElement||styleSheet;goog.dom.removeNode(node)};goog.style.setStyles=function(element,stylesString){if(goog.userAgent.IE)element.cssText=stylesString;else{var propToSet=goog.userAgent.WEBKIT?"innerText":"innerHTML";element[propToSet]=stylesString}};
goog.style.setPreWrap=function(el){var style=el.style;if(goog.userAgent.IE&&!goog.userAgent.isVersion("8")){style.whiteSpace="pre";style.wordWrap="break-word"}else if(goog.userAgent.GECKO)style.whiteSpace="-moz-pre-wrap";else style.whiteSpace="pre-wrap"};
goog.style.setInlineBlock=function(el){var style=el.style;style.position="relative";if(goog.userAgent.IE&&!goog.userAgent.isVersion("8")){style.zoom="1";style.display="inline"}else if(goog.userAgent.GECKO)style.display=goog.userAgent.isVersion("1.9a")?"inline-block":"-moz-inline-box";else style.display="inline-block"};goog.style.isRightToLeft=function(el){return"rtl"==goog.style.getStyle_(el,"direction")};
goog.style.unselectableStyle_=goog.userAgent.GECKO?"MozUserSelect":goog.userAgent.WEBKIT?"WebkitUserSelect":null;goog.style.isUnselectable=function(el){if(goog.style.unselectableStyle_)return el.style[goog.style.unselectableStyle_].toLowerCase()=="none";else if(goog.userAgent.IE||goog.userAgent.OPERA)return el.getAttribute("unselectable")=="on";return false};
goog.style.setUnselectable=function(el,unselectable,opt_noRecurse){var descendants=!opt_noRecurse?el.getElementsByTagName("*"):null;var name=goog.style.unselectableStyle_;if(name){var value=unselectable?"none":"";el.style[name]=value;if(descendants)for(var i=0,descendant;descendant=descendants[i];i++)descendant.style[name]=value}else if(goog.userAgent.IE||goog.userAgent.OPERA){var value=unselectable?"on":"";el.setAttribute("unselectable",value);if(descendants)for(var i=0,descendant;descendant=descendants[i];i++)descendant.setAttribute("unselectable",
value)}};goog.style.getBorderBoxSize=function(element){return new goog.math.Size(element.offsetWidth,element.offsetHeight)};
goog.style.setBorderBoxSize=function(element,size){var doc=goog.dom.getOwnerDocument(element);var isCss1CompatMode=goog.dom.getDomHelper(doc).isCss1CompatMode();if(goog.userAgent.IE&&(!isCss1CompatMode||!goog.userAgent.isVersion("8"))){var style=element.style;if(isCss1CompatMode){var paddingBox=goog.style.getPaddingBox(element);var borderBox=goog.style.getBorderBox(element);style.pixelWidth=size.width-borderBox.left-paddingBox.left-paddingBox.right-borderBox.right;style.pixelHeight=size.height-borderBox.top-
paddingBox.top-paddingBox.bottom-borderBox.bottom}else{style.pixelWidth=size.width;style.pixelHeight=size.height}}else goog.style.setBoxSizingSize_(element,size,"border-box")};
goog.style.getContentBoxSize=function(element){var doc=goog.dom.getOwnerDocument(element);var ieCurrentStyle=goog.userAgent.IE&&element.currentStyle;if(ieCurrentStyle&&goog.dom.getDomHelper(doc).isCss1CompatMode()&&ieCurrentStyle.width!="auto"&&ieCurrentStyle.height!="auto"&&!ieCurrentStyle.boxSizing){var width=goog.style.getIePixelValue_(element,ieCurrentStyle.width,"width","pixelWidth");var height=goog.style.getIePixelValue_(element,ieCurrentStyle.height,"height","pixelHeight");return new goog.math.Size(width,
height)}else{var borderBoxSize=goog.style.getBorderBoxSize(element);var paddingBox=goog.style.getPaddingBox(element);var borderBox=goog.style.getBorderBox(element);return new goog.math.Size(borderBoxSize.width-borderBox.left-paddingBox.left-paddingBox.right-borderBox.right,borderBoxSize.height-borderBox.top-paddingBox.top-paddingBox.bottom-borderBox.bottom)}};
goog.style.setContentBoxSize=function(element,size){var doc=goog.dom.getOwnerDocument(element);var isCss1CompatMode=goog.dom.getDomHelper(doc).isCss1CompatMode();if(goog.userAgent.IE&&(!isCss1CompatMode||!goog.userAgent.isVersion("8"))){var style=element.style;if(isCss1CompatMode){style.pixelWidth=size.width;style.pixelHeight=size.height}else{var paddingBox=goog.style.getPaddingBox(element);var borderBox=goog.style.getBorderBox(element);style.pixelWidth=size.width+borderBox.left+paddingBox.left+paddingBox.right+
borderBox.right;style.pixelHeight=size.height+borderBox.top+paddingBox.top+paddingBox.bottom+borderBox.bottom}}else goog.style.setBoxSizingSize_(element,size,"content-box")};goog.style.setBoxSizingSize_=function(element,size,boxSizing){var style=element.style;if(goog.userAgent.GECKO)style.MozBoxSizing=boxSizing;else if(goog.userAgent.WEBKIT)style.WebkitBoxSizing=boxSizing;else style.boxSizing=boxSizing;style.width=size.width+"px";style.height=size.height+"px"};
goog.style.getIePixelValue_=function(element,value,name,pixelName){if(/^\d+px?$/.test(value))return parseInt(value,10);else{var oldStyleValue=element.style[name];var oldRuntimeValue=element.runtimeStyle[name];element.runtimeStyle[name]=element.currentStyle[name];element.style[name]=value;var pixelValue=element.style[pixelName];element.style[name]=oldStyleValue;element.runtimeStyle[name]=oldRuntimeValue;return pixelValue}};
goog.style.getIePixelDistance_=function(element,propName){return goog.style.getIePixelValue_(element,goog.style.getCascadedStyle(element,propName),"left","pixelLeft")};
goog.style.getBox_=function(element,stylePrefix){if(goog.userAgent.IE){var left=goog.style.getIePixelDistance_(element,stylePrefix+"Left");var right=goog.style.getIePixelDistance_(element,stylePrefix+"Right");var top=goog.style.getIePixelDistance_(element,stylePrefix+"Top");var bottom=goog.style.getIePixelDistance_(element,stylePrefix+"Bottom");return new goog.math.Box(top,right,bottom,left)}else{var left=goog.style.getComputedStyle(element,stylePrefix+"Left");var right=goog.style.getComputedStyle(element,
stylePrefix+"Right");var top=goog.style.getComputedStyle(element,stylePrefix+"Top");var bottom=goog.style.getComputedStyle(element,stylePrefix+"Bottom");return new goog.math.Box(parseFloat(top),parseFloat(right),parseFloat(bottom),parseFloat(left))}};goog.style.getPaddingBox=function(element){return goog.style.getBox_(element,"padding")};goog.style.getMarginBox=function(element){return goog.style.getBox_(element,"margin")};goog.style.ieBorderWidthKeywords_={"thin":2,"medium":4,"thick":6};
goog.style.getIePixelBorder_=function(element,prop){if(goog.style.getCascadedStyle(element,prop+"Style")=="none")return 0;var width=goog.style.getCascadedStyle(element,prop+"Width");if(width in goog.style.ieBorderWidthKeywords_)return goog.style.ieBorderWidthKeywords_[width];return goog.style.getIePixelValue_(element,width,"left","pixelLeft")};
goog.style.getBorderBox=function(element){if(goog.userAgent.IE){var left=goog.style.getIePixelBorder_(element,"borderLeft");var right=goog.style.getIePixelBorder_(element,"borderRight");var top=goog.style.getIePixelBorder_(element,"borderTop");var bottom=goog.style.getIePixelBorder_(element,"borderBottom");return new goog.math.Box(top,right,bottom,left)}else{var left=goog.style.getComputedStyle(element,"borderLeftWidth");var right=goog.style.getComputedStyle(element,"borderRightWidth");var top=goog.style.getComputedStyle(element,
"borderTopWidth");var bottom=goog.style.getComputedStyle(element,"borderBottomWidth");return new goog.math.Box(parseFloat(top),parseFloat(right),parseFloat(bottom),parseFloat(left))}};
goog.style.getFontFamily=function(el){var doc=goog.dom.getOwnerDocument(el);var font="";if(doc.body.createTextRange){var range=doc.body.createTextRange();range.moveToElementText(el);try{font=range.queryCommandValue("FontName")}catch(e){font=""}}if(!font)font=goog.style.getStyle_(el,"fontFamily");var fontsArray=font.split(",");if(fontsArray.length>1)font=fontsArray[0];return goog.string.stripQuotes(font,"\"'")};goog.style.lengthUnitRegex_=/[^\d]+$/;
goog.style.getLengthUnits=function(value){var units=value.match(goog.style.lengthUnitRegex_);return units&&units[0]||null};goog.style.ABSOLUTE_CSS_LENGTH_UNITS_={"cm":1,"in":1,"mm":1,"pc":1,"pt":1};goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_={"em":1,"ex":1};
goog.style.getFontSize=function(el){var fontSize=goog.style.getStyle_(el,"fontSize");var sizeUnits=goog.style.getLengthUnits(fontSize);if(fontSize&&"px"==sizeUnits)return parseInt(fontSize,10);if(goog.userAgent.IE)if(sizeUnits in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_)return goog.style.getIePixelValue_(el,fontSize,"left","pixelLeft");else if(el.parentNode&&el.parentNode.nodeType==goog.dom.NodeType.ELEMENT&&sizeUnits in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_){var parentElement=el.parentNode;var parentSize=
goog.style.getStyle_(parentElement,"fontSize");return goog.style.getIePixelValue_(parentElement,fontSize==parentSize?"1em":fontSize,"left","pixelLeft")}var sizeElement=goog.dom.createDom("span",{"style":"visibility:hidden;position:absolute;"+"line-height:0;padding:0;margin:0;border:0;height:1em;"});goog.dom.appendChild(el,sizeElement);fontSize=sizeElement.offsetHeight;goog.dom.removeNode(sizeElement);return fontSize};
goog.style.parseStyleAttribute=function(value){var result={};goog.array.forEach(value.split(/\s*;\s*/),function(pair){var keyValue=pair.split(/\s*:\s*/);if(keyValue.length==2)result[goog.string.toCamelCase(keyValue[0].toLowerCase())]=keyValue[1]});return result};goog.style.toStyleAttribute=function(obj){var buffer=[];goog.object.forEach(obj,function(value,key){buffer.push(goog.string.toSelectorCase(key),":",value,";")});return buffer.join("")};
goog.style.setFloat=function(el,value){el.style[goog.userAgent.IE?"styleFloat":"cssFloat"]=value};goog.style.getFloat=function(el){return el.style[goog.userAgent.IE?"styleFloat":"cssFloat"]||""};
goog.style.getScrollbarWidth=function(opt_className){var outerDiv=goog.dom.createElement("div");if(opt_className)outerDiv.className=opt_className;outerDiv.style.cssText="visiblity:hidden;overflow:auto;"+"position:absolute;top:0;width:100px;height:100px";var innerDiv=goog.dom.createElement("div");goog.style.setSize(innerDiv,"200px","200px");outerDiv.appendChild(innerDiv);goog.dom.appendChild(goog.dom.getDocument().body,outerDiv);var width=outerDiv.offsetWidth-outerDiv.clientWidth;goog.dom.removeNode(outerDiv);
return width};goog.provide("bot.dom");goog.require("bot");goog.require("bot.locators.xpath");goog.require("bot.userAgent");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.NodeIterator");goog.require("goog.dom.NodeType");goog.require("goog.dom.TagName");goog.require("goog.math.Coordinate");goog.require("goog.math.Rect");goog.require("goog.math.Size");goog.require("goog.string");goog.require("goog.style");bot.dom.getActiveElement=function(nodeOrWindow){return goog.dom.getOwnerDocument(nodeOrWindow).activeElement};
bot.dom.isElement=function(node,opt_tagName){return!!node&&node.nodeType==goog.dom.NodeType.ELEMENT&&(!opt_tagName||node.tagName.toUpperCase()==opt_tagName)};bot.dom.isInteractable=function(element){return bot.dom.isShown(element,true)&&bot.dom.isEnabled(element)};bot.dom.isSelectable=function(element){if(bot.dom.isElement(element,goog.dom.TagName.OPTION))return true;if(bot.dom.isElement(element,goog.dom.TagName.INPUT)){var type=element.type.toLowerCase();return type=="checkbox"||type=="radio"}return false};
bot.dom.isSelected=function(element){if(!bot.dom.isSelectable(element))throw new bot.Error(bot.ErrorCode.ELEMENT_NOT_SELECTABLE,"Element is not selectable");var propertyName="selected";var type=element.type&&element.type.toLowerCase();if("checkbox"==type||"radio"==type)propertyName="checked";return!!bot.dom.getProperty(element,propertyName)};
bot.dom.FOCUSABLE_FORM_FIELDS_=[goog.dom.TagName.A,goog.dom.TagName.AREA,goog.dom.TagName.BUTTON,goog.dom.TagName.INPUT,goog.dom.TagName.LABEL,goog.dom.TagName.SELECT,goog.dom.TagName.TEXTAREA];bot.dom.isFocusable=function(element){return goog.array.some(bot.dom.FOCUSABLE_FORM_FIELDS_,function(tagName){return element.tagName.toUpperCase()==tagName})||bot.dom.getAttribute(element,"tabindex")!=null&&Number(bot.dom.getProperty(element,"tabIndex"))>=0};bot.dom.PROPERTY_ALIASES_={"class":"className","readonly":"readOnly"};
bot.dom.BOOLEAN_PROPERTIES_=["checked","disabled","draggable","hidden"];bot.dom.getProperty=function(element,propertyName){var key=bot.dom.PROPERTY_ALIASES_[propertyName]||propertyName;var value=element[key];if(!goog.isDef(value)&&goog.array.contains(bot.dom.BOOLEAN_PROPERTIES_,key))return false;if(propertyName=="value"&&bot.dom.isElement(element,goog.dom.TagName.OPTION)&&!bot.dom.hasAttribute(element,propertyName))value=goog.dom.getRawTextContent(element);return value};
bot.dom.BOOLEAN_ATTRIBUTES_=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking","selected","spellcheck","truespeed","willvalidate"];
bot.dom.splitStyleAttributeOnSemicolonsRe_=/[;]+(?=(?:(?:[^"]*"){2})*[^"]*$)(?=(?:(?:[^']*'){2})*[^']*$)(?=(?:[^()]*\([^()]*\))*[^()]*$)/;
bot.dom.standardizeStyleAttribute_=function(value){var styleArray=value.split(bot.dom.splitStyleAttributeOnSemicolonsRe_);var css=[];goog.array.forEach(styleArray,function(pair){var i=pair.indexOf(":");if(i>0){var keyValue=[pair.slice(0,i),pair.slice(i+1)];if(keyValue.length==2)css.push(keyValue[0].toLowerCase(),":",keyValue[1],";")}});css=css.join("");css=css.charAt(css.length-1)==";"?css:css+";";return goog.userAgent.OPERA?css.replace(/\w+:;/g,""):css};
bot.dom.getAttribute=function(element,attributeName){if(goog.dom.NodeType.COMMENT==element.nodeType)return null;attributeName=attributeName.toLowerCase();if(attributeName=="style")return bot.dom.standardizeStyleAttribute_(element.style.cssText);var attr=element.getAttributeNode(attributeName);if(goog.userAgent.IE)if(!attr&&goog.userAgent.isVersion(8)&&goog.array.contains(bot.dom.BOOLEAN_ATTRIBUTES_,attributeName))attr=element[attributeName];if(!attr)return null;if(goog.array.contains(bot.dom.BOOLEAN_ATTRIBUTES_,
attributeName))return bot.userAgent.IE_DOC_PRE9&&attr.value=="false"?null:"true";return attr.specified?attr.value:null};bot.dom.hasAttribute=function(element,attributeName){attributeName=attributeName.toLowerCase();if(element.hasAttribute)return element.hasAttribute(attributeName);else try{return element.attributes[attributeName].specified}catch(e){return false}};
bot.dom.DISABLED_ATTRIBUTE_SUPPORTED_=[goog.dom.TagName.BUTTON,goog.dom.TagName.INPUT,goog.dom.TagName.OPTGROUP,goog.dom.TagName.OPTION,goog.dom.TagName.SELECT,goog.dom.TagName.TEXTAREA];
bot.dom.isEnabled=function(el){var tagName=el.tagName.toUpperCase();if(!goog.array.contains(bot.dom.DISABLED_ATTRIBUTE_SUPPORTED_,tagName))return true;if(bot.dom.getProperty(el,"disabled"))return false;if(el.parentNode&&el.parentNode.nodeType==goog.dom.NodeType.ELEMENT&&goog.dom.TagName.OPTGROUP==tagName||goog.dom.TagName.OPTION==tagName)return bot.dom.isEnabled(el.parentNode);return true};bot.dom.TEXTUAL_INPUT_TYPES_=["text","search","tel","url","email","password","number"];
bot.dom.isTextual=function(element){if(bot.dom.isElement(element,goog.dom.TagName.TEXTAREA))return true;if(bot.dom.isElement(element,goog.dom.TagName.INPUT)){var type=element.type.toLowerCase();return goog.array.contains(bot.dom.TEXTUAL_INPUT_TYPES_,type)}if(bot.dom.isContentEditable(element))return true;return false};
bot.dom.isContentEditable=function(element){if(!goog.isDef(element["contentEditable"]))return false;if(!goog.userAgent.IE&&goog.isDef(element["isContentEditable"]))return element.isContentEditable;function legacyIsContentEditable(e){if(e.contentEditable=="inherit"){var parent=bot.dom.getParentElement(e);return parent?legacyIsContentEditable(parent):false}else return e.contentEditable=="true"}return legacyIsContentEditable(element)};
bot.dom.isEditable=function(element){return bot.dom.isTextual(element)&&!bot.dom.getProperty(element,"readOnly")};bot.dom.getParentElement=function(node){var elem=node.parentNode;while(elem&&elem.nodeType!=goog.dom.NodeType.ELEMENT&&elem.nodeType!=goog.dom.NodeType.DOCUMENT&&elem.nodeType!=goog.dom.NodeType.DOCUMENT_FRAGMENT)elem=elem.parentNode;return bot.dom.isElement(elem)?elem:null};bot.dom.getInlineStyle=function(elem,styleName){return goog.style.getStyle(elem,styleName)};
bot.dom.getEffectiveStyle=function(elem,styleName){styleName=goog.string.toCamelCase(styleName);return goog.style.getComputedStyle(elem,styleName)||bot.dom.getCascadedStyle_(elem,styleName)};
bot.dom.getCascadedStyle_=function(elem,styleName){var style=elem.currentStyle||elem.style;var value=style[styleName];if(!goog.isDef(value)&&goog.isFunction(style["getPropertyValue"]))value=style["getPropertyValue"](styleName);if(value!="inherit")return goog.isDef(value)?value:null;var parent=bot.dom.getParentElement(elem);return parent?bot.dom.getCascadedStyle_(parent,styleName):null};
bot.dom.getElementSize=function(element){if(goog.isFunction(element["getBBox"]))try{var bb=element["getBBox"]();if(bb)return bb}catch(e){}return goog.style.getSize(element)};
bot.dom.isShown=function(elem,opt_ignoreOpacity){if(!bot.dom.isElement(elem))throw new Error("Argument to isShown must be of type Element");if(bot.dom.isElement(elem,goog.dom.TagName.OPTION)||bot.dom.isElement(elem,goog.dom.TagName.OPTGROUP)){var select=goog.dom.getAncestor(elem,function(e){return bot.dom.isElement(e,goog.dom.TagName.SELECT)});return!!select&&bot.dom.isShown(select,true)}if(bot.dom.isElement(elem,goog.dom.TagName.MAP)){if(!elem.name)return false;var mapDoc=goog.dom.getOwnerDocument(elem);
var mapImage;if(mapDoc["evaluate"]){var imageXpath='/descendant::*[@usemap = "#'+elem.name+'"]';mapImage=bot.locators.xpath.single(imageXpath,mapDoc)}else mapImage=goog.dom.findNode(mapDoc,function(n){return bot.dom.isElement(n)&&bot.dom.getAttribute(n,"usemap")=="#"+elem.name});return!!mapImage&&bot.dom.isShown(mapImage,opt_ignoreOpacity)}if(bot.dom.isElement(elem,goog.dom.TagName.AREA)){var map=goog.dom.getAncestor(elem,function(e){return bot.dom.isElement(e,goog.dom.TagName.MAP)});return!!map&&
bot.dom.isShown(map,opt_ignoreOpacity)}if(bot.dom.isElement(elem,goog.dom.TagName.INPUT)&&elem.type.toLowerCase()=="hidden")return false;if(bot.dom.isElement(elem,goog.dom.TagName.NOSCRIPT))return false;if(bot.dom.getEffectiveStyle(elem,"visibility")=="hidden")return false;function displayed(e){if(bot.dom.getEffectiveStyle(e,"display")=="none")return false;var parent=bot.dom.getParentElement(e);return!parent||displayed(parent)}if(!displayed(elem))return false;if(!opt_ignoreOpacity&&bot.dom.getOpacity(elem)==
0)return false;function positiveSize(e){var size=bot.dom.getElementSize(e);if(size.height>0&&size.width>0)return true;return goog.array.some(e.childNodes,function(n){return n.nodeType==goog.dom.NodeType.TEXT||bot.dom.isElement(n)&&positiveSize(n)})}if(!positiveSize(elem))return false;function isOverflowHiding(e){var parent=bot.dom.getParentElement(e);if(parent&&bot.dom.getEffectiveStyle(parent,"overflow")=="hidden"){var sizeOfParent=bot.dom.getElementSize(parent);var locOfParent=goog.style.getClientPosition(parent);
var locOfElement=goog.style.getClientPosition(e);if(locOfParent.x+sizeOfParent.width<locOfElement.x)return false;if(locOfParent.y+sizeOfParent.height<locOfElement.y)return false;return isOverflowHiding(parent)}return true}if(!isOverflowHiding(elem))return false;return true};bot.dom.trimExcludingNonBreakingSpaceCharacters_=function(str){return str.replace(/^[^\S\xa0]+|[^\S\xa0]+$/g,"")};
bot.dom.getVisibleText=function(elem){var lines=[];bot.dom.appendVisibleTextLinesFromElement_(elem,lines);lines=goog.array.map(lines,bot.dom.trimExcludingNonBreakingSpaceCharacters_);var joined=lines.join("\n");var trimmed=bot.dom.trimExcludingNonBreakingSpaceCharacters_(joined);return trimmed.replace(/\xa0/g," ")};
bot.dom.appendVisibleTextLinesFromElement_=function(elem,lines){function currLine(){return goog.array.peek(lines)||""}if(bot.dom.isElement(elem,goog.dom.TagName.BR))lines.push("");else{var isTD=bot.dom.isElement(elem,goog.dom.TagName.TD);var display=bot.dom.getEffectiveStyle(elem,"display");var isBlock=!isTD&&!goog.array.contains(bot.dom.INLINE_DISPLAY_BOXES_,display);if(isBlock&&!goog.string.isEmpty(currLine()))lines.push("");var shown=bot.dom.isShown(elem);var whitespace=null,textTransform=null;
if(shown){whitespace=bot.dom.getEffectiveStyle(elem,"white-space");textTransform=bot.dom.getEffectiveStyle(elem,"text-transform")}goog.array.forEach(elem.childNodes,function(node){if(node.nodeType==goog.dom.NodeType.TEXT&&shown){var textNode=node;bot.dom.appendVisibleTextLinesFromTextNode_(textNode,lines,whitespace,textTransform)}else if(bot.dom.isElement(node)){var castElem=node;bot.dom.appendVisibleTextLinesFromElement_(castElem,lines)}});var line=currLine();if((isTD||display=="table-cell")&&line&&
!goog.string.endsWith(line," "))lines[lines.length-1]+=" ";if(isBlock&&!goog.string.isEmpty(line))lines.push("")}};bot.dom.INLINE_DISPLAY_BOXES_=["inline","inline-block","inline-table","none","table-cell","table-column","table-column-group"];
bot.dom.appendVisibleTextLinesFromTextNode_=function(textNode,lines,whitespace,textTransform){var text=textNode.nodeValue.replace(/\u200b/g,"");text=goog.string.canonicalizeNewlines(text);if(whitespace=="normal"||whitespace=="nowrap")text=text.replace(/\n/g," ");if(whitespace=="pre"||whitespace=="pre-wrap")text=text.replace(/[ \f\t\v\u2028\u2029]/g,"\u00a0");else text=text.replace(/[\ \f\t\v\u2028\u2029]+/g," ");if(textTransform=="capitalize")text=text.replace(/(^|\s)(\S)/g,function(){return arguments[1]+
arguments[2].toUpperCase()});else if(textTransform=="uppercase")text=text.toUpperCase();else if(textTransform=="lowercase")text=text.toLowerCase();var currLine=lines.pop()||"";if(goog.string.endsWith(currLine," ")&&goog.string.startsWith(text," "))text=text.substr(1);lines.push(currLine+text)};
bot.dom.getOpacity=function(elem){if(!goog.userAgent.IE)return bot.dom.getOpacityNonIE_(elem);else{if(bot.dom.getEffectiveStyle(elem,"position")=="relative")return 1;var opacityStyle=bot.dom.getEffectiveStyle(elem,"filter");var groups=opacityStyle.match(/^alpha\(opacity=(\d*)\)/)||opacityStyle.match(/^progid:DXImageTransform.Microsoft.Alpha\(Opacity=(\d*)\)/);if(groups)return Number(groups[1])/100;else return 1}};
bot.dom.getOpacityNonIE_=function(elem){var elemOpacity=1;var opacityStyle=bot.dom.getEffectiveStyle(elem,"opacity");if(opacityStyle)elemOpacity=Number(opacityStyle);var parentElement=bot.dom.getParentElement(elem);if(parentElement)elemOpacity=elemOpacity*bot.dom.getOpacityNonIE_(parentElement);return elemOpacity};
bot.dom.calculateViewportScrolling_=function(targetLocation,viewportDimension){if(targetLocation>=viewportDimension)return targetLocation-(viewportDimension-1);if(targetLocation<0)return targetLocation;return 0};
bot.dom.getInViewLocation=function(targetLocation,opt_currentWindow){var currentWindow=opt_currentWindow||bot.getWindow();var viewportSize=goog.dom.getViewportSize(currentWindow);var xScrolling=bot.dom.calculateViewportScrolling_(targetLocation.x,viewportSize.width);var yScrolling=bot.dom.calculateViewportScrolling_(targetLocation.y,viewportSize.height);var scrollOffset=goog.dom.getDomHelper(currentWindow.document).getDocumentScroll();if(xScrolling!=0||yScrolling!=0)currentWindow.scrollBy(xScrolling,
yScrolling);var newScrollOffset=goog.dom.getDomHelper(currentWindow.document).getDocumentScroll();if(scrollOffset.x+xScrolling!=newScrollOffset.x||scrollOffset.y+yScrolling!=newScrollOffset.y)throw new bot.Error(bot.ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS,"The target location ("+(targetLocation.x+scrollOffset.x)+", "+(targetLocation.y+scrollOffset.y)+") is not on the "+"webpage.");var inViewLocation=new goog.math.Coordinate(targetLocation.x-xScrolling,targetLocation.y-yScrolling);if(0>inViewLocation.x||
inViewLocation.x>=viewportSize.width)throw new bot.Error(bot.ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS,"The target location ("+inViewLocation.x+", "+inViewLocation.y+") should be within the viewport ("+viewportSize.width+":"+viewportSize.height+") after scrolling.");if(0>inViewLocation.y||inViewLocation.y>=viewportSize.height)throw new bot.Error(bot.ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS,"The target location ("+inViewLocation.x+", "+inViewLocation.y+") should be within the viewport ("+viewportSize.width+":"+
viewportSize.height+") after scrolling.");return inViewLocation};bot.dom.scrollRegionIntoView_=function(region,scrollable){scrollable.scrollLeft+=Math.min(region.left,Math.max(region.left-region.width,0));scrollable.scrollTop+=Math.min(region.top,Math.max(region.top-region.height,0))};
bot.dom.scrollElementRegionIntoContainerView_=function(elem,elemRegion,container){var elemPos=goog.style.getPageOffset(elem);var containerPos=goog.style.getPageOffset(container);var containerBorder=goog.style.getBorderBox(container);var relX=elemPos.x+elemRegion.left-containerPos.x-containerBorder.left;var relY=elemPos.y+elemRegion.top-containerPos.y-containerBorder.top;var spaceX=container.clientWidth-elemRegion.width;var spaceY=container.clientHeight-elemRegion.height;bot.dom.scrollRegionIntoView_(new goog.math.Rect(relX,
relY,spaceX,spaceY),container)};
bot.dom.scrollElementRegionIntoClientView=function(elem,elemRegion){var doc=goog.dom.getOwnerDocument(elem);for(var container=bot.dom.getParentElement(elem);container&&container!=doc.body&&container!=doc.documentElement;container=bot.dom.getParentElement(container))bot.dom.scrollElementRegionIntoContainerView_(elem,elemRegion,container);var elemPageOffset=goog.style.getPageOffset(elem);var viewportSize=goog.dom.getDomHelper(doc).getViewportSize();var region=new goog.math.Rect(elemPageOffset.x+elemRegion.left-
doc.body.scrollLeft,elemPageOffset.y+elemRegion.top-doc.body.scrollTop,viewportSize.width-elemRegion.width,viewportSize.height-elemRegion.height);bot.dom.scrollRegionIntoView_(region,doc.body||doc.documentElement)};
bot.dom.getLocationInView=function(elem,opt_elemRegion){var elemRegion;if(opt_elemRegion)elemRegion=new goog.math.Rect(opt_elemRegion.left,opt_elemRegion.top,opt_elemRegion.width,opt_elemRegion.height);else elemRegion=new goog.math.Rect(0,0,elem.offsetWidth,elem.offsetHeight);bot.dom.scrollElementRegionIntoClientView(elem,elemRegion);var rect=elem.getClientRects?elem.getClientRects()[0]:null;var elemClientPos=rect?new goog.math.Coordinate(rect.left,rect.top):goog.style.getClientPosition(elem);return new goog.math.Coordinate(elemClientPos.x+
elemRegion.left,elemClientPos.y+elemRegion.top)};
bot.dom.isScrolledIntoView=function(element,opt_coords){var ownerWindow=goog.dom.getWindow(goog.dom.getOwnerDocument(element));var topWindow=ownerWindow.top;var elSize=goog.style.getSize(element);for(var win=ownerWindow;;win=win.parent){var scroll=goog.dom.getDomHelper(win.document).getDocumentScroll();var size=goog.dom.getViewportSize(win);var viewportRect=new goog.math.Rect(scroll.x,scroll.y,size.width,size.height);var elCoords=goog.style.getFramedPageOffset(element,win);var elementRect=new goog.math.Rect(elCoords.x,
elCoords.y,elSize.width,elSize.height);if(!goog.math.Rect.intersects(viewportRect,elementRect))return false;if(win==topWindow)break}var visibleBox=goog.style.getVisibleRectForElement(element);if(!visibleBox)return false;if(opt_coords){var elementOffset=goog.style.getPageOffset(element);var desiredPoint=goog.math.Coordinate.sum(elementOffset,opt_coords);return visibleBox.contains(desiredPoint)}else{var elementBox=goog.style.getBounds(element).toBox();return goog.math.Box.intersects(visibleBox,elementBox)}};goog.provide("bot.Device");goog.require("bot");goog.require("bot.dom");goog.require("bot.userAgent");goog.require("goog.userAgent");goog.require("goog.userAgent.product");bot.Device=function(){this.element_=bot.getDocument().documentElement;this.select_=null;var activeElement=bot.dom.getActiveElement(this.element_);if(activeElement)this.setElement(activeElement)};bot.Device.prototype.getElement=function(){return this.element_};
bot.Device.prototype.setElement=function(element){this.element_=element;if(bot.dom.isElement(element,goog.dom.TagName.OPTION))this.select_=goog.dom.getAncestor(element,function(node){return bot.dom.isElement(node,goog.dom.TagName.SELECT)});else this.select_=null};bot.Device.prototype.fireHtmlEvent=function(type){return bot.events.fire(this.element_,type)};bot.Device.prototype.fireKeyboardEvent=function(type,args){return bot.events.fire(this.element_,type,args)};
bot.Device.prototype.fireMouseEvent=function(type,coord,button,opt_related,opt_wheelDelta){if(!bot.dom.isInteractable(this.element_))return false;if(opt_related&&!(bot.events.EventType.MOUSEOVER==type||bot.events.EventType.MOUSEOUT==type))throw new bot.Error(bot.ErrorCode.INVALID_ELEMENT_STATE,"Event type does not allow related target: "+type);var args={clientX:coord.x,clientY:coord.y,button:button,altKey:false,ctrlKey:false,shiftKey:false,metaKey:false,wheelDelta:opt_wheelDelta||0,relatedTarget:opt_related||
null};var target=this.select_?this.getTargetOfOptionMouseEvent_(type):this.element_;return target?bot.events.fire(target,type,args):true};
bot.Device.prototype.fireTouchEvent=function(type,id,coord,opt_id2,opt_coord2){var args={touches:[],targetTouches:[],changedTouches:[],altKey:false,ctrlKey:false,shiftKey:false,metaKey:false,relatedTarget:null,scale:0,rotation:0};function addTouch(identifier,coords){var id=goog.userAgent.product.ANDROID?0:identifier;var touch={identifier:identifier,screenX:coords.x,screenY:coords.y,clientX:coords.x,clientY:coords.y,pageX:coords.x,pageY:coords.y};args.changedTouches.push(touch);if(type==bot.events.EventType.TOUCHSTART||
type==bot.events.EventType.TOUCHMOVE){args.touches.push(touch);args.targetTouches.push(touch)}}addTouch(id,coord);if(goog.isDef(opt_id2))addTouch(opt_id2,opt_coord2);return bot.events.fire(this.element_,type,args)};
bot.Device.prototype.getTargetOfOptionMouseEvent_=function(type){if(goog.userAgent.IE)switch(type){case bot.events.EventType.MOUSEOVER:return null;case bot.events.EventType.CONTEXTMENU:case bot.events.EventType.MOUSEMOVE:return this.select_.multiple?this.select_:null;default:return this.select_}if(goog.userAgent.OPERA)switch(type){case bot.events.EventType.CONTEXTMENU:case bot.events.EventType.MOUSEOVER:return this.select_.multiple?this.element_:null;default:return this.element_}if(goog.userAgent.WEBKIT)switch(type){case bot.events.EventType.CLICK:case bot.events.EventType.MOUSEUP:return this.select_.multiple?
this.element_:this.select_;default:return this.select_.multiple?this.element_:null}return this.element_};
bot.Device.prototype.clickElement=function(coord,button){if(!bot.dom.isInteractable(this.element_))return;var targetLink=null;var targetButton=null;if(bot.Device.EXPLICIT_FOLLOW_LINK_)for(var e=this.element_;e;e=e.parentNode)if(bot.dom.isElement(e,goog.dom.TagName.A)){targetLink=e;break}else if(bot.Device.isFormSubmitElement(e)){targetButton=e;break}var selectable=bot.dom.isSelectable(this.element_);var wasSelected=selectable&&bot.dom.isSelected(this.element_);if(this.select_)this.toggleOption_(wasSelected);
if(goog.userAgent.IE&&targetButton){targetButton.click();return}var performDefault=this.fireMouseEvent(bot.events.EventType.CLICK,coord,button);if(!performDefault)return;if(targetLink&&bot.Device.shouldFollowHref_(targetLink))bot.Device.followHref_(targetLink);else if(selectable&&!this.select_)this.toggleRadioButtonOrCheckbox_(wasSelected)};
bot.Device.prototype.focusOnElement=function(){var elementToFocus=this.select_||this.element_;var activeElement=bot.dom.getActiveElement(elementToFocus);if(elementToFocus==activeElement)return false;if(activeElement&&(goog.isFunction(activeElement.blur)||goog.userAgent.IE&&goog.isObject(activeElement.blur))){try{activeElement.blur()}catch(e){if(!(goog.userAgent.IE&&e.message=="Unspecified error."))throw e;}if(goog.userAgent.IE&&!bot.userAgent.isEngineVersion(8))goog.dom.getWindow(goog.dom.getOwnerDocument(elementToFocus)).focus()}if(goog.isFunction(elementToFocus.focus)||
goog.userAgent.IE&&goog.isObject(elementToFocus.focus)){if(goog.userAgent.OPERA&&bot.userAgent.isEngineVersion(11)&&!bot.dom.isShown(elementToFocus))bot.events.fire(elementToFocus,bot.events.EventType.FOCUS);else elementToFocus.focus();return true}return false};bot.Device.EXPLICIT_FOLLOW_LINK_=goog.userAgent.IE||goog.userAgent.GECKO&&!bot.userAgent.FIREFOX_EXTENSION||bot.userAgent.FIREFOX_EXTENSION&&!bot.userAgent.isProductVersion(4);
bot.Device.CAN_SYNTHESISED_EVENTS_FOLLOW_LINKS_=bot.userAgent.FIREFOX_EXTENSION&&bot.userAgent.isProductVersion(4);bot.Device.SYNTHESISED_EVENTS_CAN_OPEN_JAVASCRIPT_WINDOWS_=bot.userAgent.FIREFOX_EXTENSION;bot.Device.isFormSubmitElement=function(element){if(bot.dom.isElement(element,goog.dom.TagName.INPUT)){var type=element.type.toLowerCase();if(type=="submit"||type=="image")return true}if(bot.dom.isElement(element,goog.dom.TagName.BUTTON)){var type=element.type.toLowerCase();if(type=="submit")return true}return false};
bot.Device.shouldFollowHref_=function(element){if(!element.href)return false;if(goog.userAgent.IE||goog.userAgent.GECKO&&!bot.userAgent.FIREFOX_EXTENSION)return true;if(bot.Device.CAN_SYNTHESISED_EVENTS_FOLLOW_LINKS_)return false;if(element.target||element.href.toLowerCase().indexOf("javascript")==0)return!bot.Device.SYNTHESISED_EVENTS_CAN_OPEN_JAVASCRIPT_WINDOWS_;var owner=goog.dom.getWindow(goog.dom.getOwnerDocument(element));var sourceUrl=owner.location.href;var destinationUrl=bot.Device.resolveUrl_(owner.location,
element.href);var isOnlyHashChange=sourceUrl.split("#")[0]===destinationUrl.split("#")[0];return!isOnlyHashChange};bot.Device.followHref_=function(anchorElement){var targetHref=anchorElement.href;var owner=goog.dom.getWindow(goog.dom.getOwnerDocument(anchorElement));if(goog.userAgent.IE&&!bot.userAgent.isEngineVersion(8))targetHref=bot.Device.resolveUrl_(owner.location,targetHref);if(anchorElement.target)owner.open(targetHref,anchorElement.target);else owner.location.href=targetHref};
bot.Device.prototype.toggleOption_=function(wasSelected){var select=this.select_;if(wasSelected&&!select.multiple)return;this.element_.selected=!wasSelected;if(!(goog.userAgent.WEBKIT&&select.multiple)||goog.userAgent.product.ANDROID&&bot.userAgent.isProductVersion(4))bot.events.fire(select,bot.events.EventType.CHANGE)};
bot.Device.prototype.toggleRadioButtonOrCheckbox_=function(wasSelected){if(goog.userAgent.GECKO||goog.userAgent.WEBKIT)return;if(wasSelected&&this.element_.type.toLowerCase()=="radio")return;this.element_.checked=!wasSelected;if(goog.userAgent.OPERA&&!bot.userAgent.isEngineVersion(11))bot.events.fire(this.element_,bot.events.EventType.CHANGE)};bot.Device.findAncestorForm=function(node){return goog.dom.getAncestor(node,bot.Device.isForm_,true)};
bot.Device.isForm_=function(node){return bot.dom.isElement(node,goog.dom.TagName.FORM)};
bot.Device.prototype.submitForm=function(form){if(!bot.Device.isForm_(form))throw new bot.Error(bot.ErrorCode.INVALID_ELEMENT_STATE,"Element was not in a form, so could not submit.");if(bot.events.fire(form,bot.events.EventType.SUBMIT))if(!bot.dom.isElement(form.submit))form.submit();else if(!goog.userAgent.IE||bot.userAgent.isEngineVersion(8))form.constructor.prototype.submit.call(form);else{var idMasks=bot.locators.findElements({"id":"submit"},form);var nameMasks=bot.locators.findElements({"name":"submit"},
form);goog.array.forEach(idMasks,function(m){m.removeAttribute("id")});goog.array.forEach(nameMasks,function(m){m.removeAttribute("name")});var submitFunction=form.submit;goog.array.forEach(idMasks,function(m){m.setAttribute("id","submit")});goog.array.forEach(nameMasks,function(m){m.setAttribute("name","submit")});submitFunction()}};bot.Device.URL_REGEXP_=new RegExp("^"+"([^:/?#.]+:)?"+"(?://([^/]*))?"+"([^?#]+)?"+"(\\?[^#]*)?"+"(#.*)?"+"$");
bot.Device.resolveUrl_=function(base,rel){var m=rel.match(bot.Device.URL_REGEXP_);if(!m)return"";var target={protocol:m[1]||"",host:m[2]||"",pathname:m[3]||"",search:m[4]||"",hash:m[5]||""};if(!target.protocol){target.protocol=base.protocol;if(!target.host){target.host=base.host;if(!target.pathname){target.pathname=base.pathname;target.search=target.search||base.search}else if(target.pathname.charAt(0)!="/"){var lastSlashIndex=base.pathname.lastIndexOf("/");if(lastSlashIndex!=-1){var directory=base.pathname.substr(0,
lastSlashIndex+1);target.pathname=directory+target.pathname}}}}return target.protocol+"//"+target.host+target.pathname+target.search+target.hash};goog.provide("bot.events");goog.provide("bot.events.EventArgs");goog.provide("bot.events.EventType");goog.provide("bot.events.KeyboardArgs");goog.provide("bot.events.MouseArgs");goog.provide("bot.events.Touch");goog.provide("bot.events.TouchArgs");goog.require("bot.Error");goog.require("bot.ErrorCode");goog.require("bot.userAgent");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.userAgent");goog.require("goog.userAgent.product");
bot.events.SUPPORTS_TOUCH_EVENTS=!goog.userAgent.IE&&!goog.userAgent.OPERA;bot.events.BROKEN_TOUCH_API_=function(){if(goog.userAgent.product.ANDROID)return!bot.userAgent.isProductVersion(4);return!bot.userAgent.IOS}();bot.events.EventArgs;bot.events.MouseArgs;bot.events.KeyboardArgs;bot.events.TouchArgs;bot.events.Touch;bot.events.EventFactory_=function(type,bubbles,cancelable){this.type_=type;this.bubbles_=bubbles;this.cancelable_=cancelable};
bot.events.EventFactory_.prototype.create=function(target,opt_args){var doc=goog.dom.getOwnerDocument(target);var event;if(bot.userAgent.IE_DOC_PRE9)event=doc.createEventObject();else{event=doc.createEvent("HTMLEvents");event.initEvent(this.type_,this.bubbles_,this.cancelable_)}return event};bot.events.EventFactory_.prototype.toString=function(){return this.type_};bot.events.MouseEventFactory_=function(type,bubbles,cancelable){goog.base(this,type,bubbles,cancelable)};
goog.inherits(bot.events.MouseEventFactory_,bot.events.EventFactory_);
bot.events.MouseEventFactory_.prototype.create=function(target,opt_args){if(!goog.userAgent.GECKO&&this==bot.events.EventType.MOUSEPIXELSCROLL)throw new bot.Error(bot.ErrorCode.UNSUPPORTED_OPERATION,"Browser does not support a mouse pixel scroll event.");var args=opt_args;var doc=goog.dom.getOwnerDocument(target);var event;if(bot.userAgent.IE_DOC_PRE9){event=doc.createEventObject();event.altKey=args.altKey;event.ctrlKey=args.ctrlKey;event.metaKey=args.metaKey;event.shiftKey=args.shiftKey;event.button=
args.button;event.clientX=args.clientX;event.clientY=args.clientY;function setEventProperty(prop,value){Object.defineProperty(event,prop,{get:function(){return value}})}if(this==bot.events.EventType.MOUSEOUT||this==bot.events.EventType.MOUSEOVER)if(Object.defineProperty){var out=this==bot.events.EventType.MOUSEOUT;setEventProperty("fromElement",out?target:args.relatedTarget);setEventProperty("toElement",out?args.relatedTarget:target)}else event.relatedTarget=args.relatedTarget;if(this==bot.events.EventType.MOUSEWHEEL)if(Object.defineProperty)setEventProperty("wheelDelta",
args.wheelDelta);else event.detail=args.wheelDelta}else{var view=goog.dom.getWindow(doc);event=doc.createEvent("MouseEvents");var detail=1;if(this==bot.events.EventType.MOUSEWHEEL){if(!goog.userAgent.GECKO)event.wheelDelta=args.wheelDelta;if(goog.userAgent.GECKO||goog.userAgent.OPERA)detail=args.wheelDelta/-40}if(goog.userAgent.GECKO&&this==bot.events.EventType.MOUSEPIXELSCROLL)detail=args.wheelDelta;event.initMouseEvent(this.type_,this.bubbles_,this.cancelable_,view,detail,0,0,args.clientX,args.clientY,
args.ctrlKey,args.altKey,args.shiftKey,args.metaKey,args.button,args.relatedTarget)}return event};bot.events.KeyboardEventFactory_=function(type,bubbles,cancelable){goog.base(this,type,bubbles,cancelable)};goog.inherits(bot.events.KeyboardEventFactory_,bot.events.EventFactory_);
bot.events.KeyboardEventFactory_.prototype.create=function(target,opt_args){var args=opt_args;var doc=goog.dom.getOwnerDocument(target);var event;if(goog.userAgent.GECKO){var view=goog.dom.getWindow(doc);var keyCode=args.charCode?0:args.keyCode;event=doc.createEvent("KeyboardEvent");event.initKeyEvent(this.type_,this.bubbles_,this.cancelable_,view,args.ctrlKey,args.altKey,args.shiftKey,args.metaKey,keyCode,args.charCode);if(this.type_==bot.events.EventType.KEYPRESS&&args.preventDefault)event.preventDefault()}else{if(bot.userAgent.IE_DOC_PRE9)event=
doc.createEventObject();else{event=doc.createEvent("Events");event.initEvent(this.type_,this.bubbles_,this.cancelable_)}event.altKey=args.altKey;event.ctrlKey=args.ctrlKey;event.metaKey=args.metaKey;event.shiftKey=args.shiftKey;event.keyCode=args.charCode||args.keyCode;if(goog.userAgent.WEBKIT)event.charCode=this==bot.events.EventType.KEYPRESS?event.keyCode:0}return event};bot.events.TouchEventFactory_=function(type,bubbles,cancelable){goog.base(this,type,bubbles,cancelable)};
goog.inherits(bot.events.TouchEventFactory_,bot.events.EventFactory_);
bot.events.TouchEventFactory_.prototype.create=function(target,opt_args){if(!bot.events.SUPPORTS_TOUCH_EVENTS)throw new bot.Error(bot.ErrorCode.UNSUPPORTED_OPERATION,"Browser does not support firing touch events.");var args=opt_args;var doc=goog.dom.getOwnerDocument(target);var view=goog.dom.getWindow(doc);function createNativeTouchList(touchListArgs){var touches=goog.array.map(touchListArgs,function(touchArg){return doc.createTouch(view,target,touchArg.identifier,touchArg.pageX,touchArg.pageY,touchArg.screenX,
touchArg.screenY)});return doc.createTouchList.apply(doc,touches)}function createGenericTouchList(touchListArgs){var touches=goog.array.map(touchListArgs,function(touchArg){return{identifier:touchArg.identifier,screenX:touchArg.screenX,screenY:touchArg.screenY,clientX:touchArg.clientX,clientY:touchArg.clientY,pageX:touchArg.pageX,pageY:touchArg.pageY,target:target}});touches.item=function(i){return touches[i]};return touches}function createTouchList(touches){return bot.events.BROKEN_TOUCH_API_?createGenericTouchList(touches):
createNativeTouchList(touches)}var changedTouches=createTouchList(args.changedTouches);var touches=args.touches==args.changedTouches?changedTouches:createTouchList(args.touches);var targetTouches=args.targetTouches==args.changedTouches?changedTouches:createTouchList(args.targetTouches);var event;if(bot.events.BROKEN_TOUCH_API_){event=doc.createEvent("MouseEvents");event.initMouseEvent(this.type_,this.bubbles_,this.cancelable_,view,1,0,0,args.clientX,args.clientY,args.ctrlKey,args.altKey,args.shiftKey,
args.metaKey,0,args.relatedTarget);event.touches=touches;event.targetTouches=targetTouches;event.changedTouches=changedTouches;event.scale=args.scale;event.rotation=args.rotation}else{event=doc.createEvent("TouchEvent");if(goog.userAgent.product.ANDROID)event.initTouchEvent(touches,targetTouches,changedTouches,this.type_,view,0,0,args.clientX,args.clientY,args.ctrlKey,args.altKey,args.shiftKey,args.metaKey);else event.initTouchEvent(this.type_,this.bubbles_,this.cancelable_,view,1,0,0,args.clientX,
args.clientY,args.ctrlKey,args.altKey,args.shiftKey,args.metaKey,touches,targetTouches,changedTouches,args.scale,args.rotation);event.relatedTarget=args.relatedTarget}return event};
bot.events.EventType={BLUR:new bot.events.EventFactory_("blur",false,false),CHANGE:new bot.events.EventFactory_("change",true,false),FOCUS:new bot.events.EventFactory_("focus",false,false),INPUT:new bot.events.EventFactory_("input",false,false),PROPERTYCHANGE:new bot.events.EventFactory_("propertychange",false,false),SELECT:new bot.events.EventFactory_("select",true,false),SUBMIT:new bot.events.EventFactory_("submit",true,true),TEXTINPUT:new bot.events.EventFactory_("textInput",true,true),CLICK:new bot.events.MouseEventFactory_("click",
true,true),CONTEXTMENU:new bot.events.MouseEventFactory_("contextmenu",true,true),DBLCLICK:new bot.events.MouseEventFactory_("dblclick",true,true),MOUSEDOWN:new bot.events.MouseEventFactory_("mousedown",true,true),MOUSEMOVE:new bot.events.MouseEventFactory_("mousemove",true,false),MOUSEOUT:new bot.events.MouseEventFactory_("mouseout",true,true),MOUSEOVER:new bot.events.MouseEventFactory_("mouseover",true,true),MOUSEUP:new bot.events.MouseEventFactory_("mouseup",true,true),MOUSEWHEEL:new bot.events.MouseEventFactory_(goog.userAgent.GECKO?
"DOMMouseScroll":"mousewheel",true,true),MOUSEPIXELSCROLL:new bot.events.MouseEventFactory_("MozMousePixelScroll",true,true),KEYDOWN:new bot.events.KeyboardEventFactory_("keydown",true,true),KEYPRESS:new bot.events.KeyboardEventFactory_("keypress",true,true),KEYUP:new bot.events.KeyboardEventFactory_("keyup",true,true),TOUCHEND:new bot.events.TouchEventFactory_("touchend",true,true),TOUCHMOVE:new bot.events.TouchEventFactory_("touchmove",true,true),TOUCHSTART:new bot.events.TouchEventFactory_("touchstart",
true,true)};bot.events.fire=function(target,type,opt_args){var factory=type;var event=factory.create(target,opt_args);if(!("isTrusted"in event))event.isTrusted=false;if(bot.userAgent.IE_DOC_PRE9)return target.fireEvent("on"+factory.type_,event);else return target.dispatchEvent(event)};bot.events.isSynthetic=function(event){var e=event.getBrowserEvent?event.getBrowserEvent():event;return"isTrusted"in e?!e.isTrusted:false};goog.provide("goog.dom.selection");goog.require("goog.string");goog.require("goog.userAgent");goog.dom.selection.setStart=function(textfield,pos){if(goog.dom.selection.useSelectionProperties_(textfield))textfield.selectionStart=pos;else if(goog.userAgent.IE){var tmp=goog.dom.selection.getRangeIe_(textfield);var range=tmp[0];var selectionRange=tmp[1];if(range.inRange(selectionRange)){pos=goog.dom.selection.canonicalizePositionIe_(textfield,pos);range.collapse(true);range.move("character",pos);range.select()}}};
goog.dom.selection.getStart=function(textfield){return goog.dom.selection.getEndPoints_(textfield,true)[0]};
goog.dom.selection.getEndPointsTextareaIe_=function(range,selRange,getOnlyStart){var selectionRange=selRange.duplicate();var beforeSelectionText=range.text;var untrimmedBeforeSelectionText=beforeSelectionText;var selectionText=selectionRange.text;var untrimmedSelectionText=selectionText;var isRangeEndTrimmed=false;while(!isRangeEndTrimmed)if(range.compareEndPoints("StartToEnd",range)==0)isRangeEndTrimmed=true;else{range.moveEnd("character",-1);if(range.text==beforeSelectionText)untrimmedBeforeSelectionText+=
"\r\n";else isRangeEndTrimmed=true}if(getOnlyStart)return[untrimmedBeforeSelectionText.length,-1];var isSelectionRangeEndTrimmed=false;while(!isSelectionRangeEndTrimmed)if(selectionRange.compareEndPoints("StartToEnd",selectionRange)==0)isSelectionRangeEndTrimmed=true;else{selectionRange.moveEnd("character",-1);if(selectionRange.text==selectionText)untrimmedSelectionText+="\r\n";else isSelectionRangeEndTrimmed=true}return[untrimmedBeforeSelectionText.length,untrimmedBeforeSelectionText.length+untrimmedSelectionText.length]};
goog.dom.selection.getEndPoints=function(textfield){return goog.dom.selection.getEndPoints_(textfield,false)};
goog.dom.selection.getEndPoints_=function(textfield,getOnlyStart){var startPos=0;var endPos=0;if(goog.dom.selection.useSelectionProperties_(textfield)){startPos=textfield.selectionStart;endPos=getOnlyStart?-1:textfield.selectionEnd}else if(goog.userAgent.IE){var tmp=goog.dom.selection.getRangeIe_(textfield);var range=tmp[0];var selectionRange=tmp[1];if(range.inRange(selectionRange)){range.setEndPoint("EndToStart",selectionRange);if(textfield.type=="textarea")return goog.dom.selection.getEndPointsTextareaIe_(range,
selectionRange,getOnlyStart);startPos=range.text.length;if(!getOnlyStart)endPos=range.text.length+selectionRange.text.length;else endPos=-1}}return[startPos,endPos]};
goog.dom.selection.setEnd=function(textfield,pos){if(goog.dom.selection.useSelectionProperties_(textfield))textfield.selectionEnd=pos;else if(goog.userAgent.IE){var tmp=goog.dom.selection.getRangeIe_(textfield);var range=tmp[0];var selectionRange=tmp[1];if(range.inRange(selectionRange)){pos=goog.dom.selection.canonicalizePositionIe_(textfield,pos);var startCursorPos=goog.dom.selection.canonicalizePositionIe_(textfield,goog.dom.selection.getStart(textfield));selectionRange.collapse(true);selectionRange.moveEnd("character",
pos-startCursorPos);selectionRange.select()}}};goog.dom.selection.getEnd=function(textfield){return goog.dom.selection.getEndPoints_(textfield,false)[1]};goog.dom.selection.setCursorPosition=function(textfield,pos){if(goog.dom.selection.useSelectionProperties_(textfield)){textfield.selectionStart=pos;textfield.selectionEnd=pos}else if(goog.userAgent.IE){pos=goog.dom.selection.canonicalizePositionIe_(textfield,pos);var sel=textfield.createTextRange();sel.collapse(true);sel.move("character",pos);sel.select()}};
goog.dom.selection.setText=function(textfield,text){if(goog.dom.selection.useSelectionProperties_(textfield)){var value=textfield.value;var oldSelectionStart=textfield.selectionStart;var before=value.substr(0,oldSelectionStart);var after=value.substr(textfield.selectionEnd);textfield.value=before+text+after;textfield.selectionStart=oldSelectionStart;textfield.selectionEnd=oldSelectionStart+text.length}else if(goog.userAgent.IE){var tmp=goog.dom.selection.getRangeIe_(textfield);var range=tmp[0];var selectionRange=
tmp[1];if(!range.inRange(selectionRange))return;var range2=selectionRange.duplicate();selectionRange.text=text;selectionRange.setEndPoint("StartToStart",range2);selectionRange.select()}else throw Error("Cannot set the selection end");};
goog.dom.selection.getText=function(textfield){if(goog.dom.selection.useSelectionProperties_(textfield)){var s=textfield.value;return s.substring(textfield.selectionStart,textfield.selectionEnd)}if(goog.userAgent.IE){var tmp=goog.dom.selection.getRangeIe_(textfield);var range=tmp[0];var selectionRange=tmp[1];if(!range.inRange(selectionRange))return"";else if(textfield.type=="textarea")return goog.dom.selection.getSelectionRangeText_(selectionRange);return selectionRange.text}throw Error("Cannot get the selection text");
};goog.dom.selection.getSelectionRangeText_=function(selRange){var selectionRange=selRange.duplicate();var selectionText=selectionRange.text;var untrimmedSelectionText=selectionText;var isSelectionRangeEndTrimmed=false;while(!isSelectionRangeEndTrimmed)if(selectionRange.compareEndPoints("StartToEnd",selectionRange)==0)isSelectionRangeEndTrimmed=true;else{selectionRange.moveEnd("character",-1);if(selectionRange.text==selectionText)untrimmedSelectionText+="\r\n";else isSelectionRangeEndTrimmed=true}return untrimmedSelectionText};
goog.dom.selection.getRangeIe_=function(el){var doc=el.ownerDocument||el.document;var selectionRange=doc.selection.createRange();var range;if(el.type=="textarea"){range=doc.body.createTextRange();range.moveToElementText(el)}else range=el.createTextRange();return[range,selectionRange]};goog.dom.selection.canonicalizePositionIe_=function(textfield,pos){if(textfield.type=="textarea"){var value=textfield.value.substring(0,pos);pos=goog.string.canonicalizeNewlines(value).length}return pos};
goog.dom.selection.useSelectionProperties_=function(el){try{return typeof el.selectionStart=="number"}catch(e){return false}};goog.provide("goog.events.KeyCodes");goog.require("goog.userAgent");
goog.events.KeyCodes={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,FF_SEMICOLON:59,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,
CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SCROLL_LOCK:145,FIRST_MEDIA_KEY:166,LAST_MEDIA_KEY:183,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,TILDE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,
BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,PHANTOM:255};
goog.events.KeyCodes.isTextModifyingKeyEvent=function(e){if(e.altKey&&!e.ctrlKey||e.metaKey||e.keyCode>=goog.events.KeyCodes.F1&&e.keyCode<=goog.events.KeyCodes.F12)return false;switch(e.keyCode){case goog.events.KeyCodes.ALT:case goog.events.KeyCodes.CAPS_LOCK:case goog.events.KeyCodes.CONTEXT_MENU:case goog.events.KeyCodes.CTRL:case goog.events.KeyCodes.DOWN:case goog.events.KeyCodes.END:case goog.events.KeyCodes.ESC:case goog.events.KeyCodes.HOME:case goog.events.KeyCodes.INSERT:case goog.events.KeyCodes.LEFT:case goog.events.KeyCodes.MAC_FF_META:case goog.events.KeyCodes.META:case goog.events.KeyCodes.NUMLOCK:case goog.events.KeyCodes.NUM_CENTER:case goog.events.KeyCodes.PAGE_DOWN:case goog.events.KeyCodes.PAGE_UP:case goog.events.KeyCodes.PAUSE:case goog.events.KeyCodes.PHANTOM:case goog.events.KeyCodes.PRINT_SCREEN:case goog.events.KeyCodes.RIGHT:case goog.events.KeyCodes.SCROLL_LOCK:case goog.events.KeyCodes.SHIFT:case goog.events.KeyCodes.UP:case goog.events.KeyCodes.WIN_KEY:case goog.events.KeyCodes.WIN_KEY_RIGHT:return false;default:return e.keyCode<
goog.events.KeyCodes.FIRST_MEDIA_KEY||e.keyCode>goog.events.KeyCodes.LAST_MEDIA_KEY}};
goog.events.KeyCodes.firesKeyPressEvent=function(keyCode,opt_heldKeyCode,opt_shiftKey,opt_ctrlKey,opt_altKey){if(!goog.userAgent.IE&&!(goog.userAgent.WEBKIT&&goog.userAgent.isVersion("525")))return true;if(goog.userAgent.MAC&&opt_altKey)return goog.events.KeyCodes.isCharacterKey(keyCode);if(opt_altKey&&!opt_ctrlKey)return false;if(!opt_shiftKey&&(opt_heldKeyCode==goog.events.KeyCodes.CTRL||opt_heldKeyCode==goog.events.KeyCodes.ALT))return false;if(goog.userAgent.IE&&opt_ctrlKey&&opt_heldKeyCode==
keyCode)return false;switch(keyCode){case goog.events.KeyCodes.ENTER:return!(goog.userAgent.IE&&goog.userAgent.isDocumentMode(9));case goog.events.KeyCodes.ESC:return!goog.userAgent.WEBKIT}return goog.events.KeyCodes.isCharacterKey(keyCode)};
goog.events.KeyCodes.isCharacterKey=function(keyCode){if(keyCode>=goog.events.KeyCodes.ZERO&&keyCode<=goog.events.KeyCodes.NINE)return true;if(keyCode>=goog.events.KeyCodes.NUM_ZERO&&keyCode<=goog.events.KeyCodes.NUM_MULTIPLY)return true;if(keyCode>=goog.events.KeyCodes.A&&keyCode<=goog.events.KeyCodes.Z)return true;if(goog.userAgent.WEBKIT&&keyCode==0)return true;switch(keyCode){case goog.events.KeyCodes.SPACE:case goog.events.KeyCodes.QUESTION_MARK:case goog.events.KeyCodes.NUM_PLUS:case goog.events.KeyCodes.NUM_MINUS:case goog.events.KeyCodes.NUM_PERIOD:case goog.events.KeyCodes.NUM_DIVISION:case goog.events.KeyCodes.SEMICOLON:case goog.events.KeyCodes.FF_SEMICOLON:case goog.events.KeyCodes.DASH:case goog.events.KeyCodes.EQUALS:case goog.events.KeyCodes.COMMA:case goog.events.KeyCodes.PERIOD:case goog.events.KeyCodes.SLASH:case goog.events.KeyCodes.APOSTROPHE:case goog.events.KeyCodes.SINGLE_QUOTE:case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:case goog.events.KeyCodes.BACKSLASH:case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:return true;
default:return false}};goog.provide("goog.structs");goog.require("goog.array");goog.require("goog.object");goog.structs.getCount=function(col){if(typeof col.getCount=="function")return col.getCount();if(goog.isArrayLike(col)||goog.isString(col))return col.length;return goog.object.getCount(col)};
goog.structs.getValues=function(col){if(typeof col.getValues=="function")return col.getValues();if(goog.isString(col))return col.split("");if(goog.isArrayLike(col)){var rv=[];var l=col.length;for(var i=0;i<l;i++)rv.push(col[i]);return rv}return goog.object.getValues(col)};
goog.structs.getKeys=function(col){if(typeof col.getKeys=="function")return col.getKeys();if(typeof col.getValues=="function")return undefined;if(goog.isArrayLike(col)||goog.isString(col)){var rv=[];var l=col.length;for(var i=0;i<l;i++)rv.push(i);return rv}return goog.object.getKeys(col)};
goog.structs.contains=function(col,val){if(typeof col.contains=="function")return col.contains(val);if(typeof col.containsValue=="function")return col.containsValue(val);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.contains(col,val);return goog.object.containsValue(col,val)};goog.structs.isEmpty=function(col){if(typeof col.isEmpty=="function")return col.isEmpty();if(goog.isArrayLike(col)||goog.isString(col))return goog.array.isEmpty(col);return goog.object.isEmpty(col)};
goog.structs.clear=function(col){if(typeof col.clear=="function")col.clear();else if(goog.isArrayLike(col))goog.array.clear(col);else goog.object.clear(col)};
goog.structs.forEach=function(col,f,opt_obj){if(typeof col.forEach=="function")col.forEach(f,opt_obj);else if(goog.isArrayLike(col)||goog.isString(col))goog.array.forEach(col,f,opt_obj);else{var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)f.call(opt_obj,values[i],keys&&keys[i],col)}};
goog.structs.filter=function(col,f,opt_obj){if(typeof col.filter=="function")return col.filter(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.filter(col,f,opt_obj);var rv;var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;if(keys){rv={};for(var i=0;i<l;i++)if(f.call(opt_obj,values[i],keys[i],col))rv[keys[i]]=values[i]}else{rv=[];for(var i=0;i<l;i++)if(f.call(opt_obj,values[i],undefined,col))rv.push(values[i])}return rv};
goog.structs.map=function(col,f,opt_obj){if(typeof col.map=="function")return col.map(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.map(col,f,opt_obj);var rv;var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;if(keys){rv={};for(var i=0;i<l;i++)rv[keys[i]]=f.call(opt_obj,values[i],keys[i],col)}else{rv=[];for(var i=0;i<l;i++)rv[i]=f.call(opt_obj,values[i],undefined,col)}return rv};
goog.structs.some=function(col,f,opt_obj){if(typeof col.some=="function")return col.some(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.some(col,f,opt_obj);var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)if(f.call(opt_obj,values[i],keys&&keys[i],col))return true;return false};
goog.structs.every=function(col,f,opt_obj){if(typeof col.every=="function")return col.every(f,opt_obj);if(goog.isArrayLike(col)||goog.isString(col))return goog.array.every(col,f,opt_obj);var keys=goog.structs.getKeys(col);var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)if(!f.call(opt_obj,values[i],keys&&keys[i],col))return false;return true};goog.provide("goog.structs.Collection");goog.structs.Collection=function(){};goog.structs.Collection.prototype.add;goog.structs.Collection.prototype.remove;goog.structs.Collection.prototype.contains;goog.structs.Collection.prototype.getCount;goog.provide("goog.structs.Map");goog.require("goog.iter.Iterator");goog.require("goog.iter.StopIteration");goog.require("goog.object");goog.require("goog.structs");goog.structs.Map=function(opt_map,var_args){this.map_={};if(goog.structs.Map.PRESERVE_NON_STRING_KEYS)this.numericKeyMap_={};var argLength=arguments.length;if(argLength>1){if(argLength%2)throw Error("Uneven number of arguments");for(var i=0;i<argLength;i+=2)this.set(arguments[i],arguments[i+1])}else if(opt_map)this.addAll(opt_map)};
goog.structs.Map.PRESERVE_NON_STRING_KEYS=true;goog.structs.Map.KEY_PREFIX=":";goog.structs.Map.prototype.count_=0;goog.structs.Map.prototype.version_=0;goog.structs.Map.prototype.getCount=function(){return this.count_};goog.structs.Map.prototype.getValues=function(){var rv=[];for(var key in this.map_)if(goog.structs.Map.isKey_(key))rv.push(this.map_[key]);return rv};
goog.structs.Map.prototype.getKeys=function(){var rv=[];for(var key in this.map_)if(goog.structs.Map.isKey_(key))rv.push(this.getKey_(key));return rv};goog.structs.Map.prototype.containsKey=function(key){return goog.structs.Map.makeKey_(key)in this.map_};goog.structs.Map.prototype.containsValue=function(val){for(var key in this.map_)if(goog.structs.Map.isKey_(key)&&this.map_[key]==val)return true;return false};
goog.structs.Map.prototype.equals=function(otherMap,opt_equalityFn){if(this===otherMap)return true;if(this.count_!=otherMap.getCount())return false;var equalityFn=opt_equalityFn||goog.structs.Map.defaultEquals;for(var key in this.map_){key=this.getKey_(key);if(!equalityFn(this.get(key),otherMap.get(key)))return false}return true};goog.structs.Map.defaultEquals=function(a,b){return a===b};goog.structs.Map.prototype.isEmpty=function(){return this.count_==0};
goog.structs.Map.prototype.clear=function(){this.map_={};this.count_=0;this.version_=0;if(goog.structs.Map.PRESERVE_NON_STRING_KEYS)this.numericKeyMap_={}};goog.structs.Map.prototype.remove=function(key){var internalKey=goog.structs.Map.makeKey_(key);if(goog.object.remove(this.map_,internalKey)){if(goog.structs.Map.PRESERVE_NON_STRING_KEYS)delete this.numericKeyMap_[internalKey];this.count_--;this.version_++;return true}return false};
goog.structs.Map.prototype.get=function(key,opt_val){var internalKey=goog.structs.Map.makeKey_(key);if(internalKey in this.map_)return this.map_[internalKey];return opt_val};goog.structs.Map.prototype.set=function(key,value){var internalKey=goog.structs.Map.makeKey_(key);if(!(internalKey in this.map_)){this.version_++;this.count_++;if(goog.structs.Map.PRESERVE_NON_STRING_KEYS&&goog.isNumber(key))this.numericKeyMap_[internalKey]=true}this.map_[internalKey]=value};
goog.structs.Map.prototype.addAll=function(map){var keys,values;if(map instanceof goog.structs.Map){keys=map.getKeys();values=map.getValues()}else{keys=goog.object.getKeys(map);values=goog.object.getValues(map)}for(var i=0;i<keys.length;i++)this.set(keys[i],values[i])};goog.structs.Map.prototype.clone=function(){return new goog.structs.Map(this)};
goog.structs.Map.prototype.transpose=function(){var transposed=new goog.structs.Map;for(var key in this.map_)transposed.set(this.map_[key],this.getKey_(key));return transposed};goog.structs.Map.prototype.toObject=function(){var res={};for(var key in this.map_)if(goog.structs.Map.isKey_(key))res[this.getKey_(key)]=this.map_[key];return res};goog.structs.Map.prototype.getKeyIterator=function(){return this.__iterator__(true)};goog.structs.Map.prototype.getValueIterator=function(){return this.__iterator__(false)};
goog.structs.Map.prototype.__iterator__=function(opt_keys){var i=0;var keys=this.getKeys();var map=this.map_;var version=this.version_;var selfObj=this;var newIter=new goog.iter.Iterator;newIter.next=function(){while(true){if(version!=selfObj.version_)throw Error("The map has changed since the iterator was created");if(i>=keys.length)throw goog.iter.StopIteration;var key=keys[i++];return opt_keys?key:map[goog.structs.Map.makeKey_(key)]}};return newIter};
goog.structs.Map.prototype.getKey_=function(s){var key=s.substring(1);if(goog.structs.Map.PRESERVE_NON_STRING_KEYS)return this.numericKeyMap_[s]?Number(key):key;else return key};goog.structs.Map.isKey_=function(s){return s.charAt(0)==goog.structs.Map.KEY_PREFIX};goog.structs.Map.makeKey_=function(s){return goog.structs.Map.KEY_PREFIX+s};goog.provide("goog.structs.Set");goog.require("goog.structs");goog.require("goog.structs.Collection");goog.require("goog.structs.Map");goog.structs.Set=function(opt_values){this.map_=new goog.structs.Map;if(opt_values)this.addAll(opt_values)};goog.structs.Set.getKey_=function(val){var type=typeof val;if(type=="object"&&val||type=="function")return"o"+goog.getUid(val);else return type.substr(0,1)+val};goog.structs.Set.prototype.getCount=function(){return this.map_.getCount()};
goog.structs.Set.prototype.add=function(element){this.map_.set(goog.structs.Set.getKey_(element),element)};goog.structs.Set.prototype.addAll=function(col){var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)this.add(values[i])};goog.structs.Set.prototype.removeAll=function(col){var values=goog.structs.getValues(col);var l=values.length;for(var i=0;i<l;i++)this.remove(values[i])};goog.structs.Set.prototype.remove=function(element){return this.map_.remove(goog.structs.Set.getKey_(element))};
goog.structs.Set.prototype.clear=function(){this.map_.clear()};goog.structs.Set.prototype.isEmpty=function(){return this.map_.isEmpty()};goog.structs.Set.prototype.contains=function(element){return this.map_.containsKey(goog.structs.Set.getKey_(element))};goog.structs.Set.prototype.containsAll=function(col){return goog.structs.every(col,this.contains,this)};
goog.structs.Set.prototype.intersection=function(col){var result=new goog.structs.Set;var values=goog.structs.getValues(col);for(var i=0;i<values.length;i++){var value=values[i];if(this.contains(value))result.add(value)}return result};goog.structs.Set.prototype.getValues=function(){return this.map_.getValues()};goog.structs.Set.prototype.clone=function(){return new goog.structs.Set(this)};goog.structs.Set.prototype.equals=function(col){return this.getCount()==goog.structs.getCount(col)&&this.isSubsetOf(col)};
goog.structs.Set.prototype.isSubsetOf=function(col){var colCount=goog.structs.getCount(col);if(this.getCount()>colCount)return false;if(!(col instanceof goog.structs.Set)&&colCount>5)col=new goog.structs.Set(col);return goog.structs.every(this,function(value){return goog.structs.contains(col,value)})};goog.structs.Set.prototype.__iterator__=function(opt_keys){return this.map_.__iterator__(false)};goog.provide("bot.Keyboard");goog.provide("bot.Keyboard.Key");goog.provide("bot.Keyboard.Keys");goog.require("bot.Device");goog.require("bot.Error");goog.require("bot.ErrorCode");goog.require("bot.dom");goog.require("bot.events.EventType");goog.require("goog.array");goog.require("goog.dom.selection");goog.require("goog.events.KeyCodes");goog.require("goog.structs.Set");goog.require("goog.userAgent");
bot.Keyboard=function(){goog.base(this);this.editable_=bot.dom.isEditable(this.getElement());this.pressed_=new goog.structs.Set};goog.inherits(bot.Keyboard,bot.Device);bot.Keyboard.CHAR_TO_KEY_={};
bot.Keyboard.newKey_=function(code,opt_char,opt_shiftChar){if(goog.isObject(code))if(goog.userAgent.GECKO)code=code.gecko;else if(goog.userAgent.OPERA)code=code.opera;else code=code.ieWebkit;var key=new bot.Keyboard.Key(code,opt_char,opt_shiftChar);if(opt_char&&(!(opt_char in bot.Keyboard.CHAR_TO_KEY_)||opt_shiftChar)){bot.Keyboard.CHAR_TO_KEY_[opt_char]={key:key,shift:false};if(opt_shiftChar)bot.Keyboard.CHAR_TO_KEY_[opt_shiftChar]={key:key,shift:true}}return key};
bot.Keyboard.Key=function(code,opt_char,opt_shiftChar){this.code=code;this.character=opt_char||null;this.shiftChar=opt_shiftChar||this.character};
bot.Keyboard.Keys={BACKSPACE:bot.Keyboard.newKey_(8),TAB:bot.Keyboard.newKey_(9),ENTER:bot.Keyboard.newKey_(13),SHIFT:bot.Keyboard.newKey_(16),CONTROL:bot.Keyboard.newKey_(17),ALT:bot.Keyboard.newKey_(18),PAUSE:bot.Keyboard.newKey_(19),CAPS_LOCK:bot.Keyboard.newKey_(20),ESC:bot.Keyboard.newKey_(27),SPACE:bot.Keyboard.newKey_(32," "),PAGE_UP:bot.Keyboard.newKey_(33),PAGE_DOWN:bot.Keyboard.newKey_(34),END:bot.Keyboard.newKey_(35),HOME:bot.Keyboard.newKey_(36),LEFT:bot.Keyboard.newKey_(37),UP:bot.Keyboard.newKey_(38),
RIGHT:bot.Keyboard.newKey_(39),DOWN:bot.Keyboard.newKey_(40),PRINT_SCREEN:bot.Keyboard.newKey_(44),INSERT:bot.Keyboard.newKey_(45),DELETE:bot.Keyboard.newKey_(46),ZERO:bot.Keyboard.newKey_(48,"0",")"),ONE:bot.Keyboard.newKey_(49,"1","!"),TWO:bot.Keyboard.newKey_(50,"2","@"),THREE:bot.Keyboard.newKey_(51,"3","#"),FOUR:bot.Keyboard.newKey_(52,"4","$"),FIVE:bot.Keyboard.newKey_(53,"5","%"),SIX:bot.Keyboard.newKey_(54,"6","^"),SEVEN:bot.Keyboard.newKey_(55,"7","&"),EIGHT:bot.Keyboard.newKey_(56,"8","*"),
NINE:bot.Keyboard.newKey_(57,"9","("),A:bot.Keyboard.newKey_(65,"a","A"),B:bot.Keyboard.newKey_(66,"b","B"),C:bot.Keyboard.newKey_(67,"c","C"),D:bot.Keyboard.newKey_(68,"d","D"),E:bot.Keyboard.newKey_(69,"e","E"),F:bot.Keyboard.newKey_(70,"f","F"),G:bot.Keyboard.newKey_(71,"g","G"),H:bot.Keyboard.newKey_(72,"h","H"),I:bot.Keyboard.newKey_(73,"i","I"),J:bot.Keyboard.newKey_(74,"j","J"),K:bot.Keyboard.newKey_(75,"k","K"),L:bot.Keyboard.newKey_(76,"l","L"),M:bot.Keyboard.newKey_(77,"m","M"),N:bot.Keyboard.newKey_(78,
"n","N"),O:bot.Keyboard.newKey_(79,"o","O"),P:bot.Keyboard.newKey_(80,"p","P"),Q:bot.Keyboard.newKey_(81,"q","Q"),R:bot.Keyboard.newKey_(82,"r","R"),S:bot.Keyboard.newKey_(83,"s","S"),T:bot.Keyboard.newKey_(84,"t","T"),U:bot.Keyboard.newKey_(85,"u","U"),V:bot.Keyboard.newKey_(86,"v","V"),W:bot.Keyboard.newKey_(87,"w","W"),X:bot.Keyboard.newKey_(88,"x","X"),Y:bot.Keyboard.newKey_(89,"y","Y"),Z:bot.Keyboard.newKey_(90,"z","Z"),META:bot.Keyboard.newKey_(goog.userAgent.WINDOWS?{gecko:91,ieWebkit:91,opera:219}:
goog.userAgent.MAC?{gecko:224,ieWebkit:91,opera:17}:{gecko:0,ieWebkit:91,opera:null}),META_RIGHT:bot.Keyboard.newKey_(goog.userAgent.WINDOWS?{gecko:92,ieWebkit:92,opera:220}:goog.userAgent.MAC?{gecko:224,ieWebkit:93,opera:17}:{gecko:0,ieWebkit:92,opera:null}),CONTEXT_MENU:bot.Keyboard.newKey_(goog.userAgent.WINDOWS?{gecko:93,ieWebkit:93,opera:0}:goog.userAgent.MAC?{gecko:0,ieWebkit:0,opera:16}:{gecko:93,ieWebkit:null,opera:0}),NUM_ZERO:bot.Keyboard.newKey_({gecko:96,ieWebkit:96,opera:48},"0"),NUM_ONE:bot.Keyboard.newKey_({gecko:97,
ieWebkit:97,opera:49},"1"),NUM_TWO:bot.Keyboard.newKey_({gecko:98,ieWebkit:98,opera:50},"2"),NUM_THREE:bot.Keyboard.newKey_({gecko:99,ieWebkit:99,opera:51},"3"),NUM_FOUR:bot.Keyboard.newKey_({gecko:100,ieWebkit:100,opera:52},"4"),NUM_FIVE:bot.Keyboard.newKey_({gecko:101,ieWebkit:101,opera:53},"5"),NUM_SIX:bot.Keyboard.newKey_({gecko:102,ieWebkit:102,opera:54},"6"),NUM_SEVEN:bot.Keyboard.newKey_({gecko:103,ieWebkit:103,opera:55},"7"),NUM_EIGHT:bot.Keyboard.newKey_({gecko:104,ieWebkit:104,opera:56},
"8"),NUM_NINE:bot.Keyboard.newKey_({gecko:105,ieWebkit:105,opera:57},"9"),NUM_MULTIPLY:bot.Keyboard.newKey_({gecko:106,ieWebkit:106,opera:goog.userAgent.LINUX?56:42},"*"),NUM_PLUS:bot.Keyboard.newKey_({gecko:107,ieWebkit:107,opera:goog.userAgent.LINUX?61:43},"+"),NUM_MINUS:bot.Keyboard.newKey_({gecko:109,ieWebkit:109,opera:goog.userAgent.LINUX?109:45},"-"),NUM_PERIOD:bot.Keyboard.newKey_({gecko:110,ieWebkit:110,opera:goog.userAgent.LINUX?190:78},"."),NUM_DIVISION:bot.Keyboard.newKey_({gecko:111,ieWebkit:111,
opera:goog.userAgent.LINUX?191:47},"/"),NUM_LOCK:bot.Keyboard.newKey_(goog.userAgent.LINUX&&goog.userAgent.OPERA?null:144),F1:bot.Keyboard.newKey_(112),F2:bot.Keyboard.newKey_(113),F3:bot.Keyboard.newKey_(114),F4:bot.Keyboard.newKey_(115),F5:bot.Keyboard.newKey_(116),F6:bot.Keyboard.newKey_(117),F7:bot.Keyboard.newKey_(118),F8:bot.Keyboard.newKey_(119),F9:bot.Keyboard.newKey_(120),F10:bot.Keyboard.newKey_(121),F11:bot.Keyboard.newKey_(122),F12:bot.Keyboard.newKey_(123),EQUALS:bot.Keyboard.newKey_({gecko:107,
ieWebkit:187,opera:61},"=","+"),HYPHEN:bot.Keyboard.newKey_({gecko:109,ieWebkit:189,opera:109},"-","_"),COMMA:bot.Keyboard.newKey_(188,",","<"),PERIOD:bot.Keyboard.newKey_(190,".",">"),SLASH:bot.Keyboard.newKey_(191,"/","?"),BACKTICK:bot.Keyboard.newKey_(192,"`","~"),OPEN_BRACKET:bot.Keyboard.newKey_(219,"[","{"),BACKSLASH:bot.Keyboard.newKey_(220,"\\","|"),CLOSE_BRACKET:bot.Keyboard.newKey_(221,"]","}"),SEMICOLON:bot.Keyboard.newKey_({gecko:59,ieWebkit:186,opera:59},";",":"),APOSTROPHE:bot.Keyboard.newKey_(222,
"'",'"')};bot.Keyboard.Key.fromChar=function(ch){if(ch.length!=1)throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Argument not a single character: "+ch);var keyShiftPair=bot.Keyboard.CHAR_TO_KEY_[ch];if(!keyShiftPair){var upperCase=ch.toUpperCase();var keyCode=upperCase.charCodeAt(0);var key=bot.Keyboard.newKey_(keyCode,ch.toLowerCase(),upperCase);keyShiftPair={key:key,shift:ch!=key.character}}return keyShiftPair};
bot.Keyboard.MODIFIERS=[bot.Keyboard.Keys.ALT,bot.Keyboard.Keys.CONTROL,bot.Keyboard.Keys.META,bot.Keyboard.Keys.SHIFT];bot.Keyboard.NEW_LINE_=goog.userAgent.IE||goog.userAgent.OPERA?"\r\n":"\n";bot.Keyboard.prototype.isPressed=function(key){return this.pressed_.contains(key)};
bot.Keyboard.prototype.pressKey=function(key){if(this.isPressed(key)&&goog.array.contains(bot.Keyboard.MODIFIERS,key))throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot press a modifier key that is already pressed.");var performDefault=!goog.isNull(key.code)&&this.fireKeyEvent_(bot.events.EventType.KEYDOWN,key);if(performDefault||goog.userAgent.GECKO)if(!this.requiresKeyPress_(key)||this.fireKeyEvent_(bot.events.EventType.KEYPRESS,key,!performDefault))if(performDefault){this.maybeSubmitForm_(key);
if(this.editable_)this.maybeEditText_(key)}this.pressed_.add(key)};
bot.Keyboard.prototype.requiresKeyPress_=function(key){if(key.character||key==bot.Keyboard.Keys.ENTER)return true;else if(goog.userAgent.WEBKIT)return false;else if(goog.userAgent.IE)return key==bot.Keyboard.Keys.ESC;else switch(key){case bot.Keyboard.Keys.SHIFT:case bot.Keyboard.Keys.CONTROL:case bot.Keyboard.Keys.ALT:return false;case bot.Keyboard.Keys.META:case bot.Keyboard.Keys.META_RIGHT:case bot.Keyboard.Keys.CONTEXT_MENU:return goog.userAgent.GECKO;default:return true}};
bot.Keyboard.prototype.maybeSubmitForm_=function(key){if(key!=bot.Keyboard.Keys.ENTER)return;if(goog.userAgent.GECKO||!bot.dom.isElement(this.getElement(),goog.dom.TagName.INPUT))return;var form=bot.Device.findAncestorForm(this.getElement());if(form){var inputs=form.getElementsByTagName("input");var hasSubmit=goog.array.some(inputs,function(e){return bot.Device.isFormSubmitElement(e)});if(hasSubmit||inputs.length==1||goog.userAgent.WEBKIT&&!bot.userAgent.isEngineVersion(534))this.submitForm(form)}};
bot.Keyboard.prototype.maybeEditText_=function(key){if(key.character)this.updateOnCharacter_(key);else switch(key){case bot.Keyboard.Keys.ENTER:this.updateOnEnter_();break;case bot.Keyboard.Keys.BACKSPACE:case bot.Keyboard.Keys.DELETE:this.updateOnBackspaceOrDelete_(key);break;case bot.Keyboard.Keys.LEFT:case bot.Keyboard.Keys.RIGHT:this.updateOnLeftOrRight_(key);break}};
bot.Keyboard.prototype.releaseKey=function(key){if(!this.isPressed(key))throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot release a key that is not pressed.");if(!goog.isNull(key.code))this.fireKeyEvent_(bot.events.EventType.KEYUP,key);this.pressed_.remove(key)};bot.Keyboard.prototype.getChar_=function(key){if(!key.character)throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"not a character key");var shiftPressed=this.isPressed(bot.Keyboard.Keys.SHIFT);return shiftPressed?key.shiftChar:key.character};
bot.Keyboard.prototype.updateOnCharacter_=function(key){if(goog.userAgent.GECKO)return;var character=this.getChar_(key);goog.dom.selection.setText(this.getElement(),character);goog.dom.selection.setStart(this.getElement(),goog.dom.selection.getStart(this.getElement())+1);if(goog.userAgent.WEBKIT)this.fireHtmlEvent(bot.events.EventType.TEXTINPUT);if(!bot.userAgent.IE_DOC_PRE9)this.fireHtmlEvent(bot.events.EventType.INPUT)};
bot.Keyboard.prototype.updateOnEnter_=function(){if(goog.userAgent.GECKO)return;if(goog.userAgent.WEBKIT)this.fireHtmlEvent(bot.events.EventType.TEXTINPUT);if(bot.dom.isElement(this.getElement(),goog.dom.TagName.TEXTAREA)){goog.dom.selection.setText(this.getElement(),bot.Keyboard.NEW_LINE_);goog.dom.selection.setStart(this.getElement(),goog.dom.selection.getStart(this.getElement())+bot.Keyboard.NEW_LINE_.length);if(!goog.userAgent.IE)this.fireHtmlEvent(bot.events.EventType.INPUT)}};
bot.Keyboard.prototype.updateOnBackspaceOrDelete_=function(key){if(goog.userAgent.GECKO)return;var endpoints=goog.dom.selection.getEndPoints(this.getElement());if(key==bot.Keyboard.Keys.BACKSPACE&&endpoints[0]==endpoints[1]){goog.dom.selection.setStart(this.getElement(),endpoints[1]-1);goog.dom.selection.setEnd(this.getElement(),endpoints[1])}else goog.dom.selection.setEnd(this.getElement(),endpoints[1]+1);endpoints=goog.dom.selection.getEndPoints(this.getElement());var textChanged=!(endpoints[0]==
this.getElement().value.length||endpoints[1]==0);goog.dom.selection.setText(this.getElement(),"");if(!goog.userAgent.IE&&textChanged)this.fireHtmlEvent(bot.events.EventType.INPUT)};bot.Keyboard.prototype.updateOnLeftOrRight_=function(key){var start=goog.dom.selection.getStart(this.getElement());if(key==bot.Keyboard.Keys.LEFT)goog.dom.selection.setCursorPosition(this.getElement(),start-1);else goog.dom.selection.setCursorPosition(this.getElement(),start+1)};
bot.Keyboard.prototype.fireKeyEvent_=function(type,key,opt_preventDefault){if(goog.isNull(key.code))throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Key must have a keycode to be fired.");var args={altKey:this.isPressed(bot.Keyboard.Keys.ALT),ctrlKey:this.isPressed(bot.Keyboard.Keys.CONTROL),metaKey:this.isPressed(bot.Keyboard.Keys.META),shiftKey:this.isPressed(bot.Keyboard.Keys.SHIFT),keyCode:key.code,charCode:key.character&&type==bot.events.EventType.KEYPRESS?this.getChar_(key).charCodeAt(0):0,
preventDefault:!!opt_preventDefault};return this.fireKeyboardEvent(type,args)};bot.Keyboard.prototype.moveCursor=function(element){this.setElement(element);this.editable_=bot.dom.isEditable(element);var focusChanged=this.focusOnElement();if(this.editable_&&focusChanged)goog.dom.selection.setCursorPosition(element,element.value.length)};goog.provide("goog.disposable.IDisposable");goog.disposable.IDisposable=function(){};goog.disposable.IDisposable.prototype.dispose;goog.disposable.IDisposable.prototype.isDisposed;goog.provide("goog.Disposable");goog.provide("goog.dispose");goog.require("goog.disposable.IDisposable");goog.Disposable=function(){if(goog.Disposable.ENABLE_MONITORING)goog.Disposable.instances_[goog.getUid(this)]=this};goog.Disposable.ENABLE_MONITORING=false;goog.Disposable.instances_={};goog.Disposable.getUndisposedObjects=function(){var ret=[];for(var id in goog.Disposable.instances_)if(goog.Disposable.instances_.hasOwnProperty(id))ret.push(goog.Disposable.instances_[Number(id)]);return ret};
goog.Disposable.clearUndisposedObjects=function(){goog.Disposable.instances_={}};goog.Disposable.prototype.disposed_=false;goog.Disposable.prototype.dependentDisposables_;goog.Disposable.prototype.isDisposed=function(){return this.disposed_};goog.Disposable.prototype.getDisposed=goog.Disposable.prototype.isDisposed;
goog.Disposable.prototype.dispose=function(){if(!this.disposed_){this.disposed_=true;this.disposeInternal();if(goog.Disposable.ENABLE_MONITORING){var uid=goog.getUid(this);if(!goog.Disposable.instances_.hasOwnProperty(uid))throw Error(this+" did not call the goog.Disposable base "+"constructor or was disposed of after a clearUndisposedObjects "+"call");delete goog.Disposable.instances_[uid]}}};
goog.Disposable.prototype.registerDisposable=function(disposable){if(!this.dependentDisposables_)this.dependentDisposables_=[];this.dependentDisposables_.push(disposable)};goog.Disposable.prototype.disposeInternal=function(){if(this.dependentDisposables_)goog.disposeAll.apply(null,this.dependentDisposables_)};goog.dispose=function(obj){if(obj&&typeof obj.dispose=="function")obj.dispose()};
goog.disposeAll=function(var_args){for(var i=0,len=arguments.length;i<len;++i){var disposable=arguments[i];if(goog.isArrayLike(disposable))goog.disposeAll.apply(null,disposable);else goog.dispose(disposable)}};goog.provide("goog.debug");goog.require("goog.array");goog.require("goog.string");goog.require("goog.structs.Set");goog.require("goog.userAgent");goog.debug.catchErrors=function(logFunc,opt_cancel,opt_target){var target=opt_target||goog.global;var oldErrorHandler=target.onerror;var retVal=goog.userAgent.WEBKIT?!opt_cancel:!!opt_cancel;target.onerror=function(message,url,line){if(oldErrorHandler)oldErrorHandler(message,url,line);logFunc({message:message,fileName:url,line:line});return retVal}};
goog.debug.expose=function(obj,opt_showFn){if(typeof obj=="undefined")return"undefined";if(obj==null)return"NULL";var str=[];for(var x in obj){if(!opt_showFn&&goog.isFunction(obj[x]))continue;var s=x+" = ";try{s+=obj[x]}catch(e){s+="*** "+e+" ***"}str.push(s)}return str.join("\n")};
goog.debug.deepExpose=function(obj,opt_showFn){var previous=new goog.structs.Set;var str=[];var helper=function(obj,space){var nestspace=space+" ";var indentMultiline=function(str){return str.replace(/\n/g,"\n"+space)};try{if(!goog.isDef(obj))str.push("undefined");else if(goog.isNull(obj))str.push("NULL");else if(goog.isString(obj))str.push('"'+indentMultiline(obj)+'"');else if(goog.isFunction(obj))str.push(indentMultiline(String(obj)));else if(goog.isObject(obj))if(previous.contains(obj))str.push("*** reference loop detected ***");
else{previous.add(obj);str.push("{");for(var x in obj){if(!opt_showFn&&goog.isFunction(obj[x]))continue;str.push("\n");str.push(nestspace);str.push(x+" = ");helper(obj[x],nestspace)}str.push("\n"+space+"}")}else str.push(obj)}catch(e){str.push("*** "+e+" ***")}};helper(obj,"");return str.join("")};goog.debug.exposeArray=function(arr){var str=[];for(var i=0;i<arr.length;i++)if(goog.isArray(arr[i]))str.push(goog.debug.exposeArray(arr[i]));else str.push(arr[i]);return"[ "+str.join(", ")+" ]"};
goog.debug.exposeException=function(err,opt_fn){try{var e=goog.debug.normalizeErrorObject(err);var error="Message: "+goog.string.htmlEscape(e.message)+'\nUrl: <a href="view-source:'+e.fileName+'" target="_new">'+e.fileName+"</a>\nLine: "+e.lineNumber+"\n\nBrowser stack:\n"+goog.string.htmlEscape(e.stack+"-> ")+"[end]\n\nJS stack traversal:\n"+goog.string.htmlEscape(goog.debug.getStacktrace(opt_fn)+"-> ");return error}catch(e2){return"Exception trying to expose exception! You win, we lose. "+e2}};
goog.debug.normalizeErrorObject=function(err){var href=goog.getObjectByName("window.location.href");if(goog.isString(err))return{"message":err,"name":"Unknown error","lineNumber":"Not available","fileName":href,"stack":"Not available"};var lineNumber,fileName;var threwError=false;try{lineNumber=err.lineNumber||err.line||"Not available"}catch(e){lineNumber="Not available";threwError=true}try{fileName=err.fileName||err.filename||err.sourceURL||href}catch(e){fileName="Not available";threwError=true}if(threwError||
!err.lineNumber||!err.fileName||!err.stack)return{"message":err.message,"name":err.name,"lineNumber":lineNumber,"fileName":fileName,"stack":err.stack||"Not available"};return err};goog.debug.enhanceError=function(err,opt_message){var error=typeof err=="string"?Error(err):err;if(!error.stack)error.stack=goog.debug.getStacktrace(arguments.callee.caller);if(opt_message){var x=0;while(error["message"+x])++x;error["message"+x]=String(opt_message)}return error};
goog.debug.getStacktraceSimple=function(opt_depth){var sb=[];var fn=arguments.callee.caller;var depth=0;while(fn&&(!opt_depth||depth<opt_depth)){sb.push(goog.debug.getFunctionName(fn));sb.push("()\n");try{fn=fn.caller}catch(e){sb.push("[exception trying to get caller]\n");break}depth++;if(depth>=goog.debug.MAX_STACK_DEPTH){sb.push("[...long stack...]");break}}if(opt_depth&&depth>=opt_depth)sb.push("[...reached max depth limit...]");else sb.push("[end]");return sb.join("")};
goog.debug.MAX_STACK_DEPTH=50;goog.debug.getStacktrace=function(opt_fn){return goog.debug.getStacktraceHelper_(opt_fn||arguments.callee.caller,[])};
goog.debug.getStacktraceHelper_=function(fn,visited){var sb=[];if(goog.array.contains(visited,fn))sb.push("[...circular reference...]");else if(fn&&visited.length<goog.debug.MAX_STACK_DEPTH){sb.push(goog.debug.getFunctionName(fn)+"(");var args=fn.arguments;for(var i=0;i<args.length;i++){if(i>0)sb.push(", ");var argDesc;var arg=args[i];switch(typeof arg){case "object":argDesc=arg?"object":"null";break;case "string":argDesc=arg;break;case "number":argDesc=String(arg);break;case "boolean":argDesc=arg?
"true":"false";break;case "function":argDesc=goog.debug.getFunctionName(arg);argDesc=argDesc?argDesc:"[fn]";break;case "undefined":default:argDesc=typeof arg;break}if(argDesc.length>40)argDesc=argDesc.substr(0,40)+"...";sb.push(argDesc)}visited.push(fn);sb.push(")\n");try{sb.push(goog.debug.getStacktraceHelper_(fn.caller,visited))}catch(e){sb.push("[exception trying to get caller]\n")}}else if(fn)sb.push("[...long stack...]");else sb.push("[end]");return sb.join("")};
goog.debug.setFunctionResolver=function(resolver){goog.debug.fnNameResolver_=resolver};
goog.debug.getFunctionName=function(fn){if(goog.debug.fnNameCache_[fn])return goog.debug.fnNameCache_[fn];if(goog.debug.fnNameResolver_){var name=goog.debug.fnNameResolver_(fn);if(name){goog.debug.fnNameCache_[fn]=name;return name}}var functionSource=String(fn);if(!goog.debug.fnNameCache_[functionSource]){var matches=/function ([^\(]+)/.exec(functionSource);if(matches){var method=matches[1];goog.debug.fnNameCache_[functionSource]=method}else goog.debug.fnNameCache_[functionSource]="[Anonymous]"}return goog.debug.fnNameCache_[functionSource]};
goog.debug.makeWhitespaceVisible=function(string){return string.replace(/ /g,"[_]").replace(/\f/g,"[f]").replace(/\n/g,"[n]\n").replace(/\r/g,"[r]").replace(/\t/g,"[t]")};goog.debug.fnNameCache_={};goog.debug.fnNameResolver_;goog.provide("goog.debug.LogRecord");goog.debug.LogRecord=function(level,msg,loggerName,opt_time,opt_sequenceNumber){this.reset(level,msg,loggerName,opt_time,opt_sequenceNumber)};goog.debug.LogRecord.prototype.time_;goog.debug.LogRecord.prototype.level_;goog.debug.LogRecord.prototype.msg_;goog.debug.LogRecord.prototype.loggerName_;goog.debug.LogRecord.prototype.sequenceNumber_=0;goog.debug.LogRecord.prototype.exception_=null;goog.debug.LogRecord.prototype.exceptionText_=null;
goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS=true;goog.debug.LogRecord.nextSequenceNumber_=0;goog.debug.LogRecord.prototype.reset=function(level,msg,loggerName,opt_time,opt_sequenceNumber){if(goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS)this.sequenceNumber_=typeof opt_sequenceNumber=="number"?opt_sequenceNumber:goog.debug.LogRecord.nextSequenceNumber_++;this.time_=opt_time||goog.now();this.level_=level;this.msg_=msg;this.loggerName_=loggerName;delete this.exception_;delete this.exceptionText_};
goog.debug.LogRecord.prototype.getLoggerName=function(){return this.loggerName_};goog.debug.LogRecord.prototype.getException=function(){return this.exception_};goog.debug.LogRecord.prototype.setException=function(exception){this.exception_=exception};goog.debug.LogRecord.prototype.getExceptionText=function(){return this.exceptionText_};goog.debug.LogRecord.prototype.setExceptionText=function(text){this.exceptionText_=text};
goog.debug.LogRecord.prototype.setLoggerName=function(loggerName){this.loggerName_=loggerName};goog.debug.LogRecord.prototype.getLevel=function(){return this.level_};goog.debug.LogRecord.prototype.setLevel=function(level){this.level_=level};goog.debug.LogRecord.prototype.getMessage=function(){return this.msg_};goog.debug.LogRecord.prototype.setMessage=function(msg){this.msg_=msg};goog.debug.LogRecord.prototype.getMillis=function(){return this.time_};
goog.debug.LogRecord.prototype.setMillis=function(time){this.time_=time};goog.debug.LogRecord.prototype.getSequenceNumber=function(){return this.sequenceNumber_};goog.provide("goog.debug.LogBuffer");goog.require("goog.asserts");goog.require("goog.debug.LogRecord");goog.debug.LogBuffer=function(){goog.asserts.assert(goog.debug.LogBuffer.isBufferingEnabled(),"Cannot use goog.debug.LogBuffer without defining "+"goog.debug.LogBuffer.CAPACITY.");this.clear()};goog.debug.LogBuffer.getInstance=function(){if(!goog.debug.LogBuffer.instance_)goog.debug.LogBuffer.instance_=new goog.debug.LogBuffer;return goog.debug.LogBuffer.instance_};
goog.debug.LogBuffer.CAPACITY=0;goog.debug.LogBuffer.prototype.buffer_;goog.debug.LogBuffer.prototype.curIndex_;goog.debug.LogBuffer.prototype.isFull_;
goog.debug.LogBuffer.prototype.addRecord=function(level,msg,loggerName){var curIndex=(this.curIndex_+1)%goog.debug.LogBuffer.CAPACITY;this.curIndex_=curIndex;if(this.isFull_){var ret=this.buffer_[curIndex];ret.reset(level,msg,loggerName);return ret}this.isFull_=curIndex==goog.debug.LogBuffer.CAPACITY-1;return this.buffer_[curIndex]=new goog.debug.LogRecord(level,msg,loggerName)};goog.debug.LogBuffer.isBufferingEnabled=function(){return goog.debug.LogBuffer.CAPACITY>0};
goog.debug.LogBuffer.prototype.clear=function(){this.buffer_=new Array(goog.debug.LogBuffer.CAPACITY);this.curIndex_=-1;this.isFull_=false};goog.debug.LogBuffer.prototype.forEachRecord=function(func){var buffer=this.buffer_;if(!buffer[0])return;var curIndex=this.curIndex_;var i=this.isFull_?curIndex:-1;do{i=(i+1)%goog.debug.LogBuffer.CAPACITY;func(buffer[i])}while(i!=curIndex)};goog.provide("goog.debug.LogManager");goog.provide("goog.debug.Logger");goog.provide("goog.debug.Logger.Level");goog.require("goog.array");goog.require("goog.asserts");goog.require("goog.debug");goog.require("goog.debug.LogBuffer");goog.require("goog.debug.LogRecord");goog.debug.Logger=function(name){this.name_=name};goog.debug.Logger.prototype.parent_=null;goog.debug.Logger.prototype.level_=null;goog.debug.Logger.prototype.children_=null;goog.debug.Logger.prototype.handlers_=null;
goog.debug.Logger.ENABLE_HIERARCHY=true;if(!goog.debug.Logger.ENABLE_HIERARCHY){goog.debug.Logger.rootHandlers_=[];goog.debug.Logger.rootLevel_}goog.debug.Logger.Level=function(name,value){this.name=name;this.value=value};goog.debug.Logger.Level.prototype.toString=function(){return this.name};goog.debug.Logger.Level.OFF=new goog.debug.Logger.Level("OFF",Infinity);goog.debug.Logger.Level.SHOUT=new goog.debug.Logger.Level("SHOUT",1200);
goog.debug.Logger.Level.SEVERE=new goog.debug.Logger.Level("SEVERE",1E3);goog.debug.Logger.Level.WARNING=new goog.debug.Logger.Level("WARNING",900);goog.debug.Logger.Level.INFO=new goog.debug.Logger.Level("INFO",800);goog.debug.Logger.Level.CONFIG=new goog.debug.Logger.Level("CONFIG",700);goog.debug.Logger.Level.FINE=new goog.debug.Logger.Level("FINE",500);goog.debug.Logger.Level.FINER=new goog.debug.Logger.Level("FINER",400);goog.debug.Logger.Level.FINEST=new goog.debug.Logger.Level("FINEST",300);
goog.debug.Logger.Level.ALL=new goog.debug.Logger.Level("ALL",0);goog.debug.Logger.Level.PREDEFINED_LEVELS=[goog.debug.Logger.Level.OFF,goog.debug.Logger.Level.SHOUT,goog.debug.Logger.Level.SEVERE,goog.debug.Logger.Level.WARNING,goog.debug.Logger.Level.INFO,goog.debug.Logger.Level.CONFIG,goog.debug.Logger.Level.FINE,goog.debug.Logger.Level.FINER,goog.debug.Logger.Level.FINEST,goog.debug.Logger.Level.ALL];goog.debug.Logger.Level.predefinedLevelsCache_=null;
goog.debug.Logger.Level.createPredefinedLevelsCache_=function(){goog.debug.Logger.Level.predefinedLevelsCache_={};for(var i=0,level;level=goog.debug.Logger.Level.PREDEFINED_LEVELS[i];i++){goog.debug.Logger.Level.predefinedLevelsCache_[level.value]=level;goog.debug.Logger.Level.predefinedLevelsCache_[level.name]=level}};
goog.debug.Logger.Level.getPredefinedLevel=function(name){if(!goog.debug.Logger.Level.predefinedLevelsCache_)goog.debug.Logger.Level.createPredefinedLevelsCache_();return goog.debug.Logger.Level.predefinedLevelsCache_[name]||null};
goog.debug.Logger.Level.getPredefinedLevelByValue=function(value){if(!goog.debug.Logger.Level.predefinedLevelsCache_)goog.debug.Logger.Level.createPredefinedLevelsCache_();if(value in goog.debug.Logger.Level.predefinedLevelsCache_)return goog.debug.Logger.Level.predefinedLevelsCache_[value];for(var i=0;i<goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++i){var level=goog.debug.Logger.Level.PREDEFINED_LEVELS[i];if(level.value<=value)return level}return null};goog.debug.Logger.getLogger=function(name){return goog.debug.LogManager.getLogger(name)};
goog.debug.Logger.logToProfilers=function(msg){if(goog.global["console"])if(goog.global["console"]["timeStamp"])goog.global["console"]["timeStamp"](msg);else if(goog.global["console"]["markTimeline"])goog.global["console"]["markTimeline"](msg);if(goog.global["msWriteProfilerMark"])goog.global["msWriteProfilerMark"](msg)};goog.debug.Logger.prototype.getName=function(){return this.name_};
goog.debug.Logger.prototype.addHandler=function(handler){if(goog.debug.Logger.ENABLE_HIERARCHY){if(!this.handlers_)this.handlers_=[];this.handlers_.push(handler)}else{goog.asserts.assert(!this.name_,"Cannot call addHandler on a non-root logger when "+"goog.debug.Logger.ENABLE_HIERARCHY is false.");goog.debug.Logger.rootHandlers_.push(handler)}};
goog.debug.Logger.prototype.removeHandler=function(handler){var handlers=goog.debug.Logger.ENABLE_HIERARCHY?this.handlers_:goog.debug.Logger.rootHandlers_;return!!handlers&&goog.array.remove(handlers,handler)};goog.debug.Logger.prototype.getParent=function(){return this.parent_};goog.debug.Logger.prototype.getChildren=function(){if(!this.children_)this.children_={};return this.children_};
goog.debug.Logger.prototype.setLevel=function(level){if(goog.debug.Logger.ENABLE_HIERARCHY)this.level_=level;else{goog.asserts.assert(!this.name_,"Cannot call setLevel() on a non-root logger when "+"goog.debug.Logger.ENABLE_HIERARCHY is false.");goog.debug.Logger.rootLevel_=level}};goog.debug.Logger.prototype.getLevel=function(){return this.level_};
goog.debug.Logger.prototype.getEffectiveLevel=function(){if(!goog.debug.Logger.ENABLE_HIERARCHY)return goog.debug.Logger.rootLevel_;if(this.level_)return this.level_;if(this.parent_)return this.parent_.getEffectiveLevel();goog.asserts.fail("Root logger has no level set.");return null};goog.debug.Logger.prototype.isLoggable=function(level){return level.value>=this.getEffectiveLevel().value};
goog.debug.Logger.prototype.log=function(level,msg,opt_exception){if(this.isLoggable(level))this.doLogRecord_(this.getLogRecord(level,msg,opt_exception))};
goog.debug.Logger.prototype.getLogRecord=function(level,msg,opt_exception){if(goog.debug.LogBuffer.isBufferingEnabled())var logRecord=goog.debug.LogBuffer.getInstance().addRecord(level,msg,this.name_);else logRecord=new goog.debug.LogRecord(level,String(msg),this.name_);if(opt_exception){logRecord.setException(opt_exception);logRecord.setExceptionText(goog.debug.exposeException(opt_exception,arguments.callee.caller))}return logRecord};
goog.debug.Logger.prototype.shout=function(msg,opt_exception){this.log(goog.debug.Logger.Level.SHOUT,msg,opt_exception)};goog.debug.Logger.prototype.severe=function(msg,opt_exception){this.log(goog.debug.Logger.Level.SEVERE,msg,opt_exception)};goog.debug.Logger.prototype.warning=function(msg,opt_exception){this.log(goog.debug.Logger.Level.WARNING,msg,opt_exception)};goog.debug.Logger.prototype.info=function(msg,opt_exception){this.log(goog.debug.Logger.Level.INFO,msg,opt_exception)};
goog.debug.Logger.prototype.config=function(msg,opt_exception){this.log(goog.debug.Logger.Level.CONFIG,msg,opt_exception)};goog.debug.Logger.prototype.fine=function(msg,opt_exception){this.log(goog.debug.Logger.Level.FINE,msg,opt_exception)};goog.debug.Logger.prototype.finer=function(msg,opt_exception){this.log(goog.debug.Logger.Level.FINER,msg,opt_exception)};goog.debug.Logger.prototype.finest=function(msg,opt_exception){this.log(goog.debug.Logger.Level.FINEST,msg,opt_exception)};
goog.debug.Logger.prototype.logRecord=function(logRecord){if(this.isLoggable(logRecord.getLevel()))this.doLogRecord_(logRecord)};goog.debug.Logger.prototype.doLogRecord_=function(logRecord){goog.debug.Logger.logToProfilers("log:"+logRecord.getMessage());if(goog.debug.Logger.ENABLE_HIERARCHY){var target=this;while(target){target.callPublish_(logRecord);target=target.getParent()}}else for(var i=0,handler;handler=goog.debug.Logger.rootHandlers_[i++];)handler(logRecord)};
goog.debug.Logger.prototype.callPublish_=function(logRecord){if(this.handlers_)for(var i=0,handler;handler=this.handlers_[i];i++)handler(logRecord)};goog.debug.Logger.prototype.setParent_=function(parent){this.parent_=parent};goog.debug.Logger.prototype.addChild_=function(name,logger){this.getChildren()[name]=logger};goog.debug.LogManager={};goog.debug.LogManager.loggers_={};goog.debug.LogManager.rootLogger_=null;
goog.debug.LogManager.initialize=function(){if(!goog.debug.LogManager.rootLogger_){goog.debug.LogManager.rootLogger_=new goog.debug.Logger("");goog.debug.LogManager.loggers_[""]=goog.debug.LogManager.rootLogger_;goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG)}};goog.debug.LogManager.getLoggers=function(){return goog.debug.LogManager.loggers_};goog.debug.LogManager.getRoot=function(){goog.debug.LogManager.initialize();return goog.debug.LogManager.rootLogger_};
goog.debug.LogManager.getLogger=function(name){goog.debug.LogManager.initialize();var ret=goog.debug.LogManager.loggers_[name];return ret||goog.debug.LogManager.createLogger_(name)};goog.debug.LogManager.createFunctionForCatchErrors=function(opt_logger){return function(info){var logger=opt_logger||goog.debug.LogManager.getRoot();logger.severe("Error: "+info.message+" ("+info.fileName+" @ Line: "+info.line+")")}};
goog.debug.LogManager.createLogger_=function(name){var logger=new goog.debug.Logger(name);if(goog.debug.Logger.ENABLE_HIERARCHY){var lastDotIndex=name.lastIndexOf(".");var parentName=name.substr(0,lastDotIndex);var leafName=name.substr(lastDotIndex+1);var parentLogger=goog.debug.LogManager.getLogger(parentName);parentLogger.addChild_(leafName,logger);logger.setParent_(parentLogger)}goog.debug.LogManager.loggers_[name]=logger;return logger};goog.provide("goog.dom.SavedRange");goog.require("goog.Disposable");goog.require("goog.debug.Logger");goog.dom.SavedRange=function(){goog.Disposable.call(this)};goog.inherits(goog.dom.SavedRange,goog.Disposable);goog.dom.SavedRange.logger_=goog.debug.Logger.getLogger("goog.dom.SavedRange");
goog.dom.SavedRange.prototype.restore=function(opt_stayAlive){if(this.isDisposed())goog.dom.SavedRange.logger_.severe("Disposed SavedRange objects cannot be restored.");var range=this.restoreInternal();if(!opt_stayAlive)this.dispose();return range};goog.dom.SavedRange.prototype.restoreInternal=goog.abstractMethod;goog.provide("goog.dom.SavedCaretRange");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.SavedRange");goog.require("goog.dom.TagName");goog.require("goog.string");goog.dom.SavedCaretRange=function(range){goog.dom.SavedRange.call(this);this.startCaretId_=goog.string.createUniqueString();this.endCaretId_=goog.string.createUniqueString();this.dom_=goog.dom.getDomHelper(range.getDocument());range.surroundWithNodes(this.createCaret_(true),this.createCaret_(false))};
goog.inherits(goog.dom.SavedCaretRange,goog.dom.SavedRange);goog.dom.SavedCaretRange.prototype.toAbstractRange=function(){var range=null;var startCaret=this.getCaret(true);var endCaret=this.getCaret(false);if(startCaret&&endCaret)range=goog.dom.Range.createFromNodes(startCaret,0,endCaret,0);return range};goog.dom.SavedCaretRange.prototype.getCaret=function(start){return this.dom_.getElement(start?this.startCaretId_:this.endCaretId_)};
goog.dom.SavedCaretRange.prototype.removeCarets=function(opt_range){goog.dom.removeNode(this.getCaret(true));goog.dom.removeNode(this.getCaret(false));return opt_range};goog.dom.SavedCaretRange.prototype.setRestorationDocument=function(doc){this.dom_.setDocument(doc)};
goog.dom.SavedCaretRange.prototype.restoreInternal=function(){var range=null;var startCaret=this.getCaret(true);var endCaret=this.getCaret(false);if(startCaret&&endCaret){var startNode=startCaret.parentNode;var startOffset=goog.array.indexOf(startNode.childNodes,startCaret);var endNode=endCaret.parentNode;var endOffset=goog.array.indexOf(endNode.childNodes,endCaret);if(endNode==startNode)endOffset-=1;range=goog.dom.Range.createFromNodes(startNode,startOffset,endNode,endOffset);range=this.removeCarets(range);
range.select()}else this.removeCarets();return range};goog.dom.SavedCaretRange.prototype.disposeInternal=function(){this.removeCarets();this.dom_=null};goog.dom.SavedCaretRange.prototype.createCaret_=function(start){return this.dom_.createDom(goog.dom.TagName.SPAN,{"id":start?this.startCaretId_:this.endCaretId_})};goog.dom.SavedCaretRange.CARET_REGEX=/<span\s+id="?goog_\d+"?><\/span>/ig;
goog.dom.SavedCaretRange.htmlEqual=function(str1,str2){return str1==str2||str1.replace(goog.dom.SavedCaretRange.CARET_REGEX,"")==str2.replace(goog.dom.SavedCaretRange.CARET_REGEX,"")};goog.provide("goog.dom.AbstractRange");goog.provide("goog.dom.RangeIterator");goog.provide("goog.dom.RangeType");goog.require("goog.dom");goog.require("goog.dom.NodeType");goog.require("goog.dom.SavedCaretRange");goog.require("goog.dom.TagIterator");goog.require("goog.userAgent");goog.dom.RangeType={TEXT:"text",CONTROL:"control",MULTI:"mutli"};goog.dom.AbstractRange=function(){};
goog.dom.AbstractRange.getBrowserSelectionForWindow=function(win){if(win.getSelection)return win.getSelection();else{var doc=win.document;var sel=doc.selection;if(sel){try{var range=sel.createRange();if(range.parentElement){if(range.parentElement().document!=doc)return null}else if(!range.length||range.item(0).document!=doc)return null}catch(e){return null}return sel}return null}};goog.dom.AbstractRange.isNativeControlRange=function(range){return!!range&&!!range.addElement};
goog.dom.AbstractRange.prototype.clone=goog.abstractMethod;goog.dom.AbstractRange.prototype.getType=goog.abstractMethod;goog.dom.AbstractRange.prototype.getBrowserRangeObject=goog.abstractMethod;goog.dom.AbstractRange.prototype.setBrowserRangeObject=function(nativeRange){return false};goog.dom.AbstractRange.prototype.getTextRangeCount=goog.abstractMethod;goog.dom.AbstractRange.prototype.getTextRange=goog.abstractMethod;
goog.dom.AbstractRange.prototype.getTextRanges=function(){var output=[];for(var i=0,len=this.getTextRangeCount();i<len;i++)output.push(this.getTextRange(i));return output};goog.dom.AbstractRange.prototype.getContainer=goog.abstractMethod;goog.dom.AbstractRange.prototype.getContainerElement=function(){var node=this.getContainer();return node.nodeType==goog.dom.NodeType.ELEMENT?node:node.parentNode};goog.dom.AbstractRange.prototype.getStartNode=goog.abstractMethod;
goog.dom.AbstractRange.prototype.getStartOffset=goog.abstractMethod;goog.dom.AbstractRange.prototype.getEndNode=goog.abstractMethod;goog.dom.AbstractRange.prototype.getEndOffset=goog.abstractMethod;goog.dom.AbstractRange.prototype.getAnchorNode=function(){return this.isReversed()?this.getEndNode():this.getStartNode()};goog.dom.AbstractRange.prototype.getAnchorOffset=function(){return this.isReversed()?this.getEndOffset():this.getStartOffset()};
goog.dom.AbstractRange.prototype.getFocusNode=function(){return this.isReversed()?this.getStartNode():this.getEndNode()};goog.dom.AbstractRange.prototype.getFocusOffset=function(){return this.isReversed()?this.getStartOffset():this.getEndOffset()};goog.dom.AbstractRange.prototype.isReversed=function(){return false};goog.dom.AbstractRange.prototype.getDocument=function(){return goog.dom.getOwnerDocument(goog.userAgent.IE?this.getContainer():this.getStartNode())};
goog.dom.AbstractRange.prototype.getWindow=function(){return goog.dom.getWindow(this.getDocument())};goog.dom.AbstractRange.prototype.containsRange=goog.abstractMethod;goog.dom.AbstractRange.prototype.containsNode=function(node,opt_allowPartial){return this.containsRange(goog.dom.Range.createFromNodeContents(node),opt_allowPartial)};goog.dom.AbstractRange.prototype.isRangeInDocument=goog.abstractMethod;goog.dom.AbstractRange.prototype.isCollapsed=goog.abstractMethod;
goog.dom.AbstractRange.prototype.getText=goog.abstractMethod;goog.dom.AbstractRange.prototype.getHtmlFragment=goog.abstractMethod;goog.dom.AbstractRange.prototype.getValidHtml=goog.abstractMethod;goog.dom.AbstractRange.prototype.getPastableHtml=goog.abstractMethod;goog.dom.AbstractRange.prototype.__iterator__=goog.abstractMethod;goog.dom.AbstractRange.prototype.select=goog.abstractMethod;goog.dom.AbstractRange.prototype.removeContents=goog.abstractMethod;
goog.dom.AbstractRange.prototype.insertNode=goog.abstractMethod;goog.dom.AbstractRange.prototype.replaceContentsWithNode=function(node){if(!this.isCollapsed())this.removeContents();return this.insertNode(node,true)};goog.dom.AbstractRange.prototype.surroundWithNodes=goog.abstractMethod;goog.dom.AbstractRange.prototype.saveUsingDom=goog.abstractMethod;goog.dom.AbstractRange.prototype.saveUsingCarets=function(){return this.getStartNode()&&this.getEndNode()?new goog.dom.SavedCaretRange(this):null};
goog.dom.AbstractRange.prototype.collapse=goog.abstractMethod;goog.dom.RangeIterator=function(node,opt_reverse){goog.dom.TagIterator.call(this,node,opt_reverse,true)};goog.inherits(goog.dom.RangeIterator,goog.dom.TagIterator);goog.dom.RangeIterator.prototype.getStartTextOffset=goog.abstractMethod;goog.dom.RangeIterator.prototype.getEndTextOffset=goog.abstractMethod;goog.dom.RangeIterator.prototype.getStartNode=goog.abstractMethod;goog.dom.RangeIterator.prototype.getEndNode=goog.abstractMethod;
goog.dom.RangeIterator.prototype.isLast=goog.abstractMethod;goog.provide("goog.dom.AbstractMultiRange");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.AbstractRange");goog.dom.AbstractMultiRange=function(){};goog.inherits(goog.dom.AbstractMultiRange,goog.dom.AbstractRange);
goog.dom.AbstractMultiRange.prototype.containsRange=function(otherRange,opt_allowPartial){var ranges=this.getTextRanges();var otherRanges=otherRange.getTextRanges();var fn=opt_allowPartial?goog.array.some:goog.array.every;return fn(otherRanges,function(otherRange){return goog.array.some(ranges,function(range){return range.containsRange(otherRange,opt_allowPartial)})})};
goog.dom.AbstractMultiRange.prototype.insertNode=function(node,before){if(before)goog.dom.insertSiblingBefore(node,this.getStartNode());else goog.dom.insertSiblingAfter(node,this.getEndNode());return node};goog.dom.AbstractMultiRange.prototype.surroundWithNodes=function(startNode,endNode){this.insertNode(startNode,true);this.insertNode(endNode,false)};goog.provide("goog.dom.TextRangeIterator");goog.require("goog.array");goog.require("goog.dom.NodeType");goog.require("goog.dom.RangeIterator");goog.require("goog.dom.TagName");goog.require("goog.iter.StopIteration");
goog.dom.TextRangeIterator=function(startNode,startOffset,endNode,endOffset,opt_reverse){var goNext;if(startNode){this.startNode_=startNode;this.startOffset_=startOffset;this.endNode_=endNode;this.endOffset_=endOffset;if(startNode.nodeType==goog.dom.NodeType.ELEMENT&&startNode.tagName!=goog.dom.TagName.BR){var startChildren=startNode.childNodes;var candidate=startChildren[startOffset];if(candidate){this.startNode_=candidate;this.startOffset_=0}else{if(startChildren.length)this.startNode_=goog.array.peek(startChildren);
goNext=true}}if(endNode.nodeType==goog.dom.NodeType.ELEMENT){this.endNode_=endNode.childNodes[endOffset];if(this.endNode_)this.endOffset_=0;else this.endNode_=endNode}}goog.dom.RangeIterator.call(this,opt_reverse?this.endNode_:this.startNode_,opt_reverse);if(goNext)try{this.next()}catch(e){if(e!=goog.iter.StopIteration)throw e;}};goog.inherits(goog.dom.TextRangeIterator,goog.dom.RangeIterator);goog.dom.TextRangeIterator.prototype.startNode_=null;goog.dom.TextRangeIterator.prototype.endNode_=null;
goog.dom.TextRangeIterator.prototype.startOffset_=0;goog.dom.TextRangeIterator.prototype.endOffset_=0;goog.dom.TextRangeIterator.prototype.getStartTextOffset=function(){return this.node.nodeType!=goog.dom.NodeType.TEXT?-1:this.node==this.startNode_?this.startOffset_:0};goog.dom.TextRangeIterator.prototype.getEndTextOffset=function(){return this.node.nodeType!=goog.dom.NodeType.TEXT?-1:this.node==this.endNode_?this.endOffset_:this.node.nodeValue.length};
goog.dom.TextRangeIterator.prototype.getStartNode=function(){return this.startNode_};goog.dom.TextRangeIterator.prototype.setStartNode=function(node){if(!this.isStarted())this.setPosition(node);this.startNode_=node;this.startOffset_=0};goog.dom.TextRangeIterator.prototype.getEndNode=function(){return this.endNode_};goog.dom.TextRangeIterator.prototype.setEndNode=function(node){this.endNode_=node;this.endOffset_=0};
goog.dom.TextRangeIterator.prototype.isLast=function(){return this.isStarted()&&this.node==this.endNode_&&(!this.endOffset_||!this.isStartTag())};goog.dom.TextRangeIterator.prototype.next=function(){if(this.isLast())throw goog.iter.StopIteration;return goog.dom.TextRangeIterator.superClass_.next.call(this)};goog.dom.TextRangeIterator.prototype.skipTag=function(){goog.dom.TextRangeIterator.superClass_.skipTag.apply(this);if(goog.dom.contains(this.node,this.endNode_))throw goog.iter.StopIteration;};
goog.dom.TextRangeIterator.prototype.copyFrom=function(other){this.startNode_=other.startNode_;this.endNode_=other.endNode_;this.startOffset_=other.startOffset_;this.endOffset_=other.endOffset_;this.isReversed_=other.isReversed_;goog.dom.TextRangeIterator.superClass_.copyFrom.call(this,other)};goog.dom.TextRangeIterator.prototype.clone=function(){var copy=new goog.dom.TextRangeIterator(this.startNode_,this.startOffset_,this.endNode_,this.endOffset_,this.isReversed_);copy.copyFrom(this);return copy};goog.provide("goog.dom.RangeEndpoint");goog.dom.RangeEndpoint={START:1,END:0};goog.provide("goog.userAgent.jscript");goog.require("goog.string");goog.userAgent.jscript.ASSUME_NO_JSCRIPT=false;
goog.userAgent.jscript.init_=function(){var hasScriptEngine="ScriptEngine"in goog.global;goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_=hasScriptEngine&&goog.global["ScriptEngine"]()=="JScript";goog.userAgent.jscript.DETECTED_VERSION_=goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_?goog.global["ScriptEngineMajorVersion"]()+"."+goog.global["ScriptEngineMinorVersion"]()+"."+goog.global["ScriptEngineBuildVersion"]():"0"};if(!goog.userAgent.jscript.ASSUME_NO_JSCRIPT)goog.userAgent.jscript.init_();
goog.userAgent.jscript.HAS_JSCRIPT=goog.userAgent.jscript.ASSUME_NO_JSCRIPT?false:goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_;goog.userAgent.jscript.VERSION=goog.userAgent.jscript.ASSUME_NO_JSCRIPT?"0":goog.userAgent.jscript.DETECTED_VERSION_;goog.userAgent.jscript.isVersion=function(version){return goog.string.compareVersions(goog.userAgent.jscript.VERSION,version)>=0};goog.provide("goog.string.StringBuffer");goog.require("goog.userAgent.jscript");goog.string.StringBuffer=function(opt_a1,var_args){this.buffer_=goog.userAgent.jscript.HAS_JSCRIPT?[]:"";if(opt_a1!=null)this.append.apply(this,arguments)};goog.string.StringBuffer.prototype.set=function(s){this.clear();this.append(s)};
if(goog.userAgent.jscript.HAS_JSCRIPT){goog.string.StringBuffer.prototype.bufferLength_=0;goog.string.StringBuffer.prototype.append=function(a1,opt_a2,var_args){if(opt_a2==null)this.buffer_[this.bufferLength_++]=a1;else{this.buffer_.push.apply(this.buffer_,arguments);this.bufferLength_=this.buffer_.length}return this}}else goog.string.StringBuffer.prototype.append=function(a1,opt_a2,var_args){this.buffer_+=a1;if(opt_a2!=null)for(var i=1;i<arguments.length;i++)this.buffer_+=arguments[i];return this};
goog.string.StringBuffer.prototype.clear=function(){if(goog.userAgent.jscript.HAS_JSCRIPT){this.buffer_.length=0;this.bufferLength_=0}else this.buffer_=""};goog.string.StringBuffer.prototype.getLength=function(){return this.toString().length};goog.string.StringBuffer.prototype.toString=function(){if(goog.userAgent.jscript.HAS_JSCRIPT){var str=this.buffer_.join("");this.clear();if(str)this.append(str);return str}else return this.buffer_};goog.provide("goog.dom.browserrange.AbstractRange");goog.require("goog.dom");goog.require("goog.dom.NodeType");goog.require("goog.dom.RangeEndpoint");goog.require("goog.dom.TagName");goog.require("goog.dom.TextRangeIterator");goog.require("goog.iter");goog.require("goog.string");goog.require("goog.string.StringBuffer");goog.require("goog.userAgent");goog.dom.browserrange.AbstractRange=function(){};goog.dom.browserrange.AbstractRange.prototype.clone=goog.abstractMethod;
goog.dom.browserrange.AbstractRange.prototype.getBrowserRange=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.getContainer=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.getStartNode=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.getStartOffset=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.getEndNode=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.getEndOffset=goog.abstractMethod;
goog.dom.browserrange.AbstractRange.prototype.compareBrowserRangeEndpoints=goog.abstractMethod;
goog.dom.browserrange.AbstractRange.prototype.containsRange=function(abstractRange,opt_allowPartial){var checkPartial=opt_allowPartial&&!abstractRange.isCollapsed();var range=abstractRange.getBrowserRange();var start=goog.dom.RangeEndpoint.START,end=goog.dom.RangeEndpoint.END;try{if(checkPartial)return this.compareBrowserRangeEndpoints(range,end,start)>=0&&this.compareBrowserRangeEndpoints(range,start,end)<=0;else return this.compareBrowserRangeEndpoints(range,end,end)>=0&&this.compareBrowserRangeEndpoints(range,
start,start)<=0}catch(e){if(!goog.userAgent.IE)throw e;return false}};goog.dom.browserrange.AbstractRange.prototype.containsNode=function(node,opt_allowPartial){return this.containsRange(goog.dom.browserrange.createRangeFromNodeContents(node),opt_allowPartial)};goog.dom.browserrange.AbstractRange.prototype.isCollapsed=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.getText=goog.abstractMethod;
goog.dom.browserrange.AbstractRange.prototype.getHtmlFragment=function(){var output=new goog.string.StringBuffer;goog.iter.forEach(this,function(node,ignore,it){if(node.nodeType==goog.dom.NodeType.TEXT)output.append(goog.string.htmlEscape(node.nodeValue.substring(it.getStartTextOffset(),it.getEndTextOffset())));else if(node.nodeType==goog.dom.NodeType.ELEMENT)if(it.isEndTag()){if(goog.dom.canHaveChildren(node))output.append("</"+node.tagName+">")}else{var shallow=node.cloneNode(false);var html=goog.dom.getOuterHtml(shallow);
if(goog.userAgent.IE&&node.tagName==goog.dom.TagName.LI)output.append(html);else{var index=html.lastIndexOf("<");output.append(index?html.substr(0,index):html)}}},this);return output.toString()};goog.dom.browserrange.AbstractRange.prototype.getValidHtml=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.__iterator__=function(opt_keys){return new goog.dom.TextRangeIterator(this.getStartNode(),this.getStartOffset(),this.getEndNode(),this.getEndOffset())};
goog.dom.browserrange.AbstractRange.prototype.select=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.removeContents=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.surroundContents=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.insertNode=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.surroundWithNodes=goog.abstractMethod;goog.dom.browserrange.AbstractRange.prototype.collapse=goog.abstractMethod;goog.provide("goog.dom.browserrange.W3cRange");goog.require("goog.dom");goog.require("goog.dom.NodeType");goog.require("goog.dom.RangeEndpoint");goog.require("goog.dom.browserrange.AbstractRange");goog.require("goog.string");goog.dom.browserrange.W3cRange=function(range){this.range_=range};goog.inherits(goog.dom.browserrange.W3cRange,goog.dom.browserrange.AbstractRange);
goog.dom.browserrange.W3cRange.getBrowserRangeForNode=function(node){var nodeRange=goog.dom.getOwnerDocument(node).createRange();if(node.nodeType==goog.dom.NodeType.TEXT){nodeRange.setStart(node,0);nodeRange.setEnd(node,node.length)}else if(!goog.dom.browserrange.canContainRangeEndpoint(node)){var rangeParent=node.parentNode;var rangeStartOffset=goog.array.indexOf(rangeParent.childNodes,node);nodeRange.setStart(rangeParent,rangeStartOffset);nodeRange.setEnd(rangeParent,rangeStartOffset+1)}else{var tempNode,
leaf=node;while((tempNode=leaf.firstChild)&&goog.dom.browserrange.canContainRangeEndpoint(tempNode))leaf=tempNode;nodeRange.setStart(leaf,0);leaf=node;while((tempNode=leaf.lastChild)&&goog.dom.browserrange.canContainRangeEndpoint(tempNode))leaf=tempNode;nodeRange.setEnd(leaf,leaf.nodeType==goog.dom.NodeType.ELEMENT?leaf.childNodes.length:leaf.length)}return nodeRange};
goog.dom.browserrange.W3cRange.getBrowserRangeForNodes=function(startNode,startOffset,endNode,endOffset){var nodeRange=goog.dom.getOwnerDocument(startNode).createRange();nodeRange.setStart(startNode,startOffset);nodeRange.setEnd(endNode,endOffset);return nodeRange};goog.dom.browserrange.W3cRange.createFromNodeContents=function(node){return new goog.dom.browserrange.W3cRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNode(node))};
goog.dom.browserrange.W3cRange.createFromNodes=function(startNode,startOffset,endNode,endOffset){return new goog.dom.browserrange.W3cRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNodes(startNode,startOffset,endNode,endOffset))};goog.dom.browserrange.W3cRange.prototype.clone=function(){return new this.constructor(this.range_.cloneRange())};goog.dom.browserrange.W3cRange.prototype.getBrowserRange=function(){return this.range_};goog.dom.browserrange.W3cRange.prototype.getContainer=function(){return this.range_.commonAncestorContainer};
goog.dom.browserrange.W3cRange.prototype.getStartNode=function(){return this.range_.startContainer};goog.dom.browserrange.W3cRange.prototype.getStartOffset=function(){return this.range_.startOffset};goog.dom.browserrange.W3cRange.prototype.getEndNode=function(){return this.range_.endContainer};goog.dom.browserrange.W3cRange.prototype.getEndOffset=function(){return this.range_.endOffset};
goog.dom.browserrange.W3cRange.prototype.compareBrowserRangeEndpoints=function(range,thisEndpoint,otherEndpoint){return this.range_.compareBoundaryPoints(otherEndpoint==goog.dom.RangeEndpoint.START?thisEndpoint==goog.dom.RangeEndpoint.START?goog.global["Range"].START_TO_START:goog.global["Range"].START_TO_END:thisEndpoint==goog.dom.RangeEndpoint.START?goog.global["Range"].END_TO_START:goog.global["Range"].END_TO_END,range)};goog.dom.browserrange.W3cRange.prototype.isCollapsed=function(){return this.range_.collapsed};
goog.dom.browserrange.W3cRange.prototype.getText=function(){return this.range_.toString()};
goog.dom.browserrange.W3cRange.prototype.getValidHtml=function(){var div=goog.dom.getDomHelper(this.range_.startContainer).createDom("div");div.appendChild(this.range_.cloneContents());var result=div.innerHTML;if(goog.string.startsWith(result,"<")||!this.isCollapsed()&&!goog.string.contains(result,"<"))return result;var container=this.getContainer();container=container.nodeType==goog.dom.NodeType.ELEMENT?container:container.parentNode;var html=goog.dom.getOuterHtml(container.cloneNode(false));return html.replace(">",
">"+result)};goog.dom.browserrange.W3cRange.prototype.select=function(reverse){var win=goog.dom.getWindow(goog.dom.getOwnerDocument(this.getStartNode()));this.selectInternal(win.getSelection(),reverse)};goog.dom.browserrange.W3cRange.prototype.selectInternal=function(selection,reverse){selection.removeAllRanges();selection.addRange(this.range_)};
goog.dom.browserrange.W3cRange.prototype.removeContents=function(){var range=this.range_;range.extractContents();if(range.startContainer.hasChildNodes()){var rangeStartContainer=range.startContainer.childNodes[range.startOffset];if(rangeStartContainer){var rangePrevious=rangeStartContainer.previousSibling;if(goog.dom.getRawTextContent(rangeStartContainer)=="")goog.dom.removeNode(rangeStartContainer);if(rangePrevious&&goog.dom.getRawTextContent(rangePrevious)=="")goog.dom.removeNode(rangePrevious)}}};
goog.dom.browserrange.W3cRange.prototype.surroundContents=function(element){this.range_.surroundContents(element);return element};goog.dom.browserrange.W3cRange.prototype.insertNode=function(node,before){var range=this.range_.cloneRange();range.collapse(before);range.insertNode(node);range.detach();return node};
goog.dom.browserrange.W3cRange.prototype.surroundWithNodes=function(startNode,endNode){var win=goog.dom.getWindow(goog.dom.getOwnerDocument(this.getStartNode()));var selectionRange=goog.dom.Range.createFromWindow(win);if(selectionRange){var sNode=selectionRange.getStartNode();var eNode=selectionRange.getEndNode();var sOffset=selectionRange.getStartOffset();var eOffset=selectionRange.getEndOffset()}var clone1=this.range_.cloneRange();var clone2=this.range_.cloneRange();clone1.collapse(false);clone2.collapse(true);
clone1.insertNode(endNode);clone2.insertNode(startNode);clone1.detach();clone2.detach();if(selectionRange){var isInsertedNode=function(n){return n==startNode||n==endNode};if(sNode.nodeType==goog.dom.NodeType.TEXT)while(sOffset>sNode.length){sOffset-=sNode.length;do sNode=sNode.nextSibling;while(isInsertedNode(sNode))}if(eNode.nodeType==goog.dom.NodeType.TEXT)while(eOffset>eNode.length){eOffset-=eNode.length;do eNode=eNode.nextSibling;while(isInsertedNode(eNode))}goog.dom.Range.createFromNodes(sNode,
sOffset,eNode,eOffset).select()}};goog.dom.browserrange.W3cRange.prototype.collapse=function(toStart){this.range_.collapse(toStart)};goog.provide("goog.dom.browserrange.GeckoRange");goog.require("goog.dom.browserrange.W3cRange");goog.dom.browserrange.GeckoRange=function(range){goog.dom.browserrange.W3cRange.call(this,range)};goog.inherits(goog.dom.browserrange.GeckoRange,goog.dom.browserrange.W3cRange);goog.dom.browserrange.GeckoRange.createFromNodeContents=function(node){return new goog.dom.browserrange.GeckoRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNode(node))};
goog.dom.browserrange.GeckoRange.createFromNodes=function(startNode,startOffset,endNode,endOffset){return new goog.dom.browserrange.GeckoRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNodes(startNode,startOffset,endNode,endOffset))};
goog.dom.browserrange.GeckoRange.prototype.selectInternal=function(selection,reversed){var anchorNode=reversed?this.getEndNode():this.getStartNode();var anchorOffset=reversed?this.getEndOffset():this.getStartOffset();var focusNode=reversed?this.getStartNode():this.getEndNode();var focusOffset=reversed?this.getStartOffset():this.getEndOffset();selection.collapse(anchorNode,anchorOffset);if(anchorNode!=focusNode||anchorOffset!=focusOffset)selection.extend(focusNode,focusOffset)};goog.provide("goog.dom.browserrange.IeRange");goog.require("goog.array");goog.require("goog.debug.Logger");goog.require("goog.dom");goog.require("goog.dom.NodeIterator");goog.require("goog.dom.NodeType");goog.require("goog.dom.RangeEndpoint");goog.require("goog.dom.TagName");goog.require("goog.dom.browserrange.AbstractRange");goog.require("goog.iter");goog.require("goog.iter.StopIteration");goog.require("goog.string");goog.dom.browserrange.IeRange=function(range,doc){this.range_=range;this.doc_=doc};
goog.inherits(goog.dom.browserrange.IeRange,goog.dom.browserrange.AbstractRange);goog.dom.browserrange.IeRange.logger_=goog.debug.Logger.getLogger("goog.dom.browserrange.IeRange");
goog.dom.browserrange.IeRange.getBrowserRangeForNode_=function(node){var nodeRange=goog.dom.getOwnerDocument(node).body.createTextRange();if(node.nodeType==goog.dom.NodeType.ELEMENT){nodeRange.moveToElementText(node);if(goog.dom.browserrange.canContainRangeEndpoint(node)&&!node.childNodes.length)nodeRange.collapse(false)}else{var offset=0;var sibling=node;while(sibling=sibling.previousSibling){var nodeType=sibling.nodeType;if(nodeType==goog.dom.NodeType.TEXT)offset+=sibling.length;else if(nodeType==
goog.dom.NodeType.ELEMENT){nodeRange.moveToElementText(sibling);break}}if(!sibling)nodeRange.moveToElementText(node.parentNode);nodeRange.collapse(!sibling);if(offset)nodeRange.move("character",offset);nodeRange.moveEnd("character",node.length)}return nodeRange};
goog.dom.browserrange.IeRange.getBrowserRangeForNodes_=function(startNode,startOffset,endNode,endOffset){var child,collapse=false;if(startNode.nodeType==goog.dom.NodeType.ELEMENT){if(startOffset>startNode.childNodes.length)goog.dom.browserrange.IeRange.logger_.severe("Cannot have startOffset > startNode child count");child=startNode.childNodes[startOffset];collapse=!child;startNode=child||startNode.lastChild||startNode;startOffset=0}var leftRange=goog.dom.browserrange.IeRange.getBrowserRangeForNode_(startNode);
if(startOffset)leftRange.move("character",startOffset);if(startNode==endNode&&startOffset==endOffset){leftRange.collapse(true);return leftRange}if(collapse)leftRange.collapse(false);collapse=false;if(endNode.nodeType==goog.dom.NodeType.ELEMENT){if(endOffset>endNode.childNodes.length)goog.dom.browserrange.IeRange.logger_.severe("Cannot have endOffset > endNode child count");child=endNode.childNodes[endOffset];endNode=child||endNode.lastChild||endNode;endOffset=0;collapse=!child}var rightRange=goog.dom.browserrange.IeRange.getBrowserRangeForNode_(endNode);
rightRange.collapse(!collapse);if(endOffset)rightRange.moveEnd("character",endOffset);leftRange.setEndPoint("EndToEnd",rightRange);return leftRange};
goog.dom.browserrange.IeRange.createFromNodeContents=function(node){var range=new goog.dom.browserrange.IeRange(goog.dom.browserrange.IeRange.getBrowserRangeForNode_(node),goog.dom.getOwnerDocument(node));if(!goog.dom.browserrange.canContainRangeEndpoint(node)){range.startNode_=range.endNode_=range.parentNode_=node.parentNode;range.startOffset_=goog.array.indexOf(range.parentNode_.childNodes,node);range.endOffset_=range.startOffset_+1}else{var tempNode,leaf=node;while((tempNode=leaf.firstChild)&&
goog.dom.browserrange.canContainRangeEndpoint(tempNode))leaf=tempNode;range.startNode_=leaf;range.startOffset_=0;leaf=node;while((tempNode=leaf.lastChild)&&goog.dom.browserrange.canContainRangeEndpoint(tempNode))leaf=tempNode;range.endNode_=leaf;range.endOffset_=leaf.nodeType==goog.dom.NodeType.ELEMENT?leaf.childNodes.length:leaf.length;range.parentNode_=node}return range};
goog.dom.browserrange.IeRange.createFromNodes=function(startNode,startOffset,endNode,endOffset){var range=new goog.dom.browserrange.IeRange(goog.dom.browserrange.IeRange.getBrowserRangeForNodes_(startNode,startOffset,endNode,endOffset),goog.dom.getOwnerDocument(startNode));range.startNode_=startNode;range.startOffset_=startOffset;range.endNode_=endNode;range.endOffset_=endOffset;return range};goog.dom.browserrange.IeRange.prototype.parentNode_=null;
goog.dom.browserrange.IeRange.prototype.startNode_=null;goog.dom.browserrange.IeRange.prototype.endNode_=null;goog.dom.browserrange.IeRange.prototype.startOffset_=-1;goog.dom.browserrange.IeRange.prototype.endOffset_=-1;goog.dom.browserrange.IeRange.prototype.clone=function(){var range=new goog.dom.browserrange.IeRange(this.range_.duplicate(),this.doc_);range.parentNode_=this.parentNode_;range.startNode_=this.startNode_;range.endNode_=this.endNode_;return range};
goog.dom.browserrange.IeRange.prototype.getBrowserRange=function(){return this.range_};goog.dom.browserrange.IeRange.prototype.clearCachedValues_=function(){this.parentNode_=this.startNode_=this.endNode_=null;this.startOffset_=this.endOffset_=-1};
goog.dom.browserrange.IeRange.prototype.getContainer=function(){if(!this.parentNode_){var selectText=this.range_.text;var range=this.range_.duplicate();var rightTrimmedSelectText=selectText.replace(/ +$/,"");var numSpacesAtEnd=selectText.length-rightTrimmedSelectText.length;if(numSpacesAtEnd)range.moveEnd("character",-numSpacesAtEnd);var parent=range.parentElement();var htmlText=range.htmlText;var htmlTextLen=goog.string.stripNewlines(htmlText).length;if(this.isCollapsed()&&htmlTextLen>0)return this.parentNode_=
parent;while(htmlTextLen>goog.string.stripNewlines(parent.outerHTML).length)parent=parent.parentNode;while(parent.childNodes.length==1&&parent.innerText==goog.dom.browserrange.IeRange.getNodeText_(parent.firstChild)){if(!goog.dom.browserrange.canContainRangeEndpoint(parent.firstChild))break;parent=parent.firstChild}if(selectText.length==0)parent=this.findDeepestContainer_(parent);this.parentNode_=parent}return this.parentNode_};
goog.dom.browserrange.IeRange.prototype.findDeepestContainer_=function(node){var childNodes=node.childNodes;for(var i=0,len=childNodes.length;i<len;i++){var child=childNodes[i];if(goog.dom.browserrange.canContainRangeEndpoint(child)){var childRange=goog.dom.browserrange.IeRange.getBrowserRangeForNode_(child);var start=goog.dom.RangeEndpoint.START;var end=goog.dom.RangeEndpoint.END;var isChildRangeErratic=childRange.htmlText!=child.outerHTML;var isNativeInRangeErratic=this.isCollapsed()&&isChildRangeErratic;
var inChildRange=isNativeInRangeErratic?this.compareBrowserRangeEndpoints(childRange,start,start)>=0&&this.compareBrowserRangeEndpoints(childRange,start,end)<=0:this.range_.inRange(childRange);if(inChildRange)return this.findDeepestContainer_(child)}}return node};goog.dom.browserrange.IeRange.prototype.getStartNode=function(){if(!this.startNode_){this.startNode_=this.getEndpointNode_(goog.dom.RangeEndpoint.START);if(this.isCollapsed())this.endNode_=this.startNode_}return this.startNode_};
goog.dom.browserrange.IeRange.prototype.getStartOffset=function(){if(this.startOffset_<0){this.startOffset_=this.getOffset_(goog.dom.RangeEndpoint.START);if(this.isCollapsed())this.endOffset_=this.startOffset_}return this.startOffset_};goog.dom.browserrange.IeRange.prototype.getEndNode=function(){if(this.isCollapsed())return this.getStartNode();if(!this.endNode_)this.endNode_=this.getEndpointNode_(goog.dom.RangeEndpoint.END);return this.endNode_};
goog.dom.browserrange.IeRange.prototype.getEndOffset=function(){if(this.isCollapsed())return this.getStartOffset();if(this.endOffset_<0){this.endOffset_=this.getOffset_(goog.dom.RangeEndpoint.END);if(this.isCollapsed())this.startOffset_=this.endOffset_}return this.endOffset_};
goog.dom.browserrange.IeRange.prototype.compareBrowserRangeEndpoints=function(range,thisEndpoint,otherEndpoint){return this.range_.compareEndPoints((thisEndpoint==goog.dom.RangeEndpoint.START?"Start":"End")+"To"+(otherEndpoint==goog.dom.RangeEndpoint.START?"Start":"End"),range)};
goog.dom.browserrange.IeRange.prototype.getEndpointNode_=function(endpoint,opt_node){var node=opt_node||this.getContainer();if(!node||!node.firstChild)return node;var start=goog.dom.RangeEndpoint.START,end=goog.dom.RangeEndpoint.END;var isStartEndpoint=endpoint==start;for(var j=0,length=node.childNodes.length;j<length;j++){var i=isStartEndpoint?j:length-j-1;var child=node.childNodes[i];var childRange;try{childRange=goog.dom.browserrange.createRangeFromNodeContents(child)}catch(e){continue}var ieRange=
childRange.getBrowserRange();if(this.isCollapsed())if(!goog.dom.browserrange.canContainRangeEndpoint(child)){if(this.compareBrowserRangeEndpoints(ieRange,start,start)==0){this.startOffset_=this.endOffset_=i;return node}}else{if(childRange.containsRange(this))return this.getEndpointNode_(endpoint,child)}else if(this.containsRange(childRange)){if(!goog.dom.browserrange.canContainRangeEndpoint(child)){if(isStartEndpoint)this.startOffset_=i;else this.endOffset_=i+1;return node}return this.getEndpointNode_(endpoint,
child)}else if(this.compareBrowserRangeEndpoints(ieRange,start,end)<0&&this.compareBrowserRangeEndpoints(ieRange,end,start)>0)return this.getEndpointNode_(endpoint,child)}return node};goog.dom.browserrange.IeRange.prototype.compareNodeEndpoints_=function(node,thisEndpoint,otherEndpoint){return this.range_.compareEndPoints((thisEndpoint==goog.dom.RangeEndpoint.START?"Start":"End")+"To"+(otherEndpoint==goog.dom.RangeEndpoint.START?"Start":"End"),goog.dom.browserrange.createRangeFromNodeContents(node).getBrowserRange())};
goog.dom.browserrange.IeRange.prototype.getOffset_=function(endpoint,opt_container){var isStartEndpoint=endpoint==goog.dom.RangeEndpoint.START;var container=opt_container||(isStartEndpoint?this.getStartNode():this.getEndNode());if(container.nodeType==goog.dom.NodeType.ELEMENT){var children=container.childNodes;var len=children.length;var edge=isStartEndpoint?0:len-1;var sign=isStartEndpoint?1:-1;for(var i=edge;i>=0&&i<len;i+=sign){var child=children[i];if(goog.dom.browserrange.canContainRangeEndpoint(child))continue;
var endPointCompare=this.compareNodeEndpoints_(child,endpoint,endpoint);if(endPointCompare==0)return isStartEndpoint?i:i+1}return i==-1?0:i}else{var range=this.range_.duplicate();var nodeRange=goog.dom.browserrange.IeRange.getBrowserRangeForNode_(container);range.setEndPoint(isStartEndpoint?"EndToEnd":"StartToStart",nodeRange);var rangeLength=range.text.length;return isStartEndpoint?container.length-rangeLength:rangeLength}};
goog.dom.browserrange.IeRange.getNodeText_=function(node){return node.nodeType==goog.dom.NodeType.TEXT?node.nodeValue:node.innerText};goog.dom.browserrange.IeRange.prototype.isRangeInDocument=function(){var range=this.doc_.body.createTextRange();range.moveToElementText(this.doc_.body);return this.containsRange(new goog.dom.browserrange.IeRange(range,this.doc_),true)};goog.dom.browserrange.IeRange.prototype.isCollapsed=function(){return this.range_.compareEndPoints("StartToEnd",this.range_)==0};
goog.dom.browserrange.IeRange.prototype.getText=function(){return this.range_.text};goog.dom.browserrange.IeRange.prototype.getValidHtml=function(){return this.range_.htmlText};goog.dom.browserrange.IeRange.prototype.select=function(opt_reverse){this.range_.select()};
goog.dom.browserrange.IeRange.prototype.removeContents=function(){if(!this.isCollapsed()&&this.range_.htmlText){var startNode=this.getStartNode();var endNode=this.getEndNode();var oldText=this.range_.text;var clone=this.range_.duplicate();clone.moveStart("character",1);clone.moveStart("character",-1);if(clone.text==oldText)this.range_=clone;this.range_.text="";this.clearCachedValues_();var newStartNode=this.getStartNode();var newStartOffset=this.getStartOffset();try{var sibling=startNode.nextSibling;
if(startNode==endNode&&startNode.parentNode&&startNode.nodeType==goog.dom.NodeType.TEXT&&sibling&&sibling.nodeType==goog.dom.NodeType.TEXT){startNode.nodeValue+=sibling.nodeValue;goog.dom.removeNode(sibling);this.range_=goog.dom.browserrange.IeRange.getBrowserRangeForNode_(newStartNode);this.range_.move("character",newStartOffset);this.clearCachedValues_()}}catch(e){}}};goog.dom.browserrange.IeRange.getDomHelper_=function(range){return goog.dom.getDomHelper(range.parentElement())};
goog.dom.browserrange.IeRange.pasteElement_=function(range,element,opt_domHelper){opt_domHelper=opt_domHelper||goog.dom.browserrange.IeRange.getDomHelper_(range);var id;var originalId=id=element.id;if(!id)id=element.id=goog.string.createUniqueString();range.pasteHTML(element.outerHTML);element=opt_domHelper.getElement(id);if(element)if(!originalId)element.removeAttribute("id");return element};
goog.dom.browserrange.IeRange.prototype.surroundContents=function(element){goog.dom.removeNode(element);element.innerHTML=this.range_.htmlText;element=goog.dom.browserrange.IeRange.pasteElement_(this.range_,element);if(element)this.range_.moveToElementText(element);this.clearCachedValues_();return element};
goog.dom.browserrange.IeRange.insertNode_=function(clone,node,before,opt_domHelper){opt_domHelper=opt_domHelper||goog.dom.browserrange.IeRange.getDomHelper_(clone);var isNonElement;if(node.nodeType!=goog.dom.NodeType.ELEMENT){isNonElement=true;node=opt_domHelper.createDom(goog.dom.TagName.DIV,null,node)}clone.collapse(before);node=goog.dom.browserrange.IeRange.pasteElement_(clone,node,opt_domHelper);if(isNonElement){var newNonElement=node.firstChild;opt_domHelper.flattenElement(node);node=newNonElement}return node};
goog.dom.browserrange.IeRange.prototype.insertNode=function(node,before){var output=goog.dom.browserrange.IeRange.insertNode_(this.range_.duplicate(),node,before);this.clearCachedValues_();return output};goog.dom.browserrange.IeRange.prototype.surroundWithNodes=function(startNode,endNode){var clone1=this.range_.duplicate();var clone2=this.range_.duplicate();goog.dom.browserrange.IeRange.insertNode_(clone1,startNode,true);goog.dom.browserrange.IeRange.insertNode_(clone2,endNode,false);this.clearCachedValues_()};
goog.dom.browserrange.IeRange.prototype.collapse=function(toStart){this.range_.collapse(toStart);if(toStart){this.endNode_=this.startNode_;this.endOffset_=this.startOffset_}else{this.startNode_=this.endNode_;this.startOffset_=this.endOffset_}};goog.provide("goog.dom.browserrange.OperaRange");goog.require("goog.dom.browserrange.W3cRange");goog.dom.browserrange.OperaRange=function(range){goog.dom.browserrange.W3cRange.call(this,range)};goog.inherits(goog.dom.browserrange.OperaRange,goog.dom.browserrange.W3cRange);goog.dom.browserrange.OperaRange.createFromNodeContents=function(node){return new goog.dom.browserrange.OperaRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNode(node))};
goog.dom.browserrange.OperaRange.createFromNodes=function(startNode,startOffset,endNode,endOffset){return new goog.dom.browserrange.OperaRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNodes(startNode,startOffset,endNode,endOffset))};
goog.dom.browserrange.OperaRange.prototype.selectInternal=function(selection,reversed){selection.collapse(this.getStartNode(),this.getStartOffset());if(this.getEndNode()!=this.getStartNode()||this.getEndOffset()!=this.getStartOffset())selection.extend(this.getEndNode(),this.getEndOffset());if(selection.rangeCount==0)selection.addRange(this.range_)};goog.provide("goog.dom.browserrange.WebKitRange");goog.require("goog.dom.RangeEndpoint");goog.require("goog.dom.browserrange.W3cRange");goog.require("goog.userAgent");goog.dom.browserrange.WebKitRange=function(range){goog.dom.browserrange.W3cRange.call(this,range)};goog.inherits(goog.dom.browserrange.WebKitRange,goog.dom.browserrange.W3cRange);goog.dom.browserrange.WebKitRange.createFromNodeContents=function(node){return new goog.dom.browserrange.WebKitRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNode(node))};
goog.dom.browserrange.WebKitRange.createFromNodes=function(startNode,startOffset,endNode,endOffset){return new goog.dom.browserrange.WebKitRange(goog.dom.browserrange.W3cRange.getBrowserRangeForNodes(startNode,startOffset,endNode,endOffset))};
goog.dom.browserrange.WebKitRange.prototype.compareBrowserRangeEndpoints=function(range,thisEndpoint,otherEndpoint){if(goog.userAgent.isVersion("528"))return goog.dom.browserrange.WebKitRange.superClass_.compareBrowserRangeEndpoints.call(this,range,thisEndpoint,otherEndpoint);return this.range_.compareBoundaryPoints(otherEndpoint==goog.dom.RangeEndpoint.START?thisEndpoint==goog.dom.RangeEndpoint.START?goog.global["Range"].START_TO_START:goog.global["Range"].END_TO_START:thisEndpoint==goog.dom.RangeEndpoint.START?
goog.global["Range"].START_TO_END:goog.global["Range"].END_TO_END,range)};goog.dom.browserrange.WebKitRange.prototype.selectInternal=function(selection,reversed){selection.removeAllRanges();if(reversed)selection.setBaseAndExtent(this.getEndNode(),this.getEndOffset(),this.getStartNode(),this.getStartOffset());else selection.setBaseAndExtent(this.getStartNode(),this.getStartOffset(),this.getEndNode(),this.getEndOffset())};goog.provide("goog.dom.browserrange");goog.provide("goog.dom.browserrange.Error");goog.require("goog.dom");goog.require("goog.dom.browserrange.GeckoRange");goog.require("goog.dom.browserrange.IeRange");goog.require("goog.dom.browserrange.OperaRange");goog.require("goog.dom.browserrange.W3cRange");goog.require("goog.dom.browserrange.WebKitRange");goog.require("goog.userAgent");goog.dom.browserrange.Error={NOT_IMPLEMENTED:"Not Implemented"};
goog.dom.browserrange.createRange=function(range){if(goog.userAgent.IE&&!goog.userAgent.isDocumentMode(9))return new goog.dom.browserrange.IeRange(range,goog.dom.getOwnerDocument(range.parentElement()));else if(goog.userAgent.WEBKIT)return new goog.dom.browserrange.WebKitRange(range);else if(goog.userAgent.GECKO)return new goog.dom.browserrange.GeckoRange(range);else if(goog.userAgent.OPERA)return new goog.dom.browserrange.OperaRange(range);else return new goog.dom.browserrange.W3cRange(range)};
goog.dom.browserrange.createRangeFromNodeContents=function(node){if(goog.userAgent.IE&&!goog.userAgent.isDocumentMode(9))return goog.dom.browserrange.IeRange.createFromNodeContents(node);else if(goog.userAgent.WEBKIT)return goog.dom.browserrange.WebKitRange.createFromNodeContents(node);else if(goog.userAgent.GECKO)return goog.dom.browserrange.GeckoRange.createFromNodeContents(node);else if(goog.userAgent.OPERA)return goog.dom.browserrange.OperaRange.createFromNodeContents(node);else return goog.dom.browserrange.W3cRange.createFromNodeContents(node)};
goog.dom.browserrange.createRangeFromNodes=function(startNode,startOffset,endNode,endOffset){if(goog.userAgent.IE&&!goog.userAgent.isDocumentMode(9))return goog.dom.browserrange.IeRange.createFromNodes(startNode,startOffset,endNode,endOffset);else if(goog.userAgent.WEBKIT)return goog.dom.browserrange.WebKitRange.createFromNodes(startNode,startOffset,endNode,endOffset);else if(goog.userAgent.GECKO)return goog.dom.browserrange.GeckoRange.createFromNodes(startNode,startOffset,endNode,endOffset);else if(goog.userAgent.OPERA)return goog.dom.browserrange.OperaRange.createFromNodes(startNode,
startOffset,endNode,endOffset);else return goog.dom.browserrange.W3cRange.createFromNodes(startNode,startOffset,endNode,endOffset)};goog.dom.browserrange.canContainRangeEndpoint=function(node){return goog.dom.canHaveChildren(node)||node.nodeType==goog.dom.NodeType.TEXT};goog.provide("goog.dom.TextRange");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.AbstractRange");goog.require("goog.dom.RangeType");goog.require("goog.dom.SavedRange");goog.require("goog.dom.TagName");goog.require("goog.dom.TextRangeIterator");goog.require("goog.dom.browserrange");goog.require("goog.string");goog.require("goog.userAgent");goog.dom.TextRange=function(){};goog.inherits(goog.dom.TextRange,goog.dom.AbstractRange);
goog.dom.TextRange.createFromBrowserRange=function(range,opt_isReversed){return goog.dom.TextRange.createFromBrowserRangeWrapper_(goog.dom.browserrange.createRange(range),opt_isReversed)};goog.dom.TextRange.createFromBrowserRangeWrapper_=function(browserRange,opt_isReversed){var range=new goog.dom.TextRange;range.browserRangeWrapper_=browserRange;range.isReversed_=!!opt_isReversed;return range};
goog.dom.TextRange.createFromNodeContents=function(node,opt_isReversed){return goog.dom.TextRange.createFromBrowserRangeWrapper_(goog.dom.browserrange.createRangeFromNodeContents(node),opt_isReversed)};
goog.dom.TextRange.createFromNodes=function(anchorNode,anchorOffset,focusNode,focusOffset){var range=new goog.dom.TextRange;range.isReversed_=goog.dom.Range.isReversed(anchorNode,anchorOffset,focusNode,focusOffset);if(anchorNode.tagName=="BR"){var parent=anchorNode.parentNode;anchorOffset=goog.array.indexOf(parent.childNodes,anchorNode);anchorNode=parent}if(focusNode.tagName=="BR"){var parent=focusNode.parentNode;focusOffset=goog.array.indexOf(parent.childNodes,focusNode);focusNode=parent}if(range.isReversed_){range.startNode_=
focusNode;range.startOffset_=focusOffset;range.endNode_=anchorNode;range.endOffset_=anchorOffset}else{range.startNode_=anchorNode;range.startOffset_=anchorOffset;range.endNode_=focusNode;range.endOffset_=focusOffset}return range};goog.dom.TextRange.prototype.browserRangeWrapper_=null;goog.dom.TextRange.prototype.startNode_=null;goog.dom.TextRange.prototype.startOffset_=null;goog.dom.TextRange.prototype.endNode_=null;goog.dom.TextRange.prototype.endOffset_=null;
goog.dom.TextRange.prototype.isReversed_=false;goog.dom.TextRange.prototype.clone=function(){var range=new goog.dom.TextRange;range.browserRangeWrapper_=this.browserRangeWrapper_;range.startNode_=this.startNode_;range.startOffset_=this.startOffset_;range.endNode_=this.endNode_;range.endOffset_=this.endOffset_;range.isReversed_=this.isReversed_;return range};goog.dom.TextRange.prototype.getType=function(){return goog.dom.RangeType.TEXT};goog.dom.TextRange.prototype.getBrowserRangeObject=function(){return this.getBrowserRangeWrapper_().getBrowserRange()};
goog.dom.TextRange.prototype.setBrowserRangeObject=function(nativeRange){if(goog.dom.AbstractRange.isNativeControlRange(nativeRange))return false;this.browserRangeWrapper_=goog.dom.browserrange.createRange(nativeRange);this.clearCachedValues_();return true};goog.dom.TextRange.prototype.clearCachedValues_=function(){this.startNode_=this.startOffset_=this.endNode_=this.endOffset_=null};goog.dom.TextRange.prototype.getTextRangeCount=function(){return 1};goog.dom.TextRange.prototype.getTextRange=function(i){return this};
goog.dom.TextRange.prototype.getBrowserRangeWrapper_=function(){return this.browserRangeWrapper_||(this.browserRangeWrapper_=goog.dom.browserrange.createRangeFromNodes(this.getStartNode(),this.getStartOffset(),this.getEndNode(),this.getEndOffset()))};goog.dom.TextRange.prototype.getContainer=function(){return this.getBrowserRangeWrapper_().getContainer()};goog.dom.TextRange.prototype.getStartNode=function(){return this.startNode_||(this.startNode_=this.getBrowserRangeWrapper_().getStartNode())};
goog.dom.TextRange.prototype.getStartOffset=function(){return this.startOffset_!=null?this.startOffset_:this.startOffset_=this.getBrowserRangeWrapper_().getStartOffset()};goog.dom.TextRange.prototype.getEndNode=function(){return this.endNode_||(this.endNode_=this.getBrowserRangeWrapper_().getEndNode())};goog.dom.TextRange.prototype.getEndOffset=function(){return this.endOffset_!=null?this.endOffset_:this.endOffset_=this.getBrowserRangeWrapper_().getEndOffset()};
goog.dom.TextRange.prototype.moveToNodes=function(startNode,startOffset,endNode,endOffset,isReversed){this.startNode_=startNode;this.startOffset_=startOffset;this.endNode_=endNode;this.endOffset_=endOffset;this.isReversed_=isReversed;this.browserRangeWrapper_=null};goog.dom.TextRange.prototype.isReversed=function(){return this.isReversed_};
goog.dom.TextRange.prototype.containsRange=function(otherRange,opt_allowPartial){var otherRangeType=otherRange.getType();if(otherRangeType==goog.dom.RangeType.TEXT)return this.getBrowserRangeWrapper_().containsRange(otherRange.getBrowserRangeWrapper_(),opt_allowPartial);else if(otherRangeType==goog.dom.RangeType.CONTROL){var elements=otherRange.getElements();var fn=opt_allowPartial?goog.array.some:goog.array.every;return fn(elements,function(el){return this.containsNode(el,opt_allowPartial)},this)}return false};
goog.dom.TextRange.isAttachedNode=function(node){if(goog.userAgent.IE&&!goog.userAgent.isDocumentMode(9)){var returnValue=false;try{returnValue=node.parentNode}catch(e){}return!!returnValue}else return goog.dom.contains(node.ownerDocument.body,node)};
goog.dom.TextRange.prototype.isRangeInDocument=function(){return(!this.startNode_||goog.dom.TextRange.isAttachedNode(this.startNode_))&&(!this.endNode_||goog.dom.TextRange.isAttachedNode(this.endNode_))&&(!(goog.userAgent.IE&&!goog.userAgent.isDocumentMode(9))||this.getBrowserRangeWrapper_().isRangeInDocument())};goog.dom.TextRange.prototype.isCollapsed=function(){return this.getBrowserRangeWrapper_().isCollapsed()};goog.dom.TextRange.prototype.getText=function(){return this.getBrowserRangeWrapper_().getText()};
goog.dom.TextRange.prototype.getHtmlFragment=function(){return this.getBrowserRangeWrapper_().getHtmlFragment()};goog.dom.TextRange.prototype.getValidHtml=function(){return this.getBrowserRangeWrapper_().getValidHtml()};
goog.dom.TextRange.prototype.getPastableHtml=function(){var html=this.getValidHtml();if(html.match(/^\s*<td\b/i))html="<table><tbody><tr>"+html+"</tr></tbody></table>";else if(html.match(/^\s*<tr\b/i))html="<table><tbody>"+html+"</tbody></table>";else if(html.match(/^\s*<tbody\b/i))html="<table>"+html+"</table>";else if(html.match(/^\s*<li\b/i)){var container=this.getContainer();var tagType=goog.dom.TagName.UL;while(container){if(container.tagName==goog.dom.TagName.OL){tagType=goog.dom.TagName.OL;
break}else if(container.tagName==goog.dom.TagName.UL)break;container=container.parentNode}html=goog.string.buildString("<",tagType,">",html,"</",tagType,">")}return html};goog.dom.TextRange.prototype.__iterator__=function(opt_keys){return new goog.dom.TextRangeIterator(this.getStartNode(),this.getStartOffset(),this.getEndNode(),this.getEndOffset())};goog.dom.TextRange.prototype.select=function(){this.getBrowserRangeWrapper_().select(this.isReversed_)};
goog.dom.TextRange.prototype.removeContents=function(){this.getBrowserRangeWrapper_().removeContents();this.clearCachedValues_()};goog.dom.TextRange.prototype.surroundContents=function(element){var output=this.getBrowserRangeWrapper_().surroundContents(element);this.clearCachedValues_();return output};goog.dom.TextRange.prototype.insertNode=function(node,before){var output=this.getBrowserRangeWrapper_().insertNode(node,before);this.clearCachedValues_();return output};
goog.dom.TextRange.prototype.surroundWithNodes=function(startNode,endNode){this.getBrowserRangeWrapper_().surroundWithNodes(startNode,endNode);this.clearCachedValues_()};goog.dom.TextRange.prototype.saveUsingDom=function(){return new goog.dom.DomSavedTextRange_(this)};
goog.dom.TextRange.prototype.collapse=function(toAnchor){var toStart=this.isReversed()?!toAnchor:toAnchor;if(this.browserRangeWrapper_)this.browserRangeWrapper_.collapse(toStart);if(toStart){this.endNode_=this.startNode_;this.endOffset_=this.startOffset_}else{this.startNode_=this.endNode_;this.startOffset_=this.endOffset_}this.isReversed_=false};
goog.dom.DomSavedTextRange_=function(range){this.anchorNode_=range.getAnchorNode();this.anchorOffset_=range.getAnchorOffset();this.focusNode_=range.getFocusNode();this.focusOffset_=range.getFocusOffset()};goog.inherits(goog.dom.DomSavedTextRange_,goog.dom.SavedRange);goog.dom.DomSavedTextRange_.prototype.restoreInternal=function(){return goog.dom.Range.createFromNodes(this.anchorNode_,this.anchorOffset_,this.focusNode_,this.focusOffset_)};
goog.dom.DomSavedTextRange_.prototype.disposeInternal=function(){goog.dom.DomSavedTextRange_.superClass_.disposeInternal.call(this);this.anchorNode_=null;this.focusNode_=null};goog.provide("goog.dom.ControlRange");goog.provide("goog.dom.ControlRangeIterator");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.AbstractMultiRange");goog.require("goog.dom.AbstractRange");goog.require("goog.dom.RangeIterator");goog.require("goog.dom.RangeType");goog.require("goog.dom.SavedRange");goog.require("goog.dom.TagWalkType");goog.require("goog.dom.TextRange");goog.require("goog.iter.StopIteration");goog.require("goog.userAgent");goog.dom.ControlRange=function(){};
goog.inherits(goog.dom.ControlRange,goog.dom.AbstractMultiRange);goog.dom.ControlRange.createFromBrowserRange=function(controlRange){var range=new goog.dom.ControlRange;range.range_=controlRange;return range};goog.dom.ControlRange.createFromElements=function(var_args){var range=goog.dom.getOwnerDocument(arguments[0]).body.createControlRange();for(var i=0,len=arguments.length;i<len;i++)range.addElement(arguments[i]);return goog.dom.ControlRange.createFromBrowserRange(range)};
goog.dom.ControlRange.prototype.range_=null;goog.dom.ControlRange.prototype.elements_=null;goog.dom.ControlRange.prototype.sortedElements_=null;goog.dom.ControlRange.prototype.clearCachedValues_=function(){this.elements_=null;this.sortedElements_=null};goog.dom.ControlRange.prototype.clone=function(){return goog.dom.ControlRange.createFromElements.apply(this,this.getElements())};goog.dom.ControlRange.prototype.getType=function(){return goog.dom.RangeType.CONTROL};
goog.dom.ControlRange.prototype.getBrowserRangeObject=function(){return this.range_||document.body.createControlRange()};goog.dom.ControlRange.prototype.setBrowserRangeObject=function(nativeRange){if(!goog.dom.AbstractRange.isNativeControlRange(nativeRange))return false;this.range_=nativeRange;return true};goog.dom.ControlRange.prototype.getTextRangeCount=function(){return this.range_?this.range_.length:0};goog.dom.ControlRange.prototype.getTextRange=function(i){return goog.dom.TextRange.createFromNodeContents(this.range_.item(i))};
goog.dom.ControlRange.prototype.getContainer=function(){return goog.dom.findCommonAncestor.apply(null,this.getElements())};goog.dom.ControlRange.prototype.getStartNode=function(){return this.getSortedElements()[0]};goog.dom.ControlRange.prototype.getStartOffset=function(){return 0};goog.dom.ControlRange.prototype.getEndNode=function(){var sorted=this.getSortedElements();var startsLast=goog.array.peek(sorted);return goog.array.find(sorted,function(el){return goog.dom.contains(el,startsLast)})};
goog.dom.ControlRange.prototype.getEndOffset=function(){return this.getEndNode().childNodes.length};goog.dom.ControlRange.prototype.getElements=function(){if(!this.elements_){this.elements_=[];if(this.range_)for(var i=0;i<this.range_.length;i++)this.elements_.push(this.range_.item(i))}return this.elements_};
goog.dom.ControlRange.prototype.getSortedElements=function(){if(!this.sortedElements_){this.sortedElements_=this.getElements().concat();this.sortedElements_.sort(function(a,b){return a.sourceIndex-b.sourceIndex})}return this.sortedElements_};goog.dom.ControlRange.prototype.isRangeInDocument=function(){var returnValue=false;try{returnValue=goog.array.every(this.getElements(),function(element){return goog.userAgent.IE?element.parentNode:goog.dom.contains(element.ownerDocument.body,element)})}catch(e){}return returnValue};
goog.dom.ControlRange.prototype.isCollapsed=function(){return!this.range_||!this.range_.length};goog.dom.ControlRange.prototype.getText=function(){return""};goog.dom.ControlRange.prototype.getHtmlFragment=function(){return goog.array.map(this.getSortedElements(),goog.dom.getOuterHtml).join("")};goog.dom.ControlRange.prototype.getValidHtml=function(){return this.getHtmlFragment()};goog.dom.ControlRange.prototype.getPastableHtml=goog.dom.ControlRange.prototype.getValidHtml;
goog.dom.ControlRange.prototype.__iterator__=function(opt_keys){return new goog.dom.ControlRangeIterator(this)};goog.dom.ControlRange.prototype.select=function(){if(this.range_)this.range_.select()};goog.dom.ControlRange.prototype.removeContents=function(){if(this.range_){var nodes=[];for(var i=0,len=this.range_.length;i<len;i++)nodes.push(this.range_.item(i));goog.array.forEach(nodes,goog.dom.removeNode);this.collapse(false)}};
goog.dom.ControlRange.prototype.replaceContentsWithNode=function(node){var result=this.insertNode(node,true);if(!this.isCollapsed())this.removeContents();return result};goog.dom.ControlRange.prototype.saveUsingDom=function(){return new goog.dom.DomSavedControlRange_(this)};goog.dom.ControlRange.prototype.collapse=function(toAnchor){this.range_=null;this.clearCachedValues_()};goog.dom.DomSavedControlRange_=function(range){this.elements_=range.getElements()};
goog.inherits(goog.dom.DomSavedControlRange_,goog.dom.SavedRange);goog.dom.DomSavedControlRange_.prototype.restoreInternal=function(){var doc=this.elements_.length?goog.dom.getOwnerDocument(this.elements_[0]):document;var controlRange=doc.body.createControlRange();for(var i=0,len=this.elements_.length;i<len;i++)controlRange.addElement(this.elements_[i]);return goog.dom.ControlRange.createFromBrowserRange(controlRange)};
goog.dom.DomSavedControlRange_.prototype.disposeInternal=function(){goog.dom.DomSavedControlRange_.superClass_.disposeInternal.call(this);delete this.elements_};goog.dom.ControlRangeIterator=function(range){if(range){this.elements_=range.getSortedElements();this.startNode_=this.elements_.shift();this.endNode_=goog.array.peek(this.elements_)||this.startNode_}goog.dom.RangeIterator.call(this,this.startNode_,false)};goog.inherits(goog.dom.ControlRangeIterator,goog.dom.RangeIterator);
goog.dom.ControlRangeIterator.prototype.startNode_=null;goog.dom.ControlRangeIterator.prototype.endNode_=null;goog.dom.ControlRangeIterator.prototype.elements_=null;goog.dom.ControlRangeIterator.prototype.getStartTextOffset=function(){return 0};goog.dom.ControlRangeIterator.prototype.getEndTextOffset=function(){return 0};goog.dom.ControlRangeIterator.prototype.getStartNode=function(){return this.startNode_};goog.dom.ControlRangeIterator.prototype.getEndNode=function(){return this.endNode_};
goog.dom.ControlRangeIterator.prototype.isLast=function(){return!this.depth&&!this.elements_.length};goog.dom.ControlRangeIterator.prototype.next=function(){if(this.isLast())throw goog.iter.StopIteration;else if(!this.depth){var el=this.elements_.shift();this.setPosition(el,goog.dom.TagWalkType.START_TAG,goog.dom.TagWalkType.START_TAG);return el}return goog.dom.ControlRangeIterator.superClass_.next.call(this)};
goog.dom.ControlRangeIterator.prototype.copyFrom=function(other){this.elements_=other.elements_;this.startNode_=other.startNode_;this.endNode_=other.endNode_;goog.dom.ControlRangeIterator.superClass_.copyFrom.call(this,other)};goog.dom.ControlRangeIterator.prototype.clone=function(){var copy=new goog.dom.ControlRangeIterator(null);copy.copyFrom(this);return copy};goog.provide("goog.dom.MultiRange");goog.provide("goog.dom.MultiRangeIterator");goog.require("goog.array");goog.require("goog.debug.Logger");goog.require("goog.dom.AbstractMultiRange");goog.require("goog.dom.AbstractRange");goog.require("goog.dom.RangeIterator");goog.require("goog.dom.RangeType");goog.require("goog.dom.SavedRange");goog.require("goog.dom.TextRange");goog.require("goog.iter.StopIteration");
goog.dom.MultiRange=function(){this.browserRanges_=[];this.ranges_=[];this.sortedRanges_=null;this.container_=null};goog.inherits(goog.dom.MultiRange,goog.dom.AbstractMultiRange);goog.dom.MultiRange.createFromBrowserSelection=function(selection){var range=new goog.dom.MultiRange;for(var i=0,len=selection.rangeCount;i<len;i++)range.browserRanges_.push(selection.getRangeAt(i));return range};
goog.dom.MultiRange.createFromBrowserRanges=function(browserRanges){var range=new goog.dom.MultiRange;range.browserRanges_=goog.array.clone(browserRanges);return range};goog.dom.MultiRange.createFromTextRanges=function(textRanges){var range=new goog.dom.MultiRange;range.ranges_=textRanges;range.browserRanges_=goog.array.map(textRanges,function(range){return range.getBrowserRangeObject()});return range};goog.dom.MultiRange.prototype.logger_=goog.debug.Logger.getLogger("goog.dom.MultiRange");
goog.dom.MultiRange.prototype.clearCachedValues_=function(){this.ranges_=[];this.sortedRanges_=null;this.container_=null};goog.dom.MultiRange.prototype.clone=function(){return goog.dom.MultiRange.createFromBrowserRanges(this.browserRanges_)};goog.dom.MultiRange.prototype.getType=function(){return goog.dom.RangeType.MULTI};
goog.dom.MultiRange.prototype.getBrowserRangeObject=function(){if(this.browserRanges_.length>1)this.logger_.warning("getBrowserRangeObject called on MultiRange with more than 1 range");return this.browserRanges_[0]};goog.dom.MultiRange.prototype.setBrowserRangeObject=function(nativeRange){return false};goog.dom.MultiRange.prototype.getTextRangeCount=function(){return this.browserRanges_.length};
goog.dom.MultiRange.prototype.getTextRange=function(i){if(!this.ranges_[i])this.ranges_[i]=goog.dom.TextRange.createFromBrowserRange(this.browserRanges_[i]);return this.ranges_[i]};goog.dom.MultiRange.prototype.getContainer=function(){if(!this.container_){var nodes=[];for(var i=0,len=this.getTextRangeCount();i<len;i++)nodes.push(this.getTextRange(i).getContainer());this.container_=goog.dom.findCommonAncestor.apply(null,nodes)}return this.container_};
goog.dom.MultiRange.prototype.getSortedRanges=function(){if(!this.sortedRanges_){this.sortedRanges_=this.getTextRanges();this.sortedRanges_.sort(function(a,b){var aStartNode=a.getStartNode();var aStartOffset=a.getStartOffset();var bStartNode=b.getStartNode();var bStartOffset=b.getStartOffset();if(aStartNode==bStartNode&&aStartOffset==bStartOffset)return 0;return goog.dom.Range.isReversed(aStartNode,aStartOffset,bStartNode,bStartOffset)?1:-1})}return this.sortedRanges_};
goog.dom.MultiRange.prototype.getStartNode=function(){return this.getSortedRanges()[0].getStartNode()};goog.dom.MultiRange.prototype.getStartOffset=function(){return this.getSortedRanges()[0].getStartOffset()};goog.dom.MultiRange.prototype.getEndNode=function(){return goog.array.peek(this.getSortedRanges()).getEndNode()};goog.dom.MultiRange.prototype.getEndOffset=function(){return goog.array.peek(this.getSortedRanges()).getEndOffset()};
goog.dom.MultiRange.prototype.isRangeInDocument=function(){return goog.array.every(this.getTextRanges(),function(range){return range.isRangeInDocument()})};goog.dom.MultiRange.prototype.isCollapsed=function(){return this.browserRanges_.length==0||this.browserRanges_.length==1&&this.getTextRange(0).isCollapsed()};goog.dom.MultiRange.prototype.getText=function(){return goog.array.map(this.getTextRanges(),function(range){return range.getText()}).join("")};
goog.dom.MultiRange.prototype.getHtmlFragment=function(){return this.getValidHtml()};goog.dom.MultiRange.prototype.getValidHtml=function(){return goog.array.map(this.getTextRanges(),function(range){return range.getValidHtml()}).join("")};goog.dom.MultiRange.prototype.getPastableHtml=function(){return this.getValidHtml()};goog.dom.MultiRange.prototype.__iterator__=function(opt_keys){return new goog.dom.MultiRangeIterator(this)};
goog.dom.MultiRange.prototype.select=function(){var selection=goog.dom.AbstractRange.getBrowserSelectionForWindow(this.getWindow());selection.removeAllRanges();for(var i=0,len=this.getTextRangeCount();i<len;i++)selection.addRange(this.getTextRange(i).getBrowserRangeObject())};goog.dom.MultiRange.prototype.removeContents=function(){goog.array.forEach(this.getTextRanges(),function(range){range.removeContents()})};goog.dom.MultiRange.prototype.saveUsingDom=function(){return new goog.dom.DomSavedMultiRange_(this)};
goog.dom.MultiRange.prototype.collapse=function(toAnchor){if(!this.isCollapsed()){var range=toAnchor?this.getTextRange(0):this.getTextRange(this.getTextRangeCount()-1);this.clearCachedValues_();range.collapse(toAnchor);this.ranges_=[range];this.sortedRanges_=[range];this.browserRanges_=[range.getBrowserRangeObject()]}};goog.dom.DomSavedMultiRange_=function(range){this.savedRanges_=goog.array.map(range.getTextRanges(),function(range){return range.saveUsingDom()})};
goog.inherits(goog.dom.DomSavedMultiRange_,goog.dom.SavedRange);goog.dom.DomSavedMultiRange_.prototype.restoreInternal=function(){var ranges=goog.array.map(this.savedRanges_,function(savedRange){return savedRange.restore()});return goog.dom.MultiRange.createFromTextRanges(ranges)};goog.dom.DomSavedMultiRange_.prototype.disposeInternal=function(){goog.dom.DomSavedMultiRange_.superClass_.disposeInternal.call(this);goog.array.forEach(this.savedRanges_,function(savedRange){savedRange.dispose()});delete this.savedRanges_};
goog.dom.MultiRangeIterator=function(range){if(range)this.iterators_=goog.array.map(range.getSortedRanges(),function(r){return goog.iter.toIterator(r)});goog.dom.RangeIterator.call(this,range?this.getStartNode():null,false)};goog.inherits(goog.dom.MultiRangeIterator,goog.dom.RangeIterator);goog.dom.MultiRangeIterator.prototype.iterators_=null;goog.dom.MultiRangeIterator.prototype.currentIdx_=0;goog.dom.MultiRangeIterator.prototype.getStartTextOffset=function(){return this.iterators_[this.currentIdx_].getStartTextOffset()};
goog.dom.MultiRangeIterator.prototype.getEndTextOffset=function(){return this.iterators_[this.currentIdx_].getEndTextOffset()};goog.dom.MultiRangeIterator.prototype.getStartNode=function(){return this.iterators_[0].getStartNode()};goog.dom.MultiRangeIterator.prototype.getEndNode=function(){return goog.array.peek(this.iterators_).getEndNode()};goog.dom.MultiRangeIterator.prototype.isLast=function(){return this.iterators_[this.currentIdx_].isLast()};
goog.dom.MultiRangeIterator.prototype.next=function(){try{var it=this.iterators_[this.currentIdx_];var next=it.next();this.setPosition(it.node,it.tagType,it.depth);return next}catch(ex){if(ex!==goog.iter.StopIteration||this.iterators_.length-1==this.currentIdx_)throw ex;else{this.currentIdx_++;return this.next()}}};goog.dom.MultiRangeIterator.prototype.copyFrom=function(other){this.iterators_=goog.array.clone(other.iterators_);goog.dom.MultiRangeIterator.superClass_.copyFrom.call(this,other)};
goog.dom.MultiRangeIterator.prototype.clone=function(){var copy=new goog.dom.MultiRangeIterator(null);copy.copyFrom(this);return copy};goog.provide("goog.dom.Range");goog.require("goog.dom");goog.require("goog.dom.AbstractRange");goog.require("goog.dom.ControlRange");goog.require("goog.dom.MultiRange");goog.require("goog.dom.NodeType");goog.require("goog.dom.TextRange");goog.require("goog.userAgent");goog.dom.Range.createFromWindow=function(opt_win){var sel=goog.dom.AbstractRange.getBrowserSelectionForWindow(opt_win||window);return sel&&goog.dom.Range.createFromBrowserSelection(sel)};
goog.dom.Range.createFromBrowserSelection=function(selection){var range;var isReversed=false;if(selection.createRange)try{range=selection.createRange()}catch(e){return null}else if(selection.rangeCount)if(selection.rangeCount>1)return goog.dom.MultiRange.createFromBrowserSelection(selection);else{range=selection.getRangeAt(0);isReversed=goog.dom.Range.isReversed(selection.anchorNode,selection.anchorOffset,selection.focusNode,selection.focusOffset)}else return null;return goog.dom.Range.createFromBrowserRange(range,
isReversed)};goog.dom.Range.createFromBrowserRange=function(range,opt_isReversed){return goog.dom.AbstractRange.isNativeControlRange(range)?goog.dom.ControlRange.createFromBrowserRange(range):goog.dom.TextRange.createFromBrowserRange(range,opt_isReversed)};goog.dom.Range.createFromNodeContents=function(node,opt_isReversed){return goog.dom.TextRange.createFromNodeContents(node,opt_isReversed)};
goog.dom.Range.createCaret=function(node,offset){return goog.dom.TextRange.createFromNodes(node,offset,node,offset)};goog.dom.Range.createFromNodes=function(startNode,startOffset,endNode,endOffset){return goog.dom.TextRange.createFromNodes(startNode,startOffset,endNode,endOffset)};goog.dom.Range.clearSelection=function(opt_win){var sel=goog.dom.AbstractRange.getBrowserSelectionForWindow(opt_win||window);if(!sel)return;if(sel.empty)try{sel.empty()}catch(e){}else try{sel.removeAllRanges()}catch(e){}};
goog.dom.Range.hasSelection=function(opt_win){var sel=goog.dom.AbstractRange.getBrowserSelectionForWindow(opt_win||window);return!!sel&&(goog.userAgent.IE?sel.type!="None":!!sel.rangeCount)};
goog.dom.Range.isReversed=function(anchorNode,anchorOffset,focusNode,focusOffset){if(anchorNode==focusNode)return focusOffset<anchorOffset;var child;if(anchorNode.nodeType==goog.dom.NodeType.ELEMENT&&anchorOffset){child=anchorNode.childNodes[anchorOffset];if(child){anchorNode=child;anchorOffset=0}else if(goog.dom.contains(anchorNode,focusNode))return true}if(focusNode.nodeType==goog.dom.NodeType.ELEMENT&&focusOffset){child=focusNode.childNodes[focusOffset];if(child){focusNode=child;focusOffset=0}else if(goog.dom.contains(focusNode,
anchorNode))return false}return(goog.dom.compareNodeOrder(anchorNode,focusNode)||anchorOffset-focusOffset)>0};goog.provide("bot.Mouse");goog.provide("bot.Mouse.Button");goog.require("bot");goog.require("bot.Device");goog.require("bot.Error");goog.require("bot.ErrorCode");goog.require("bot.dom");goog.require("bot.events.EventType");goog.require("bot.userAgent");goog.require("goog.dom");goog.require("goog.dom.Range");goog.require("goog.dom.TagName");goog.require("goog.math.Coordinate");goog.require("goog.style");goog.require("goog.userAgent");
bot.Mouse=function(){goog.base(this);this.buttonPressed_=null;this.elementPressed_=null;this.clientXY_=new goog.math.Coordinate(0,0);this.nextClickIsDoubleClick_=false;this.hasEverInteracted_=false};goog.inherits(bot.Mouse,bot.Device);bot.Mouse.Button={LEFT:0,MIDDLE:1,RIGHT:2};bot.Mouse.NO_BUTTON_VALUE_INDEX_=3;
bot.Mouse.MOUSE_BUTTON_VALUE_MAP_=function(){var buttonValueMap={};if(bot.userAgent.IE_DOC_PRE9){buttonValueMap[bot.events.EventType.CLICK]=[0,0,0,null];buttonValueMap[bot.events.EventType.CONTEXTMENU]=[null,null,0,null];buttonValueMap[bot.events.EventType.MOUSEUP]=[1,4,2,null];buttonValueMap[bot.events.EventType.MOUSEOUT]=[0,0,0,0];buttonValueMap[bot.events.EventType.MOUSEMOVE]=[1,4,2,0]}else if(goog.userAgent.WEBKIT||bot.userAgent.IE_DOC_9){buttonValueMap[bot.events.EventType.CLICK]=[0,1,2,null];
buttonValueMap[bot.events.EventType.CONTEXTMENU]=[null,null,2,null];buttonValueMap[bot.events.EventType.MOUSEUP]=[0,1,2,null];buttonValueMap[bot.events.EventType.MOUSEOUT]=[0,1,2,0];buttonValueMap[bot.events.EventType.MOUSEMOVE]=[0,1,2,0]}else{buttonValueMap[bot.events.EventType.CLICK]=[0,1,2,null];buttonValueMap[bot.events.EventType.CONTEXTMENU]=[null,null,2,null];buttonValueMap[bot.events.EventType.MOUSEUP]=[0,1,2,null];buttonValueMap[bot.events.EventType.MOUSEOUT]=[0,0,0,0];buttonValueMap[bot.events.EventType.MOUSEMOVE]=
[0,0,0,0]}buttonValueMap[bot.events.EventType.DBLCLICK]=buttonValueMap[bot.events.EventType.CLICK];buttonValueMap[bot.events.EventType.MOUSEDOWN]=buttonValueMap[bot.events.EventType.MOUSEUP];buttonValueMap[bot.events.EventType.MOUSEOVER]=buttonValueMap[bot.events.EventType.MOUSEOUT];return buttonValueMap}();
bot.Mouse.prototype.fireMousedown_=function(){var isFirefox3=goog.userAgent.GECKO&&!bot.userAgent.isProductVersion(4);var blocksOnMousedown=(goog.userAgent.WEBKIT||isFirefox3)&&(bot.dom.isElement(this.getElement(),goog.dom.TagName.OPTION)||bot.dom.isElement(this.getElement(),goog.dom.TagName.SELECT));if(blocksOnMousedown)return true;var beforeActiveElement;var mousedownCanPreemptFocus=goog.userAgent.GECKO||goog.userAgent.IE;if(mousedownCanPreemptFocus)beforeActiveElement=bot.dom.getActiveElement(this.getElement());
var performFocus=this.fireMouseEvent_(bot.events.EventType.MOUSEDOWN);if(performFocus&&mousedownCanPreemptFocus&&beforeActiveElement!=bot.dom.getActiveElement(this.getElement()))return false;return performFocus};
bot.Mouse.prototype.pressButton=function(button){if(!goog.isNull(this.buttonPressed_))throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot press more then one button or an already pressed button.");this.buttonPressed_=button;this.elementPressed_=this.getElement();var performFocus=this.fireMousedown_();if(performFocus)this.focusOnElement()};
bot.Mouse.prototype.releaseButton=function(){if(goog.isNull(this.buttonPressed_))throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot release a button when no button is pressed.");this.fireMouseEvent_(bot.events.EventType.MOUSEUP);if(this.buttonPressed_==bot.Mouse.Button.LEFT&&this.getElement()==this.elementPressed_){this.clickElement(this.clientXY_,this.getButtonValue_(bot.events.EventType.CLICK));this.maybeDoubleClickElement_()}else if(this.buttonPressed_==bot.Mouse.Button.RIGHT)this.fireMouseEvent_(bot.events.EventType.CONTEXTMENU);
this.buttonPressed_=null;this.elementPressed_=null};bot.Mouse.prototype.maybeDoubleClickElement_=function(){if(this.nextClickIsDoubleClick_)this.fireMouseEvent_(bot.events.EventType.DBLCLICK);this.nextClickIsDoubleClick_=!this.nextClickIsDoubleClick_};
bot.Mouse.prototype.move=function(element,coords){var pos=goog.style.getClientPosition(element);this.clientXY_.x=coords.x+pos.x;this.clientXY_.y=coords.y+pos.y;var fromElement=this.getElement();if(element!=fromElement){try{if(goog.dom.getWindow(goog.dom.getOwnerDocument(fromElement)).closed)fromElement=null}catch(ignore){fromElement=null}if(fromElement){var isRoot=fromElement===bot.getDocument().documentElement||fromElement===bot.getDocument().body;fromElement=!this.hasEverInteracted_&&isRoot?null:
fromElement;this.fireMouseEvent_(bot.events.EventType.MOUSEOUT,element)}this.setElement(element);this.fireMouseEvent_(bot.events.EventType.MOUSEOVER,fromElement)}this.fireMouseEvent_(bot.events.EventType.MOUSEMOVE);this.nextClickIsDoubleClick_=false};
bot.Mouse.prototype.scroll=function(ticks){if(ticks==0)throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Must scroll a non-zero number of ticks.");var wheelDelta=ticks>0?-120:120;var pixelDelta=ticks>0?57:-57;for(var i=0;i<Math.abs(ticks);i++){this.fireMouseEvent_(bot.events.EventType.MOUSEWHEEL,null,wheelDelta);if(goog.userAgent.GECKO)this.fireMouseEvent_(bot.events.EventType.MOUSEPIXELSCROLL,null,pixelDelta)}};
bot.Mouse.prototype.fireMouseEvent_=function(type,opt_related,opt_wheelDelta){this.hasEverInteracted_=true;return this.fireMouseEvent(type,this.clientXY_,this.getButtonValue_(type),opt_related,opt_wheelDelta)};
bot.Mouse.prototype.getButtonValue_=function(eventType){if(!(eventType in bot.Mouse.MOUSE_BUTTON_VALUE_MAP_))return 0;var buttonIndex=goog.isNull(this.buttonPressed_)?bot.Mouse.NO_BUTTON_VALUE_INDEX_:this.buttonPressed_;var buttonValue=bot.Mouse.MOUSE_BUTTON_VALUE_MAP_[eventType][buttonIndex];if(goog.isNull(buttonValue))throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Event does not permit the specified mouse button.");return buttonValue};goog.provide("bot.Touchscreen");goog.require("bot");goog.require("bot.Device");goog.require("bot.Error");goog.require("bot.ErrorCode");goog.require("bot.events.EventType");goog.require("goog.math.Coordinate");goog.require("goog.style");goog.require("goog.userAgent.product");bot.Touchscreen=function(){goog.base(this);this.clientXY_=new goog.math.Coordinate(0,0);this.clientXY2_=new goog.math.Coordinate(0,0)};goog.inherits(bot.Touchscreen,bot.Device);bot.Touchscreen.prototype.hasMovedAfterPress_=false;
bot.Touchscreen.prototype.touchIdentifier_=0;bot.Touchscreen.prototype.touchIdentifier2_=0;bot.Touchscreen.prototype.touchCounter_=1;bot.Touchscreen.prototype.press=function(opt_press2){if(this.isPressed())throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot press touchscreen when already pressed.");this.hasMovedAfterPress_=false;this.touchIdentifier_=this.touchCounter_++;if(opt_press2)this.touchIdentifier2_=this.touchCounter_++;this.fireTouchEvent_(bot.events.EventType.TOUCHSTART)};
bot.Touchscreen.prototype.release=function(){if(!this.isPressed())throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot release touchscreen when not already pressed.");this.fireTouchEvent_(bot.events.EventType.TOUCHEND);if(!this.hasMovedAfterPress_){this.fireMouseEvent(bot.events.EventType.MOUSEMOVE,this.clientXY_,0);var performFocus=this.fireMouseEvent(bot.events.EventType.MOUSEDOWN,this.clientXY_,0);if(performFocus)this.focusOnElement();this.fireMouseEvent(bot.events.EventType.MOUSEUP,this.clientXY_,
0);this.clickElement(this.clientXY_,0)}this.touchIdentifier_=0;this.touchIdentifier2_=0};bot.Touchscreen.prototype.move=function(element,coords,opt_coords2){if(!this.isPressed())this.setElement(element);var pos=goog.style.getClientPosition(element);this.clientXY_.x=coords.x+pos.x;this.clientXY_.y=coords.y+pos.y;if(goog.isDef(opt_coords2)){this.clientXY2_.x=opt_coords2.x+pos.x;this.clientXY2_.y=opt_coords2.y+pos.y}if(this.isPressed()){this.hasMovedAfterPress_=true;this.fireTouchEvent_(bot.events.EventType.TOUCHMOVE)}};
bot.Touchscreen.prototype.isPressed=function(){return!!this.touchIdentifier_};bot.Touchscreen.prototype.fireTouchEvent_=function(type){if(!this.isPressed())throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Should never fire event when touchscreen is not pressed.");var touchIdentifier2;var coords2;if(this.touchIdentifier2_){touchIdentifier2=this.touchIdentifier2_;coords2=this.clientXY2_}return this.fireTouchEvent(type,this.touchIdentifier_,this.clientXY_,touchIdentifier2,coords2)};goog.provide("bot.locators.className");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.DomHelper");goog.require("goog.string");bot.locators.className.canUseQuerySelector_=function(root){return!!(root.querySelectorAll&&root.querySelector)};
bot.locators.className.single=function(target,root){if(!target)throw Error("No class name specified");target=goog.string.trim(target);if(target.split(/\s+/).length>1)throw Error("Compound class names not permitted");if(bot.locators.className.canUseQuerySelector_(root))return root.querySelector("."+target.replace(/\./g,"\\."))||null;var elements=goog.dom.getDomHelper(root).getElementsByTagNameAndClass("*",target,root);return elements.length?elements[0]:null};
bot.locators.className.many=function(target,root){if(!target)throw Error("No class name specified");target=goog.string.trim(target);if(target.split(/\s+/).length>1)throw Error("Compound class names not permitted");if(bot.locators.className.canUseQuerySelector_(root))return root.querySelectorAll("."+target.replace(/\./g,"\\."));return goog.dom.getDomHelper(root).getElementsByTagNameAndClass("*",target,root)};goog.provide("bot.locators.css");goog.require("bot.userAgent");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.NodeType");goog.require("goog.object");goog.require("goog.string");goog.require("goog.userAgent");
bot.locators.css.single=function(target,root){if(!goog.isFunction(root["querySelector"])&&goog.userAgent.IE&&bot.userAgent.isEngineVersion(8)&&!goog.isObject(root["querySelector"]))throw Error("CSS selection is not supported");if(!target)throw Error("No selector specified");if(bot.locators.css.containsUnquotedComma_(target))throw Error("Compound selectors not permitted");target=goog.string.trim(target);var element=root.querySelector(target);return element&&element.nodeType==goog.dom.NodeType.ELEMENT?
element:null};bot.locators.css.many=function(target,root){if(!goog.isFunction(root["querySelectorAll"])&&goog.userAgent.IE&&bot.userAgent.isEngineVersion(8)&&!goog.isObject(root["querySelector"]))throw Error("CSS selection is not supported");if(!target)throw Error("No selector specified");if(bot.locators.css.containsUnquotedComma_(target))throw Error("Compound selectors not permitted");target=goog.string.trim(target);return root.querySelectorAll(target)};
bot.locators.css.containsUnquotedComma_=function(str){return str.split(/(,)(?=(?:[^']|'[^']*')*$)/).length>1&&str.split(/(,)(?=(?:[^"]|"[^"]*")*$)/).length>1};goog.provide("bot.locators.id");goog.require("bot.dom");goog.require("goog.array");goog.require("goog.dom");
bot.locators.id.single=function(target,root){var dom=goog.dom.getDomHelper(root);var e=dom.getElement(target);if(!e)return null;if(bot.dom.getAttribute(e,"id")==target&&goog.dom.contains(root,e))return e;var elements=dom.getElementsByTagNameAndClass("*");var element=goog.array.find(elements,function(element){return bot.dom.getAttribute(element,"id")==target&&goog.dom.contains(root,element)});return element};
bot.locators.id.many=function(target,root){var dom=goog.dom.getDomHelper(root);var elements=dom.getElementsByTagNameAndClass("*",null,root);return goog.array.filter(elements,function(e){return bot.dom.getAttribute(e,"id")==target})};goog.provide("bot.locators.linkText");goog.provide("bot.locators.partialLinkText");goog.require("bot");goog.require("bot.dom");goog.require("bot.locators.css");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.DomHelper");
bot.locators.linkText.single_=function(target,root,opt_isPartial){var elements;try{elements=bot.locators.css.many("a",root)}catch(e){elements=goog.dom.getDomHelper(root).getElementsByTagNameAndClass(goog.dom.TagName.A,null,root)}var element=goog.array.find(elements,function(element){var text=bot.dom.getVisibleText(element);return opt_isPartial&&text.indexOf(target)!=-1||text==target});return element};
bot.locators.linkText.many_=function(target,root,opt_isPartial){var elements;try{elements=bot.locators.css.many("a",root)}catch(e){elements=goog.dom.getDomHelper(root).getElementsByTagNameAndClass(goog.dom.TagName.A,null,root)}return goog.array.filter(elements,function(element){var text=bot.dom.getVisibleText(element);return opt_isPartial&&text.indexOf(target)!=-1||text==target})};bot.locators.linkText.single=function(target,root){return bot.locators.linkText.single_(target,root,false)};
bot.locators.linkText.many=function(target,root){return bot.locators.linkText.many_(target,root,false)};bot.locators.partialLinkText.single=function(target,root){return bot.locators.linkText.single_(target,root,true)};bot.locators.partialLinkText.many=function(target,root){return bot.locators.linkText.many_(target,root,true)};goog.provide("bot.locators.name");goog.require("bot.dom");goog.require("goog.array");goog.require("goog.dom");bot.locators.name.single=function(target,root){var dom=goog.dom.getDomHelper(root);var allElements=dom.getElementsByTagNameAndClass("*",null,root);var element=goog.array.find(allElements,function(element){return bot.dom.getAttribute(element,"name")==target});return element};
bot.locators.name.many=function(target,root){var dom=goog.dom.getDomHelper(root);var allElements=dom.getElementsByTagNameAndClass("*",null,root);return goog.array.filter(allElements,function(element){return bot.dom.getAttribute(element,"name")==target})};goog.provide("bot.locators.tagName");goog.require("goog.array");bot.locators.tagName.single=function(target,root){return root.getElementsByTagName(target)[0]||null};bot.locators.tagName.many=function(target,root){return root.getElementsByTagName(target)};goog.provide("bot.locators");goog.require("bot");goog.require("bot.locators.className");goog.require("bot.locators.css");goog.require("bot.locators.id");goog.require("bot.locators.linkText");goog.require("bot.locators.name");goog.require("bot.locators.partialLinkText");goog.require("bot.locators.tagName");goog.require("bot.locators.xpath");goog.require("goog.array");goog.require("goog.object");bot.locators.strategy;
bot.locators.STRATEGIES_={"className":bot.locators.className,"class name":bot.locators.className,"css":bot.locators.css,"css selector":bot.locators.css,"id":bot.locators.id,"linkText":bot.locators.linkText,"link text":bot.locators.linkText,"name":bot.locators.name,"partialLinkText":bot.locators.partialLinkText,"partial link text":bot.locators.partialLinkText,"tagName":bot.locators.tagName,"tag name":bot.locators.tagName,"xpath":bot.locators.xpath};
bot.locators.add=function(name,strategy){bot.locators.STRATEGIES_[name]=strategy};bot.locators.getOnlyKey=function(target){for(var k in target)if(target.hasOwnProperty(k))return k;return null};
bot.locators.findElement=function(target,opt_root){var key=bot.locators.getOnlyKey(target);if(key){var strategy=bot.locators.STRATEGIES_[key];if(strategy&&goog.isFunction(strategy.single)){var root=opt_root||bot.getDocument();return strategy.single(target[key],root)}}throw Error("Unsupported locator strategy: "+key);};
bot.locators.findElements=function(target,opt_root){var key=bot.locators.getOnlyKey(target);if(key){var strategy=bot.locators.STRATEGIES_[key];if(strategy&&goog.isFunction(strategy.many)){var root=opt_root||bot.getDocument();return strategy.many(target[key],root)}}throw Error("Unsupported locator strategy: "+key);};goog.provide("goog.math");goog.require("goog.array");goog.math.randomInt=function(a){return Math.floor(Math.random()*a)};goog.math.uniformRandom=function(a,b){return a+Math.random()*(b-a)};goog.math.clamp=function(value,min,max){return Math.min(Math.max(value,min),max)};goog.math.modulo=function(a,b){var r=a%b;return r*b<0?r+b:r};goog.math.lerp=function(a,b,x){return a+x*(b-a)};goog.math.nearlyEquals=function(a,b,opt_tolerance){return Math.abs(a-b)<=(opt_tolerance||1.0E-6)};
goog.math.standardAngle=function(angle){return goog.math.modulo(angle,360)};goog.math.toRadians=function(angleDegrees){return angleDegrees*Math.PI/180};goog.math.toDegrees=function(angleRadians){return angleRadians*180/Math.PI};goog.math.angleDx=function(degrees,radius){return radius*Math.cos(goog.math.toRadians(degrees))};goog.math.angleDy=function(degrees,radius){return radius*Math.sin(goog.math.toRadians(degrees))};
goog.math.angle=function(x1,y1,x2,y2){return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(y2-y1,x2-x1)))};goog.math.angleDifference=function(startAngle,endAngle){var d=goog.math.standardAngle(endAngle)-goog.math.standardAngle(startAngle);if(d>180)d=d-360;else if(d<=-180)d=360+d;return d};goog.math.sign=function(x){return x==0?0:x<0?-1:1};
goog.math.longestCommonSubsequence=function(array1,array2,opt_compareFn,opt_collectorFn){var compare=opt_compareFn||function(a,b){return a==b};var collect=opt_collectorFn||function(i1,i2){return array1[i1]};var length1=array1.length;var length2=array2.length;var arr=[];for(var i=0;i<length1+1;i++){arr[i]=[];arr[i][0]=0}for(var j=0;j<length2+1;j++)arr[0][j]=0;for(i=1;i<=length1;i++)for(j=1;j<=length1;j++)if(compare(array1[i-1],array2[j-1]))arr[i][j]=arr[i-1][j-1]+1;else arr[i][j]=Math.max(arr[i-1][j],
arr[i][j-1]);var result=[];var i=length1,j=length2;while(i>0&&j>0)if(compare(array1[i-1],array2[j-1])){result.unshift(collect(i-1,j-1));i--;j--}else if(arr[i-1][j]>arr[i][j-1])i--;else j--;return result};goog.math.sum=function(var_args){return goog.array.reduce(arguments,function(sum,value){return sum+value},0)};goog.math.average=function(var_args){return goog.math.sum.apply(null,arguments)/arguments.length};
goog.math.standardDeviation=function(var_args){var sampleSize=arguments.length;if(sampleSize<2)return 0;var mean=goog.math.average.apply(null,arguments);var variance=goog.math.sum.apply(null,goog.array.map(arguments,function(val){return Math.pow(val-mean,2)}))/(sampleSize-1);return Math.sqrt(variance)};goog.math.isInt=function(num){return isFinite(num)&&num%1==0};goog.math.isFiniteNumber=function(num){return isFinite(num)&&!isNaN(num)};goog.provide("goog.math.Vec2");goog.require("goog.math");goog.require("goog.math.Coordinate");goog.math.Vec2=function(x,y){this.x=x;this.y=y};goog.inherits(goog.math.Vec2,goog.math.Coordinate);goog.math.Vec2.randomUnit=function(){var angle=Math.random()*Math.PI*2;return new goog.math.Vec2(Math.cos(angle),Math.sin(angle))};goog.math.Vec2.random=function(){var mag=Math.sqrt(Math.random());var angle=Math.random()*Math.PI*2;return new goog.math.Vec2(Math.cos(angle)*mag,Math.sin(angle)*mag)};
goog.math.Vec2.fromCoordinate=function(a){return new goog.math.Vec2(a.x,a.y)};goog.math.Vec2.prototype.clone=function(){return new goog.math.Vec2(this.x,this.y)};goog.math.Vec2.prototype.magnitude=function(){return Math.sqrt(this.x*this.x+this.y*this.y)};goog.math.Vec2.prototype.squaredMagnitude=function(){return this.x*this.x+this.y*this.y};goog.math.Vec2.prototype.scale=function(s){this.x*=s;this.y*=s;return this};goog.math.Vec2.prototype.invert=function(){this.x=-this.x;this.y=-this.y;return this};
goog.math.Vec2.prototype.normalize=function(){return this.scale(1/this.magnitude())};goog.math.Vec2.prototype.add=function(b){this.x+=b.x;this.y+=b.y;return this};goog.math.Vec2.prototype.subtract=function(b){this.x-=b.x;this.y-=b.y;return this};goog.math.Vec2.prototype.rotate=function(angle){var cos=Math.cos(angle);var sin=Math.sin(angle);var newX=this.x*cos-this.y*sin;var newY=this.y*cos+this.x*sin;this.x=newX;this.y=newY;return this};
goog.math.Vec2.rotateAroundPoint=function(v,axisPoint,angle){var res=v.clone();return res.subtract(axisPoint).rotate(angle).add(axisPoint)};goog.math.Vec2.prototype.equals=function(b){return this==b||!!b&&this.x==b.x&&this.y==b.y};goog.math.Vec2.distance=goog.math.Coordinate.distance;goog.math.Vec2.squaredDistance=goog.math.Coordinate.squaredDistance;goog.math.Vec2.equals=goog.math.Coordinate.equals;goog.math.Vec2.sum=function(a,b){return new goog.math.Vec2(a.x+b.x,a.y+b.y)};
goog.math.Vec2.difference=function(a,b){return new goog.math.Vec2(a.x-b.x,a.y-b.y)};goog.math.Vec2.dot=function(a,b){return a.x*b.x+a.y*b.y};goog.math.Vec2.lerp=function(a,b,x){return new goog.math.Vec2(goog.math.lerp(a.x,b.x,x),goog.math.lerp(a.y,b.y,x))};goog.provide("bot.action");goog.require("bot");goog.require("bot.Device");goog.require("bot.Error");goog.require("bot.ErrorCode");goog.require("bot.Keyboard");goog.require("bot.Mouse");goog.require("bot.Touchscreen");goog.require("bot.dom");goog.require("bot.events");goog.require("bot.events.EventType");goog.require("bot.locators");goog.require("bot.userAgent");goog.require("goog.array");goog.require("goog.dom");goog.require("goog.dom.NodeType");goog.require("goog.dom.TagName");goog.require("goog.math.Coordinate");
goog.require("goog.math.Rect");goog.require("goog.math.Vec2");goog.require("goog.userAgent");bot.action.checkShown_=function(element){if(!bot.dom.isShown(element,true))throw new bot.Error(bot.ErrorCode.ELEMENT_NOT_VISIBLE,"Element is not currently visible and may not be manipulated");};bot.action.checkInteractable_=function(element){if(!bot.dom.isInteractable(element))throw new bot.Error(bot.ErrorCode.INVALID_ELEMENT_STATE,"Element is not currently interactable and may not be manipulated");};
bot.action.clear=function(element){bot.action.checkInteractable_(element);if(!bot.dom.isEditable(element))throw new bot.Error(bot.ErrorCode.INVALID_ELEMENT_STATE,"Element must be user-editable in order to clear it.");bot.action.LegacyDevice_.focusOnElement(element);if(element.value){element.value="";bot.events.fire(element,bot.events.EventType.CHANGE)}if(bot.dom.isContentEditable(element))element.innerHTML=" "};bot.action.focusOnElement=function(element){bot.action.checkInteractable_(element);bot.action.LegacyDevice_.focusOnElement(element)};
bot.action.type=function(element,values,opt_keyboard){bot.action.checkShown_(element);bot.action.checkInteractable_(element);var keyboard=opt_keyboard||new bot.Keyboard;keyboard.moveCursor(element);function typeValue(value){if(goog.isString(value))goog.array.forEach(value.split(""),function(ch){var keyShiftPair=bot.Keyboard.Key.fromChar(ch);if(keyShiftPair.shift)keyboard.pressKey(bot.Keyboard.Keys.SHIFT);keyboard.pressKey(keyShiftPair.key);keyboard.releaseKey(keyShiftPair.key);if(keyShiftPair.shift)keyboard.releaseKey(bot.Keyboard.Keys.SHIFT)});
else if(goog.array.contains(bot.Keyboard.MODIFIERS,value))if(keyboard.isPressed(value))keyboard.releaseKey(value);else keyboard.pressKey(value);else{keyboard.pressKey(value);keyboard.releaseKey(value)}}if(goog.isArray(values))goog.array.forEach(values,typeValue);else typeValue(values);goog.array.forEach(bot.Keyboard.MODIFIERS,function(key){if(keyboard.isPressed(key))keyboard.releaseKey(key)})};
bot.action.submit=function(element){var form=bot.action.LegacyDevice_.findAncestorForm(element);if(!form)throw new bot.Error(bot.ErrorCode.INVALID_ELEMENT_STATE,"Element was not in a form, so could not submit.");bot.action.LegacyDevice_.submitForm(element,form)};bot.action.moveMouse=function(element,opt_coords,opt_mouse){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var mouse=opt_mouse||new bot.Mouse;mouse.move(element,coords)};
bot.action.click=function(element,opt_coords,opt_mouse){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var mouse=opt_mouse||new bot.Mouse;mouse.move(element,coords);mouse.pressButton(bot.Mouse.Button.LEFT);mouse.releaseButton()};bot.action.rightClick=function(element,opt_coords,opt_mouse){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var mouse=opt_mouse||new bot.Mouse;mouse.move(element,coords);mouse.pressButton(bot.Mouse.Button.RIGHT);mouse.releaseButton()};
bot.action.doubleClick=function(element,opt_coords,opt_mouse){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var mouse=opt_mouse||new bot.Mouse;mouse.move(element,coords);mouse.pressButton(bot.Mouse.Button.LEFT);mouse.releaseButton();mouse.pressButton(bot.Mouse.Button.LEFT);mouse.releaseButton()};
bot.action.scrollMouse=function(element,ticks,opt_coords,opt_mouse){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var mouse=opt_mouse||new bot.Mouse;mouse.move(element,coords);mouse.scroll(ticks)};
bot.action.drag=function(element,dx,dy,opt_coords,opt_mouse){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var mouse=opt_mouse||new bot.Mouse;mouse.move(element,coords);mouse.pressButton(bot.Mouse.Button.LEFT);var initPos=goog.style.getClientPosition(element);var midXY=new goog.math.Coordinate(coords.x+Math.floor(dx/2),coords.y+Math.floor(dy/2));mouse.move(element,midXY);var midPos=goog.style.getClientPosition(element);var finalXY=new goog.math.Coordinate(initPos.x+coords.x+dx-
midPos.x,initPos.y+coords.y+dy-midPos.y);mouse.move(element,finalXY);mouse.releaseButton()};bot.action.tap=function(element,opt_coords,opt_touchscreen){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var touchscreen=opt_touchscreen||new bot.Touchscreen;touchscreen.move(element,coords);touchscreen.press();touchscreen.release()};
bot.action.swipe=function(element,dx,dy,opt_coords,opt_touchscreen){var coords=bot.action.prepareToInteractWith_(element,opt_coords);var touchscreen=opt_touchscreen||new bot.Touchscreen;touchscreen.move(element,coords);touchscreen.press();var initPos=goog.style.getClientPosition(element);var midXY=new goog.math.Coordinate(coords.x+Math.floor(dx/2),coords.y+Math.floor(dy/2));touchscreen.move(element,midXY);var midPos=goog.style.getClientPosition(element);var finalXY=new goog.math.Coordinate(initPos.x+
coords.x+dx-midPos.x,initPos.y+coords.y+dy-midPos.y);touchscreen.move(element,finalXY);touchscreen.release()};
bot.action.pinch=function(element,distance,opt_coords,opt_touchscreen){if(distance==0)throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot pinch by a distance of zero.");function startSoThatEndsAtMax(offsetVec){if(distance<0){var magnitude=offsetVec.magnitude();offsetVec.scale(magnitude?(magnitude+distance)/magnitude:0)}}var halfDistance=distance/2;function scaleByHalfDistance(offsetVec){var magnitude=offsetVec.magnitude();offsetVec.scale(magnitude?(magnitude-halfDistance)/magnitude:0)}bot.action.multiTouchAction_(element,
startSoThatEndsAtMax,scaleByHalfDistance,opt_coords,opt_touchscreen)};bot.action.rotate=function(element,angle,opt_coords,opt_touchscreen){if(angle==0)throw new bot.Error(bot.ErrorCode.UNKNOWN_ERROR,"Cannot rotate by an angle of zero.");function startHalfwayToMax(offsetVec){offsetVec.scale(0.5)}var halfRadians=Math.PI*(angle/180)/2;function rotateByHalfAngle(offsetVec){offsetVec.rotate(halfRadians)}bot.action.multiTouchAction_(element,startHalfwayToMax,rotateByHalfAngle,opt_coords,opt_touchscreen)};
bot.action.multiTouchAction_=function(element,transformStart,transformHalf,opt_coords,opt_touchscreen){var center=bot.action.prepareToInteractWith_(element,opt_coords);var size=bot.action.getInteractableSize_(element);var offsetVec=new goog.math.Vec2(Math.min(center.x,size.width-center.x),Math.min(center.y,size.height-center.y));var touchScreen=opt_touchscreen||new bot.Touchscreen;transformStart(offsetVec);var start1=goog.math.Vec2.sum(center,offsetVec);var start2=goog.math.Vec2.difference(center,
offsetVec);touchScreen.move(element,start1,start2);touchScreen.press(true);var initPos=goog.style.getClientPosition(element);transformHalf(offsetVec);var mid1=goog.math.Vec2.sum(center,offsetVec);var mid2=goog.math.Vec2.difference(center,offsetVec);touchScreen.move(element,mid1,mid2);var movedVec=goog.math.Vec2.difference(goog.style.getClientPosition(element),initPos);transformHalf(offsetVec);var end1=goog.math.Vec2.sum(center,offsetVec).subtract(movedVec);var end2=goog.math.Vec2.difference(center,
offsetVec).subtract(movedVec);touchScreen.move(element,end1,end2);touchScreen.release()};bot.action.prepareToInteractWith_=function(element,opt_coords){bot.action.checkShown_(element);var doc=goog.dom.getOwnerDocument(element);goog.style.scrollIntoContainerView(element,goog.userAgent.WEBKIT?doc.body:doc.documentElement);if(opt_coords)return goog.math.Vec2.fromCoordinate(opt_coords);else{var size=bot.action.getInteractableSize_(element);return new goog.math.Vec2(size.width/2,size.height/2)}};
bot.action.getInteractableSize_=function(elem){var size=goog.style.getSize(elem);return size.width>0&&size.height>0||!elem.offsetParent?size:bot.action.getInteractableSize_(elem.offsetParent)};bot.action.LegacyDevice_=function(){goog.base(this)};goog.inherits(bot.action.LegacyDevice_,bot.Device);goog.addSingletonGetter(bot.action.LegacyDevice_);bot.action.LegacyDevice_.focusOnElement=function(element){var instance=bot.action.LegacyDevice_.getInstance();instance.setElement(element);return instance.focusOnElement()};
bot.action.LegacyDevice_.submitForm=function(element,form){var instance=bot.action.LegacyDevice_.getInstance();instance.setElement(element);instance.submitForm(form)};bot.action.LegacyDevice_.findAncestorForm=function(element){return bot.Device.findAncestorForm(element)};
bot.action.scrollIntoView=function(element,opt_coords){if(!bot.dom.isScrolledIntoView(element,opt_coords)){element.scrollIntoView();if(goog.userAgent.OPERA&&!bot.userAgent.isEngineVersion(11)){var win=goog.dom.getWindow(goog.dom.getOwnerDocument(element));for(var frame=win.frameElement;frame;frame=win.frameElement){frame.scrollIntoView();win=goog.dom.getWindow(goog.dom.getOwnerDocument(frame))}}}if(opt_coords){var rect=new goog.math.Rect(opt_coords.x,opt_coords.y,1,1);bot.dom.scrollElementRegionIntoClientView(element,
rect)}var isInView=bot.dom.isScrolledIntoView(element,opt_coords);if(!isInView&&opt_coords){var elementCoordsInViewport=goog.style.getClientPosition(element);var desiredPointInViewport=goog.math.Coordinate.sum(elementCoordsInViewport,opt_coords);try{bot.dom.getInViewLocation(desiredPointInViewport,goog.dom.getWindow(goog.dom.getOwnerDocument(element)));isInView=true}catch(ex){isInView=false}}return isInView};goog.provide("webdriver.atoms.inputs");goog.require("bot.Keyboard");goog.require("bot.Mouse");goog.require("bot.action");goog.require("bot.userAgent");goog.require("goog.array");goog.require("goog.string");
webdriver.atoms.inputs.getKeyboard_=function(opt_keyboard){if(opt_keyboard)return opt_keyboard;if(!bot.userAgent.FIREFOX_EXTENSION&&document["__webdriver_keyboard"])return document["__webdriver_keyboard"];var keyboard=new bot.Keyboard;if(!bot.userAgent.FIREFOX_EXTENSION)document["__webdriver_keyboard"]=keyboard;return keyboard};
webdriver.atoms.inputs.getMouse_=function(opt_mouse){if(opt_mouse)return opt_mouse;if(!bot.userAgent.FIREFOX_EXTENSION&&document["__webdriver_mouse"])return document["__webdriver_mouse"];var mouse=new bot.Mouse;if(!bot.userAgent.FIREFOX_EXTENSION)document["__webdriver_mouse"]=mouse;return mouse};
webdriver.atoms.inputs.sendKeys=function(element,var_args,opt_keyboard){var keyboard=webdriver.atoms.inputs.getKeyboard_(opt_keyboard);var to_type=goog.array.slice(arguments,2);var flattened=goog.array.flatten(values);bot.action.type(element,flattened,keyboard)};webdriver.atoms.inputs.click=function(element,opt_mouse){var mouse=webdriver.atoms.inputs.getMouse_(opt_mouse);bot.action.click(element,null,mouse)};goog.require("webdriver.atoms.inputs");goog.exportSymbol("_",webdriver.atoms.inputs.sendKeys);; return this._.apply(null,arguments);}.apply({navigator:typeof window!=undefined?window.navigator:null}, arguments);}
keys_fn.apply(null, [document.getElementsByName('q')[0], 'hello']);
// Copyright 2012 WebDriver committers
// Copyright 2012 Software Freedom Conservancy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @fileoverview Synthetic events for fun and profit.
*/
goog.provide('webdriver.atoms.inputs');
goog.require('bot.Keyboard');
goog.require('bot.Mouse');
goog.require('bot.action');
goog.require('bot.userAgent');
goog.require('goog.array');
goog.require('goog.string');
/**
* Examines the opt_keyboard parameter, and returns either that or a new
* keyboard instance, which is stored on the document for later use.
*
* @param {bot.Keyboard=} opt_keyboard A mouse to use.
* @return {!bot.Keyboard} A mouse instance.
*/
webdriver.atoms.inputs.getKeyboard_ = function (opt_keyboard) {
if (opt_keyboard) {
return opt_keyboard;
}
if (!bot.userAgent.FIREFOX_EXTENSION && document['__webdriver_keyboard']) {
return document['__webdriver_keyboard'];
}
var keyboard = new bot.Keyboard();
if (!bot.userAgent.FIREFOX_EXTENSION) {
document['__webdriver_keyboard'] = keyboard;
}
return keyboard;
};
/**
* Examines the opt_mouse parameter, and returns either that or a new mouse
* instance, which is stored on the document for later use.
*
* @param {bot.Mouse=} opt_mouse A mouse to use.
* @return {!bot.Mouse} A mouse instance.
*/
webdriver.atoms.inputs.getMouse_ = function (opt_mouse) {
if (opt_mouse) {
return opt_mouse;
}
if (!bot.userAgent.FIREFOX_EXTENSION && document['__webdriver_mouse']) {
return document['__webdriver_mouse'];
}
var mouse = new bot.Mouse();
if (!bot.userAgent.FIREFOX_EXTENSION) {
document['__webdriver_mouse'] = mouse;
}
return mouse;
};
/**
*
* @param {!Element} element The element to send the keyboard input to.
* @param {...(string|!Array.<string>)} var_args What to type.
* @param {bot.Keyboard=} opt_keyboard The keyboard to use, or construct one.
*/
webdriver.atoms.inputs.sendKeys = function (
element, var_args, opt_keyboard) {
var keyboard = webdriver.atoms.inputs.getKeyboard_(opt_keyboard);
var to_type = goog.array.slice(arguments, 2);
var flattened = goog.array.flatten(values);
bot.action.type(element, flattened, keyboard);
};
/**
* Click on an element.
*
* @param {!Element} element The element to click.
* @param {bot.Mouse=} opt_mouse The mouse to use, or constructs one.
*/
webdriver.atoms.inputs.click = function (element, opt_mouse) {
var mouse = webdriver.atoms.inputs.getMouse_(opt_mouse);
bot.action.click(element, null, mouse);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment