diff --git a/baystation12.dme b/baystation12.dme index b4b1d329c8..acb23ee24f 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -36,6 +36,8 @@ #define FILE_DIR "icons/turf" #define FILE_DIR "icons/vending_icons" #define FILE_DIR "icons/xenoarch_icons" +#define FILE_DIR "nano" +#define FILE_DIR "nano/images" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" #define FILE_DIR "sound/ambience" @@ -1044,6 +1046,12 @@ #include "code\modules\mob\new_player\preferences_setup.dm" #include "code\modules\mob\new_player\skill.dm" #include "code\modules\mob\new_player\sprite_accessories.dm" +#include "code\modules\nano\_JSON.dm" +#include "code\modules\nano\JSON Reader.dm" +#include "code\modules\nano\JSON Writer.dm" +#include "code\modules\nano\nanoexternal.dm" +#include "code\modules\nano\nanomanager.dm" +#include "code\modules\nano\nanoui.dm" #include "code\modules\organs\blood.dm" #include "code\modules\organs\organ.dm" #include "code\modules\organs\organ_external.dm" diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 22a905a207..1a12ef12b2 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -24,6 +24,7 @@ datum/controller/game_controller var/objects_cost = 0 var/networks_cost = 0 var/powernets_cost = 0 + var/nano_cost = 0 var/events_cost = 0 var/ticker_cost = 0 var/total_cost = 0 @@ -196,6 +197,13 @@ datum/controller/game_controller/proc/process() sleep(breather_ticks) + //NANO UIS + timer = world.timeofday + process_nano() + nano_cost = (world.timeofday - timer) / 10 + + sleep(breather_ticks) + //EVENTS timer = world.timeofday process_events() @@ -208,7 +216,7 @@ datum/controller/game_controller/proc/process() ticker_cost = (world.timeofday - timer) / 10 //TIMING - total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + events_cost + ticker_cost + total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost var/end_time = world.timeofday if(end_time < start_time) @@ -286,6 +294,16 @@ datum/controller/game_controller/proc/process_powernets() continue powernets.Cut(i,i+1) +datum/controller/game_controller/proc/process_nano() + var/i = 1 + while(i<=nanomanager.processing_uis.len) + var/datum/nanoui/ui = nanomanager.processing_uis[i] + if(ui && ui.src_object && ui.user) + ui.process() + i++ + continue + nanomanager.processing_uis.Cut(i,i+1) + datum/controller/game_controller/proc/process_events() last_thing_processed = /datum/event var/i = 1 diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index abe6341230..c8097c5e76 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -1,11 +1,11 @@ /obj/machinery/atmospherics/unary/cryo_cell - name = "cryo cell" + name = "Cryo Cell" icon = 'icons/obj/cryogenics.dmi' icon_state = "cell-off" density = 1 anchored = 1.0 layer = 2.8 - + var/on = 0 var/temperature_archived var/mob/living/carbon/occupant = null @@ -61,37 +61,66 @@ go_out() return -/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user as mob) - user.set_machine(src) - var/beaker_text = "" - var/health_text = "" - var/temp_text = "" - if(occupant) - if(occupant.health <= -100) - health_text = "Dead" - else if(occupant.health < 0) - health_text = "[round(occupant.health,0.1)]" - else - health_text = "[round(occupant.health,0.1)]" - if(air_contents.temperature > T0C) - temp_text = "[air_contents.temperature]" +/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) + ui_interact(user) + +/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main") + + var/data[0] + data["isOperating"] = on + + data["hasOccupant"] = occupant ? 1 : 0 + + var/occupantData[0] + if (!occupant) + occupantData["name"] = null + occupantData["stat"] = null + occupantData["health"] = null + occupantData["bruteLoss"] = null + occupantData["oxyLoss"] = null + occupantData["toxLoss"] = null + occupantData["fireLoss"] = null + occupantData["bodyTemperature"] = null + else + occupantData["name"] = occupant.name + occupantData["stat"] = occupant.stat + occupantData["health"] = round(occupant.health) + occupantData["bruteLoss"] = round(occupant.getBruteLoss()) + occupantData["oxyLoss"] = round(occupant.getOxyLoss()) + occupantData["toxLoss"] = round(occupant.getToxLoss()) + occupantData["fireLoss"] = round(occupant.getFireLoss()) + occupantData["bodyTemperature"] = round(occupant.bodytemperature) + data["occupant"] = occupantData; + + data["cellTemperature"] = round(air_contents.temperature) + data["cellTemperatureStatus"] = "good" + if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celcius) + data["cellTemperatureStatus"] = "bad" else if(air_contents.temperature > 225) - temp_text = "[air_contents.temperature]" + data["cellTemperatureStatus"] = "average" + + data["isBeakerLoaded"] = beaker ? 1 : 0 + var beakerContents[0] + if(beaker && beaker:reagents && beaker:reagents.reagent_list.len) + for(var/datum/reagent/R in beaker:reagents.reagent_list) + beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... + data["beakerContents"] = beakerContents + + //user << list2json(data) + + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + if (!ui) + ui = new(user, src, ui_key, 'nano/templates/cryo.tmpl', "Cryo Cell Control System", 520, 410) + // When the UI is first opened this is the data it will use + ui.set_initial_data(data) + ui.open() + // Auto update every Master Controller tick + ui.set_auto_update(1) else - temp_text = "[air_contents.temperature]" - if(beaker) - beaker_text = "Beaker: Eject" - else - beaker_text = "Beaker: No beaker loaded" - var/dat = {"Cryo cell control system
- Current cell temperature: [temp_text]K
- Cryo status: [ on ? "Off On" : "Off On"]
- [beaker_text]

- Current occupant: [occupant ? "
Name: [occupant]
Health: [health_text]
Oxygen deprivation: [round(occupant.getOxyLoss(),0.1)]
Brute damage: [round(occupant.getBruteLoss(),0.1)]
Fire damage: [round(occupant.getFireLoss(),0.1)]
Toxin damage: [round(occupant.getToxLoss(),0.1)]
Body temperature: [occupant.bodytemperature]
Heartbeat rate: [occupant.get_pulse(GETPULSE_TOOL)]" : "None"]
- "} - user.set_machine(src) - user << browse(dat, "window=cryo") - onclose(user, "cryo") + // The UI is already open so push the new data to it + ui.push_data(data) + return + //user.set_machine(src) /obj/machinery/atmospherics/unary/cryo_cell/Topic(href, href_list) if ((get_dist(src, usr) <= 1) || istype(usr, /mob/living/silicon/ai)) diff --git a/code/global.dm b/code/global.dm index 348cc8702f..d8e900dbc4 100644 --- a/code/global.dm +++ b/code/global.dm @@ -165,6 +165,9 @@ var/shuttlecoming = 0 var/join_motd = null var/forceblob = 0 +// nanomanager, the manager for Nano UIs +var/datum/nanomanager/nanomanager = new() + //airlockWireColorToIndex takes a number representing the wire color, e.g. the orange wire is always 1, the dark red wire is always 2, etc. It returns the index for whatever that wire does. //airlockIndexToWireColor does the opposite thing - it takes the index for what the wire does, for example AIRLOCK_WIRE_IDSCAN is 1, AIRLOCK_WIRE_POWER1 is 2, etc. It returns the wire color number. //airlockWireColorToFlag takes the wire color number and returns the flag for it (1, 2, 4, 8, 16, etc) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index b74355c271..0cfa286689 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -1,7 +1,7 @@ //////////// //SECURITY// //////////// -#define TOPIC_SPAM_DELAY 4 //4 ticks is about 3/10ths of a second +#define TOPIC_SPAM_DELAY 2 //2 ticks is about 2/10ths of a second; it was 4 ticks, but that caused too many clicks to be lost due to lag #define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen? #define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing. //I would just like the code ready should it ever need to be used. @@ -242,6 +242,19 @@ //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() getFiles( + 'nano/js/libraries.min.js', + 'nano/js/nano_update.js', + 'nano/js/nano_config.js', + 'nano/js/nano_base_helpers.js', + 'nano/css/common.css', + 'nano/css/icons.css', + 'nano/templates/cryo.tmpl', + 'nano/images/uiBackground.png', + 'nano/images/uiIcons16.png', + 'nano/images/uiIcons24.png', + 'nano/images/uiLinkPendingIcon.gif', + 'nano/images/uiNoticeBackground.jpg', + 'nano/images/uiTitleFluff.png', 'html/search.js', 'html/panels.css', 'icons/pda_icons/pda_atmos.png', diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 5627dbd43b..bb01c846ca 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,4 +1,5 @@ /mob/Logout() + nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs player_list -= src log_access("Logout: [key_name(src)]") if(admin_datums[src.ckey]) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 08aad3d7ad..6171377730 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -719,6 +719,7 @@ note dizziness decrements automatically in the mob's Life() proc. stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]") stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]") stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]") + stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]") stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]") else stat(null,"MasterController-ERROR") diff --git a/code/modules/nano/JSON Reader.dm b/code/modules/nano/JSON Reader.dm new file mode 100644 index 0000000000..12edf1dd5c --- /dev/null +++ b/code/modules/nano/JSON Reader.dm @@ -0,0 +1,205 @@ +json_token + var + value + New(v) + src.value = v + text + number + word + symbol + eof + +json_reader + var + list + string = list("'", "\"") + symbols = list("{", "}", "\[", "]", ":", "\"", "'", ",") + sequences = list("b" = 8, "t" = 9, "n" = 10, "f" = 12, "r" = 13) + tokens + json + i = 1 + + + proc + // scanner + ScanJson(json) + src.json = json + . = new/list() + src.i = 1 + while(src.i <= lentext(json)) + var/char = get_char() + if(is_whitespace(char)) + i++ + continue + if(string.Find(char)) + . += read_string(char) + else if(symbols.Find(char)) + . += new/json_token/symbol(char) + else if(is_digit(char)) + . += read_number() + else + . += read_word() + i++ + . += new/json_token/eof() + + read_word() + var/val = "" + while(i <= lentext(json)) + var/char = get_char() + if(is_whitespace(char) || symbols.Find(char)) + i-- // let scanner handle this character + return new/json_token/word(val) + val += char + i++ + + read_string(delim) + var + escape = FALSE + val = "" + while(++i <= lentext(json)) + var/char = get_char() + if(escape) + switch(char) + if("\\", "'", "\"", "/", "u") + val += char + else + // TODO: support octal, hex, unicode sequences + ASSERT(sequences.Find(char)) + val += ascii2text(sequences[char]) + else + if(char == delim) + return new/json_token/text(val) + else if(char == "\\") + escape = TRUE + else + val += char + CRASH("Unterminated string.") + + read_number() + var/val = "" + var/char = get_char() + while(is_digit(char) || char == "." || lowertext(char) == "e") + val += char + i++ + char = get_char() + i-- // allow scanner to read the first non-number character + return new/json_token/number(text2num(val)) + + check_char() + ASSERT(args.Find(get_char())) + + get_char() + return copytext(json, i, i+1) + + is_whitespace(char) + return char == " " || char == "\t" || char == "\n" || text2ascii(char) == 13 + + is_digit(char) + var/c = text2ascii(char) + return 48 <= c && c <= 57 || char == "+" || char == "-" + + + // parser + ReadObject(list/tokens) + src.tokens = tokens + . = new/list() + i = 1 + read_token("{", /json_token/symbol) + while(i <= tokens.len) + var/json_token/K = get_token() + check_type(/json_token/word, /json_token/text) + next_token() + read_token(":", /json_token/symbol) + + .[K.value] = read_value() + + var/json_token/S = get_token() + check_type(/json_token/symbol) + switch(S.value) + if(",") + next_token() + continue + if("}") + next_token() + return + else + die() + + get_token() + return tokens[i] + + next_token() + return tokens[++i] + + read_token(val, type) + var/json_token/T = get_token() + if(!(T.value == val && istype(T, type))) + CRASH("Expected '[val]', found '[T.value]'.") + next_token() + return T + + check_type(...) + var/json_token/T = get_token() + for(var/type in args) + if(istype(T, type)) + return + CRASH("Bad token type: [T.type].") + + check_value(...) + var/json_token/T = get_token() + ASSERT(args.Find(T.value)) + + read_key() + var/char = get_char() + if(char == "\"" || char == "'") + return read_string(char) + + read_value() + var/json_token/T = get_token() + switch(T.type) + if(/json_token/text, /json_token/number) + next_token() + return T.value + if(/json_token/word) + next_token() + switch(T.value) + if("true") + return TRUE + if("false") + return FALSE + if("null") + return null + if(/json_token/symbol) + switch(T.value) + if("\[") + return read_array() + if("{") + return ReadObject(tokens.Copy(i)) + die() + + read_array() + read_token("\[", /json_token/symbol) + . = new/list() + var/list/L = . + while(i <= tokens.len) + // Avoid using Add() or += in case a list is returned. + L.len++ + L[L.len] = read_value() + var/json_token/T = get_token() + check_type(/json_token/symbol) + switch(T.value) + if(",") + next_token() + continue + if("]") + next_token() + return + else + die() + next_token() + CRASH("Unterminated array.") + + + die(json_token/T) + if(!T) T = get_token() + CRASH("Unexpected token: [T.value].") \ No newline at end of file diff --git a/code/modules/nano/JSON Writer.dm b/code/modules/nano/JSON Writer.dm new file mode 100644 index 0000000000..95c0cb7578 --- /dev/null +++ b/code/modules/nano/JSON Writer.dm @@ -0,0 +1,54 @@ + +json_writer + proc + WriteObject(list/L) + . = "{" + var/i = 1 + for(var/k in L) + var/val = L[k] + . += {"\"[k]\":[write(val)]"} + if(i++ < L.len) + . += "," + .+= "}" + + write(val) + if(isnum(val)) + return num2text(val, 100) + else if(isnull(val)) + return "null" + else if(istype(val, /list)) + if(is_associative(val)) + return WriteObject(val) + else + return write_array(val) + else + . += write_string("[val]") + + write_array(list/L) + . = "\[" + for(var/i = 1 to L.len) + . += write(L[i]) + if(i < L.len) + . += "," + . += "]" + + write_string(txt) + var/static/list/json_escape = list("\\", "\"", "'", "\n") + for(var/targ in json_escape) + var/start = 1 + while(start <= lentext(txt)) + var/i = findtext(txt, targ, start) + if(!i) + break + if(targ == "\n") + txt = copytext(txt, 1, i) + "\\n" + copytext(txt, i+1) + else + txt = copytext(txt, 1, i) + "\\" + copytext(txt, i) + start = i + 2 + return {""[txt]""} + + is_associative(list/L) + for(var/key in L) + // if the key is a list that means it's actually an array of lists (stupid Byond...) + if(!isnum(key) && !istype(key, /list)) + return TRUE diff --git a/code/modules/nano/_JSON.dm b/code/modules/nano/_JSON.dm new file mode 100644 index 0000000000..5692e643ba --- /dev/null +++ b/code/modules/nano/_JSON.dm @@ -0,0 +1,12 @@ +/* +n_Json v11.3.21 +*/ + +proc + json2list(json) + var/static/json_reader/_jsonr = new() + return _jsonr.ReadObject(_jsonr.ScanJson(json)) + + list2json(list/L) + var/static/json_writer/_jsonw = new() + return _jsonw.WriteObject(L) diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm new file mode 100644 index 0000000000..7efe4dd477 --- /dev/null +++ b/code/modules/nano/nanoexternal.dm @@ -0,0 +1,6 @@ +// All movable things can have a Nano UI, always use ui_interact to open/interact with a Nano UI +/atom/movable/proc/ui_interact(mob/user, ui_key = "main") + return + +// Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob +/mob/var/list/open_uis = list() diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm new file mode 100644 index 0000000000..c3edfa04ea --- /dev/null +++ b/code/modules/nano/nanomanager.dm @@ -0,0 +1,69 @@ +// This is the window/UI manager for Nano UI +// There should only ever be one (global) instance of nanomanger +/datum/nanomanager + var/open_uis[0] + var/list/processing_uis = list() + +/datum/nanomanager/New() + return + +/datum/nanomanager/proc/get_open_ui(var/mob/user, src_object, ui_key) + var/src_object_key = "\ref[src_object]" + if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) + return null + else if (isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list)) + return null + + for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key]) + if (ui.user == user) + return ui + + return null + +/datum/nanomanager/proc/update_uis(src_object) + var/src_object_key = "\ref[src_object]" + if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) + return 0 + + var/update_count = 0 + for (var/ui_key in open_uis[src_object_key]) + for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key]) + if(ui && ui.src_object && ui.user) + ui.process() + update_count++ + return update_count + +/datum/nanomanager/proc/ui_opened(var/datum/nanoui/ui) + var/src_object_key = "\ref[ui.src_object]" + if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) + open_uis[src_object_key] = list(ui.ui_key = list()) + else if (isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list)) + open_uis[src_object_key][ui.ui_key] = list(); + + ui.user.open_uis.Add(ui) + var/list/uis = open_uis[src_object_key][ui.ui_key] + uis.Add(ui) + processing_uis.Add(ui) + +/datum/nanomanager/proc/ui_closed(var/datum/nanoui/ui) + var/src_object_key = "\ref[ui.src_object]" + if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) + return 0 // wasn't open + else if (isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list)) + return 0 // wasn't open + + processing_uis.Remove(ui) + ui.user.open_uis.Remove(ui) + var/list/uis = open_uis[src_object_key][ui.ui_key] + return uis.Remove(ui) + +// user has logged out (or is switching mob) so close/clear all uis +/datum/nanomanager/proc/user_logout(var/mob/user) + if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) + return 0 // has no open uis + + for (var/datum/nanoui/ui in user.open_uis) + ui.close(); + + + diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm new file mode 100644 index 0000000000..52b9c3d004 --- /dev/null +++ b/code/modules/nano/nanoui.dm @@ -0,0 +1,271 @@ +/datum/nanoui + var/mob/user + var/atom/movable/src_object + var/title + var/ui_key + var/window_id // window_id is used as the window name for browse and onclose + var/width = 0 + var/height = 0 + var/atom/ref = null + var/on_close_logic = 1 + var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id + var/stylesheets[0] + var/scripts[0] + var/templates[0] + var/title_image + var/head_elements + var/body_elements + var/head_content = "" + var/content = "
" // the #mainTemplate div will contain the compiled "main" template html + var/list/initial_data[0] + var/is_auto_updating = 0 + var/status = 2 + + +/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null) + user = nuser + src_object = nsrc_object + ui_key = nui_key + window_id = "[ui_key]\ref[src_object]" + + add_template("main", ntemplate) + + if (ntitle) + title = ntitle + if (nwidth) + width = nwidth + if (nheight) + height = nheight + if (nref) + ref = nref + + add_common_assets() + +/datum/nanoui/proc/add_common_assets() + add_script("libraries", 'nano/js/libraries.min.js') // The jQuery library + //add_script("jquery", 'nano/js/jquery.js') // The jQuery library + //add_script("jsviews", 'nano/js/jsviews.js') // JSViews, for rendering templates + add_script("nanoupdate", 'nano/js/nano_update.js') // The NanoUpdate JS, this is used to receive updates and apply them. + add_script("nanoconfig", 'nano/js/nano_config.js') // The NanoUpdate JS, this is used to receive updates and apply them. + add_script("nanobasehelpers", 'nano/js/nano_base_helpers.js') // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all templates + add_stylesheet("common", 'nano/css/common.css') // this CSS sheet is common to all UIs + add_stylesheet("icons", 'nano/css/icons.css') // this CSS sheet is common to all UIs + +/datum/nanoui/proc/set_status(state) + if (state != status) + status = state + push_data(list(), 1) // Update the UI + else + status = state + +/datum/nanoui/proc/set_auto_update(state = 1) + is_auto_updating = state + +/datum/nanoui/proc/set_initial_data(data) + initial_data = modify_data(data) + +/datum/nanoui/proc/add_head_content(nhead_content) + head_content = nhead_content + +/datum/nanoui/proc/set_window_options(nwindow_options) + window_options = nwindow_options + +/datum/nanoui/proc/set_title_image(ntitle_image) + //title_image = ntitle_image + +/datum/nanoui/proc/add_stylesheet(name, file) + stylesheets[name] = file + +/datum/nanoui/proc/add_script(name, file) + scripts[name] = file + +/datum/nanoui/proc/add_template(name, file) + templates[name] = file + +/datum/nanoui/proc/set_content(ncontent) + content = ncontent + +/datum/nanoui/proc/add_content(ncontent) + content += ncontent + +/datum/nanoui/proc/use_on_close_logic(nsetting) + on_close_logic = nsetting + +/datum/nanoui/proc/get_header() + var/key + var/filename + + for (key in stylesheets) + filename = "[ckey(key)].css" + user << browse_rsc(stylesheets[key], filename) + head_content += "" + + user << browse_rsc('nano/images/uiBackground.png', "uiBackground.png") + user << browse_rsc('nano/images/uiIcons16.png', "uiIcons16.png") + user << browse_rsc('nano/images/uiIcons24.png', "uiIcons24.png") + user << browse_rsc('nano/images/uiLinkPendingIcon.gif', "uiLinkPendingIcon.gif") + user << browse_rsc('nano/images/uiNoticeBackground.jpg', "uiNoticeBackground.jpg") + user << browse_rsc('nano/images/uiTitleFluff.png', "uiTitleFluff.png") + + var/title_attributes = "id='uiTitle'" + if (title_image) + title_attributes = "id='uiTitle icon' style='background-image: url([title_image]);'" + + var/templatel_data[0] + for (key in templates) + filename = "[ckey(key)].tmpl" + user << browse_rsc(templates[key], filename) + templatel_data[key] = filename; + + var/template_data_json = "{}" // An empty JSON object + if (templatel_data.len > 0) + template_data_json = list2json(templatel_data) + + var/initial_data_json = "{}" // An empty JSON object + if (initial_data.len > 0) + initial_data_json = list2json(initial_data) + + var/url_parameters_json = list2json(list("src" = "\ref[src_object]")) + + return {" + + + + [head_content] + + + +
+ [title ? "
[title]
" : ""] +
+ "} + +/datum/nanoui/proc/get_footer() + var/key + var/filename + var/scriptsContent = "" + + for (key in scripts) + filename = "[ckey(key)].js" + user << browse_rsc(scripts[key], filename) + scriptsContent += "" + + return {" + [scriptsContent] +
+
+ +"} + +/datum/nanoui/proc/get_content() + return {" + [get_header()] + [content] + [get_footer()] + "} + +/datum/nanoui/proc/open() + var/window_size = "" + if (width && height) + window_size = "size=[width]x[height];" + user << browse(get_content(), "window=[window_id];[window_size][window_options]") + on_close_winset() + //onclose(user, window_id) + nanomanager.ui_opened(src) + +/datum/nanoui/proc/close() + is_auto_updating = 0 + nanomanager.ui_closed(src) + user << browse(null, "window=[window_id]") + +/datum/nanoui/proc/on_close_winset() + if(!user.client) + world << "ERROR: No user.client!?" + return + var/params = "\ref[src]" + + winset(user, window_id, "on-close=\"nanoclose [params]\"") + +/datum/nanoui/proc/process(update = 0) + var/dist = get_dist(src_object, user) + if (dist <= 1) + set_status(2) // interactive + else if (dist <= 2) + set_status(1) // update only + else if (dist <= 3) + set_status(0) // no updates, completely disabled + return // don't auto update + else + close() + return + + if (update || is_auto_updating) + src_object.ui_interact(user, ui_key) + +/datum/nanoui/proc/modify_data(data) + data["ui"] = list( + "status" = status, + "user" = list("name" = user.name) + ) + //user << list2json(data) + return data + +/datum/nanoui/proc/push_data(data, force_push = 0) + if (!status && !force_push) + user << "Cannot update UI, user out of range (status [status])" + return + + data = modify_data(data) + + user << output(list2params(list(list2json(data))),"[window_id].browser:receiveUpdateData") + on_close_winset() + +/client/verb/nanoclose(var/uiref as text) + set hidden = 1 // hide this verb from the user's panel + set name = "nanoclose" // no autocomplete on cmd line + + //world << "world [src] looking for [uiref]" + + var/datum/nanoui/ui = locate(uiref) + + if (ui) + //world << "[src] UI found [ui.window_id]" + ui.close() + + if (ui.on_close_logic) + if(ui.ref) + var/href = "close=1" + //world << "[src] Topic [href] [ui.ref]" + src.Topic(href, params2list(href), ui.ref) // this will direct to the atom's + // Topic() proc via client.Topic() + else + // no atomref specified (or not found) + // so just reset the user mob's machine var + if(src && src.mob) + //world << "[src] was [src.mob.machine], setting to null" + src.mob.unset_machine() + else + world << "[src] UI not found" + return \ No newline at end of file diff --git a/nano/NTLogoRevised.fla b/nano/NTLogoRevised.fla new file mode 100644 index 0000000000..47ea814344 Binary files /dev/null and b/nano/NTLogoRevised.fla differ diff --git a/nano/css/common.css b/nano/css/common.css new file mode 100644 index 0000000000..4d96bf988f --- /dev/null +++ b/nano/css/common.css @@ -0,0 +1,377 @@ +body +{ + padding: 0; + margin: 0; + font-size: 12px; + color: #ffffff; + line-height: 170%; + font-family: Verdana, Geneva, sans-serif; + background: #272727 url(uiBackground.png) 50% 0 repeat-x; +} + +hr +{ + background-color: #40628a; + height: 1px; +} + +a, a:link, a:visited, a:active, .link, .linkOn, .linkOff, .selected, .disabled +{ + color: #ffffff; + text-decoration: none; + background: #40628a; + border: 1px solid #161616; + padding: 0px 4px 4px 0px; + margin: 0 2px 2px 0; + cursor:default; +} + +.link +{ + float: left; + min-width: 40px; + height: 16px; +} + +a:hover, .linkActive:hover +{ + background: #507aac; +} + +.linkPending, .linkPending:hover +{ + color: #ffffff; + background: #507aac; +} + +a.white, a.white:link, a.white:visited, a.white:active +{ + color: #40628a; + text-decoration: none; + background: #ffffff; + border: 1px solid #161616; + padding: 1px 4px 1px 4px; + margin: 0 2px 0 0; + cursor:default; +} + +a.white:hover +{ + color: #ffffff; + background: #40628a; +} + +.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover +{ + color: #ffffff; + background: #2f943c; +} + +.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover +{ + color: #ffffff; + background: #999999; + border-color: #666666; +} + +a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon +{ + position: relative; + padding: 1px 4px 2px 20px; +} + +a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img +{ + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; +} + +ul +{ + padding: 4px 0 0 10px; + margin: 0; + list-style-type: none; +} + +li +{ + padding: 0 0 2px 0; +} + +img, a img +{ + border-style:none; +} + +h1, h2, h3, h4, h5, h6 +{ + margin: 0; + padding: 16px 0 8px 0; + color: #517087; + clear: both; +} + +h1 +{ + font-size: 15px; +} + +h2 +{ + font-size: 14px; +} + +h3 +{ + font-size: 13px; +} + +h4 +{ + font-size: 12px; +} + +#uiWrapper +{ + width: 100%; + height: 100%; +} + +#uiTitleWrapper +{ + position: relative; + height: 30px; +} + +#uiTitle +{ + position: absolute; + top: 6px; + left: 44px; + width: 66%; + overflow: hidden; + color: #E9C183; + font-size: 16px; +} + +#uiTitle.icon +{ + padding: 6px 8px 6px 42px; + background-position: 2px 50%; + background-repeat: no-repeat; +} + +#uiTitleFluff +{ + position: absolute; + top: 4px; + right: 12px; + width: 42px; + height: 24px; + background: url(uiTitleFluff.png) 50% 50% no-repeat; +} + +#uiStatusIcon +{ + position: absolute; + top: 4px; + left: 12px; + width: 24px; + height: 24px; +} + +#uiContent +{ + clear: both; + padding: 8px; +} + +.good +{ + color: #4f7529; + font-weight: bold; +} + +.average +{ + color: #cd6500; + font-weight: bold; +} + +.bad +{ + color: #ee0000; + font-weight: bold; +} + +.highlight +{ + color: #8BA5C4; +} + +.dark +{ + color: #272727; +} + +.notice +{ + position: relative; + background: url(uiNoticeBackground.jpg) 50% 50% no-repeat; + color: #15345A; + font-size: 12px; + font-style: italic; + font-weight: bold; + padding: 3px 8px 2px 8px; + margin: 4px; +} + +.notice.icon +{ + padding: 2px 4px 0 20px; +} + +.notice img +{ + position: absolute; + top: 0; + left: 0; + width: 16px; + height: 16px; +} + +div.notice +{ + clear: both; +} + +.item +{ + width: 100%; + clear: both; +} + +.itemLabel +{ + float: left; + width: 30%; +} + +.itemContent +{ + float: left; + width: 69%; +} +.itemContentSmall +{ + float: left; + width: 33%; +} + +.statusDisplay +{ + background: #000000; + color: #ffffff; + border: 1px solid #40628a; + padding: 4px; + margin: 3px 0; +} + +.statusLabel +{ + width: 138px; + float: left; + overflow: hidden; + color: #98B0C3; +} + +.statusValue +{ + float: left; +} + +.block +{ + padding: 8px; + margin: 10px 4px 4px 4px; + border: 1px solid #40628a; + background-color: #202020; +} + +.block h3 +{ + padding: 0; +} + +.progressBar +{ + width: 240px; + height: 14px; + border: 1px solid #666666; + float: left; + margin: 0 5px; + overflow: hidden; +} + +.progressFill +{ + width: 0%; + height: 100%; + background: #40628a; + overflow: hidden; +} + +.progressFill.good +{ + color: #ffffff; + background: #4f7529; +} + +.progressFill.average +{ + color: #ffffff; + background: #cd6500; +} + +.progressFill.bad +{ + color: #ffffff; + background: #ee0000; +} + +.progressFill.highlight +{ + color: #ffffff; + background: #8BA5C4; +} + +.clearBoth +{ + clear: both; +} + +.clearLeft +{ + clear: left; +} + +.clearRight +{ + clear: right; +} + +.line +{ + width: 100%; + clear: both; +} + +.inactive, , a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover +{ + color: #ffffff; + background: #999999; + border-color: #666666; +} \ No newline at end of file diff --git a/nano/css/icons.css b/nano/css/icons.css new file mode 100644 index 0000000000..54fd5d8290 --- /dev/null +++ b/nano/css/icons.css @@ -0,0 +1,227 @@ +/* Icons +----------------------------------*/ + +.icon24 +{ + width: 24px; + height: 24px; +} + +.icon24.uiStatusGood +{ + background: url(uiIcons24.png) 0 0 no-repeat; +} + +.icon24.uiStatusAverage +{ + background: url(uiIcons24.png) 0 -24px no-repeat; +} + +.icon24.uiStatusBad +{ + background: url(uiIcons24.png) 0 -48px no-repeat; +} + +/* states and images */ +.uiIcon16 { + float: left; + width: 16px; + height: 16px; + margin: 2px 2px 0 2px; + background-image: url(uiIcons16.png); +} + +.uiLinkPendingIcon { + display: none; + float: left; + width: 16px; + height: 16px; + margin: 2px 2px 0 2px; + background-image: url(uiLinkPendingIcon.gif); +} + +.linkPending .uiIcon16 { + display: none; +} + +.linkPending .uiLinkPendingIcon { + display: block; +} + +/* positioning */ +.uiIcon16.blank { background-position: 16px 16px; } +.uiIcon16.carat-1-n { background-position: 0 0; } +.uiIcon16.carat-1-ne { background-position: -16px 0; } +.uiIcon16.carat-1-e { background-position: -32px 0; } +.uiIcon16.carat-1-se { background-position: -48px 0; } +.uiIcon16.carat-1-s { background-position: -64px 0; } +.uiIcon16.carat-1-sw { background-position: -80px 0; } +.uiIcon16.carat-1-w { background-position: -96px 0; } +.uiIcon16.carat-1-nw { background-position: -112px 0; } +.uiIcon16.carat-2-n-s { background-position: -128px 0; } +.uiIcon16.carat-2-e-w { background-position: -144px 0; } +.uiIcon16.triangle-1-n { background-position: 0 -16px; } +.uiIcon16.triangle-1-ne { background-position: -16px -16px; } +.uiIcon16.triangle-1-e { background-position: -32px -16px; } +.uiIcon16.triangle-1-se { background-position: -48px -16px; } +.uiIcon16.triangle-1-s { background-position: -64px -16px; } +.uiIcon16.triangle-1-sw { background-position: -80px -16px; } +.uiIcon16.triangle-1-w { background-position: -96px -16px; } +.uiIcon16.triangle-1-nw { background-position: -112px -16px; } +.uiIcon16.triangle-2-n-s { background-position: -128px -16px; } +.uiIcon16.triangle-2-e-w { background-position: -144px -16px; } +.uiIcon16.arrow-1-n { background-position: 0 -32px; } +.uiIcon16.arrow-1-ne { background-position: -16px -32px; } +.uiIcon16.arrow-1-e { background-position: -32px -32px; } +.uiIcon16.arrow-1-se { background-position: -48px -32px; } +.uiIcon16.arrow-1-s { background-position: -64px -32px; } +.uiIcon16.arrow-1-sw { background-position: -80px -32px; } +.uiIcon16.arrow-1-w { background-position: -96px -32px; } +.uiIcon16.arrow-1-nw { background-position: -112px -32px; } +.uiIcon16.arrow-2-n-s { background-position: -128px -32px; } +.uiIcon16.arrow-2-ne-sw { background-position: -144px -32px; } +.uiIcon16.arrow-2-e-w { background-position: -160px -32px; } +.uiIcon16.arrow-2-se-nw { background-position: -176px -32px; } +.uiIcon16.arrowstop-1-n { background-position: -192px -32px; } +.uiIcon16.arrowstop-1-e { background-position: -208px -32px; } +.uiIcon16.arrowstop-1-s { background-position: -224px -32px; } +.uiIcon16.arrowstop-1-w { background-position: -240px -32px; } +.uiIcon16.arrowthick-1-n { background-position: 0 -48px; } +.uiIcon16.arrowthick-1-ne { background-position: -16px -48px; } +.uiIcon16.arrowthick-1-e { background-position: -32px -48px; } +.uiIcon16.arrowthick-1-se { background-position: -48px -48px; } +.uiIcon16.arrowthick-1-s { background-position: -64px -48px; } +.uiIcon16.arrowthick-1-sw { background-position: -80px -48px; } +.uiIcon16.arrowthick-1-w { background-position: -96px -48px; } +.uiIcon16.arrowthick-1-nw { background-position: -112px -48px; } +.uiIcon16.arrowthick-2-n-s { background-position: -128px -48px; } +.uiIcon16.arrowthick-2-ne-sw { background-position: -144px -48px; } +.uiIcon16.arrowthick-2-e-w { background-position: -160px -48px; } +.uiIcon16.arrowthick-2-se-nw { background-position: -176px -48px; } +.uiIcon16.arrowthickstop-1-n { background-position: -192px -48px; } +.uiIcon16.arrowthickstop-1-e { background-position: -208px -48px; } +.uiIcon16.arrowthickstop-1-s { background-position: -224px -48px; } +.uiIcon16.arrowthickstop-1-w { background-position: -240px -48px; } +.uiIcon16.arrowreturnthick-1-w { background-position: 0 -64px; } +.uiIcon16.arrowreturnthick-1-n { background-position: -16px -64px; } +.uiIcon16.arrowreturnthick-1-e { background-position: -32px -64px; } +.uiIcon16.arrowreturnthick-1-s { background-position: -48px -64px; } +.uiIcon16.arrowreturn-1-w { background-position: -64px -64px; } +.uiIcon16.arrowreturn-1-n { background-position: -80px -64px; } +.uiIcon16.arrowreturn-1-e { background-position: -96px -64px; } +.uiIcon16.arrowreturn-1-s { background-position: -112px -64px; } +.uiIcon16.arrowrefresh-1-w { background-position: -128px -64px; } +.uiIcon16.arrowrefresh-1-n { background-position: -144px -64px; } +.uiIcon16.arrowrefresh-1-e { background-position: -160px -64px; } +.uiIcon16.arrowrefresh-1-s { background-position: -176px -64px; } +.uiIcon16.arrow-4 { background-position: 0 -80px; } +.uiIcon16.arrow-4-diag { background-position: -16px -80px; } +.uiIcon16.extlink { background-position: -32px -80px; } +.uiIcon16.newwin { background-position: -48px -80px; } +.uiIcon16.refresh { background-position: -64px -80px; } +.uiIcon16.shuffle { background-position: -80px -80px; } +.uiIcon16.transfer-e-w { background-position: -96px -80px; } +.uiIcon16.transferthick-e-w { background-position: -112px -80px; } +.uiIcon16.folder-collapsed { background-position: 0 -96px; } +.uiIcon16.folder-open { background-position: -16px -96px; } +.uiIcon16.document { background-position: -32px -96px; } +.uiIcon16.document-b { background-position: -48px -96px; } +.uiIcon16.note { background-position: -64px -96px; } +.uiIcon16.mail-closed { background-position: -80px -96px; } +.uiIcon16.mail-open { background-position: -96px -96px; } +.uiIcon16.suitcase { background-position: -112px -96px; } +.uiIcon16.comment { background-position: -128px -96px; } +.uiIcon16.person { background-position: -144px -96px; } +.uiIcon16.print { background-position: -160px -96px; } +.uiIcon16.trash { background-position: -176px -96px; } +.uiIcon16.locked { background-position: -192px -96px; } +.uiIcon16.unlocked { background-position: -208px -96px; } +.uiIcon16.bookmark { background-position: -224px -96px; } +.uiIcon16.tag { background-position: -240px -96px; } +.uiIcon16.home { background-position: 0 -112px; } +.uiIcon16.flag { background-position: -16px -112px; } +.uiIcon16.calendar { background-position: -32px -112px; } +.uiIcon16.cart { background-position: -48px -112px; } +.uiIcon16.pencil { background-position: -64px -112px; } +.uiIcon16.clock { background-position: -80px -112px; } +.uiIcon16.disk { background-position: -96px -112px; } +.uiIcon16.calculator { background-position: -112px -112px; } +.uiIcon16.zoomin { background-position: -128px -112px; } +.uiIcon16.zoomout { background-position: -144px -112px; } +.uiIcon16.search { background-position: -160px -112px; } +.uiIcon16.wrench { background-position: -176px -112px; } +.uiIcon16.gear { background-position: -192px -112px; } +.uiIcon16.heart { background-position: -208px -112px; } +.uiIcon16.star { background-position: -224px -112px; } +.uiIcon16.link { background-position: -240px -112px; } +.uiIcon16.cancel { background-position: 0 -128px; } +.uiIcon16.plus { background-position: -16px -128px; } +.uiIcon16.plusthick { background-position: -32px -128px; } +.uiIcon16.minus { background-position: -48px -128px; } +.uiIcon16.minusthick { background-position: -64px -128px; } +.uiIcon16.close { background-position: -80px -128px; } +.uiIcon16.closethick { background-position: -96px -128px; } +.uiIcon16.key { background-position: -112px -128px; } +.uiIcon16.lightbulb { background-position: -128px -128px; } +.uiIcon16.scissors { background-position: -144px -128px; } +.uiIcon16.clipboard { background-position: -160px -128px; } +.uiIcon16.copy { background-position: -176px -128px; } +.uiIcon16.contact { background-position: -192px -128px; } +.uiIcon16.image { background-position: -208px -128px; } +.uiIcon16.video { background-position: -224px -128px; } +.uiIcon16.script { background-position: -240px -128px; } +.uiIcon16.alert { background-position: 0 -144px; } +.uiIcon16.info { background-position: -16px -144px; } +.uiIcon16.notice { background-position: -32px -144px; } +.uiIcon16.help { background-position: -48px -144px; } +.uiIcon16.check { background-position: -64px -144px; } +.uiIcon16.bullet { background-position: -80px -144px; } +.uiIcon16.radio-on { background-position: -96px -144px; } +.uiIcon16.radio-off { background-position: -112px -144px; } +.uiIcon16.pin-w { background-position: -128px -144px; } +.uiIcon16.pin-s { background-position: -144px -144px; } +.uiIcon16.play { background-position: 0 -160px; } +.uiIcon16.pause { background-position: -16px -160px; } +.uiIcon16.seek-next { background-position: -32px -160px; } +.uiIcon16.seek-prev { background-position: -48px -160px; } +.uiIcon16.seek-end { background-position: -64px -160px; } +.uiIcon16.seek-start { background-position: -80px -160px; } +/* uiIcon-seek-first is deprecated, use uiIcon-seek-start instead */ +.uiIcon16.seek-first { background-position: -80px -160px; } +.uiIcon16.stop { background-position: -96px -160px; } +.uiIcon16.eject { background-position: -112px -160px; } +.uiIcon16.volume-off { background-position: -128px -160px; } +.uiIcon16.volume-on { background-position: -144px -160px; } +.uiIcon16.power { background-position: 0 -176px; } +.uiIcon16.signal-diag { background-position: -16px -176px; } +.uiIcon16.signal { background-position: -32px -176px; } +.uiIcon16.battery-0 { background-position: -48px -176px; } +.uiIcon16.battery-1 { background-position: -64px -176px; } +.uiIcon16.battery-2 { background-position: -80px -176px; } +.uiIcon16.battery-3 { background-position: -96px -176px; } +.uiIcon16.circle-plus { background-position: 0 -192px; } +.uiIcon16.circle-minus { background-position: -16px -192px; } +.uiIcon16.circle-close { background-position: -32px -192px; } +.uiIcon16.circle-triangle-e { background-position: -48px -192px; } +.uiIcon16.circle-triangle-s { background-position: -64px -192px; } +.uiIcon16.circle-triangle-w { background-position: -80px -192px; } +.uiIcon16.circle-triangle-n { background-position: -96px -192px; } +.uiIcon16.circle-arrow-e { background-position: -112px -192px; } +.uiIcon16.circle-arrow-s { background-position: -128px -192px; } +.uiIcon16.circle-arrow-w { background-position: -144px -192px; } +.uiIcon16.circle-arrow-n { background-position: -160px -192px; } +.uiIcon16.circle-zoomin { background-position: -176px -192px; } +.uiIcon16.circle-zoomout { background-position: -192px -192px; } +.uiIcon16.circle-check { background-position: -208px -192px; } +.uiIcon16.circlesmall-plus { background-position: 0 -208px; } +.uiIcon16.circlesmall-minus { background-position: -16px -208px; } +.uiIcon16.circlesmall-close { background-position: -32px -208px; } +.uiIcon16.squaresmall-plus { background-position: -48px -208px; } +.uiIcon16.squaresmall-minus { background-position: -64px -208px; } +.uiIcon16.squaresmall-close { background-position: -80px -208px; } +.uiIcon16.grip-dotted-vertical { background-position: 0 -224px; } +.uiIcon16.grip-dotted-horizontal { background-position: -16px -224px; } +.uiIcon16.grip-solid-vertical { background-position: -32px -224px; } +.uiIcon16.grip-solid-horizontal { background-position: -48px -224px; } +.uiIcon16.gripsmall-diagonal-se { background-position: -64px -224px; } +.uiIcon16.grip-diagonal-se { background-position: -80px -224px; } \ No newline at end of file diff --git a/nano/images/icon-eye.xcf b/nano/images/icon-eye.xcf new file mode 100644 index 0000000000..53ba738372 Binary files /dev/null and b/nano/images/icon-eye.xcf differ diff --git a/nano/images/uiBackground.png b/nano/images/uiBackground.png new file mode 100644 index 0000000000..32aa9dd7f6 Binary files /dev/null and b/nano/images/uiBackground.png differ diff --git a/nano/images/uiBackground.xcf b/nano/images/uiBackground.xcf new file mode 100644 index 0000000000..d20db24ff8 Binary files /dev/null and b/nano/images/uiBackground.xcf differ diff --git a/nano/images/uiIcons16.png b/nano/images/uiIcons16.png new file mode 100644 index 0000000000..ef42710304 Binary files /dev/null and b/nano/images/uiIcons16.png differ diff --git a/nano/images/uiIcons24.png b/nano/images/uiIcons24.png new file mode 100644 index 0000000000..ddf88b0dcd Binary files /dev/null and b/nano/images/uiIcons24.png differ diff --git a/nano/images/uiIcons24.xcf b/nano/images/uiIcons24.xcf new file mode 100644 index 0000000000..5dcd8fd216 Binary files /dev/null and b/nano/images/uiIcons24.xcf differ diff --git a/nano/images/uiLinkPendingIcon.gif b/nano/images/uiLinkPendingIcon.gif new file mode 100644 index 0000000000..c3070fd157 Binary files /dev/null and b/nano/images/uiLinkPendingIcon.gif differ diff --git a/nano/images/uiNoticeBackground.jpg b/nano/images/uiNoticeBackground.jpg new file mode 100644 index 0000000000..dffe2f296b Binary files /dev/null and b/nano/images/uiNoticeBackground.jpg differ diff --git a/nano/images/uiNoticeBackground.xcf b/nano/images/uiNoticeBackground.xcf new file mode 100644 index 0000000000..d1f074f102 Binary files /dev/null and b/nano/images/uiNoticeBackground.xcf differ diff --git a/nano/images/uiTitleBackground.xcf b/nano/images/uiTitleBackground.xcf new file mode 100644 index 0000000000..7de149075f Binary files /dev/null and b/nano/images/uiTitleBackground.xcf differ diff --git a/nano/images/uiTitleFluff.png b/nano/images/uiTitleFluff.png new file mode 100644 index 0000000000..513ba0c496 Binary files /dev/null and b/nano/images/uiTitleFluff.png differ diff --git a/nano/js/libraries.min.js b/nano/js/libraries.min.js new file mode 100644 index 0000000000..5a35d7361e --- /dev/null +++ b/nano/js/libraries.min.js @@ -0,0 +1,31 @@ +/*! + * jQuery JavaScript Library v1.10.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03T13:48Z + */ +(function(a1,aE){var ag,w,aA=typeof aE,aJ=a1.location,l=a1.document,bV=l.documentElement,bh=a1.jQuery,G=a1.$,Y={},a5=[],s="1.10.2",aG=a5.concat,am=a5.push,a3=a5.slice,aK=a5.indexOf,y=Y.toString,T=Y.hasOwnProperty,aO=s.trim,bI=function(e,b3){return new bI.fn.init(e,b3,w)},bz=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,aa=/\S+/g,B=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,bq=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,a=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,bg=/^[\],:{}\s]*$/,bj=/(?:^|:|,)(?:\s*\[)+/g,bF=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,aX=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,bR=/^-ms-/,aT=/-([\da-z])/gi,K=function(e,b3){return b3.toUpperCase()},bW=function(e){if(l.addEventListener||e.type==="load"||l.readyState==="complete"){bk();bI.ready()}},bk=function(){if(l.addEventListener){l.removeEventListener("DOMContentLoaded",bW,false);a1.removeEventListener("load",bW,false)}else{l.detachEvent("onreadystatechange",bW);a1.detachEvent("onload",bW)}};bI.fn=bI.prototype={jquery:s,constructor:bI,init:function(e,b5,b4){var b3,b6;if(!e){return this}if(typeof e==="string"){if(e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3){b3=[null,e,null]}else{b3=bq.exec(e)}if(b3&&(b3[1]||!b5)){if(b3[1]){b5=b5 instanceof bI?b5[0]:b5;bI.merge(this,bI.parseHTML(b3[1],b5&&b5.nodeType?b5.ownerDocument||b5:l,true));if(a.test(b3[1])&&bI.isPlainObject(b5)){for(b3 in b5){if(bI.isFunction(this[b3])){this[b3](b5[b3])}else{this.attr(b3,b5[b3])}}}return this}else{b6=l.getElementById(b3[2]);if(b6&&b6.parentNode){if(b6.id!==b3[2]){return b4.find(e)}this.length=1;this[0]=b6}this.context=l;this.selector=e;return this}}else{if(!b5||b5.jquery){return(b5||b4).find(e)}else{return this.constructor(b5).find(e)}}}else{if(e.nodeType){this.context=this[0]=e;this.length=1;return this}else{if(bI.isFunction(e)){return b4.ready(e)}}}if(e.selector!==aE){this.selector=e.selector;this.context=e.context}return bI.makeArray(e,this)},selector:"",length:0,toArray:function(){return a3.call(this)},get:function(e){return e==null?this.toArray():(e<0?this[this.length+e]:this[e])},pushStack:function(e){var b3=bI.merge(this.constructor(),e);b3.prevObject=this;b3.context=this.context;return b3},each:function(b3,e){return bI.each(this,b3,e)},ready:function(e){bI.ready.promise().done(e);return this},slice:function(){return this.pushStack(a3.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(b4){var e=this.length,b3=+b4+(b4<0?e:0);return this.pushStack(b3>=0&&b30){return}ag.resolveWith(l,[bI]);if(bI.fn.trigger){bI(l).trigger("ready").off("ready")}},isFunction:function(e){return bI.type(e)==="function"},isArray:Array.isArray||function(e){return bI.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return !isNaN(parseFloat(e))&&isFinite(e)},type:function(e){if(e==null){return String(e)}return typeof e==="object"||typeof e==="function"?Y[y.call(e)]||"object":typeof e},isPlainObject:function(b5){var b3;if(!b5||bI.type(b5)!=="object"||b5.nodeType||bI.isWindow(b5)){return false}try{if(b5.constructor&&!T.call(b5,"constructor")&&!T.call(b5.constructor.prototype,"isPrototypeOf")){return false}}catch(b4){return false}if(bI.support.ownLast){for(b3 in b5){return T.call(b5,b3)}}for(b3 in b5){}return b3===aE||T.call(b5,b3)},isEmptyObject:function(b3){var e;for(e in b3){return false}return true},error:function(e){throw new Error(e)},parseHTML:function(b6,b4,b5){if(!b6||typeof b6!=="string"){return null}if(typeof b4==="boolean"){b5=b4;b4=false}b4=b4||l;var b3=a.exec(b6),e=!b5&&[];if(b3){return[b4.createElement(b3[1])]}b3=bI.buildFragment([b6],b4,e);if(e){bI(e).remove()}return bI.merge([],b3.childNodes)},parseJSON:function(e){if(a1.JSON&&a1.JSON.parse){return a1.JSON.parse(e)}if(e===null){return e}if(typeof e==="string"){e=bI.trim(e);if(e){if(bg.test(e.replace(bF,"@").replace(aX,"]").replace(bj,""))){return(new Function("return "+e))()}}}bI.error("Invalid JSON: "+e)},parseXML:function(b5){var b3,b4;if(!b5||typeof b5!=="string"){return null}try{if(a1.DOMParser){b4=new DOMParser();b3=b4.parseFromString(b5,"text/xml")}else{b3=new ActiveXObject("Microsoft.XMLDOM");b3.async="false";b3.loadXML(b5)}}catch(b6){b3=aE}if(!b3||!b3.documentElement||b3.getElementsByTagName("parsererror").length){bI.error("Invalid XML: "+b5)}return b3},noop:function(){},globalEval:function(e){if(e&&bI.trim(e)){(a1.execScript||function(b3){a1["eval"].call(a1,b3)})(e)}},camelCase:function(e){return e.replace(bR,"ms-").replace(aT,K)},nodeName:function(b3,e){return b3.nodeName&&b3.nodeName.toLowerCase()===e.toLowerCase()},each:function(b7,b8,b3){var b6,b4=0,b5=b7.length,e=Z(b7);if(b3){if(e){for(;b40&&(b3-1) in b4)}w=bI(l); +/*! + * Sizzle CSS Selector Engine v1.10.2 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03 + */ +(function(dc,ch){var cw,df,cc,cm,cF,cI,cT,dj,cG,cW,cA,cn,c5,c0,dd,cb,cD,c7="sizzle"+-(new Date()),cH=dc.document,dg=0,c1=0,b6=cy(),c6=cy(),cE=cy(),cU=false,cC=function(dk,e){if(dk===e){cU=true;return 0}return 0},db=typeof ch,cO=1<<31,cM=({}).hasOwnProperty,c9=[],da=c9.pop,cK=c9.push,b4=c9.push,cl=c9.slice,ca=c9.indexOf||function(dl){var dk=0,e=this.length;for(;dk+~]|"+co+")"+co+"*"),cY=new RegExp(co+"*[+~]"),cs=new RegExp("="+co+"*([^\\]'\"]*)"+co+"*\\]","g"),cQ=new RegExp(cj),cR=new RegExp("^"+cJ+"$"),cZ={ID:new RegExp("^#("+b3+")"),CLASS:new RegExp("^\\.("+b3+")"),TAG:new RegExp("^("+b3.replace("w","w*")+")"),ATTR:new RegExp("^"+c3),PSEUDO:new RegExp("^"+cj),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+co+"*(even|odd|(([+-]|)(\\d*)n|)"+co+"*(?:([+-]|)"+co+"*(\\d+)|))"+co+"*\\)|)","i"),bool:new RegExp("^(?:"+b5+")$","i"),needsContext:new RegExp("^"+co+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+co+"*((?:-\\d)?\\d*)"+co+"*\\)|)(?=[^-]|$)","i")},cN=/^[^{]+\{\s*\[native \w/,cP=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,b9=/^(?:input|select|textarea|button)$/i,ck=/^h\d$/i,cL=/'|\\/g,cr=new RegExp("\\\\([\\da-f]{1,6}"+co+"?|("+co+")|.)","ig"),c2=function(e,dm,dk){var dl="0x"+dm-65536;return dl!==dl||dk?dm:dl<0?String.fromCharCode(dl+65536):String.fromCharCode(dl>>10|55296,dl&1023|56320)};try{b4.apply((c9=cl.call(cH.childNodes)),cH.childNodes);c9[cH.childNodes.length].nodeType}catch(cB){b4={apply:c9.length?function(dk,e){cK.apply(dk,cl.call(e))}:function(dm,dl){var e=dm.length,dk=0;while((dm[e++]=dl[dk++])){}dm.length=e-1}}}function cu(ds,dk,dw,dy){var dx,dp,dq,du,dv,dn,dm,e,dl,dt;if((dk?dk.ownerDocument||dk:cH)!==cA){cW(dk)}dk=dk||cA;dw=dw||[];if(!ds||typeof ds!=="string"){return dw}if((du=dk.nodeType)!==1&&du!==9){return[]}if(c5&&!dy){if((dx=cP.exec(ds))){if((dq=dx[1])){if(du===9){dp=dk.getElementById(dq);if(dp&&dp.parentNode){if(dp.id===dq){dw.push(dp);return dw}}else{return dw}}else{if(dk.ownerDocument&&(dp=dk.ownerDocument.getElementById(dq))&&cD(dk,dp)&&dp.id===dq){dw.push(dp);return dw}}}else{if(dx[2]){b4.apply(dw,dk.getElementsByTagName(ds));return dw}else{if((dq=dx[3])&&df.getElementsByClassName&&dk.getElementsByClassName){b4.apply(dw,dk.getElementsByClassName(dq));return dw}}}}if(df.qsa&&(!c0||!c0.test(ds))){e=dm=c7;dl=dk;dt=du===9&&ds;if(du===1&&dk.nodeName.toLowerCase()!=="object"){dn=cf(ds);if((dm=dk.getAttribute("id"))){e=dm.replace(cL,"\\$&")}else{dk.setAttribute("id",e)}e="[id='"+e+"'] ";dv=dn.length;while(dv--){dn[dv]=e+cg(dn[dv])}dl=cY.test(ds)&&dk.parentNode||dk;dt=dn.join(",")}if(dt){try{b4.apply(dw,dl.querySelectorAll(dt));return dw}catch(dr){}finally{if(!dm){dk.removeAttribute("id")}}}}}return de(ds.replace(cq,"$1"),dk,dw,dy)}function cy(){var dk=[];function e(dl,dm){if(dk.push(dl+=" ")>cm.cacheLength){delete e[dk.shift()]}return(e[dl]=dm)}return e}function ci(e){e[c7]=true;return e}function cd(dk){var dm=cA.createElement("div");try{return !!dk(dm)}catch(dl){return false}finally{if(dm.parentNode){dm.parentNode.removeChild(dm)}dm=null}}function dh(dk,dm){var e=dk.split("|"),dl=dk.length;while(dl--){cm.attrHandle[e[dl]]=dm}}function b7(dk,e){var dm=e&&dk,dl=dm&&dk.nodeType===1&&e.nodeType===1&&(~e.sourceIndex||cO)-(~dk.sourceIndex||cO);if(dl){return dl}if(dm){while((dm=dm.nextSibling)){if(dm===e){return -1}}}return dk?1:-1}function cv(e){return function(dl){var dk=dl.nodeName.toLowerCase();return dk==="input"&&dl.type===e}}function b8(e){return function(dl){var dk=dl.nodeName.toLowerCase();return(dk==="input"||dk==="button")&&dl.type===e}}function c4(e){return ci(function(dk){dk=+dk;return ci(function(dl,dq){var dn,dm=e([],dl.length,dk),dp=dm.length;while(dp--){if(dl[(dn=dm[dp])]){dl[dn]=!(dq[dn]=dl[dn])}}})})}cI=cu.isXML=function(e){var dk=e&&(e.ownerDocument||e).documentElement;return dk?dk.nodeName!=="HTML":false};df=cu.support={};cW=cu.setDocument=function(dk){var dl=dk?dk.ownerDocument||dk:cH,e=dl.defaultView;if(dl===cA||dl.nodeType!==9||!dl.documentElement){return cA}cA=dl;cn=dl.documentElement;c5=!cI(dl);if(e&&e.attachEvent&&e!==e.top){e.attachEvent("onbeforeunload",function(){cW()})}df.attributes=cd(function(dm){dm.className="i";return !dm.getAttribute("className")});df.getElementsByTagName=cd(function(dm){dm.appendChild(dl.createComment(""));return !dm.getElementsByTagName("*").length});df.getElementsByClassName=cd(function(dm){dm.innerHTML="
";dm.firstChild.className="i";return dm.getElementsByClassName("i").length===2});df.getById=cd(function(dm){cn.appendChild(dm).id=c7;return !dl.getElementsByName||!dl.getElementsByName(c7).length});if(df.getById){cm.find.ID=function(dp,dn){if(typeof dn.getElementById!==db&&c5){var dm=dn.getElementById(dp);return dm&&dm.parentNode?[dm]:[]}};cm.filter.ID=function(dn){var dm=dn.replace(cr,c2);return function(dp){return dp.getAttribute("id")===dm}}}else{delete cm.find.ID;cm.filter.ID=function(dn){var dm=dn.replace(cr,c2);return function(dq){var dp=typeof dq.getAttributeNode!==db&&dq.getAttributeNode("id");return dp&&dp.value===dm}}}cm.find.TAG=df.getElementsByTagName?function(dm,dn){if(typeof dn.getElementsByTagName!==db){return dn.getElementsByTagName(dm)}}:function(dm,dr){var ds,dq=[],dp=0,dn=dr.getElementsByTagName(dm);if(dm==="*"){while((ds=dn[dp++])){if(ds.nodeType===1){dq.push(ds)}}return dq}return dn};cm.find.CLASS=df.getElementsByClassName&&function(dn,dm){if(typeof dm.getElementsByClassName!==db&&c5){return dm.getElementsByClassName(dn)}};dd=[];c0=[];if((df.qsa=cN.test(dl.querySelectorAll))){cd(function(dm){dm.innerHTML="";if(!dm.querySelectorAll("[selected]").length){c0.push("\\["+co+"*(?:value|"+b5+")")}if(!dm.querySelectorAll(":checked").length){c0.push(":checked")}});cd(function(dn){var dm=dl.createElement("input");dm.setAttribute("type","hidden");dn.appendChild(dm).setAttribute("t","");if(dn.querySelectorAll("[t^='']").length){c0.push("[*^$]="+co+"*(?:''|\"\")")}if(!dn.querySelectorAll(":enabled").length){c0.push(":enabled",":disabled")}dn.querySelectorAll("*,:x");c0.push(",.*:")})}if((df.matchesSelector=cN.test((cb=cn.webkitMatchesSelector||cn.mozMatchesSelector||cn.oMatchesSelector||cn.msMatchesSelector)))){cd(function(dm){df.disconnectedMatch=cb.call(dm,"div");cb.call(dm,"[s!='']:x");dd.push("!=",cj)})}c0=c0.length&&new RegExp(c0.join("|"));dd=dd.length&&new RegExp(dd.join("|"));cD=cN.test(cn.contains)||cn.compareDocumentPosition?function(dn,dm){var dq=dn.nodeType===9?dn.documentElement:dn,dp=dm&&dm.parentNode;return dn===dp||!!(dp&&dp.nodeType===1&&(dq.contains?dq.contains(dp):dn.compareDocumentPosition&&dn.compareDocumentPosition(dp)&16))}:function(dn,dm){if(dm){while((dm=dm.parentNode)){if(dm===dn){return true}}}return false};cC=cn.compareDocumentPosition?function(dn,dm){if(dn===dm){cU=true;return 0}var dp=dm.compareDocumentPosition&&dn.compareDocumentPosition&&dn.compareDocumentPosition(dm);if(dp){if(dp&1||(!df.sortDetached&&dm.compareDocumentPosition(dn)===dp)){if(dn===dl||cD(cH,dn)){return -1}if(dm===dl||cD(cH,dm)){return 1}return cG?(ca.call(cG,dn)-ca.call(cG,dm)):0}return dp&4?-1:1}return dn.compareDocumentPosition?-1:1}:function(dn,dm){var du,dr=0,dt=dn.parentNode,dq=dm.parentNode,dp=[dn],ds=[dm];if(dn===dm){cU=true;return 0}else{if(!dt||!dq){return dn===dl?-1:dm===dl?1:dt?-1:dq?1:cG?(ca.call(cG,dn)-ca.call(cG,dm)):0}else{if(dt===dq){return b7(dn,dm)}}}du=dn;while((du=du.parentNode)){dp.unshift(du)}du=dm;while((du=du.parentNode)){ds.unshift(du)}while(dp[dr]===ds[dr]){dr++}return dr?b7(dp[dr],ds[dr]):dp[dr]===cH?-1:ds[dr]===cH?1:0};return dl};cu.matches=function(dk,e){return cu(dk,null,null,e)};cu.matchesSelector=function(dl,dn){if((dl.ownerDocument||dl)!==cA){cW(dl)}dn=dn.replace(cs,"='$1']");if(df.matchesSelector&&c5&&(!dd||!dd.test(dn))&&(!c0||!c0.test(dn))){try{var dk=cb.call(dl,dn);if(dk||df.disconnectedMatch||dl.document&&dl.document.nodeType!==11){return dk}}catch(dm){}}return cu(dn,cA,null,[dl]).length>0};cu.contains=function(e,dk){if((e.ownerDocument||e)!==cA){cW(e)}return cD(e,dk)};cu.attr=function(dl,e){if((dl.ownerDocument||dl)!==cA){cW(dl)}var dk=cm.attrHandle[e.toLowerCase()],dm=dk&&cM.call(cm.attrHandle,e.toLowerCase())?dk(dl,e,!c5):ch;return dm===ch?df.attributes||!c5?dl.getAttribute(e):(dm=dl.getAttributeNode(e))&&dm.specified?dm.value:null:dm};cu.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};cu.uniqueSort=function(dl){var dm,dn=[],e=0,dk=0;cU=!df.detectDuplicates;cG=!df.sortStable&&dl.slice(0);dl.sort(cC);if(cU){while((dm=dl[dk++])){if(dm===dl[dk]){e=dn.push(dk)}}while(e--){dl.splice(dn[e],1)}}return dl};cF=cu.getText=function(dn){var dm,dk="",dl=0,e=dn.nodeType;if(!e){for(;(dm=dn[dl]);dl++){dk+=cF(dm)}}else{if(e===1||e===9||e===11){if(typeof dn.textContent==="string"){return dn.textContent}else{for(dn=dn.firstChild;dn;dn=dn.nextSibling){dk+=cF(dn)}}}else{if(e===3||e===4){return dn.nodeValue}}}return dk};cm=cu.selectors={cacheLength:50,createPseudo:ci,match:cZ,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(cr,c2);e[3]=(e[4]||e[5]||"").replace(cr,c2);if(e[2]==="~="){e[3]=" "+e[3]+" "}return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if(e[1].slice(0,3)==="nth"){if(!e[3]){cu.error(e[0])}e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd"));e[5]=+((e[7]+e[8])||e[3]==="odd")}else{if(e[3]){cu.error(e[0])}}return e},PSEUDO:function(dk){var e,dl=!dk[5]&&dk[2];if(cZ.CHILD.test(dk[0])){return null}if(dk[3]&&dk[4]!==ch){dk[2]=dk[4]}else{if(dl&&cQ.test(dl)&&(e=cf(dl,true))&&(e=dl.indexOf(")",dl.length-e)-dl.length)){dk[0]=dk[0].slice(0,e);dk[2]=dl.slice(0,e)}}return dk.slice(0,3)}},filter:{TAG:function(dk){var e=dk.replace(cr,c2).toLowerCase();return dk==="*"?function(){return true}:function(dl){return dl.nodeName&&dl.nodeName.toLowerCase()===e}},CLASS:function(e){var dk=b6[e+" "];return dk||(dk=new RegExp("(^|"+co+")"+e+"("+co+"|$)"))&&b6(e,function(dl){return dk.test(typeof dl.className==="string"&&dl.className||typeof dl.getAttribute!==db&&dl.getAttribute("class")||"")})},ATTR:function(dl,dk,e){return function(dn){var dm=cu.attr(dn,dl);if(dm==null){return dk==="!="}if(!dk){return true}dm+="";return dk==="="?dm===e:dk==="!="?dm!==e:dk==="^="?e&&dm.indexOf(e)===0:dk==="*="?e&&dm.indexOf(e)>-1:dk==="$="?e&&dm.slice(-e.length)===e:dk==="~="?(" "+dm+" ").indexOf(e)>-1:dk==="|="?dm===e||dm.slice(0,e.length+1)===e+"-":false}},CHILD:function(dk,dn,dm,dp,dl){var dr=dk.slice(0,3)!=="nth",e=dk.slice(-4)!=="last",dq=dn==="of-type";return dp===1&&dl===0?function(ds){return !!ds.parentNode}:function(dy,dw,dB){var ds,dE,dz,dD,dA,dv,dx=dr!==e?"nextSibling":"previousSibling",dC=dy.parentNode,du=dq&&dy.nodeName.toLowerCase(),dt=!dB&&!dq;if(dC){if(dr){while(dx){dz=dy;while((dz=dz[dx])){if(dq?dz.nodeName.toLowerCase()===du:dz.nodeType===1){return false}}dv=dx=dk==="only"&&!dv&&"nextSibling"}return true}dv=[e?dC.firstChild:dC.lastChild];if(e&&dt){dE=dC[c7]||(dC[c7]={});ds=dE[dk]||[];dA=ds[0]===dg&&ds[1];dD=ds[0]===dg&&ds[2];dz=dA&&dC.childNodes[dA];while((dz=++dA&&dz&&dz[dx]||(dD=dA=0)||dv.pop())){if(dz.nodeType===1&&++dD&&dz===dy){dE[dk]=[dg,dA,dD];break}}}else{if(dt&&(ds=(dy[c7]||(dy[c7]={}))[dk])&&ds[0]===dg){dD=ds[1]}else{while((dz=++dA&&dz&&dz[dx]||(dD=dA=0)||dv.pop())){if((dq?dz.nodeName.toLowerCase()===du:dz.nodeType===1)&&++dD){if(dt){(dz[c7]||(dz[c7]={}))[dk]=[dg,dD]}if(dz===dy){break}}}}}dD-=dl;return dD===dp||(dD%dp===0&&dD/dp>=0)}}},PSEUDO:function(dm,dl){var e,dk=cm.pseudos[dm]||cm.setFilters[dm.toLowerCase()]||cu.error("unsupported pseudo: "+dm);if(dk[c7]){return dk(dl)}if(dk.length>1){e=[dm,dm,"",dl];return cm.setFilters.hasOwnProperty(dm.toLowerCase())?ci(function(dq,ds){var dp,dn=dk(dq,dl),dr=dn.length;while(dr--){dp=ca.call(dq,dn[dr]);dq[dp]=!(ds[dp]=dn[dr])}}):function(dn){return dk(dn,0,e)}}return dk}},pseudos:{not:ci(function(e){var dk=[],dl=[],dm=cT(e.replace(cq,"$1"));return dm[c7]?ci(function(dp,du,ds,dq){var dt,dn=dm(dp,null,dq,[]),dr=dp.length;while(dr--){if((dt=dn[dr])){dp[dr]=!(du[dr]=dt)}}}):function(dq,dp,dn){dk[0]=dq;dm(dk,null,dn,dl);return !dl.pop()}}),has:ci(function(e){return function(dk){return cu(e,dk).length>0}}),contains:ci(function(e){return function(dk){return(dk.textContent||dk.innerText||cF(dk)).indexOf(e)>-1}}),lang:ci(function(e){if(!cR.test(e||"")){cu.error("unsupported lang: "+e)}e=e.replace(cr,c2).toLowerCase();return function(dl){var dk;do{if((dk=c5?dl.lang:dl.getAttribute("xml:lang")||dl.getAttribute("lang"))){dk=dk.toLowerCase();return dk===e||dk.indexOf(e+"-")===0}}while((dl=dl.parentNode)&&dl.nodeType===1);return false}}),target:function(e){var dk=dc.location&&dc.location.hash;return dk&&dk.slice(1)===e.id},root:function(e){return e===cn},focus:function(e){return e===cA.activeElement&&(!cA.hasFocus||cA.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===false},disabled:function(e){return e.disabled===true},checked:function(e){var dk=e.nodeName.toLowerCase();return(dk==="input"&&!!e.checked)||(dk==="option"&&!!e.selected)},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling){if(e.nodeName>"@"||e.nodeType===3||e.nodeType===4){return false}}return true},parent:function(e){return !cm.pseudos.empty(e)},header:function(e){return ck.test(e.nodeName)},input:function(e){return b9.test(e.nodeName)},button:function(dk){var e=dk.nodeName.toLowerCase();return e==="input"&&dk.type==="button"||e==="button"},text:function(dk){var e;return dk.nodeName.toLowerCase()==="input"&&dk.type==="text"&&((e=dk.getAttribute("type"))==null||e.toLowerCase()===dk.type)},first:c4(function(){return[0]}),last:c4(function(e,dk){return[dk-1]}),eq:c4(function(e,dl,dk){return[dk<0?dk+dl:dk]}),even:c4(function(e,dl){var dk=0;for(;dk=0;){e.push(dk)}return e}),gt:c4(function(e,dm,dl){var dk=dl<0?dl+dm:dl;for(;++dk1?function(dn,dm,dk){var dl=e.length;while(dl--){if(!e[dl](dn,dm,dk)){return false}}return true}:e[0]}function cX(e,dk,dl,dm,dq){var dn,dt=[],dp=0,dr=e.length,ds=dk!=null;for(;dp-1){dA[dC]=!(dx[dC]=du)}}}}else{dw=cX(dw===dx?dw.splice(dr,dw.length):dw);if(dp){dp(null,dx,dw,dz)}else{b4.apply(dx,dw)}}})}function c8(dq){var dk,dn,dl,dp=dq.length,dt=cm.relative[dq[0].type],du=dt||cm.relative[" "],dm=dt?1:0,dr=cp(function(dv){return dv===dk},du,true),ds=cp(function(dv){return ca.call(dk,dv)>-1},du,true),e=[function(dx,dw,dv){return(!dt&&(dv||dw!==dj))||((dk=dw).nodeType?dr(dx,dw,dv):ds(dx,dw,dv))}];for(;dm1&&di(e),dm>1&&cg(dq.slice(0,dm-1).concat({value:dq[dm-2].type===" "?"*":""})).replace(cq,"$1"),dn,dm0,dn=dm.length>0,dk=function(dz,dt,dy,dx,dF){var du,dv,dA,dE=[],dD=0,dw="0",dq=dz&&[],dB=dF!=null,dC=dj,ds=dz||dn&&cm.find.TAG("*",dF&&dt.parentNode||dt),dr=(dg+=dC==null?1:Math.random()||0.1);if(dB){dj=dt!==cA&&dt;cc=dp}for(;(du=ds[dw])!=null;dw++){if(dn&&du){dv=0;while((dA=dm[dv++])){if(dA(du,dt,dy)){dx.push(du);break}}if(dB){dg=dr;cc=++dp}}if(e){if((du=!dA&&du)){dD--}if(dz){dq.push(du)}}}dD+=dw;if(e&&dw!==dD){dv=0;while((dA=dl[dv++])){dA(dq,dE,dt,dy)}if(dz){if(dD>0){while(dw--){if(!(dq[dw]||dE[dw])){dE[dw]=da.call(dx)}}}dE=cX(dE)}b4.apply(dx,dE);if(dB&&!dz&&dE.length>0&&(dD+dl.length)>1){cu.uniqueSort(dx)}}if(dB){dg=dr;dj=dC}return dq};return e?ci(dk):dk}cT=cu.compile=function(e,dp){var dl,dk=[],dn=[],dm=cE[e+" "];if(!dm){if(!dp){dp=cf(e)}dl=dp.length;while(dl--){dm=c8(dp[dl]);if(dm[c7]){dk.push(dm)}else{dn.push(dm)}}dm=cE(e,cV(dn,dk))}return dm};function cx(dk,dn,dm){var dl=0,e=dn.length;for(;dl2&&(dk=ds[0]).type==="ID"&&df.getById&&e.nodeType===9&&c5&&cm.relative[ds[1].type]){e=(cm.find.ID(dk.matches[0].replace(cr,c2),e)||[])[0];if(!e){return dm}dl=dl.slice(ds.shift().value.length)}dn=cZ.needsContext.test(dl)?0:ds.length;while(dn--){dk=ds[dn];if(cm.relative[(dt=dk.type)]){break}if((dr=cm.find[dt])){if((dq=dr(dk.matches[0].replace(cr,c2),cY.test(ds[0].type)&&e.parentNode||e))){ds.splice(dn,1);dl=dq.length&&cg(ds);if(!dl){b4.apply(dm,dq);return dm}break}}}}}cT(dl,dp)(dq,e,!c5,dm,cY.test(dl));return dm}df.sortStable=c7.split("").sort(cC).join("")===c7;df.detectDuplicates=cU;cW();df.sortDetached=cd(function(e){return e.compareDocumentPosition(cA.createElement("div"))&1});if(!cd(function(e){e.innerHTML="";return e.firstChild.getAttribute("href")==="#"})){dh("type|href|height|width",function(dk,e,dl){if(!dl){return dk.getAttribute(e,e.toLowerCase()==="type"?1:2)}})}if(!df.attributes||!cd(function(e){e.innerHTML="";e.firstChild.setAttribute("value","");return e.firstChild.getAttribute("value")===""})){dh("value",function(dk,e,dl){if(!dl&&dk.nodeName.toLowerCase()==="input"){return dk.defaultValue}})}if(!cd(function(e){return e.getAttribute("disabled")==null})){dh(b5,function(dk,e,dm){var dl;if(!dm){return(dl=dk.getAttributeNode(e))&&dl.specified?dl.value:dk[e]===true?e.toLowerCase():null}})}bI.find=cu;bI.expr=cu.selectors;bI.expr[":"]=bI.expr.pseudos;bI.unique=cu.uniqueSort;bI.text=cu.getText;bI.isXMLDoc=cu.isXML;bI.contains=cu.contains})(a1);var bY={};function ac(b3){var e=bY[b3]={};bI.each(b3.match(aa)||[],function(b5,b4){e[b4]=true});return e}bI.Callbacks=function(cc){cc=typeof cc==="string"?(bY[cc]||ac(cc)):bI.extend({},cc);var b6,b5,e,b7,b8,b4,b9=[],ca=!cc.once&&[],b3=function(cd){b5=cc.memory&&cd;e=true;b8=b4||0;b4=0;b7=b9.length;b6=true;for(;b9&&b8-1){b9.splice(ce,1);if(b6){if(ce<=b7){b7--}if(ce<=b8){b8--}}}})}return this},has:function(cd){return cd?bI.inArray(cd,b9)>-1:!!(b9&&b9.length)},empty:function(){b9=[];b7=0;return this},disable:function(){b9=ca=b5=aE;return this},disabled:function(){return !b9},lock:function(){ca=aE;if(!b5){cb.disable()}return this},locked:function(){return !ca},fireWith:function(ce,cd){if(b9&&(!e||ca)){cd=cd||[];cd=[ce,cd.slice?cd.slice():cd];if(b6){ca.push(cd)}else{b3(cd)}}return this},fire:function(){cb.fireWith(this,arguments);return this},fired:function(){return !!e}};return cb};bI.extend({Deferred:function(b4){var b3=[["resolve","done",bI.Callbacks("once memory"),"resolved"],["reject","fail",bI.Callbacks("once memory"),"rejected"],["notify","progress",bI.Callbacks("memory")]],b5="pending",b6={state:function(){return b5},always:function(){e.done(arguments).fail(arguments);return this},then:function(){var b7=arguments;return bI.Deferred(function(b8){bI.each(b3,function(ca,b9){var cc=b9[0],cb=bI.isFunction(b7[ca])&&b7[ca];e[b9[1]](function(){var cd=cb&&cb.apply(this,arguments);if(cd&&bI.isFunction(cd.promise)){cd.promise().done(b8.resolve).fail(b8.reject).progress(b8.notify)}else{b8[cc+"With"](this===b6?b8.promise():this,cb?[cd]:arguments)}})});b7=null}).promise()},promise:function(b7){return b7!=null?bI.extend(b7,b6):b6}},e={};b6.pipe=b6.then;bI.each(b3,function(b8,b7){var ca=b7[2],b9=b7[3];b6[b7[1]]=ca.add;if(b9){ca.add(function(){b5=b9},b3[b8^1][2].disable,b3[2][2].lock)}e[b7[0]]=function(){e[b7[0]+"With"](this===e?b6:this,arguments);return this};e[b7[0]+"With"]=ca.fireWith});b6.promise(e);if(b4){b4.call(e,e)}return e},when:function(b6){var b4=0,b8=a3.call(arguments),e=b8.length,b3=e!==1||(b6&&bI.isFunction(b6.promise))?e:0,cb=b3===1?b6:bI.Deferred(),b5=function(cd,ce,cc){return function(cf){ce[cd]=this;cc[cd]=arguments.length>1?a3.call(arguments):cf;if(cc===ca){cb.notifyWith(ce,cc)}else{if(!(--b3)){cb.resolveWith(ce,cc)}}}},ca,b7,b9;if(e>1){ca=new Array(e);b7=new Array(e);b9=new Array(e);for(;b4
a";cd=b3.getElementsByTagName("*")||[];cb=b3.getElementsByTagName("a")[0];if(!cb||!cb.style||!cd.length){return ce}cc=l.createElement("select");b5=cc.appendChild(l.createElement("option"));ca=b3.getElementsByTagName("input")[0];cb.style.cssText="top:1px;float:left;opacity:.5";ce.getSetAttribute=b3.className!=="t";ce.leadingWhitespace=b3.firstChild.nodeType===3;ce.tbody=!b3.getElementsByTagName("tbody").length;ce.htmlSerialize=!!b3.getElementsByTagName("link").length;ce.style=/top/.test(cb.getAttribute("style"));ce.hrefNormalized=cb.getAttribute("href")==="/a";ce.opacity=/^0.5/.test(cb.style.opacity);ce.cssFloat=!!cb.style.cssFloat;ce.checkOn=!!ca.value;ce.optSelected=b5.selected;ce.enctype=!!l.createElement("form").enctype;ce.html5Clone=l.createElement("nav").cloneNode(true).outerHTML!=="<:nav>";ce.inlineBlockNeedsLayout=false;ce.shrinkWrapBlocks=false;ce.pixelPosition=false;ce.deleteExpando=true;ce.noCloneEvent=true;ce.reliableMarginRight=true;ce.boxSizingReliable=true;ca.checked=true;ce.noCloneChecked=ca.cloneNode(true).checked;cc.disabled=true;ce.optDisabled=!b5.disabled;try{delete b3.test}catch(b8){ce.deleteExpando=false}ca=l.createElement("input");ca.setAttribute("value","");ce.input=ca.getAttribute("value")==="";ca.value="t";ca.setAttribute("type","radio");ce.radioValue=ca.value==="t";ca.setAttribute("checked","t");ca.setAttribute("name","t");b9=l.createDocumentFragment();b9.appendChild(ca);ce.appendChecked=ca.checked;ce.checkClone=b9.cloneNode(true).cloneNode(true).lastChild.checked;if(b3.attachEvent){b3.attachEvent("onclick",function(){ce.noCloneEvent=false});b3.cloneNode(true).click()}for(b6 in {submit:true,change:true,focusin:true}){b3.setAttribute(b7="on"+b6,"t");ce[b6+"Bubbles"]=b7 in a1||b3.attributes[b7].expando===false}b3.style.backgroundClip="content-box";b3.cloneNode(true).style.backgroundClip="";ce.clearCloneStyle=b3.style.backgroundClip==="content-box";for(b6 in bI(ce)){break}ce.ownLast=b6!=="0";bI(function(){var cf,ci,ch,cg="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",e=l.getElementsByTagName("body")[0];if(!e){return}cf=l.createElement("div");cf.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";e.appendChild(cf).appendChild(b3);b3.innerHTML="
t
";ch=b3.getElementsByTagName("td");ch[0].style.cssText="padding:0;margin:0;border:0;display:none";b4=(ch[0].offsetHeight===0);ch[0].style.display="";ch[1].style.display="none";ce.reliableHiddenOffsets=b4&&(ch[0].offsetHeight===0);b3.innerHTML="";b3.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";bI.swap(e,e.style.zoom!=null?{zoom:1}:{},function(){ce.boxSizing=b3.offsetWidth===4});if(a1.getComputedStyle){ce.pixelPosition=(a1.getComputedStyle(b3,null)||{}).top!=="1%";ce.boxSizingReliable=(a1.getComputedStyle(b3,null)||{width:"4px"}).width==="4px";ci=b3.appendChild(l.createElement("div"));ci.style.cssText=b3.style.cssText=cg;ci.style.marginRight=ci.style.width="0";b3.style.width="1px";ce.reliableMarginRight=!parseFloat((a1.getComputedStyle(ci,null)||{}).marginRight)}if(typeof b3.style.zoom!==aA){b3.innerHTML="";b3.style.cssText=cg+"width:1px;padding:1px;display:inline;zoom:1";ce.inlineBlockNeedsLayout=(b3.offsetWidth===3);b3.style.display="block";b3.innerHTML="
";b3.firstChild.style.width="5px";ce.shrinkWrapBlocks=(b3.offsetWidth!==3);if(ce.inlineBlockNeedsLayout){e.style.zoom=1}}e.removeChild(cf);cf=b3=ch=ci=null});cd=cc=b9=b5=cb=ca=null;return ce})({});var bv=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,aL=/([A-Z])/g;function a9(b5,b3,b7,b6){if(!bI.acceptData(b5)){return}var b9,b8,ca=bI.expando,cb=b5.nodeType,e=cb?bI.cache:b5,b4=cb?b5[ca]:b5[ca]&&ca;if((!b4||!e[b4]||(!b6&&!e[b4].data))&&b7===aE&&typeof b3==="string"){return}if(!b4){if(cb){b4=b5[ca]=a5.pop()||bI.guid++}else{b4=ca}}if(!e[b4]){e[b4]=cb?{}:{toJSON:bI.noop}}if(typeof b3==="object"||typeof b3==="function"){if(b6){e[b4]=bI.extend(e[b4],b3)}else{e[b4].data=bI.extend(e[b4].data,b3)}}b8=e[b4];if(!b6){if(!b8.data){b8.data={}}b8=b8.data}if(b7!==aE){b8[bI.camelCase(b3)]=b7}if(typeof b3==="string"){b9=b8[b3];if(b9==null){b9=b8[bI.camelCase(b3)]}}else{b9=b8}return b9}function X(b6,b4,e){if(!bI.acceptData(b6)){return}var b8,b5,b7=b6.nodeType,b3=b7?bI.cache:b6,b9=b7?b6[bI.expando]:bI.expando;if(!b3[b9]){return}if(b4){b8=e?b3[b9]:b3[b9].data;if(b8){if(!bI.isArray(b4)){if(b4 in b8){b4=[b4]}else{b4=bI.camelCase(b4);if(b4 in b8){b4=[b4]}else{b4=b4.split(" ")}}}else{b4=b4.concat(bI.map(b4,bI.camelCase))}b5=b4.length;while(b5--){delete b8[b4[b5]]}if(e?!L(b8):!bI.isEmptyObject(b8)){return}}}if(!e){delete b3[b9].data;if(!L(b3[b9])){return}}if(b7){bI.cleanData([b6],true)}else{if(bI.support.deleteExpando||b3!=b3.window){delete b3[b9]}else{b3[b9]=null}}}bI.extend({cache:{},noData:{applet:true,embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){e=e.nodeType?bI.cache[e[bI.expando]]:e[bI.expando];return !!e&&!L(e)},data:function(b3,e,b4){return a9(b3,e,b4)},removeData:function(b3,e){return X(b3,e)},_data:function(b3,e,b4){return a9(b3,e,b4,true)},_removeData:function(b3,e){return X(b3,e,true)},acceptData:function(b3){if(b3.nodeType&&b3.nodeType!==1&&b3.nodeType!==9){return false}var e=b3.nodeName&&bI.noData[b3.nodeName.toLowerCase()];return !e||e!==true&&b3.getAttribute("classid")===e}});bI.fn.extend({data:function(b5,b8){var b3,e,b7=null,b4=0,b6=this[0];if(b5===aE){if(this.length){b7=bI.data(b6);if(b6.nodeType===1&&!bI._data(b6,"parsedAttrs")){b3=b6.attributes;for(;b41?this.each(function(){bI.data(this,b5,b8)}):b6?bx(b6,b5,bI.data(b6,b5)):null},removeData:function(e){return this.each(function(){bI.removeData(this,e)})}});function bx(b5,b4,b6){if(b6===aE&&b5.nodeType===1){var b3="data-"+b4.replace(aL,"-$1").toLowerCase();b6=b5.getAttribute(b3);if(typeof b6==="string"){try{b6=b6==="true"?true:b6==="false"?false:b6==="null"?null:+b6+""===b6?+b6:bv.test(b6)?bI.parseJSON(b6):b6}catch(b7){}bI.data(b5,b4,b6)}else{b6=aE}}return b6}function L(b3){var e;for(e in b3){if(e==="data"&&bI.isEmptyObject(b3[e])){continue}if(e!=="toJSON"){return false}}return true}bI.extend({queue:function(b4,b3,b5){var e;if(b4){b3=(b3||"fx")+"queue";e=bI._data(b4,b3);if(b5){if(!e||bI.isArray(b5)){e=bI._data(b4,b3,bI.makeArray(b5))}else{e.push(b5)}}return e||[]}},dequeue:function(b7,b6){b6=b6||"fx";var b3=bI.queue(b7,b6),b8=b3.length,b5=b3.shift(),e=bI._queueHooks(b7,b6),b4=function(){bI.dequeue(b7,b6)};if(b5==="inprogress"){b5=b3.shift();b8--}if(b5){if(b6==="fx"){b3.unshift("inprogress")}delete e.stop;b5.call(b7,b4,e)}if(!b8&&e){e.empty.fire()}},_queueHooks:function(b4,b3){var e=b3+"queueHooks";return bI._data(b4,e)||bI._data(b4,e,{empty:bI.Callbacks("once memory").add(function(){bI._removeData(b4,b3+"queue");bI._removeData(b4,e)})})}});bI.fn.extend({queue:function(e,b3){var b4=2;if(typeof e!=="string"){b3=e;e="fx";b4--}if(arguments.length1)},removeAttr:function(e){return this.each(function(){bI.removeAttr(this,e)})},prop:function(e,b3){return bI.access(this,bI.prop,e,b3,arguments.length>1)},removeProp:function(e){e=bI.propFix[e]||e;return this.each(function(){try{this[e]=aE;delete this[e]}catch(b3){}})},addClass:function(b9){var b3,e,ca,b6,b4,b5=0,b7=this.length,b8=typeof b9==="string"&&b9;if(bI.isFunction(b9)){return this.each(function(cb){bI(this).addClass(b9.call(this,cb,this.className))})}if(b8){b3=(b9||"").match(aa)||[];for(;b5=0){ca=ca.replace(" "+b6+" "," ")}}e.className=b9?bI.trim(ca):""}}}return this},toggleClass:function(b4,e){var b3=typeof b4;if(typeof e==="boolean"&&b3==="string"){return e?this.addClass(b4):this.removeClass(b4)}if(bI.isFunction(b4)){return this.each(function(b5){bI(this).toggleClass(b4.call(this,b5,this.className,e),e)})}return this.each(function(){if(b3==="string"){var b7,b6=0,b5=bI(this),b8=b4.match(aa)||[];while((b7=b8[b6++])){if(b5.hasClass(b7)){b5.removeClass(b7)}else{b5.addClass(b7)}}}else{if(b3===aA||b3==="boolean"){if(this.className){bI._data(this,"__className__",this.className)}this.className=this.className||b4===false?"":bI._data(this,"__className__")||""}}})},hasClass:function(e){var b5=" "+e+" ",b4=0,b3=this.length;for(;b4=0){return true}}return false},val:function(b5){var b3,e,b6,b4=this[0];if(!arguments.length){if(b4){e=bI.valHooks[b4.type]||bI.valHooks[b4.nodeName.toLowerCase()];if(e&&"get" in e&&(b3=e.get(b4,"value"))!==aE){return b3}b3=b4.value;return typeof b3==="string"?b3.replace(ah,""):b3==null?"":b3}return}b6=bI.isFunction(b5);return this.each(function(b7){var b8;if(this.nodeType!==1){return}if(b6){b8=b5.call(this,b7,bI(this).val())}else{b8=b5}if(b8==null){b8=""}else{if(typeof b8==="number"){b8+=""}else{if(bI.isArray(b8)){b8=bI.map(b8,function(b9){return b9==null?"":b9+""})}}}e=bI.valHooks[this.type]||bI.valHooks[this.nodeName.toLowerCase()];if(!e||!("set" in e)||e.set(this,b8,"value")===aE){this.value=b8}})}});bI.extend({valHooks:{option:{get:function(e){var b3=bI.find.attr(e,"value");return b3!=null?b3:e.text}},select:{get:function(e){var b8,b4,ca=e.options,b6=e.selectedIndex,b5=e.type==="select-one"||b6<0,b9=b5?null:[],b7=b5?b6+1:ca.length,b3=b6<0?b7:b5?b6:0;for(;b3=0)){b8=true}}if(!b8){b6.selectedIndex=-1}return e}}},attr:function(b6,b5,b7){var e,b4,b3=b6.nodeType;if(!b6||b3===3||b3===8||b3===2){return}if(typeof b6.getAttribute===aA){return bI.prop(b6,b5,b7)}if(b3!==1||!bI.isXMLDoc(b6)){b5=b5.toLowerCase();e=bI.attrHooks[b5]||(bI.expr.match.bool.test(b5)?bZ:a7)}if(b7!==aE){if(b7===null){bI.removeAttr(b6,b5)}else{if(e&&"set" in e&&(b4=e.set(b6,b7,b5))!==aE){return b4}else{b6.setAttribute(b5,b7+"");return b7}}}else{if(e&&"get" in e&&(b4=e.get(b6,b5))!==null){return b4}else{b4=bI.find.attr(b6,b5);return b4==null?aE:b4}}},removeAttr:function(b4,b6){var e,b5,b3=0,b7=b6&&b6.match(aa);if(b7&&b4.nodeType===1){while((e=b7[b3++])){b5=bI.propFix[e]||e;if(bI.expr.match.bool.test(e)){if(bE&&bO||!ao.test(e)){b4[b5]=false}else{b4[bI.camelCase("default-"+e)]=b4[b5]=false}}else{bI.attr(b4,e,"")}b4.removeAttribute(bO?e:b5)}}},attrHooks:{type:{set:function(e,b3){if(!bI.support.radioValue&&b3==="radio"&&bI.nodeName(e,"input")){var b4=e.value;e.setAttribute("type",b3);if(b4){e.value=b4}return b3}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(b7,b5,b8){var b4,e,b6,b3=b7.nodeType;if(!b7||b3===3||b3===8||b3===2){return}b6=b3!==1||!bI.isXMLDoc(b7);if(b6){b5=bI.propFix[b5]||b5;e=bI.propHooks[b5]}if(b8!==aE){return e&&"set" in e&&(b4=e.set(b7,b8,b5))!==aE?b4:(b7[b5]=b8)}else{return e&&"get" in e&&(b4=e.get(b7,b5))!==null?b4:b7[b5]}},propHooks:{tabIndex:{get:function(b3){var e=bI.find.attr(b3,"tabindex");return e?parseInt(e,10):aD.test(b3.nodeName)||C.test(b3.nodeName)&&b3.href?0:-1}}}});bZ={set:function(b3,b4,e){if(b4===false){bI.removeAttr(b3,e)}else{if(bE&&bO||!ao.test(e)){b3.setAttribute(!bO&&bI.propFix[e]||e,e)}else{b3[bI.camelCase("default-"+e)]=b3[e]=true}}return e}};bI.each(bI.expr.match.bool.source.match(/\w+/g),function(b4,b3){var e=bI.expr.attrHandle[b3]||bI.find.attr;bI.expr.attrHandle[b3]=bE&&bO||!ao.test(b3)?function(b8,b6,b9){var b7=bI.expr.attrHandle[b6],b5=b9?aE:(bI.expr.attrHandle[b6]=aE)!=e(b8,b6,b9)?b6.toLowerCase():null;bI.expr.attrHandle[b6]=b7;return b5}:function(b6,b5,b7){return b7?aE:b6[bI.camelCase("default-"+b5)]?b5.toLowerCase():null}});if(!bE||!bO){bI.attrHooks.value={set:function(b3,b4,e){if(bI.nodeName(b3,"input")){b3.defaultValue=b4}else{return a7&&a7.set(b3,b4,e)}}}}if(!bO){a7={set:function(b4,b5,b3){var e=b4.getAttributeNode(b3);if(!e){b4.setAttributeNode((e=b4.ownerDocument.createAttribute(b3)))}e.value=b5+="";return b3==="value"||b5===b4.getAttribute(b3)?b5:aE}};bI.expr.attrHandle.id=bI.expr.attrHandle.name=bI.expr.attrHandle.coords=function(b4,b3,b5){var e;return b5?aE:(e=b4.getAttributeNode(b3))&&e.value!==""?e.value:null};bI.valHooks.button={get:function(b4,b3){var e=b4.getAttributeNode(b3);return e&&e.specified?e.value:aE},set:a7.set};bI.attrHooks.contenteditable={set:function(b3,b4,e){a7.set(b3,b4===""?false:b4,e)}};bI.each(["width","height"],function(b3,e){bI.attrHooks[e]={set:function(b4,b5){if(b5===""){b4.setAttribute(e,"auto");return b5}}}})}if(!bI.support.hrefNormalized){bI.each(["href","src"],function(b3,e){bI.propHooks[e]={get:function(b4){return b4.getAttribute(e,4)}}})}if(!bI.support.style){bI.attrHooks.style={get:function(e){return e.style.cssText||aE},set:function(e,b3){return(e.style.cssText=b3+"")}}}if(!bI.support.optSelected){bI.propHooks.selected={get:function(b3){var e=b3.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}}}bI.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){bI.propFix[this.toLowerCase()]=this});if(!bI.support.enctype){bI.propFix.enctype="encoding"}bI.each(["radio","checkbox"],function(){bI.valHooks[this]={set:function(e,b3){if(bI.isArray(b3)){return(e.checked=bI.inArray(bI(e).val(),b3)>=0)}}};if(!bI.support.checkOn){bI.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value}}});var bG=/^(?:input|select|textarea)$/i,a2=/^key/,bM=/^(?:mouse|contextmenu)|click/,bA=/^(?:focusinfocus|focusoutblur)$/,bt=/^([^.]*)(?:\.(.+)|)$/;function P(){return true}function V(){return false}function ai(){try{return l.activeElement}catch(e){}}bI.event={global:{},add:function(b6,cb,cg,b8,b7){var b9,ch,ci,b4,cd,ca,cf,b5,ce,e,b3,cc=bI._data(b6);if(!cc){return}if(cg.handler){b4=cg;cg=b4.handler;b7=b4.selector}if(!cg.guid){cg.guid=bI.guid++}if(!(ch=cc.events)){ch=cc.events={}}if(!(ca=cc.handle)){ca=cc.handle=function(cj){return typeof bI!==aA&&(!cj||bI.event.triggered!==cj.type)?bI.event.dispatch.apply(ca.elem,arguments):aE};ca.elem=b6}cb=(cb||"").match(aa)||[""];ci=cb.length;while(ci--){b9=bt.exec(cb[ci])||[];ce=b3=b9[1];e=(b9[2]||"").split(".").sort();if(!ce){continue}cd=bI.event.special[ce]||{};ce=(b7?cd.delegateType:cd.bindType)||ce;cd=bI.event.special[ce]||{};cf=bI.extend({type:ce,origType:b3,data:b8,handler:cg,guid:cg.guid,selector:b7,needsContext:b7&&bI.expr.match.needsContext.test(b7),namespace:e.join(".")},b4);if(!(b5=ch[ce])){b5=ch[ce]=[];b5.delegateCount=0;if(!cd.setup||cd.setup.call(b6,b8,e,ca)===false){if(b6.addEventListener){b6.addEventListener(ce,ca,false)}else{if(b6.attachEvent){b6.attachEvent("on"+ce,ca)}}}}if(cd.add){cd.add.call(b6,cf);if(!cf.handler.guid){cf.handler.guid=cg.guid}}if(b7){b5.splice(b5.delegateCount++,0,cf)}else{b5.push(cf)}bI.event.global[ce]=true}b6=null},remove:function(b5,cb,ci,b6,ca){var b8,cf,b9,b7,ch,cg,cd,b4,ce,e,b3,cc=bI.hasData(b5)&&bI._data(b5);if(!cc||!(cg=cc.events)){return}cb=(cb||"").match(aa)||[""];ch=cb.length;while(ch--){b9=bt.exec(cb[ch])||[];ce=b3=b9[1];e=(b9[2]||"").split(".").sort();if(!ce){for(ce in cg){bI.event.remove(b5,ce+cb[ch],ci,b6,true)}continue}cd=bI.event.special[ce]||{};ce=(b6?cd.delegateType:cd.bindType)||ce;b4=cg[ce]||[];b9=b9[2]&&new RegExp("(^|\\.)"+e.join("\\.(?:.*\\.|)")+"(\\.|$)");b7=b8=b4.length;while(b8--){cf=b4[b8];if((ca||b3===cf.origType)&&(!ci||ci.guid===cf.guid)&&(!b9||b9.test(cf.namespace))&&(!b6||b6===cf.selector||b6==="**"&&cf.selector)){b4.splice(b8,1);if(cf.selector){b4.delegateCount--}if(cd.remove){cd.remove.call(b5,cf)}}}if(b7&&!b4.length){if(!cd.teardown||cd.teardown.call(b5,e,cc.handle)===false){bI.removeEvent(b5,ce,cc.handle)}delete cg[ce]}}if(bI.isEmptyObject(cg)){delete cc.handle;bI._removeData(b5,"events")}},trigger:function(b3,ca,b6,ch){var cb,b5,cf,cg,cd,b9,b8,b7=[b6||l],ce=T.call(b3,"type")?b3.type:b3,b4=T.call(b3,"namespace")?b3.namespace.split("."):[];cf=b9=b6=b6||l;if(b6.nodeType===3||b6.nodeType===8){return}if(bA.test(ce+bI.event.triggered)){return}if(ce.indexOf(".")>=0){b4=ce.split(".");ce=b4.shift();b4.sort()}b5=ce.indexOf(":")<0&&"on"+ce;b3=b3[bI.expando]?b3:new bI.Event(ce,typeof b3==="object"&&b3);b3.isTrigger=ch?2:3;b3.namespace=b4.join(".");b3.namespace_re=b3.namespace?new RegExp("(^|\\.)"+b4.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;b3.result=aE;if(!b3.target){b3.target=b6}ca=ca==null?[b3]:bI.makeArray(ca,[b3]);cd=bI.event.special[ce]||{};if(!ch&&cd.trigger&&cd.trigger.apply(b6,ca)===false){return}if(!ch&&!cd.noBubble&&!bI.isWindow(b6)){cg=cd.delegateType||ce;if(!bA.test(cg+ce)){cf=cf.parentNode}for(;cf;cf=cf.parentNode){b7.push(cf);b9=cf}if(b9===(b6.ownerDocument||l)){b7.push(b9.defaultView||b9.parentWindow||a1)}}b8=0;while((cf=b7[b8++])&&!b3.isPropagationStopped()){b3.type=b8>1?cg:cd.bindType||ce;cb=(bI._data(cf,"events")||{})[b3.type]&&bI._data(cf,"handle");if(cb){cb.apply(cf,ca)}cb=b5&&cf[b5];if(cb&&bI.acceptData(cf)&&cb.apply&&cb.apply(cf,ca)===false){b3.preventDefault()}}b3.type=ce;if(!ch&&!b3.isDefaultPrevented()){if((!cd._default||cd._default.apply(b7.pop(),ca)===false)&&bI.acceptData(b6)){if(b5&&b6[ce]&&!bI.isWindow(b6)){b9=b6[b5];if(b9){b6[b5]=null}bI.event.triggered=ce;try{b6[ce]()}catch(cc){}bI.event.triggered=aE;if(b9){b6[b5]=b9}}}}return b3.result},dispatch:function(e){e=bI.event.fix(e);var b6,b7,cb,b3,b5,ca=[],b9=a3.call(arguments),b4=(bI._data(this,"events")||{})[e.type]||[],b8=bI.event.special[e.type]||{};b9[0]=e;e.delegateTarget=this;if(b8.preDispatch&&b8.preDispatch.call(this,e)===false){return}ca=bI.event.handlers.call(this,e,b4);b6=0;while((b3=ca[b6++])&&!e.isPropagationStopped()){e.currentTarget=b3.elem;b5=0;while((cb=b3.handlers[b5++])&&!e.isImmediatePropagationStopped()){if(!e.namespace_re||e.namespace_re.test(cb.namespace)){e.handleObj=cb;e.data=cb.data;b7=((bI.event.special[cb.origType]||{}).handle||cb.handler).apply(b3.elem,b9);if(b7!==aE){if((e.result=b7)===false){e.preventDefault();e.stopPropagation()}}}}}if(b8.postDispatch){b8.postDispatch.call(this,e)}return e.result},handlers:function(e,b4){var b3,b9,b7,b6,b8=[],b5=b4.delegateCount,ca=e.target;if(b5&&ca.nodeType&&(!e.button||e.type!=="click")){for(;ca!=this;ca=ca.parentNode||this){if(ca.nodeType===1&&(ca.disabled!==true||e.type!=="click")){b7=[];for(b6=0;b6=0:bI.find(b3,this,null,[ca]).length}if(b7[b3]){b7.push(b9)}}if(b7.length){b8.push({elem:ca,handlers:b7})}}}}if(b51?bI.unique(b5):b5);b5.selector=this.selector?this.selector+" "+b3:b3;return b5},has:function(b5){var b4,b3=bI(b5,this),e=b3.length;return this.filter(function(){for(b4=0;b4-1:b7.nodeType===1&&bI.find.matchesSelector(b7,b6))){b7=b3.push(b7);break}}}return this.pushStack(b3.length>1?bI.unique(b3):b3)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.first().prevAll().length:-1}if(typeof e==="string"){return bI.inArray(this[0],bI(e))}return bI.inArray(e.jquery?e[0]:e,this)},add:function(e,b3){var b5=typeof e==="string"?bI(e,b3):bI.makeArray(e&&e.nodeType?[e]:e),b4=bI.merge(this.get(),b5);return this.pushStack(bI.unique(b4))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function aV(b3,e){do{b3=b3[e]}while(b3&&b3.nodeType!==1);return b3}bI.each({parent:function(b3){var e=b3.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return bI.dir(e,"parentNode")},parentsUntil:function(b3,e,b4){return bI.dir(b3,"parentNode",b4)},next:function(e){return aV(e,"nextSibling")},prev:function(e){return aV(e,"previousSibling")},nextAll:function(e){return bI.dir(e,"nextSibling")},prevAll:function(e){return bI.dir(e,"previousSibling")},nextUntil:function(b3,e,b4){return bI.dir(b3,"nextSibling",b4)},prevUntil:function(b3,e,b4){return bI.dir(b3,"previousSibling",b4)},siblings:function(e){return bI.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return bI.sibling(e.firstChild)},contents:function(e){return bI.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:bI.merge([],e.childNodes)}},function(e,b3){bI.fn[e]=function(b6,b4){var b5=bI.map(this,b3,b6);if(e.slice(-5)!=="Until"){b4=b6}if(b4&&typeof b4==="string"){b5=bI.filter(b4,b5)}if(this.length>1){if(!bw[e]){b5=bI.unique(b5)}if(bs.test(e)){b5=b5.reverse()}}return this.pushStack(b5)}});bI.extend({filter:function(b5,e,b4){var b3=e[0];if(b4){b5=":not("+b5+")"}return e.length===1&&b3.nodeType===1?bI.find.matchesSelector(b3,b5)?[b3]:[]:bI.find.matches(b5,bI.grep(e,function(b6){return b6.nodeType===1}))},dir:function(b4,b3,b6){var e=[],b5=b4[b3];while(b5&&b5.nodeType!==9&&(b6===aE||b5.nodeType!==1||!bI(b5).is(b6))){if(b5.nodeType===1){e.push(b5)}b5=b5[b3]}return e},sibling:function(b4,b3){var e=[];for(;b4;b4=b4.nextSibling){if(b4.nodeType===1&&b4!==b3){e.push(b4)}}return e}});function aM(b4,e,b3){if(bI.isFunction(e)){return bI.grep(b4,function(b6,b5){return !!e.call(b6,b5,b6)!==b3})}if(e.nodeType){return bI.grep(b4,function(b5){return(b5===e)!==b3})}if(typeof e==="string"){if(al.test(e)){return bI.filter(e,b4,b3)}e=bI.filter(e,b4)}return bI.grep(b4,function(b5){return(bI.inArray(b5,e)>=0)!==b3})}function z(e){var b4=d.split("|"),b3=e.createDocumentFragment();if(b3.createElement){while(b4.length){b3.createElement(b4.pop())}}return b3}var d="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ay=/ jQuery\d+="(?:null|\d+)"/g,I=new RegExp("<(?:"+d+")[\\s/>]","i"),b2=/^\s+/,aB=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,m=/<([\w:]+)/,bX=/\s*$/g,R={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:bI.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},aQ=z(l),j=aQ.appendChild(l.createElement("div"));R.optgroup=R.option;R.tbody=R.tfoot=R.colgroup=R.caption=R.thead;R.th=R.td;bI.fn.extend({text:function(e){return bI.access(this,function(b3){return b3===aE?bI.text(this):this.empty().append((this[0]&&this[0].ownerDocument||l).createTextNode(b3))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var b3=aZ(this,e);b3.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var b3=aZ(this,e);b3.insertBefore(e,b3.firstChild)}})},before:function(){return this.domManip(arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this)}})},after:function(){return this.domManip(arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this.nextSibling)}})},remove:function(e,b6){var b5,b3=e?bI.filter(e,this):this,b4=0;for(;(b5=b3[b4])!=null;b4++){if(!b6&&b5.nodeType===1){bI.cleanData(k(b5))}if(b5.parentNode){if(b6&&bI.contains(b5.ownerDocument,b5)){br(k(b5,"script"))}b5.parentNode.removeChild(b5)}}return this},empty:function(){var b3,e=0;for(;(b3=this[e])!=null;e++){if(b3.nodeType===1){bI.cleanData(k(b3,false))}while(b3.firstChild){b3.removeChild(b3.firstChild)}if(b3.options&&bI.nodeName(b3,"select")){b3.options.length=0}}return this},clone:function(b3,e){b3=b3==null?false:b3;e=e==null?b3:e;return this.map(function(){return bI.clone(this,b3,e)})},html:function(e){return bI.access(this,function(b6){var b5=this[0]||{},b4=0,b3=this.length;if(b6===aE){return b5.nodeType===1?b5.innerHTML.replace(ay,""):aE}if(typeof b6==="string"&&!aj.test(b6)&&(bI.support.htmlSerialize||!I.test(b6))&&(bI.support.leadingWhitespace||!b2.test(b6))&&!R[(m.exec(b6)||["",""])[1].toLowerCase()]){b6=b6.replace(aB,"<$1>");try{for(;b4")){ca=b3.cloneNode(true)}else{j.innerHTML=b3.outerHTML;j.removeChild(ca=j.firstChild)}if((!bI.support.noCloneEvent||!bI.support.noCloneChecked)&&(b3.nodeType===1||b3.nodeType===11)&&!bI.isXMLDoc(b3)){b7=k(ca);b8=k(b3);for(b6=0;(b4=b8[b6])!=null;++b6){if(b7[b6]){O(b4,b7[b6])}}}if(b5){if(e){b8=b8||k(b3);b7=b7||k(ca);for(b6=0;(b4=b8[b6])!=null;b6++){aq(b4,b7[b6])}}else{aq(b3,ca)}}b7=k(ca,"script");if(b7.length>0){br(b7,!b9&&k(b3,"script"))}b7=b8=b4=null;return ca},buildFragment:function(b3,b5,ca,cf){var cb,b7,b9,ce,cg,cd,b4,b8=b3.length,b6=z(b5),e=[],cc=0;for(;cc")+b4[2];cb=b4[0];while(cb--){ce=ce.lastChild}if(!bI.support.leadingWhitespace&&b2.test(b7)){e.push(b5.createTextNode(b2.exec(b7)[0]))}if(!bI.support.tbody){b7=cg==="table"&&!bX.test(b7)?ce.firstChild:b4[1]===""&&!bX.test(b7)?ce:0;cb=b7&&b7.childNodes.length;while(cb--){if(bI.nodeName((cd=b7.childNodes[cb]),"tbody")&&!cd.childNodes.length){b7.removeChild(cd)}}}bI.merge(e,ce.childNodes);ce.textContent="";while(ce.firstChild){ce.removeChild(ce.firstChild)}ce=b6.lastChild}}}}if(ce){b6.removeChild(ce)}if(!bI.support.appendChecked){bI.grep(k(e,"input"),bU)}cc=0;while((b7=e[cc++])){if(cf&&bI.inArray(b7,cf)!==-1){continue}b9=bI.contains(b7.ownerDocument,b7);ce=k(b6.appendChild(b7),"script");if(b9){br(ce)}if(ca){cb=0;while((b7=ce[cb++])){if(by.test(b7.type||"")){ca.push(b7)}}}}ce=null;return b6},cleanData:function(b3,cb){var b5,ca,b4,b6,b7=0,cc=bI.expando,e=bI.cache,b8=bI.support.deleteExpando,b9=bI.event.special;for(;(b5=b3[b7])!=null;b7++){if(cb||bI.acceptData(b5)){b4=b5[cc];b6=b4&&e[b4];if(b6){if(b6.events){for(ca in b6.events){if(b9[ca]){bI.event.remove(b5,ca)}else{bI.removeEvent(b5,ca,b6.handle)}}}if(e[b4]){delete e[b4];if(b8){delete b5[cc]}else{if(typeof b5.removeAttribute!==aA){b5.removeAttribute(cc)}else{b5[cc]=null}}a5.push(b4)}}}}},_evalUrl:function(e){return bI.ajax({url:e,type:"GET",dataType:"script",async:false,global:false,"throws":true})}});bI.fn.extend({wrapAll:function(e){if(bI.isFunction(e)){return this.each(function(b4){bI(this).wrapAll(e.call(this,b4))})}if(this[0]){var b3=bI(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){b3.insertBefore(this[0])}b3.map(function(){var b4=this;while(b4.firstChild&&b4.firstChild.nodeType===1){b4=b4.firstChild}return b4}).append(this)}return this},wrapInner:function(e){if(bI.isFunction(e)){return this.each(function(b3){bI(this).wrapInner(e.call(this,b3))})}return this.each(function(){var b3=bI(this),b4=b3.contents();if(b4.length){b4.wrapAll(e)}else{b3.append(e)}})},wrap:function(e){var b3=bI.isFunction(e);return this.each(function(b4){bI(this).wrapAll(b3?e.call(this,b4):e)})},unwrap:function(){return this.parent().each(function(){if(!bI.nodeName(this,"body")){bI(this).replaceWith(this.childNodes)}}).end()}});var aC,bn,D,bf=/alpha\([^)]*\)/i,aR=/opacity\s*=\s*([^)]*)/,bm=/^(top|right|bottom|left)$/,E=/^(none|table(?!-c[ea]).+)/,aW=/^margin/,a8=new RegExp("^("+bz+")(.*)$","i"),U=new RegExp("^("+bz+")(?!px)[a-z%]+$","i"),Q=new RegExp("^([+-])=("+bz+")","i"),bi={BODY:"block"},bb={position:"absolute",visibility:"hidden",display:"block"},bB={letterSpacing:0,fontWeight:400},bS=["Top","Right","Bottom","Left"],at=["Webkit","O","Moz","ms"];function b(b5,b3){if(b3 in b5){return b3}var b6=b3.charAt(0).toUpperCase()+b3.slice(1),e=b3,b4=at.length;while(b4--){b3=at[b4]+b6;if(b3 in b5){return b3}}return e}function N(b3,e){b3=e||b3;return bI.css(b3,"display")==="none"||!bI.contains(b3.ownerDocument,b3)}function p(b8,e){var b9,b6,b7,b3=[],b4=0,b5=b8.length;for(;b41)},show:function(){return p(this,true)},hide:function(){return p(this)},toggle:function(e){if(typeof e==="boolean"){return e?this.show():this.hide()}return this.each(function(){if(N(this)){bI(this).show()}else{bI(this).hide()}})}});bI.extend({cssHooks:{opacity:{get:function(b4,b3){if(b3){var e=D(b4,"opacity");return e===""?"1":e}}}},cssNumber:{columnCount:true,fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":bI.support.cssFloat?"cssFloat":"styleFloat"},style:function(b5,b4,cb,b6){if(!b5||b5.nodeType===3||b5.nodeType===8||!b5.style){return}var b9,ca,cc,b7=bI.camelCase(b4),b3=b5.style;b4=bI.cssProps[b7]||(bI.cssProps[b7]=b(b3,b7));cc=bI.cssHooks[b4]||bI.cssHooks[b7];if(cb!==aE){ca=typeof cb;if(ca==="string"&&(b9=Q.exec(cb))){cb=(b9[1]+1)*b9[2]+parseFloat(bI.css(b5,b4));ca="number"}if(cb==null||ca==="number"&&isNaN(cb)){return}if(ca==="number"&&!bI.cssNumber[b7]){cb+="px"}if(!bI.support.clearCloneStyle&&cb===""&&b4.indexOf("background")===0){b3[b4]="inherit"}if(!cc||!("set" in cc)||(cb=cc.set(b5,cb,b6))!==aE){try{b3[b4]=cb}catch(b8){}}}else{if(cc&&"get" in cc&&(b9=cc.get(b5,false,b6))!==aE){return b9}return b3[b4]}},css:function(b8,b6,b3,b7){var b5,b9,e,b4=bI.camelCase(b6);b6=bI.cssProps[b4]||(bI.cssProps[b4]=b(b8.style,b4));e=bI.cssHooks[b6]||bI.cssHooks[b4];if(e&&"get" in e){b9=e.get(b8,true,b3)}if(b9===aE){b9=D(b8,b6,b7)}if(b9==="normal"&&b6 in bB){b9=bB[b6]}if(b3===""||b3){b5=parseFloat(b9);return b3===true||bI.isNumeric(b5)?b5||0:b9}return b9}});if(a1.getComputedStyle){bn=function(e){return a1.getComputedStyle(e,null)};D=function(b6,b4,b8){var b5,b3,ca,b7=b8||bn(b6),b9=b7?b7.getPropertyValue(b4)||b7[b4]:aE,e=b6.style;if(b7){if(b9===""&&!bI.contains(b6.ownerDocument,b6)){b9=bI.style(b6,b4)}if(U.test(b9)&&aW.test(b4)){b5=e.width;b3=e.minWidth;ca=e.maxWidth;e.minWidth=e.maxWidth=e.width=b9;b9=b7.width;e.width=b5;e.minWidth=b3;e.maxWidth=ca}}return b9}}else{if(l.documentElement.currentStyle){bn=function(e){return e.currentStyle};D=function(b5,b3,b8){var b4,b7,b9,b6=b8||bn(b5),ca=b6?b6[b3]:aE,e=b5.style;if(ca==null&&e&&e[b3]){ca=e[b3]}if(U.test(ca)&&!bm.test(b3)){b4=e.left;b7=b5.runtimeStyle;b9=b7&&b7.left;if(b9){b7.left=b5.currentStyle.left}e.left=b3==="fontSize"?"1em":ca;ca=e.pixelLeft+"px";e.left=b4;if(b9){b7.left=b9}}return ca===""?"auto":ca}}}function aH(e,b4,b5){var b3=a8.exec(b4);return b3?Math.max(0,b3[1]-(b5||0))+(b3[2]||"px"):b4}function au(b6,b3,e,b8,b5){var b4=e===(b8?"border":"content")?4:b3==="width"?1:0,b7=0;for(;b4<4;b4+=2){if(e==="margin"){b7+=bI.css(b6,e+bS[b4],true,b5)}if(b8){if(e==="content"){b7-=bI.css(b6,"padding"+bS[b4],true,b5)}if(e!=="margin"){b7-=bI.css(b6,"border"+bS[b4]+"Width",true,b5)}}else{b7+=bI.css(b6,"padding"+bS[b4],true,b5);if(e!=="padding"){b7+=bI.css(b6,"border"+bS[b4]+"Width",true,b5)}}}return b7}function u(b6,b3,e){var b5=true,b7=b3==="width"?b6.offsetWidth:b6.offsetHeight,b4=bn(b6),b8=bI.support.boxSizing&&bI.css(b6,"boxSizing",false,b4)==="border-box";if(b7<=0||b7==null){b7=D(b6,b3,b4);if(b7<0||b7==null){b7=b6.style[b3]}if(U.test(b7)){return b7}b5=b8&&(bI.support.boxSizingReliable||b7===b6.style[b3]);b7=parseFloat(b7)||0}return(b7+au(b6,b3,e||(b8?"border":"content"),b5,b4))+"px"}function bD(b4){var b3=l,e=bi[b4];if(!e){e=a0(b4,b3);if(e==="none"||!e){aC=(aC||bI("