Changeset 167
Author: Mighty Gorgon
(2010/01/26 22:58) About 2 years ago
Bugs fixed: * Added some conditions in sitemap.js to prevent all h2 to be altered * Added some extra files to simplify forms and db class implementation * Added a new function to database_update.php * Some adjustments to all common CSS * Minor W3C and syntax corrections (thanks to KugeLSichA and TuningBEB 2008)

{{$module_count = (!empty($jr_admin_row['user_jr_admin'])) ? count(explode(EXPLODE_SEPERATOR_CHAR, $jr_admin_row['user_jr_admin'])) : 0;$module_count = (!empty($jr_admin_row['user_jr_admin'])) ? sizeof(explode(EXPLODE_SEPERATOR_CHAR, $jr_admin_row['user_jr_admin'])) : 0;$admin_message .= '<br />' . $lang['Update'] . ": " . $configs_desc[$i];$admin_message .= '<br />' . $lang['Update'] . ': ' . $configs_desc[$i];$vars = array('clone_tpl', 'clone_style_name', 'total');$vars = array('clone_tpl', 'clone_style_name', 'total');for($i=0; $i<$total; $i++)for($i = 0; $i<$total; $i++){{{{for($a=0;$a< sizeof($key_names);$a++)for($a = 0; $a < sizeof($key_names); $a++){{'topic_title', 'topic_id', 'friendname', 'friendemail', 'drafts_list', 'agreed',<html xmlns="http://www.w3.org/1999/xhtml"><html xmlns="http://www.w3.org/1999/xhtml"><html xmlns="http://www.w3.org/1999/xhtml">{{if($status == 'sticky' && !$is_auth['auth_sticky'])if(($status == 'sticky') && !$is_auth['auth_sticky']){{if($status == 'announce' && !$is_auth['auth_announce'])if(($status == 'announce') && !$is_auth['auth_announce']){{if($status == 'super_announce' && !$is_auth['auth_globalannounce'])if(($status == 'super_announce') && !$is_auth['auth_globalannounce']){{if(empty($_POST['topic_id_list']) && empty($topic_id))if(empty($_POST['topic_id_list']) && empty($topics)){{{{//$db->clear_cache('config_plugins_');//$db->clear_cache('config_plugins_');{{// Höchten Wert von cat_order ermitteln// Identify the highest value of cat_order{{// Höchten Wert von forum_id ermitteln// Identify the highest value of forum_idthrow_error("Couldn't get forum data!", __LINE__, __FILE__, $sql);throw_error("Couldn't get forum data!", __LINE__, __FILE__, $sql);// Höchten Wert von forum_order ermitteln// Identify the highest value of forum_order{{/* Debug? Changes the status stnading of ADMIN!!! You are warned *//* Debug? Changes the status standing of ADMIN!!! You are warned */define('FORUM_CAT', 0);define('FORUM_CAT', 0);{if (defined('FIX_FORUMS') && FIX_FORUMS){echo('<div class="post-text">' . "\n");echo('<div class="post-text">' . "\n");echo('<b>' . $lang['DBUpdate_Errors'] . ':</b><br />' . "\n");echo('<b>' . $lang['DBUpdate_Errors'] . ':</b><br />' . "\n");INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (1, ':D', 'icon_biggrin.gif', 'Very Happy', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (1, ':D', 'icon_biggrin.gif', 'Very Happy', 1);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (2, ':-D', 'icon_biggrin.gif', 'Very Happy', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (2, ':-D', 'icon_biggrin.gif', 'Very Happy', 2);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (3, ':grin:', 'icon_biggrin.gif', 'Very Happy', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (3, ':grin:', 'icon_biggrin.gif', 'Very Happy', 3);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (4, ':)', 'icon_smile.gif', 'Smile', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (4, ':)', 'icon_smile.gif', 'Smile', 4);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (5, ':-)', 'icon_smile.gif', 'Smile', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (5, ':-)', 'icon_smile.gif', 'Smile', 5);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (6, ':smile:', 'icon_smile.gif', 'Smile', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (6, ':smile:', 'icon_smile.gif', 'Smile', 6);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (7, ':(', 'icon_sad.gif', 'Sad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (7, ':(', 'icon_sad.gif', 'Sad', 7);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (8, ':-(', 'icon_sad.gif', 'Sad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (8, ':-(', 'icon_sad.gif', 'Sad', 8);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (9, ':sad:', 'icon_sad.gif', 'Sad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (9, ':sad:', 'icon_sad.gif', 'Sad', 9);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (10, ':o', 'icon_surprised.gif', 'Surprised', 10);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (11, ':-o', 'icon_surprised.gif', 'Surprised', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (11, ':-o', 'icon_surprised.gif', 'Surprised', 11);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (12, ':eek:', 'icon_surprised.gif', 'Surprised', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (12, ':eek:', 'icon_surprised.gif', 'Surprised', 12);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (13, ':shock:', 'icon_eek.gif', 'Shocked', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (13, ':shock:', 'icon_eek.gif', 'Shocked', 13);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (14, ':?', 'icon_confused.gif', 'Confused', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (14, ':?', 'icon_confused.gif', 'Confused', 14);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (15, ':-?', 'icon_confused.gif', 'Confused', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (15, ':-?', 'icon_confused.gif', 'Confused', 15);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (16, ':???:', 'icon_confused.gif', 'Confused', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (16, ':???:', 'icon_confused.gif', 'Confused', 16);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (17, '8)', 'icon_cool.gif', 'Cool', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (17, '8)', 'icon_cool.gif', 'Cool', 17);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (18, '8-)', 'icon_cool.gif', 'Cool', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (18, '8-)', 'icon_cool.gif', 'Cool', 18);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (19, ':cool:', 'icon_cool.gif', 'Cool', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (19, ':cool:', 'icon_cool.gif', 'Cool', 19);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (20, ':lol:', 'icon_lol.gif', 'Laughing', 20);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (21, ':x', 'icon_mad.gif', 'Mad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (21, ':x', 'icon_mad.gif', 'Mad', 21);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (22, ':-x', 'icon_mad.gif', 'Mad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (22, ':-x', 'icon_mad.gif', 'Mad', 22);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (23, ':mad:', 'icon_mad.gif', 'Mad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (23, ':mad:', 'icon_mad.gif', 'Mad', 23);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (24, ':P', 'icon_razz.gif', 'Razz', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (24, ':P', 'icon_razz.gif', 'Razz', 24);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (25, ':-P', 'icon_razz.gif', 'Razz', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (25, ':-P', 'icon_razz.gif', 'Razz', 25);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (26, ':razz:', 'icon_razz.gif', 'Razz', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (26, ':razz:', 'icon_razz.gif', 'Razz', 26);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (27, ':oops:', 'icon_redface.gif', 'Embarassed', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (27, ':oops:', 'icon_redface.gif', 'Embarassed', 27);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (28, ':cry:', 'icon_cry.gif', 'Crying or Very sad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (28, ':cry:', 'icon_cry.gif', 'Crying or Very sad', 28);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (29, ':evil:', 'icon_evil.gif', 'Evil or Very Mad', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (29, ':evil:', 'icon_evil.gif', 'Evil or Very Mad', 29);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (30, ':twisted:', 'icon_twisted.gif', 'Twisted Evil', 30);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (31, ':roll:', 'icon_rolleyes.gif', 'Rolling Eyes', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (31, ':roll:', 'icon_rolleyes.gif', 'Rolling Eyes', 31);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (32, ':wink:', 'icon_wink.gif', 'Wink', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (32, ':wink:', 'icon_wink.gif', 'Wink', 32);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (33, ';)', 'icon_wink.gif', 'Wink', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (33, ';)', 'icon_wink.gif', 'Wink', 33);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (34, ';-)', 'icon_wink.gif', 'Wink', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (34, ';-)', 'icon_wink.gif', 'Wink', 34);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (35, ':!:', 'icon_exclaim.gif', 'Exclamation', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (35, ':!:', 'icon_exclaim.gif', 'Exclamation', 35);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (36, ':?:', 'icon_question.gif', 'Question', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (36, ':?:', 'icon_question.gif', 'Question', 36);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (37, ':idea:', 'icon_idea.gif', 'Idea', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (37, ':idea:', 'icon_idea.gif', 'Idea', 37);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (38, ':arrow:', 'icon_arrow.gif', 'Arrow', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (38, ':arrow:', 'icon_arrow.gif', 'Arrow', 38);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (39, ':|', 'icon_neutral.gif', 'Neutral', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (39, ':|', 'icon_neutral.gif', 'Neutral', 39);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (40, ':-|', 'icon_neutral.gif', 'Neutral', 40);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (41, ':neutral:', 'icon_neutral.gif', 'Neutral', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (41, ':neutral:', 'icon_neutral.gif', 'Neutral', 41);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (42, ':mricy:', 'icon_mricy.gif', 'Mr. Ycy', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (42, ':mricy:', 'icon_mricy.gif', 'Mr. Icy', 42);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (43, ':mrblue:', 'icon_mrblue.gif', 'Mr. Blue', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (43, ':mrblue:', 'icon_mrblue.gif', 'Mr. Blue', 43);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (44, ':mrgreen:', 'icon_mrgreen.gif', 'Mr. Green', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (44, ':mrgreen:', 'icon_mrgreen.gif', 'Mr. Green', 44);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (45, ':mrorange:', 'icon_mrorange.gif', 'Mr. Orange', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (45, ':mrorange:', 'icon_mrorange.gif', 'Mr. Orange', 45);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (46, ':mrviolet:', 'icon_mrviolet.gif', 'Mr. Violet', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (46, ':mrviolet:', 'icon_mrviolet.gif', 'Mr. Violet', 46);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (47, ':mryellow:', 'icon_mryellow.gif', 'Mr. Yellow', 0);INSERT INTO `phpbb_smilies` (`smilies_id`, `code`, `smile_url`, `emoticon`, `smilies_order`) VALUES (47, ':mryellow:', 'icon_mryellow.gif', 'Mr. Yellow', 47);`file_name` TEXT NOT NULL,`file_name` text NOT NULL,`file_desc` TEXT NOT NULL,`file_desc` text NOT NULL,`file_creator` TEXT NOT NULL,`file_creator` text NOT NULL,`file_version` TEXT NOT NULL,`file_version` text NOT NULL,`file_longdesc` TEXT NOT NULL,`file_longdesc` text NOT NULL,`file_ssurl` TEXT NOT NULL,`file_ssurl` text NOT NULL,`file_dlurl` TEXT NOT NULL,`file_dlurl` text NOT NULL,`file_posticon` TEXT NOT NULL,`file_posticon` text NOT NULL,`file_docsurl` TEXT NOT NULL,`file_docsurl` text NOT NULL,plugin_name VARCHAR(255) NOT NULL DEFAULT '',plugin_name varchar(255) NOT NULL DEFAULT '',plugin_dir VARCHAR(255) NOT NULL DEFAULT '',plugin_dir varchar(255) NOT NULL DEFAULT '',`post_text` TEXT NOT NULL,`post_text` text NOT NULL,`edit_notes` MEDIUMTEXT,`edit_notes` mediumtext,`privmsgs_text` TEXT NOT NULL,`privmsgs_text` text NOT NULL,`privmsgs_text` TEXT NOT NULL,`privmsgs_text` text NOT NULL,`radio_button_values` TEXT NOT NULL,`radio_button_values` text NOT NULL,`checkbox_default` TEXT NOT NULL,`checkbox_default` text NOT NULL,`checkbox_values` TEXT NOT NULL,`checkbox_values` text NOT NULL,define('FIX_FORUMS', true);$sql[] = "INSERT INTO `" . $table_prefix . "config` (`config_name`, `config_value`) VALUES ('forum_limit_edit_time_interval', '1440')";$sql[] = "INSERT INTO `" . $table_prefix . "config` (`config_name`, `config_value`) VALUES ('forum_limit_edit_time_interval', '1440')";.nav-links-left {.nav-links-left {position: relative;{{message_die(GENERAL_MESSAGE, $lang['Empty_subject']);.nav-links-left {.nav-links-left {position: relative;.nav-links-left {.nav-links-left {position: relative;* jQuery JavaScript Library v1.3.2* jQuery JavaScript Library v1.4* Copyright (c) 2009 John Resig* Copyright 2010, John Resig* Dual licensed under the MIT and GPL licenses.* Dual licensed under the MIT or GPL Version 2 licenses.* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)* Includes Sizzle.js* Revision: 6246* http://sizzlejs.com/*/* Copyright 2010, The Dojo Foundation(function(){* Released under the MIT, BSD, and GPL Licenses.*var* Date: Wed Jan 13 15:23:05 2010 -0500// Will speed up references to window, and allows munging its name.*/window = this,(function( window, undefined ) {// Will speed up references to undefined, and allows munging its name.undefined,// Define a local copy of jQuery// Map over jQuery in case of overwritevar jQuery = function( selector, context ) {_jQuery = window.jQuery,// The jQuery object is actually just the init constructor 'enhanced'// Map over the $ in case of overwritereturn new jQuery.fn.init( selector, context );_$ = window.$,},jQuery = window.jQuery = window.$ = function( selector, context ) {// Map over jQuery in case of overwrite// The jQuery object is actually just the init constructor 'enhanced'_jQuery = window.jQuery,return new jQuery.fn.init( selector, context );},// Map over the $ in case of overwrite_$ = window.$,// A simple way to check for HTML strings or ID strings// (both of which we optimize for)// Use the correct document accordingly with window argument (sandbox)quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,document = window.document,// Is it a simple selectorisSimple = /^.[^:#\[\.,]*$/;// A central reference to the root jQuery(document)rootjQuery,jQuery.fn = jQuery.prototype = {init: function( selector, context ) {// A simple way to check for HTML strings or ID strings// Make sure that a selection was provided// (both of which we optimize for)selector = selector || document;quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,// Handle $(DOMElement)// Is it a simple selectorif ( selector.nodeType ) {isSimple = /^.[^:#\[\.,]*$/,this[0] = selector;this.length = 1;// Check if a string has a non-whitespace character in itthis.context = selector;rnotwhite = /\S/,return this;}// Used for trimming whitespace// Handle HTML stringsrtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,if ( typeof selector === "string" ) {// Are we dealing with HTML string or an ID?// Match a standalone tagvar match = quickExpr.exec( selector );rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,// Verify a match, and that no context was specified for #id// Keep a UserAgent string for use with jQuery.browserif ( match && (match[1] || !context) ) {userAgent = navigator.userAgent,// HANDLE: $(html) -> $(array)// For matching the engine and version of the browserif ( match[1] )browserMatch,selector = jQuery.clean( [ match[1] ], context );// Has the ready events already been bound?// HANDLE: $("#id")readyBound = false,else {var elem = document.getElementById( match[3] );// The functions to execute on DOM readyreadyList = [],// Handle the case where IE and Opera return items// by name instead of ID// The ready event handlerif ( elem && elem.id != match[3] )DOMContentLoaded,return jQuery().find( selector );// Save a reference to some core methods// Otherwise, we inject the element directly into the jQuery objecttoString = Object.prototype.toString,var ret = jQuery( elem || [] );hasOwnProperty = Object.prototype.hasOwnProperty,ret.context = document;push = Array.prototype.push,ret.selector = selector;slice = Array.prototype.slice,return ret;indexOf = Array.prototype.indexOf;}jQuery.fn = jQuery.prototype = {// HANDLE: $(expr, [context])init: function( selector, context ) {// (which is just equivalent to: $(content).find(expr)var match, elem, ret, doc;} elsereturn jQuery( context ).find( selector );// Handle $(""), $(null), or $(undefined)if ( !selector ) {// HANDLE: $(function)return this;// Shortcut for document ready}} else if ( jQuery.isFunction( selector ) )return jQuery( document ).ready( selector );// Handle $(DOMElement)if ( selector.nodeType ) {// Make sure that old selector state is passed alongthis.context = this[0] = selector;if ( selector.selector && selector.context ) {this.length = 1;this.selector = selector.selector;return this;this.context = selector.context;}}// Handle HTML stringsreturn this.setArray(jQuery.isArray( selector ) ?if ( typeof selector === "string" ) {selector :// Are we dealing with HTML string or an ID?jQuery.makeArray(selector));match = quickExpr.exec( selector );},// Verify a match, and that no context was specified for #id// Start with an empty selectorif ( match && (match[1] || !context) ) {selector: "",// HANDLE: $(html) -> $(array)// The current version of jQuery being usedif ( match[1] ) {jquery: "1.3.2",doc = (context ? context.ownerDocument || context : document);// The number of elements contained in the matched element set// If a single string is passed in and it's a single tagsize: function() {// just do a createElement and skip the restreturn this.length;ret = rsingleTag.exec( selector );},if ( ret ) {// Get the Nth element in the matched element set ORif ( jQuery.isPlainObject( context ) ) {// Get the whole matched element set as a clean arrayselector = [ document.createElement( ret[1] ) ];get: function( num ) {jQuery.fn.attr.call( selector, context, true );return num === undefined ?} else {// Return a 'clean' arrayselector = [ doc.createElement( ret[1] ) ];Array.prototype.slice.call( this ) :}// Return just the object} else {this[ num ];ret = buildFragment( [ match[1] ], [ doc ] );},selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;}// Take an array of elements and push it onto the stack// (returning the new matched element set)// HANDLE: $("#id")pushStack: function( elems, name, selector ) {} else {// Build a new jQuery matched element setelem = document.getElementById( match[2] );var ret = jQuery( elems );if ( elem ) {// Add the old object onto the stack (as a reference)// Handle the case where IE and Opera return itemsret.prevObject = this;// by name instead of IDif ( elem.id !== match[2] ) {ret.context = this.context;return rootjQuery.find( selector );}if ( name === "find" )ret.selector = this.selector + (this.selector ? " " : "") + selector;// Otherwise, we inject the element directly into the jQuery objectelse if ( name )this.length = 1;ret.selector = this.selector + "." + name + "(" + selector + ")";this[0] = elem;}// Return the newly-formed element setreturn ret;this.context = document;},this.selector = selector;return this;// Force the current matched set of elements to become}// the specified array of elements (destroying the stack in the process)// You should use pushStack() in order to do this, but maintain the stack// HANDLE: $("TAG")setArray: function( elems ) {} else if ( !context && /^\w+$/.test( selector ) ) {// Resetting the length to 0, then using the native Array pushthis.selector = selector;// is a super-fast way to populate an object with array-like propertiesthis.context = document;this.length = 0;selector = document.getElementsByTagName( selector );Array.prototype.push.apply( this, elems );// HANDLE: $(expr, $(...))return this;} else if ( !context || context.jquery ) {},return (context || rootjQuery).find( selector );// Execute a callback for every element in the matched set.// HANDLE: $(expr, context)// (You can seed the arguments with an array of args, but this is// (which is just equivalent to: $(context).find(expr)// only used internally.)} else {each: function( callback, args ) {return jQuery( context ).find( selector );return jQuery.each( this, callback, args );}},// HANDLE: $(function)// Determine the position of an element within// Shortcut for document ready// the matched set of elements} else if ( jQuery.isFunction( selector ) ) {index: function( elem ) {return rootjQuery.ready( selector );// Locate the position of the desired element}return jQuery.inArray(// If it receives a jQuery object, the first element is usedif (selector.selector !== undefined) {elem && elem.jquery ? elem[0] : elemthis.selector = selector.selector;, this );this.context = selector.context;},}attr: function( name, value, type ) {return jQuery.isArray( selector ) ?var options = name;this.setArray( selector ) :jQuery.makeArray( selector, this );// Look for the case where we're accessing a style value},if ( typeof name === "string" )if ( value === undefined )// Start with an empty selectorreturn this[0] && jQuery[ type || "attr" ]( this[0], name );selector: "",else {// The current version of jQuery being usedoptions = {};jquery: "1.4",options[ name ] = value;}// The default length of a jQuery object is 0length: 0,// Check to see if we're setting style valuesreturn this.each(function(i){// The number of elements contained in the matched element set// Set all the stylessize: function() {for ( name in options )return this.length;jQuery.attr(},type ?this.style :toArray: function() {this,return slice.call( this, 0 );name, jQuery.prop( this, options[ name ], type, i, name )},);});// Get the Nth element in the matched element set OR},// Get the whole matched element set as a clean arrayget: function( num ) {css: function( key, value ) {return num == null ?// ignore negative width and height valuesif ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )// Return a 'clean' arrayvalue = undefined;this.toArray() :return this.attr( key, value, "curCSS" );},// Return just the object( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );text: function( text ) {},if ( typeof text !== "object" && text != null )return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );// Take an array of elements and push it onto the stack// (returning the new matched element set)var ret = "";pushStack: function( elems, name, selector ) {// Build a new jQuery matched element setjQuery.each( text || this, function(){var ret = jQuery( elems || null );jQuery.each( this.childNodes, function(){if ( this.nodeType != 8 )// Add the old object onto the stack (as a reference)ret += this.nodeType != 1 ?ret.prevObject = this;this.nodeValue :jQuery.fn.text( [ this ] );ret.context = this.context;});});if ( name === "find" ) {ret.selector = this.selector + (this.selector ? " " : "") + selector;return ret;} else if ( name ) {},ret.selector = this.selector + "." + name + "(" + selector + ")";}wrapAll: function( html ) {if ( this[0] ) {// Return the newly-formed element set// The elements to wrap the target aroundreturn ret;var wrap = jQuery( html, this[0].ownerDocument ).clone();},if ( this[0].parentNode )// Force the current matched set of elements to becomewrap.insertBefore( this[0] );// the specified array of elements (destroying the stack in the process)// You should use pushStack() in order to do this, but maintain the stackwrap.map(function(){setArray: function( elems ) {var elem = this;// Resetting the length to 0, then using the native Array push// is a super-fast way to populate an object with array-like propertieswhile ( elem.firstChild )this.length = 0;elem = elem.firstChild;push.apply( this, elems );return elem;return this;}).append(this);},}// Execute a callback for every element in the matched set.return this;// (You can seed the arguments with an array of args, but this is},// only used internally.)each: function( callback, args ) {wrapInner: function( html ) {return jQuery.each( this, callback, args );return this.each(function(){},jQuery( this ).contents().wrapAll( html );});ready: function( fn ) {},// Attach the listenersjQuery.bindReady();wrap: function( html ) {return this.each(function(){// If the DOM is already readyjQuery( this ).wrapAll( html );if ( jQuery.isReady ) {});// Execute the function immediately},fn.call( document, jQuery );append: function() {// Otherwise, remember the function for laterreturn this.domManip(arguments, true, function(elem){} else if ( readyList ) {if (this.nodeType == 1)// Add the function to the wait listthis.appendChild( elem );readyList.push( fn );});},return this;prepend: function() {},return this.domManip(arguments, true, function(elem){if (this.nodeType == 1)eq: function( i ) {this.insertBefore( elem, this.firstChild );return i === -1 ?});this.slice( i ) :},this.slice( i, +i + 1 );},before: function() {return this.domManip(arguments, false, function(elem){first: function() {this.parentNode.insertBefore( elem, this );return this.eq( 0 );});},},last: function() {after: function() {return this.eq( -1 );return this.domManip(arguments, false, function(elem){},this.parentNode.insertBefore( elem, this.nextSibling );});slice: function() {},return this.pushStack( slice.apply( this, arguments ),"slice", slice.call(arguments).join(",") );end: function() {},return this.prevObject || jQuery( [] );},map: function( callback ) {return this.pushStack( jQuery.map(this, function( elem, i ) {// For internal use only.return callback.call( elem, i, elem );// Behaves like an Array's method, not like a jQuery method.}));push: [].push,},sort: [].sort,splice: [].splice,end: function() {return this.prevObject || jQuery(null);find: function( selector ) {},if ( this.length === 1 ) {var ret = this.pushStack( [], "find", selector );// For internal use only.ret.length = 0;// Behaves like an Array's method, not like a jQuery method.jQuery.find( selector, this[0], ret );push: push,return ret;sort: [].sort,} else {splice: [].splicereturn this.pushStack( jQuery.unique(jQuery.map(this, function(elem){};return jQuery.find( selector, elem );})), "find", selector );// Give the init function the jQuery prototype for later instantiation}jQuery.fn.init.prototype = jQuery.fn;},jQuery.extend = jQuery.fn.extend = function() {clone: function( events ) {// copy reference to target object// Do the clonevar target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;var ret = this.map(function(){if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {// Handle a deep copy situation// IE copies events bound via attachEvent whenif ( typeof target === "boolean" ) {// using cloneNode. Calling detachEvent on thedeep = target;// clone will also remove the events from the orignaltarget = arguments[1] || {};// In order to get around this, we use innerHTML.// skip the boolean and the target// Unfortunately, this means some modifications toi = 2;// attributes in IE that are actually only stored}// as properties will not be copied (such as the// the name attribute on an input).// Handle case when target is a string or something (possible in deep copy)var html = this.outerHTML;if ( typeof target !== "object" && !jQuery.isFunction(target) ) {if ( !html ) {target = {};var div = this.ownerDocument.createElement("div");}div.appendChild( this.cloneNode(true) );html = div.innerHTML;// extend jQuery itself if only one argument is passed}if ( length === i ) {target = this;return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];--i;} else}return this.cloneNode(true);});for ( ; i < length; i++ ) {// Only deal with non-null/undefined values// Copy the events from the original to the cloneif ( (options = arguments[ i ]) != null ) {if ( events === true ) {// Extend the base objectvar orig = this.find("*").andSelf(), i = 0;for ( name in options ) {src = target[ name ];ret.find("*").andSelf().each(function(){copy = options[ name ];if ( this.nodeName !== orig[i].nodeName )return;// Prevent never-ending loopif ( target === copy ) {var events = jQuery.data( orig[i], "events" );continue;}for ( var type in events ) {for ( var handler in events[ type ] ) {// Recurse if we're merging object literal values or arraysjQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {}var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src}: jQuery.isArray(copy) ? [] : {};i++;// Never move original objects, clone them});target[ name ] = jQuery.extend( deep, clone, copy );}// Don't bring in undefined values// Return the cloned set} else if ( copy !== undefined ) {return ret;target[ name ] = copy;},}}filter: function( selector ) {}return this.pushStack(}jQuery.isFunction( selector ) &&jQuery.grep(this, function(elem, i){// Return the modified objectreturn selector.call( elem, i );return target;}) ||};jQuery.multiFilter( selector, jQuery.grep(this, function(elem){jQuery.extend({return elem.nodeType === 1;noConflict: function( deep ) {}) ), "filter", selector );window.$ = _$;},if ( deep ) {closest: function( selector ) {window.jQuery = _jQuery;var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,}closer = 0;return jQuery;return this.map(function(){},var cur = this;while ( cur && cur.ownerDocument ) {// Is the DOM ready to be used? Set to true once it occurs.if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {isReady: false,jQuery.data(cur, "closest", closer);return cur;// Handle when the DOM is ready}ready: function() {cur = cur.parentNode;// Make sure that the DOM is not already loadedcloser++;if ( !jQuery.isReady ) {}// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).});if ( !document.body ) {},return setTimeout( jQuery.ready, 13 );}not: function( selector ) {if ( typeof selector === "string" )// Remember that the DOM is ready// test special case where just one selector is passed injQuery.isReady = true;if ( isSimple.test( selector ) )return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );// If there are functions bound, to executeelseif ( readyList ) {selector = jQuery.multiFilter( selector, this );// Execute all of themvar fn, i = 0;var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;while ( (fn = readyList[ i++ ]) ) {return this.filter(function() {fn.call( document, jQuery );return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;}});},// Reset the list of functionsreadyList = null;add: function( selector ) {}return this.pushStack( jQuery.unique( jQuery.merge(this.get(),// Trigger any bound ready eventstypeof selector === "string" ?if ( jQuery.fn.triggerHandler ) {jQuery( selector ) :jQuery( document ).triggerHandler( "ready" );jQuery.makeArray( selector )})));}is: function( selector ) {bindReady: function() {return !!selector && jQuery.multiFilter( selector, this ).length > 0;if ( readyBound ) {},return;}hasClass: function( selector ) {return !!selector && this.is( "." + selector );readyBound = true;},// Catch cases where $(document).ready() is called after theval: function( value ) {// browser event has already occurred.if ( value === undefined ) {if ( document.readyState === "complete" ) {var elem = this[0];return jQuery.ready();}if ( elem ) {if( jQuery.nodeName( elem, 'option' ) )// Mozilla, Opera and webkit nightlies currently support this eventreturn (elem.attributes.value || {}).specified ? elem.value : elem.text;if ( document.addEventListener ) {// Use the handy event callback// We need to handle select boxes specialdocument.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );if ( jQuery.nodeName( elem, "select" ) ) {var index = elem.selectedIndex,// A fallback to window.onload, that will always workvalues = [],window.addEventListener( "load", jQuery.ready, false );options = elem.options,one = elem.type == "select-one";// If IE event model is used} else if ( document.attachEvent ) {// Nothing was selected// ensure firing before onload,if ( index < 0 )// maybe late but safe also for iframesreturn null;document.attachEvent("onreadystatechange", DOMContentLoaded);// Loop through all the selected options// A fallback to window.onload, that will always workfor ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {window.attachEvent( "onload", jQuery.ready );var option = options[ i ];// If IE and not a frameif ( option.selected ) {// continually check to see if the document is ready// Get the specifc value for the optionvar toplevel = false;value = jQuery(option).val();try {// We don't need an array for one selectstoplevel = window.frameElement == null;if ( one )} catch(e) {}return value;if ( document.documentElement.doScroll && toplevel ) {// Multi-Selects return an arraydoScrollCheck();values.push( value );}}}},return values;// See test/unit/core.js for details concerning isFunction.}// Since version 1.3, DOM methods and functions like alert// aren't supported. They return false on IE (#2968).// Everything else, we just grab the valueisFunction: function( obj ) {return (elem.value || "").replace(/\r/g, "");return toString.call(obj) === "[object Function]";},}isArray: function( obj ) {return undefined;return toString.call(obj) === "[object Array]";}},if ( typeof value === "number" )isPlainObject: function( obj ) {value += '';// Must be an Object.// Because of IE, we also have to check the presence of the constructor property.return this.each(function(){// Make sure that DOM nodes and window objects don't pass through, as wellif ( this.nodeType != 1 )if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {return;return false;}if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )this.checked = (jQuery.inArray(this.value, value) >= 0 ||// Not own constructor property must be ObjectjQuery.inArray(this.name, value) >= 0);if ( obj.constructor&& !hasOwnProperty.call(obj, "constructor")else if ( jQuery.nodeName( this, "select" ) ) {&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {var values = jQuery.makeArray(value);return false;}jQuery( "option", this ).each(function(){this.selected = (jQuery.inArray( this.value, values ) >= 0 ||// Own properties are enumerated firstly, so to speed up,jQuery.inArray( this.text, values ) >= 0);// if last one is own, then all properties are own.});var key;if ( !values.length )for ( key in obj ) {}this.selectedIndex = -1;return key === undefined || hasOwnProperty.call( obj, key );} else},this.value = value;});isEmptyObject: function( obj ) {},for ( var name in obj ) {return false;html: function( value ) {}return value === undefined ?return true;(this[0] ?},this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :null) :noop: function() {},this.empty().append( value );},// Evalulates a script in a global contextglobalEval: function( data ) {replaceWith: function( value ) {if ( data && rnotwhite.test(data) ) {return this.after( value ).remove();// Inspired by code by Andrea Giammarchi},// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.htmlvar head = document.getElementsByTagName("head")[0] || document.documentElement,eq: function( i ) {script = document.createElement("script");return this.slice( i, +i + 1 );},script.type = "text/javascript";slice: function() {if ( jQuery.support.scriptEval ) {return this.pushStack( Array.prototype.slice.apply( this, arguments ),script.appendChild( document.createTextNode( data ) );"slice", Array.prototype.slice.call(arguments).join(",") );} else {},script.text = data;}map: function( callback ) {return this.pushStack( jQuery.map(this, function(elem, i){// Use insertBefore instead of appendChild to circumvent an IE6 bug.return callback.call( elem, i, elem );// This arises when a base node is used (#2709).}));head.insertBefore( script, head.firstChild );},head.removeChild( script );}andSelf: function() {},return this.add( this.prevObject );},nodeName: function( elem, name ) {return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();domManip: function( args, table, callback ) {},if ( this[0] ) {var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),// args is for internal usage onlyscripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),each: function( object, callback, args ) {first = fragment.firstChild;var name, i = 0,length = object.length,if ( first )isObj = length === undefined || jQuery.isFunction(object);for ( var i = 0, l = this.length; i < l; i++ )callback.call( root(this[i], first), this.length > 1 || i > 0 ?if ( args ) {fragment.cloneNode(true) : fragment );if ( isObj ) {for ( name in object ) {if ( scripts )if ( callback.apply( object[ name ], args ) === false ) {jQuery.each( scripts, evalScript );break;}}return this;} else {for ( ; i < length; ) {function root( elem, cur ) {if ( callback.apply( object[ i++ ], args ) === false ) {return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?break;(elem.getElementsByTagName("tbody")[0] ||}elem.appendChild(elem.ownerDocument.createElement("tbody"))) :}elem;}}}// A special, fast, case for the most common use of each};} else {if ( isObj ) {// Give the init function the jQuery prototype for later instantiationfor ( name in object ) {jQuery.fn.init.prototype = jQuery.fn;if ( callback.call( object[ name ], name, object[ name ] ) === false ) {break;function evalScript( i, elem ) {}if ( elem.src )}jQuery.ajax({} else {url: elem.src,for ( var value = object[0];async: false,i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}dataType: "script"}});elsereturn object;jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );},if ( elem.parentNode )trim: function( text ) {elem.parentNode.removeChild( elem );return (text || "").replace( rtrim, "" );}},function now(){// results is for internal usage onlyreturn +new Date;makeArray: function( array, results ) {}var ret = results || [];jQuery.extend = jQuery.fn.extend = function() {if ( array != null ) {// copy reference to target object// The window, strings (and functions) also have 'length'var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;// The extra typeof function check is to prevent crashes// in Safari 2 (See: #3039)// Handle a deep copy situationif ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {if ( typeof target === "boolean" ) {push.call( ret, array );deep = target;} else {target = arguments[1] || {};jQuery.merge( ret, array );// skip the boolean and the target}i = 2;}}return ret;// Handle case when target is a string or something (possible in deep copy)},if ( typeof target !== "object" && !jQuery.isFunction(target) )target = {};inArray: function( elem, array ) {if ( array.indexOf ) {// extend jQuery itself if only one argument is passedreturn array.indexOf( elem );if ( length == i ) {}target = this;--i;for ( var i = 0, length = array.length; i < length; i++ ) {}if ( array[ i ] === elem ) {return i;for ( ; i < length; i++ )}// Only deal with non-null/undefined values}if ( (options = arguments[ i ]) != null )// Extend the base objectreturn -1;for ( var name in options ) {},var src = target[ name ], copy = options[ name ];merge: function( first, second ) {// Prevent never-ending loopvar i = first.length, j = 0;if ( target === copy )continue;if ( typeof second.length === "number" ) {for ( var l = second.length; j < l; j++ ) {// Recurse if we're merging object valuesfirst[ i++ ] = second[ j ];if ( deep && copy && typeof copy === "object" && !copy.nodeType )}target[ name ] = jQuery.extend( deep,} else {// Never move original objects, clone themwhile ( second[j] !== undefined ) {src || ( copy.length != null ? [ ] : { } )first[ i++ ] = second[ j++ ];, copy );}}// Don't bring in undefined valueselse if ( copy !== undefined )first.length = i;target[ name ] = copy;return first;}},// Return the modified objectgrep: function( elems, callback, inv ) {return target;var ret = [];};// Go through the array, only saving the items// exclude the following css properties to add px// that pass the validator functionvar exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,for ( var i = 0, length = elems.length; i < length; i++ ) {// cache defaultViewif ( !inv !== !callback( elems[ i ], i ) ) {defaultView = document.defaultView || {},ret.push( elems[ i ] );toString = Object.prototype.toString;}}jQuery.extend({noConflict: function( deep ) {return ret;window.$ = _$;},if ( deep )// arg is for internal usage onlywindow.jQuery = _jQuery;map: function( elems, callback, arg ) {var ret = [], value;return jQuery;},// Go through the array, translating each of the items to their// new value (or values).// See test/unit/core.js for details concerning isFunction.for ( var i = 0, length = elems.length; i < length; i++ ) {// Since version 1.3, DOM methods and functions like alertvalue = callback( elems[ i ], i, arg );// aren't supported. They return false on IE (#2968).isFunction: function( obj ) {if ( value != null ) {return toString.call(obj) === "[object Function]";ret[ ret.length ] = value;},}}isArray: function( obj ) {return toString.call(obj) === "[object Array]";return ret.concat.apply( [], ret );// check if an element is in a (or is an) XML document// A global GUID counter for objectsisXMLDoc: function( elem ) {guid: 1,return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||!!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );proxy: function( fn, proxy, thisObject ) {},if ( arguments.length === 2 ) {if ( typeof proxy === "string" ) {// Evalulates a script in a global contextthisObject = fn;globalEval: function( data ) {fn = thisObject[ proxy ];if ( data && /\S/.test(data) ) {proxy = undefined;// Inspired by code by Andrea Giammarchi// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html} else if ( proxy && !jQuery.isFunction( proxy ) ) {var head = document.getElementsByTagName("head")[0] || document.documentElement,thisObject = proxy;script = document.createElement("script");proxy = undefined;}script.type = "text/javascript";}if ( jQuery.support.scriptEval )script.appendChild( document.createTextNode( data ) );if ( !proxy && fn ) {elseproxy = function() {script.text = data;return fn.apply( thisObject || this, arguments );};// Use insertBefore instead of appendChild to circumvent an IE6 bug.}// This arises when a base node is used (#2709).head.insertBefore( script, head.firstChild );// Set the guid of unique handler to the same of original handler, so it can be removedhead.removeChild( script );if ( fn ) {}proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;},}nodeName: function( elem, name ) {// So proxy can be declared as an argumentreturn elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();return proxy;// args is for internal usage only// Use of jQuery.browser is frowned upon.each: function( object, callback, args ) {// More details: http://docs.jquery.com/Utilities/jQuery.browservar name, i = 0, length = object.length;uaMatch: function( ua ) {var ret = { browser: "" };if ( args ) {if ( length === undefined ) {ua = ua.toLowerCase();for ( name in object )if ( callback.apply( object[ name ], args ) === false )if ( /webkit/.test( ua ) ) {break;ret = { browser: "webkit", version: /webkit[\/ ]([\w.]+)/ };} elsefor ( ; i < length; )} else if ( /opera/.test( ua ) ) {if ( callback.apply( object[ i++ ], args ) === false )ret = { browser: "opera", version: /version/.test( ua ) ? /version[\/ ]([\w.]+)/ : /opera[\/ ]([\w.]+)/ };break;} else if ( /msie/.test( ua ) ) {// A special, fast, case for the most common use of eachret = { browser: "msie", version: /msie ([\w.]+)/ };} else {if ( length === undefined ) {} else if ( /mozilla/.test( ua ) && !/compatible/.test( ua ) ) {for ( name in object )ret = { browser: "mozilla", version: /rv:([\w.]+)/ };if ( callback.call( object[ name ], name, object[ name ] ) === false )}break;} elseret.version = (ret.version && ret.version.exec( ua ) || [0, "0"])[1];for ( var value = object[0];i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}return ret;}},return object;browser: {}},});prop: function( elem, value, type, i, name ) {browserMatch = jQuery.uaMatch( userAgent );// Handle executable functionsif ( browserMatch.browser ) {if ( jQuery.isFunction( value ) )jQuery.browser[ browserMatch.browser ] = true;value = value.call( elem, i );jQuery.browser.version = browserMatch.version;}// Handle passing in a number to a CSS propertyreturn typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?// Deprecated, use jQuery.browser.webkit insteadvalue + "px" :if ( jQuery.browser.webkit ) {value;jQuery.browser.safari = true;},}className: {if ( indexOf ) {// internal only, use addClass("class")jQuery.inArray = function( elem, array ) {add: function( elem, classNames ) {return indexOf.call( array, elem );jQuery.each((classNames || "").split(/\s+/), function(i, className){};if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )}elem.className += (elem.className ? " " : "") + className;});// All jQuery objects should point back to these},rootjQuery = jQuery(document);// internal only, use removeClass("class")// Cleanup functions for the document ready methodremove: function( elem, classNames ) {if ( document.addEventListener ) {if (elem.nodeType == 1)DOMContentLoaded = function() {elem.className = classNames !== undefined ?document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );jQuery.grep(elem.className.split(/\s+/), function(className){jQuery.ready();return !jQuery.className.has( classNames, className );};}).join(" ") :"";} else if ( document.attachEvent ) {},DOMContentLoaded = function() {// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).// internal only, use hasClass("class")if ( document.readyState === "complete" ) {has: function( elem, className ) {document.detachEvent( "onreadystatechange", DOMContentLoaded );return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;jQuery.ready();},};}// A method for quickly swapping in/out CSS properties to get correct calculationsswap: function( elem, options, callback ) {// The DOM ready check for Internet Explorervar old = {};function doScrollCheck() {// Remember the old values, and insert the new onesif ( jQuery.isReady ) {for ( var name in options ) {return;old[ name ] = elem.style[ name ];}elem.style[ name ] = options[ name ];}try {// If IE is used, use the trick by Diego Perinicallback.call( elem );// http://javascript.nwbox.com/IEContentLoaded/document.documentElement.doScroll("left");// Revert the old values} catch( error ) {for ( var name in options )setTimeout( doScrollCheck, 1 );elem.style[ name ] = old[ name ];return;},css: function( elem, name, force, extra ) {// and execute any waiting functionsif ( name == "width" || name == "height" ) {jQuery.ready();var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];}function getWH() {if ( indexOf ) {val = name == "width" ? elem.offsetWidth : elem.offsetHeight;jQuery.inArray = function( elem, array ) {return indexOf.call( array, elem );if ( extra === "border" )};return;}jQuery.each( which, function() {function evalScript( i, elem ) {if ( !extra )if ( elem.src ) {val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;jQuery.ajax({if ( extra === "margin" )url: elem.src,val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;async: false,elsedataType: "script"val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;});});} else {}jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );}if ( elem.offsetWidth !== 0 )getWH();if ( elem.parentNode ) {elseelem.parentNode.removeChild( elem );jQuery.swap( elem, props, getWH );}}return Math.max(0, Math.round(val));}// Mutifunctional method to get and set values to a collection// The value/s can be optionally by executed if its a functionreturn jQuery.curCSS( elem, name, force );function access( elems, key, value, exec, fn, pass ) {},var length = elems.length;curCSS: function( elem, name, force ) {// Setting many attributesvar ret, style = elem.style;if ( typeof key === "object" ) {for ( var k in key ) {// We need to handle opacity special in IEaccess( elems, k, key[k], exec, fn, value );if ( name == "opacity" && !jQuery.support.opacity ) {}ret = jQuery.attr( style, "opacity" );return elems;}return ret == "" ?"1" :// Setting one attributeret;if ( value !== undefined ) {}// Optionally, function values get executed if exec is trueexec = !pass && exec && jQuery.isFunction(value);// Make sure we're using the right name for getting the float valueif ( name.match( /float/i ) )for ( var i = 0; i < length; i++ ) {name = styleFloat;fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );}if ( !force && style && style[ name ] )ret = style[ name ];return elems;}else if ( defaultView.getComputedStyle ) {// Getting an attribute// Only "float" is needed herereturn length ? fn( elems[0], key ) : null;if ( name.match( /float/i ) )}name = "float";function now() {name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();return (new Date).getTime();}var computedStyle = defaultView.getComputedStyle( elem, null );(function() {if ( computedStyle )jQuery.support = {};ret = computedStyle.getPropertyValue( name );var root = document.documentElement,// We should always get a number back from opacityscript = document.createElement("script"),if ( name == "opacity" && ret == "" )div = document.createElement("div"),ret = "1";id = "script" + now();} else if ( elem.currentStyle ) {div.style.display = "none";var camelCase = name.replace(/\-(\w)/g, function(all, letter){div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";return letter.toUpperCase();});var all = div.getElementsByTagName("*"),a = div.getElementsByTagName("a")[0];ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];// Can't get basic test support// From the awesome hack by Dean Edwardsif ( !all || !all.length || !a ) {// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291return;}// If we're not dealing with a regular pixel number// but a number that has a weird ending, we need to convert it to pixelsjQuery.support = {if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {// IE strips leading whitespace when .innerHTML is used// Remember the original valuesleadingWhitespace: div.firstChild.nodeType === 3,var left = style.left, rsLeft = elem.runtimeStyle.left;// Make sure that tbody elements aren't automatically inserted// Put in the new values to get a computed value out// IE will insert them into empty tableselem.runtimeStyle.left = elem.currentStyle.left;tbody: !div.getElementsByTagName("tbody").length,style.left = ret || 0;ret = style.pixelLeft + "px";// Make sure that link elements get serialized correctly by innerHTML// This requires a wrapper element in IE// Revert the changed valueshtmlSerialize: !!div.getElementsByTagName("link").length,style.left = left;elem.runtimeStyle.left = rsLeft;// Get the style information from getAttribute}// (IE uses .cssText insted)}style: /red/.test( a.getAttribute("style") ),return ret;// Make sure that URLs aren't manipulated},// (IE normalizes it by default)hrefNormalized: a.getAttribute("href") === "/a",clean: function( elems, context, fragment ) {context = context || document;// Make sure that element opacity exists// (IE uses filter instead)// !context.createElement fails in IE with an error but returns typeof 'object'// Use a regex to work around a WebKit issue. See #5145if ( typeof context.createElement === "undefined" )opacity: /^0.55$/.test( a.style.opacity ),context = context.ownerDocument || context[0] && context[0].ownerDocument || document;// Verify style float existence// If a single string is passed in and it's a single tag// (IE uses styleFloat instead of cssFloat)// just do a createElement and skip the restcssFloat: !!a.style.cssFloat,if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);// Make sure that if no value is specified for a checkboxif ( match )// that it defaults to "on".return [ context.createElement( match[1] ) ];// (WebKit defaults to "" instead)}checkOn: div.getElementsByTagName("input")[0].value === "on",var ret = [], scripts = [], div = context.createElement("div");// Make sure that a selected-by-default option has a working selected property.// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)jQuery.each(elems, function(i, elem){optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,if ( typeof elem === "number" )elem += '';// Will be defined laterscriptEval: false,if ( !elem )noCloneEvent: true,return;boxModel: null};// Convert html string into DOM nodesif ( typeof elem === "string" ) {script.type = "text/javascript";// Fix "XHTML"-style tags in all browserstry {elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){script.appendChild( document.createTextNode( "window." + id + "=1;" ) );return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?} catch(e) {}all :front + "></" + tag + ">";root.insertBefore( script, root.firstChild );});// Make sure that the execution of code works by injecting a script// Trim whitespace, otherwise indexOf won't work as expected// tag with appendChild/createTextNodevar tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();// (IE doesn't support this, fails, and uses .text instead)if ( window[ id ] ) {var wrap =jQuery.support.scriptEval = true;// option or optgroupdelete window[ id ];!tags.indexOf("<opt") &&}[ 1, "<select multiple='multiple'>", "</select>" ] ||root.removeChild( script );!tags.indexOf("<leg") &&[ 1, "<fieldset>", "</fieldset>" ] ||if ( div.attachEvent && div.fireEvent ) {div.attachEvent("onclick", function click() {tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&// Cloning a node shouldn't copy over any[ 1, "<table>", "</table>" ] ||// bound event handlers (IE does this)jQuery.support.noCloneEvent = false;!tags.indexOf("<tr") &&div.detachEvent("onclick", click);[ 2, "<table><tbody>", "</tbody></table>" ] ||});div.cloneNode(true).fireEvent("onclick");// <thead> matched above}(!tags.indexOf("<td") || !tags.indexOf("<th")) &&[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||// Figure out if the W3C box model works as expected// document.body must exist before we can do this!tags.indexOf("<col") &&// TODO: This timeout is temporary until I move ready into core.js.[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||jQuery(function() {var div = document.createElement("div");// IE can't serialize <link> and <script> tags normallydiv.style.width = div.style.paddingLeft = "1px";!jQuery.support.htmlSerialize &&[ 1, "div<div>", "</div>" ] ||document.body.appendChild( div );jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;[ 0, "", "" ];document.body.removeChild( div ).style.display = 'none';div = null;// Go to html and back, then peel off extra wrappers});div.innerHTML = wrap[1] + elem + wrap[2];// Technique from Juriy Zaytsev// Move to the right depth// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/while ( wrap[0]-- )var eventSupported = function( eventName ) {div = div.lastChild;var el = document.createElement("div");eventName = "on" + eventName;// Remove IE's autoinserted <tbody> from table fragmentsif ( !jQuery.support.tbody ) {var isSupported = (eventName in el);if ( !isSupported ) {// String was a <table>, *may* have spurious <tbody>el.setAttribute(eventName, "return;");var hasBody = /<tbody/i.test(elem),isSupported = typeof el[eventName] === "function";tbody = !tags.indexOf("<table") && !hasBody ?}div.firstChild && div.firstChild.childNodes :el = null;// String was a bare <thead> or <tfoot>return isSupported;wrap[1] == "<table>" && !hasBody ?};div.childNodes :[];jQuery.support.submitBubbles = eventSupported("submit");jQuery.support.changeBubbles = eventSupported("change");for ( var j = tbody.length - 1; j >= 0 ; --j )if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )// release memory in IEtbody[ j ].parentNode.removeChild( tbody[ j ] );root = script = div = all = a = null;})();}jQuery.props = {// IE completely kills leading whitespace when innerHTML is used"for": "htmlFor",if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )"class": "className",div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );readonly: "readOnly",maxlength: "maxLength",elem = jQuery.makeArray( div.childNodes );cellspacing: "cellSpacing",}rowspan: "rowSpan",colspan: "colSpan",if ( elem.nodeType )tabindex: "tabIndex",ret.push( elem );usemap: "useMap",elseframeborder: "frameBorder"ret = jQuery.merge( ret, elem );};var expando = "jQuery" + now(), uuid = 0, windowData = {};});var emptyObject = {};if ( fragment ) {jQuery.extend({for ( var i = 0; ret[i]; i++ ) {cache: {},if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );expando:expando,} else {if ( ret[i].nodeType === 1 )// The following elements throw uncatchable exceptions if youret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );// attempt to add expando properties to them.fragment.appendChild( ret[i] );noData: {}"embed": true,}"object": true,"applet": truereturn scripts;},}data: function( elem, name, data ) {return ret;if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {},return;}attr: function( elem, name, value ) {// don't set attributes on text and comment nodeselem = elem == window ?if (!elem || elem.nodeType == 3 || elem.nodeType == 8)windowData :return undefined;elem;var notxml = !jQuery.isXMLDoc( elem ),var id = elem[ expando ], cache = jQuery.cache, thisCache;// Whether we are setting (or getting)set = value !== undefined;// Handle the case where there's no name immediatelyif ( !name && !id ) {// Try to normalize/fix the namereturn null;name = notxml && jQuery.props[ name ] || name;}// Only do all the following if this is a node (faster for style)// Compute a unique ID for the element// IE elem.getAttribute passes even for styleif ( !id ) {if ( elem.tagName ) {id = ++uuid;}// These attributes require special treatmentvar special = /href|src|style/.test( name );// Avoid generating a new cache unless none exists and we// want to manipulate it.// Safari mis-reports the default selected property of a hidden optionif ( typeof name === "object" ) {// Accessing the parent's selectedIndex property fixes itelem[ expando ] = id;if ( name == "selected" && elem.parentNode )thisCache = cache[ id ] = jQuery.extend(true, {}, name);elem.parentNode.selectedIndex;} else if ( cache[ id ] ) {thisCache = cache[ id ];// If applicable, access the attribute via the DOM 0 way} else if ( typeof data === "undefined" ) {if ( name in elem && notxml && !special ) {thisCache = emptyObject;if ( set ){} else {// We can't allow the type property to be changed (since it causes problems in IE)thisCache = cache[ id ] = {};if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )}throw "type property can't be changed";// Prevent overriding the named cache with undefined valueselem[ name ] = value;if ( data !== undefined ) {}elem[ expando ] = id;thisCache[ name ] = data;// browsers index elements by id/name on forms, give priority to attributes.}if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )return elem.getAttributeNode( name ).nodeValue;return typeof name === "string" ? thisCache[ name ] : thisCache;},// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/removeData: function( elem, name ) {if ( name == "tabIndex" ) {if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {var attributeNode = elem.getAttributeNode( "tabIndex" );return;return attributeNode && attributeNode.specified}? attributeNode.value: elem.nodeName.match(/(button|input|object|select|textarea)/i)elem = elem == window ?? 0windowData :: elem.nodeName.match(/^(a|area)$/i) && elem.hrefelem;? 0: undefined;var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];}// If we want to remove a specific section of the element's datareturn elem[ name ];if ( name ) {}if ( thisCache ) {// Remove the section of cache dataif ( !jQuery.support.style && notxml && name == "style" )delete thisCache[ name ];return jQuery.attr( elem.style, "cssText", value );// If we've removed all the data, remove the element's cacheif ( set )if ( jQuery.isEmptyObject(thisCache) ) {// convert the value to a string (all browsers do this but IE) see #1070jQuery.removeData( elem );elem.setAttribute( name, "" + value );}}var attr = !jQuery.support.hrefNormalized && notxml && special// Some attributes require a special call on IE// Otherwise, we want to remove all of the element's data? elem.getAttribute( name, 2 )} else {: elem.getAttribute( name );// Clean up the element expandotry {// Non-existent attributes return null, we normalize to undefineddelete elem[ expando ];return attr === null ? undefined : attr;} catch( e ) {}// IE has trouble directly removing the expando// but it's ok with using removeAttribute// elem is actually elem.style ... set the styleif ( elem.removeAttribute ) {elem.removeAttribute( expando );// IE uses filters for opacity}if ( !jQuery.support.opacity && name == "opacity" ) {}if ( set ) {// IE has trouble with opacity if it does not have layout// Completely remove the data cache// Force it by setting the zoom leveldelete cache[ id ];elem.zoom = 1;}}// Set the alpha filter to set the opacity});elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +(parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");jQuery.fn.extend({}data: function( key, value ) {if ( typeof key === "undefined" && this.length ) {return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?return jQuery.data( this[0] );(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':"";} else if ( typeof key === "object" ) {}return this.each(function() {jQuery.data( this, key );name = name.replace(/-([a-z])/ig, function(all, letter){});return letter.toUpperCase();}});var parts = key.split(".");if ( set )parts[1] = parts[1] ? "." + parts[1] : "";elem[ name ] = value;if ( value === undefined ) {return elem[ name ];var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);},if ( data === undefined && this.length ) {trim: function( text ) {data = jQuery.data( this[0], key );return (text || "").replace( /^\s+|\s+$/g, "" );}},return data === undefined && parts[1] ?this.data( parts[0] ) :makeArray: function( array ) {data;var ret = [];} else {return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {if( array != null ){jQuery.data( this, key, value );var i = array.length;});// The window, strings (and functions) also have 'length'}if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )},ret[0] = array;elseremoveData: function( key ) {while( i )return this.each(function() {ret[--i] = array[i];jQuery.removeData( this, key );});}return ret;});},jQuery.extend({queue: function( elem, type, data ) {inArray: function( elem, array ) {if ( !elem ) {for ( var i = 0, length = array.length; i < length; i++ )return;// Use === because on IE, window == document}if ( array[ i ] === elem )return i;type = (type || "fx") + "queue";var q = jQuery.data( elem, type );return -1;},// Speed up dequeue by getting out quickly if this is just a lookupif ( !data ) {merge: function( first, second ) {return q || [];// We have to loop this way because IE & Opera overwrite the length}// expando of getElementsByTagNamevar i = 0, elem, pos = first.length;if ( !q || jQuery.isArray(data) ) {// Also, we need to make sure that the correct elements are being returnedq = jQuery.data( elem, type, jQuery.makeArray(data) );// (IE returns comment nodes in a '*' query)if ( !jQuery.support.getAll ) {} else {while ( (elem = second[ i++ ]) != null )q.push( data );if ( elem.nodeType != 8 )}first[ pos++ ] = elem;return q;} else},while ( (elem = second[ i++ ]) != null )first[ pos++ ] = elem;dequeue: function( elem, type ) {type = type || "fx";return first;},var queue = jQuery.queue( elem, type ), fn = queue.shift();unique: function( array ) {// If the fx queue is dequeued, always remove the progress sentinelvar ret = [], done = {};if ( fn === "inprogress" ) {fn = queue.shift();try {}for ( var i = 0, length = array.length; i < length; i++ ) {if ( fn ) {var id = jQuery.data( array[ i ] );// Add a progress sentinel to prevent the fx queue from being// automatically dequeuedif ( !done[ id ] ) {if ( type === "fx" ) {done[ id ] = true;queue.unshift("inprogress");ret.push( array[ i ] );}}}fn.call(elem, function() {jQuery.dequeue(elem, type);} catch( e ) {});ret = array;}}});return ret;},jQuery.fn.extend({queue: function( type, data ) {grep: function( elems, callback, inv ) {if ( typeof type !== "string" ) {var ret = [];data = type;type = "fx";// Go through the array, only saving the items}// that pass the validator functionfor ( var i = 0, length = elems.length; i < length; i++ )if ( data === undefined ) {if ( !inv != !callback( elems[ i ], i ) )return jQuery.queue( this[0], type );ret.push( elems[ i ] );}return this.each(function( i, elem ) {return ret;var queue = jQuery.queue( this, type, data );},if ( type === "fx" && queue[0] !== "inprogress" ) {map: function( elems, callback ) {jQuery.dequeue( this, type );var ret = [];}});// Go through the array, translating each of the items to their},// new value (or values).dequeue: function( type ) {for ( var i = 0, length = elems.length; i < length; i++ ) {return this.each(function() {var value = callback( elems[ i ], i );jQuery.dequeue( this, type );});if ( value != null )},ret[ ret.length ] = value;}// Based off of the plugin by Clint Helfers, with permission.// http://blindsignals.com/index.php/2009/07/jquery-delay/return ret.concat.apply( [], ret );delay: function( time, type ) {}time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;});type = type || "fx";// Use of jQuery.browser is deprecated.return this.queue( type, function() {// It's included for backwards compatibility and plugins,var elem = this;// although they should work to migrate away.setTimeout(function() {jQuery.dequeue( elem, type );var userAgent = navigator.userAgent.toLowerCase();}, time );});// Figure out what browser is being used},jQuery.browser = {version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],clearQueue: function( type ) {safari: /webkit/.test( userAgent ),return this.queue( type || "fx", [] );opera: /opera/.test( userAgent ),}msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),});mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )var rclass = /[\n\t]/g,};rspace = /\s+/,rreturn = /\r/g,jQuery.each({rspecialurl = /href|src|style/,parent: function(elem){return elem.parentNode;},rtype = /(button|input)/i,parents: function(elem){return jQuery.dir(elem,"parentNode");},rfocusable = /(button|input|object|select|textarea)/i,next: function(elem){return jQuery.nth(elem,2,"nextSibling");},rclickable = /^(a|area)$/i,prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},rradiocheck = /radio|checkbox/;nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},jQuery.fn.extend({siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},attr: function( name, value ) {children: function(elem){return jQuery.sibling(elem.firstChild);},return access( this, name, value, true, jQuery.attr );contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},}, function(name, fn){jQuery.fn[ name ] = function( selector ) {removeAttr: function( name, fn ) {var ret = jQuery.map( this, fn );return this.each(function(){jQuery.attr( this, name, "" );if ( selector && typeof selector == "string" )if ( this.nodeType === 1 ) {ret = jQuery.multiFilter( selector, ret );this.removeAttribute( name );}return this.pushStack( jQuery.unique( ret ), name, selector );});};},});addClass: function( value ) {jQuery.each({if ( jQuery.isFunction(value) ) {appendTo: "append",return this.each(function(i) {prependTo: "prepend",var self = jQuery(this);insertBefore: "before",self.addClass( value.call(this, i, self.attr("class")) );insertAfter: "after",});replaceAll: "replaceWith"}}, function(name, original){jQuery.fn[ name ] = function( selector ) {if ( value && typeof value === "string" ) {var ret = [], insert = jQuery( selector );var classNames = (value || "").split( rspace );for ( var i = 0, l = insert.length; i < l; i++ ) {for ( var i = 0, l = this.length; i < l; i++ ) {var elems = (i > 0 ? this.clone(true) : this).get();var elem = this[i];jQuery.fn[ original ].apply( jQuery(insert[i]), elems );ret = ret.concat( elems );if ( elem.nodeType === 1 ) {}if ( !elem.className ) {elem.className = value;return this.pushStack( ret, name, selector );};} else {});var className = " " + elem.className + " ";for ( var c = 0, cl = classNames.length; c < cl; c++ ) {jQuery.each({if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {removeAttr: function( name ) {elem.className += " " + classNames[c];jQuery.attr( this, name, "" );}if (this.nodeType == 1)}this.removeAttribute( name );}},}}addClass: function( classNames ) {}jQuery.className.add( this, classNames );},return this;},removeClass: function( classNames ) {jQuery.className.remove( this, classNames );removeClass: function( value ) {},if ( jQuery.isFunction(value) ) {return this.each(function(i) {toggleClass: function( classNames, state ) {var self = jQuery(this);if( typeof state !== "boolean" )self.removeClass( value.call(this, i, self.attr("class")) );state = !jQuery.className.has( this, classNames );});jQuery.className[ state ? "add" : "remove" ]( this, classNames );}},if ( (value && typeof value === "string") || value === undefined ) {remove: function( selector ) {var classNames = (value || "").split(rspace);if ( !selector || jQuery.filter( selector, [ this ] ).length ) {// Prevent memory leaksfor ( var i = 0, l = this.length; i < l; i++ ) {jQuery( "*", this ).add([this]).each(function(){var elem = this[i];jQuery.event.remove(this);jQuery.removeData(this);if ( elem.nodeType === 1 && elem.className ) {});if ( value ) {if (this.parentNode)var className = (" " + elem.className + " ").replace(rclass, " ");this.parentNode.removeChild( this );for ( var c = 0, cl = classNames.length; c < cl; c++ ) {}className = className.replace(" " + classNames[c] + " ", " ");},}elem.className = className.substring(1, className.length - 1);empty: function() {// Remove element nodes and prevent memory leaks} else {jQuery(this).children().remove();elem.className = "";}// Remove any remaining nodes}while ( this.firstChild )}this.removeChild( this.firstChild );}}}, function(name, fn){return this;jQuery.fn[ name ] = function(){},return this.each( fn, arguments );};toggleClass: function( value, stateVal ) {});var type = typeof value, isBool = typeof stateVal === "boolean";// Helper function used by the dimensions and offset modulesif ( jQuery.isFunction( value ) ) {function num(elem, prop) {return this.each(function(i) {return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;var self = jQuery(this);}self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );var expando = "jQuery" + now(), uuid = 0, windowData = {};});}jQuery.extend({cache: {},return this.each(function() {if ( type === "string" ) {data: function( elem, name, data ) {// toggle individual class nameselem = elem == window ?var className, i = 0, self = jQuery(this),windowData :state = stateVal,elem;classNames = value.split( rspace );var id = elem[ expando ];while ( (className = classNames[ i++ ]) ) {// check each className given, space seperated list// Compute a unique ID for the elementstate = isBool ? state : !self.hasClass( className );if ( !id )self[ state ? "addClass" : "removeClass" ]( className );id = elem[ expando ] = ++uuid;}// Only generate the data cache if we're} else if ( type === "undefined" || type === "boolean" ) {// trying to access or manipulate itif ( this.className ) {if ( name && !jQuery.cache[ id ] )// store className if setjQuery.cache[ id ] = {};jQuery.data( this, "__className__", this.className );}// Prevent overriding the named cache with undefined valuesif ( data !== undefined )// toggle whole classNamejQuery.cache[ id ][ name ] = data;this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";}// Return the named cache data, or the ID for the element});return name ?},jQuery.cache[ id ][ name ] :id;hasClass: function( selector ) {},var className = " " + selector + " ";for ( var i = 0, l = this.length; i < l; i++ ) {removeData: function( elem, name ) {if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {elem = elem == window ?return true;windowData :}elem;}var id = elem[ expando ];return false;},// If we want to remove a specific section of the element's dataif ( name ) {val: function( value ) {if ( jQuery.cache[ id ] ) {if ( value === undefined ) {// Remove the section of cache datavar elem = this[0];delete jQuery.cache[ id ][ name ];if ( elem ) {// If we've removed all the data, remove the element's cacheif ( jQuery.nodeName( elem, "option" ) ) {name = "";return (elem.attributes.value || {}).specified ? elem.value : elem.text;}for ( name in jQuery.cache[ id ] )break;// We need to handle select boxes specialif ( jQuery.nodeName( elem, "select" ) ) {if ( !name )var index = elem.selectedIndex,jQuery.removeData( elem );values = [],}options = elem.options,one = elem.type === "select-one";// Otherwise, we want to remove all of the element's data} else {// Nothing was selected// Clean up the element expandoif ( index < 0 ) {try {return null;delete elem[ expando ];}} catch(e){// IE has trouble directly removing the expando// Loop through all the selected options// but it's ok with using removeAttributefor ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {if ( elem.removeAttribute )var option = options[ i ];elem.removeAttribute( expando );}if ( option.selected ) {// Get the specifc value for the option// Completely remove the data cachevalue = jQuery(option).val();delete jQuery.cache[ id ];}// We don't need an array for one selects},if ( one ) {queue: function( elem, type, data ) {return value;if ( elem ){}type = (type || "fx") + "queue";// Multi-Selects return an arrayvalues.push( value );var q = jQuery.data( elem, type );}}if ( !q || jQuery.isArray(data) )q = jQuery.data( elem, type, jQuery.makeArray(data) );return values;else if( data )}q.push( data );// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified}if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {return q;return elem.getAttribute("value") === null ? "on" : elem.value;},}dequeue: function( elem, type ){var queue = jQuery.queue( elem, type ),// Everything else, we just grab the valuefn = queue.shift();return (elem.value || "").replace(rreturn, "");if( !type || type === "fx" )}fn = queue[0];return undefined;if( fn !== undefined )}fn.call(elem);}var isFunction = jQuery.isFunction(value);});return this.each(function(i) {jQuery.fn.extend({var self = jQuery(this), val = value;data: function( key, value ){var parts = key.split(".");if ( this.nodeType !== 1 ) {parts[1] = parts[1] ? "." + parts[1] : "";return;}if ( value === undefined ) {var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);if ( isFunction ) {val = value.call(this, i, self.val());if ( data === undefined && this.length )}data = jQuery.data( this[0], key );// Typecast each time if the value is a Function and the appendedreturn data === undefined && parts[1] ?// value is therefore different each time.this.data( parts[0] ) :if ( typeof val === "number" ) {data;val += "";} else}return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){jQuery.data( this, key, value );if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {});this.checked = jQuery.inArray( self.val(), val ) >= 0;},} else if ( jQuery.nodeName( this, "select" ) ) {removeData: function( key ){var values = jQuery.makeArray(val);return this.each(function(){jQuery.removeData( this, key );jQuery( "option", this ).each(function() {});this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;},});queue: function(type, data){if ( typeof type !== "string" ) {if ( !values.length ) {data = type;this.selectedIndex = -1;type = "fx";}}} else {if ( data === undefined )this.value = val;return jQuery.queue( this[0], type );}});return this.each(function(){}var queue = jQuery.queue( this, type, data );});if( type == "fx" && queue.length == 1 )jQuery.extend({queue[0].call(this);attrFn: {});val: true,},css: true,dequeue: function(type){html: true,return this.each(function(){text: true,jQuery.dequeue( this, type );data: true,});width: true,}height: true,});/*!offset: true* Sizzle CSS Selector Engine - v0.9.3},* Copyright 2009, The Dojo Foundation* Released under the MIT, BSD, and GPL Licenses.attr: function( elem, name, value, pass ) {* More information: http://sizzlejs.com/// don't set attributes on text and comment nodes*/if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {(function(){return undefined;}var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,done = 0,if ( pass && name in jQuery.attrFn ) {toString = Object.prototype.toString;return jQuery(elem)[name](value);}var Sizzle = function(selector, context, results, seed) {results = results || [];var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),context = context || document;// Whether we are setting (or getting)set = value !== undefined;if ( context.nodeType !== 1 && context.nodeType !== 9 )return [];// Try to normalize/fix the namename = notxml && jQuery.props[ name ] || name;if ( !selector || typeof selector !== "string" ) {return results;// Only do all the following if this is a node (faster for style)}if ( elem.nodeType === 1 ) {// These attributes require special treatmentvar parts = [], m, set, checkSet, check, mode, extra, prune = true;var special = rspecialurl.test( name );// Reset the position of the chunker regexp (start from head)// Safari mis-reports the default selected property of an optionchunker.lastIndex = 0;// Accessing the parent's selectedIndex property fixes itif ( name === "selected" && !jQuery.support.optSelected ) {while ( (m = chunker.exec(selector)) !== null ) {var parent = elem.parentNode;parts.push( m[1] );if ( parent ) {parent.selectedIndex;if ( m[2] ) {extra = RegExp.rightContext;// Make sure that it also works with optgroups, see #5701break;if ( parent.parentNode ) {}parent.parentNode.selectedIndex;}}if ( parts.length > 1 && origPOS.exec( selector ) ) {}if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {set = posProcess( parts[0] + parts[1], context );// If applicable, access the attribute via the DOM 0 way} else {if ( name in elem && notxml && !special ) {set = Expr.relative[ parts[0] ] ?if ( set ) {[ context ] :// We can't allow the type property to be changed (since it causes problems in IE)Sizzle( parts.shift(), context );if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {throw "type property can't be changed";while ( parts.length ) {}selector = parts.shift();elem[ name ] = value;if ( Expr.relative[ selector ] )}selector += parts.shift();// browsers index elements by id/name on forms, give priority to attributes.set = posProcess( selector, set );if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {}return elem.getAttributeNode( name ).nodeValue;}} else {var ret = seed ?// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set{ expr: parts.pop(), set: makeArray(seed) } :// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );if ( name === "tabIndex" ) {set = Sizzle.filter( ret.expr, ret.set );var attributeNode = elem.getAttributeNode( "tabIndex" );if ( parts.length > 0 ) {return attributeNode && attributeNode.specified ?checkSet = makeArray(set);attributeNode.value :} else {rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?prune = false;0 :}undefined;}while ( parts.length ) {var cur = parts.pop(), pop = cur;return elem[ name ];}if ( !Expr.relative[ cur ] ) {cur = "";if ( !jQuery.support.style && notxml && name === "style" ) {} else {if ( set ) {pop = parts.pop();elem.style.cssText = "" + value;}if ( pop == null ) {return elem.style.cssText;pop = context;}}if ( set ) {Expr.relative[ cur ]( checkSet, pop, isXML(context) );// convert the value to a string (all browsers do this but IE) see #1070}elem.setAttribute( name, "" + value );}if ( !checkSet ) {var attr = !jQuery.support.hrefNormalized && notxml && special ?checkSet = set;// Some attributes require a special call on IE}elem.getAttribute( name, 2 ) :elem.getAttribute( name );if ( !checkSet ) {throw "Syntax error, unrecognized expression: " + (cur || selector);// Non-existent attributes return null, we normalize to undefined}return attr === null ? undefined : attr;}if ( toString.call(checkSet) === "[object Array]" ) {if ( !prune ) {// elem is actually elem.style ... set the styleresults.push.apply( results, checkSet );// Using attr for specific style information is now deprecated. Use style insead.} else if ( context.nodeType === 1 ) {return jQuery.style( elem, name, value );for ( var i = 0; checkSet[i] != null; i++ ) {}if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {});results.push( set[i] );var fcleanup = function( nm ) {}return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {}return "\\" + ch;} else {});for ( var i = 0; checkSet[i] != null; i++ ) {};if ( checkSet[i] && checkSet[i].nodeType === 1 ) {results.push( set[i] );/*}* A number of helper functions used for managing events.}* Many of the ideas behind this code originated from}* Dean Edwards' addEvent library.} else {*/makeArray( checkSet, results );jQuery.event = {}// Bind an event to an elementif ( extra ) {// Original by Dean EdwardsSizzle( extra, context, results, seed );add: function( elem, types, handler, data ) {if ( elem.nodeType === 3 || elem.nodeType === 8 ) {if ( sortOrder ) {return;hasDuplicate = false;}results.sort(sortOrder);// For whatever reason, IE has trouble passing the window objectif ( hasDuplicate ) {// around, causing it to be cloned in the processfor ( var i = 1; i < results.length; i++ ) {if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {if ( results[i] === results[i-1] ) {elem = window;results.splice(i--, 1);}}}// Make sure that the function being executed has a unique ID}if ( !handler.guid ) {}handler.guid = jQuery.guid++;}return results;// if data is passed, bind to handler};if ( data !== undefined ) {// Create temporary function pointer to original handlerSizzle.matches = function(expr, set){var fn = handler;return Sizzle(expr, null, null, set);};// Create unique handler function, wrapped around original handlerhandler = jQuery.proxy( fn );Sizzle.find = function(expr, context, isXML){var set, match;// Store data in unique handlerhandler.data = data;if ( !expr ) {}return [];}// Init the element's event structurevar events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),for ( var i = 0, l = Expr.order.length; i < l; i++ ) {handle = jQuery.data( elem, "handle" ), eventHandle;var type = Expr.order[i], match;if ( !handle ) {if ( (match = Expr.match[ type ].exec( expr )) ) {eventHandle = function() {var left = RegExp.leftContext;// Handle the second event of a trigger and when// an event is called after a page has unloadedif ( left.substr( left.length - 1 ) !== "\\" ) {return typeof jQuery !== "undefined" && !jQuery.event.triggered ?match[1] = (match[1] || "").replace(/\\/g, "");jQuery.event.handle.apply( eventHandle.elem, arguments ) :set = Expr.find[ type ]( match, context, isXML );undefined;if ( set != null ) {};expr = expr.replace( Expr.match[ type ], "" );break;handle = jQuery.data( elem, "handle", eventHandle );}}}// If no handle is found then we must be trying to bind to one of the}// banned noData elementsif ( !handle ) {if ( !set ) {return;set = context.getElementsByTagName("*");}}// Add elem as a property of the handle functionreturn {set: set, expr: expr};// This is to prevent a memory leak with non-native};// event in IE.handle.elem = elem;Sizzle.filter = function(expr, set, inplace, not){var old = expr, result = [], curLoop = set, match, anyFound,// Handle multiple events separated by a spaceisXMLFilter = set && set[0] && isXML(set[0]);// jQuery(...).bind("mouseover mouseout", fn);types = types.split( /\s+/ );while ( expr && set.length ) {var type, i=0;for ( var type in Expr.filter ) {while ( (type = types[ i++ ]) ) {if ( (match = Expr.match[ type ].exec( expr )) != null ) {// Namespaced event handlersvar filter = Expr.filter[ type ], found, item;var namespaces = type.split(".");anyFound = false;type = namespaces.shift();handler.type = namespaces.slice(0).sort().join(".");if ( curLoop == result ) {result = [];// Get the current list of functions bound to this event}var handlers = events[ type ],special = this.special[ type ] || {};if ( Expr.preFilter[ type ] ) {match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );if ( !match ) {// Init the event handler queueanyFound = found = true;if ( !handlers ) {} else if ( match === true ) {handlers = events[ type ] = {};continue;}// Check for a special event handler}// Only use addEventListener/attachEvent if the special// events handler returns falseif ( match ) {if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) {for ( var i = 0; (item = curLoop[i]) != null; i++ ) {// Bind the global event handler to the elementif ( item ) {if ( elem.addEventListener ) {found = filter( item, match, i, curLoop );elem.addEventListener( type, handle, false );var pass = not ^ !!found;} else if ( elem.attachEvent ) {elem.attachEvent( "on" + type, handle );if ( inplace && found != null ) {}if ( pass ) {}anyFound = true;}} else {curLoop[i] = false;if ( special.add ) {}var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers );} else if ( pass ) {if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) {result.push( item );modifiedHandler.guid = modifiedHandler.guid || handler.guid;anyFound = true;handler = modifiedHandler;}}}}}}// Add the function to the element's handler listhandlers[ handler.guid ] = handler;if ( found !== undefined ) {if ( !inplace ) {// Keep track of which events have been used, for global triggeringcurLoop = result;this.global[ type ] = true;}expr = expr.replace( Expr.match[ type ], "" );// Nullify elem to prevent memory leaks in IEelem = null;if ( !anyFound ) {},return [];}global: {},break;// Detach an event or set of events from an element}remove: function( elem, types, handler ) {}// don't do events on text and comment nodes}if ( elem.nodeType === 3 || elem.nodeType === 8 ) {return;// Improper expression}if ( expr == old ) {if ( anyFound == null ) {var events = jQuery.data( elem, "events" ), ret, type, fn;throw "Syntax error, unrecognized expression: " + expr;} else {if ( events ) {break;// Unbind all events for the element}if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) {}for ( type in events ) {this.remove( elem, type + (types || "") );old = expr;}}} else {// types is actually an event object herereturn curLoop;if ( types.type ) {};handler = types.handler;types = types.type;var Expr = Sizzle.selectors = {}order: [ "ID", "NAME", "TAG" ],match: {// Handle multiple events separated by a spaceID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,// jQuery(...).unbind("mouseover mouseout", fn);CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,types = types.split(/\s+/);NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,var i = 0;ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,while ( (type = types[ i++ ]) ) {TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,// Namespaced event handlersCHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,var namespaces = type.split(".");POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,type = namespaces.shift();PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/var all = !namespaces.length,},cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ),attrMap: {namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"),"class": "className",special = this.special[ type ] || {};"for": "htmlFor"},if ( events[ type ] ) {attrHandle: {// remove the given handler for the given typehref: function(elem){if ( handler ) {return elem.getAttribute("href");fn = events[ type ][ handler.guid ];}delete events[ type ][ handler.guid ];},relative: {// remove all handlers for the given type"+": function(checkSet, part, isXML){} else {var isPartStr = typeof part === "string",for ( var handle in events[ type ] ) {isTag = isPartStr && !/\W/.test(part),// Handle the removal of namespaced eventsisPartStrNotTag = isPartStr && !isTag;if ( all || namespace.test( events[ type ][ handle ].type ) ) {delete events[ type ][ handle ];if ( isTag && !isXML ) {}part = part.toUpperCase();}}for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {if ( special.remove ) {if ( (elem = checkSet[i]) ) {special.remove.call( elem, namespaces, fn);while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}}checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?// remove generic event handler if no more handlers existelem || false :for ( ret in events[ type ] ) {elem === part;break;}}if ( !ret ) {if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {if ( isPartStrNotTag ) {if ( elem.removeEventListener ) {Sizzle.filter( part, checkSet, true );elem.removeEventListener( type, jQuery.data( elem, "handle" ), false );}} else if ( elem.detachEvent ) {},elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) );">": function(checkSet, part, isXML){}var isPartStr = typeof part === "string";}ret = null;if ( isPartStr && !/\W/.test(part) ) {delete events[ type ];part = isXML ? part : part.toUpperCase();}}for ( var i = 0, l = checkSet.length; i < l; i++ ) {}var elem = checkSet[i];}if ( elem ) {var parent = elem.parentNode;// Remove the expando if it's no longer usedcheckSet[i] = parent.nodeName === part ? parent : false;for ( ret in events ) {}break;}} else {if ( !ret ) {for ( var i = 0, l = checkSet.length; i < l; i++ ) {var handle = jQuery.data( elem, "handle" );var elem = checkSet[i];if ( handle ) {if ( elem ) {handle.elem = null;checkSet[i] = isPartStr ?}elem.parentNode :jQuery.removeData( elem, "events" );elem.parentNode === part;jQuery.removeData( elem, "handle" );}}},if ( isPartStr ) {Sizzle.filter( part, checkSet, true );// bubbling is internal}trigger: function( event, data, elem /*, bubbling */ ) {}// Event object or event type},var type = event.type || event,"": function(checkSet, part, isXML){bubbling = arguments[3];var doneName = done++, checkFn = dirCheck;if ( !bubbling ) {if ( !part.match(/\W/) ) {event = typeof event === "object" ?var nodeCheck = part = isXML ? part : part.toUpperCase();// jQuery.Event objectcheckFn = dirNodeCheck;event[expando] ? event :}// Object literaljQuery.extend( jQuery.Event(type), event ) :checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);// Just the event type (string)},jQuery.Event(type);"~": function(checkSet, part, isXML){var doneName = done++, checkFn = dirCheck;if ( type.indexOf("!") >= 0 ) {event.type = type = type.slice(0, -1);if ( typeof part === "string" && !part.match(/\W/) ) {event.exclusive = true;var nodeCheck = part = isXML ? part : part.toUpperCase();}checkFn = dirNodeCheck;}// Handle a global triggerif ( !elem ) {checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);// Don't bubble custom events when global (to avoid too much overhead)}event.stopPropagation();},find: {// Only trigger if we've ever bound an event for itID: function(match, context, isXML){if ( this.global[ type ] ) {if ( typeof context.getElementById !== "undefined" && !isXML ) {jQuery.each( jQuery.cache, function() {var m = context.getElementById(match[1]);if ( this.events && this.events[type] ) {return m ? [m] : [];jQuery.event.trigger( event, data, this.handle.elem );}},});NAME: function(match, context, isXML){}if ( typeof context.getElementsByName !== "undefined" ) {}var ret = [], results = context.getElementsByName(match[1]);// Handle triggering a single elementfor ( var i = 0, l = results.length; i < l; i++ ) {if ( results[i].getAttribute("name") === match[1] ) {// don't do events on text and comment nodesret.push( results[i] );if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {}return undefined;}return ret.length === 0 ? null : ret;// Clean up in case it is reused}event.result = undefined;},event.target = elem;TAG: function(match, context){return context.getElementsByTagName(match[1]);// Clone the incoming data, if any}data = jQuery.makeArray( data );},data.unshift( event );preFilter: {}CLASS: function(match, curLoop, inplace, result, not, isXML){match = " " + match[1].replace(/\\/g, "") + " ";event.currentTarget = elem;if ( isXML ) {// Trigger the event, it is assumed that "handle" is a functionreturn match;var handle = jQuery.data( elem, "handle" );}if ( handle ) {handle.apply( elem, data );for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {}if ( elem ) {if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {var nativeFn, nativeHandler;if ( !inplace )try {result.push( elem );if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {} else if ( inplace ) {nativeFn = elem[ type ];curLoop[i] = false;nativeHandler = elem[ "on" + type ];}}// prevent IE from throwing an error for some elements with some event types, see #3533}} catch (e) {}return false;var isClick = jQuery.nodeName(elem, "a") && type === "click";},ID: function(match){// Trigger the native events (except for clicks on links)return match[1].replace(/\\/g, "");if ( !bubbling && nativeFn && !event.isDefaultPrevented() && !isClick ) {},this.triggered = true;TAG: function(match, curLoop){try {for ( var i = 0; curLoop[i] === false; i++ ){}elem[ type ]();return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();// prevent IE from throwing an error for some hidden elements},} catch (e) {}CHILD: function(match){if ( match[1] == "nth" ) {// Handle triggering native .onfoo handlers// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'} else if ( nativeHandler && elem[ "on" + type ].apply( elem, data ) === false ) {var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(event.result = false;match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||}!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);this.triggered = false;// calculate the numbers (first)n+(last) including if they are negativematch[2] = (test[1] + (test[2] || 1)) - 0;if ( !event.isPropagationStopped() ) {match[3] = test[3] - 0;var parent = elem.parentNode || elem.ownerDocument;}if ( parent ) {jQuery.event.trigger( event, data, parent, true );// TODO: Move to normal caching system}match[0] = done++;}},return match;},handle: function( event ) {ATTR: function(match, curLoop, inplace, result, not, isXML){// returned undefined or falsevar name = match[1].replace(/\\/g, "");var all, handlers;if ( !isXML && Expr.attrMap[name] ) {event = arguments[0] = jQuery.event.fix( event || window.event );match[1] = Expr.attrMap[name];event.currentTarget = this;}// Namespaced event handlersif ( match[2] === "~=" ) {var namespaces = event.type.split(".");match[4] = " " + match[4] + " ";event.type = namespaces.shift();}// Cache this now, all = true means, any handlerreturn match;all = !namespaces.length && !event.exclusive;},PSEUDO: function(match, curLoop, inplace, result, not){var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");if ( match[1] === "not" ) {// If we're dealing with a complex expression, or a simple onehandlers = ( jQuery.data(this, "events") || {} )[ event.type ];if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {match[3] = Sizzle(match[3], null, null, curLoop);for ( var j in handlers ) {} else {var handler = handlers[ j ];var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);if ( !inplace ) {// Filter the functions by classresult.push.apply( result, ret );if ( all || namespace.test(handler.type) ) {}// Pass in a reference to the handler function itselfreturn false;// So that we can later remove it}event.handler = handler;} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {event.data = handler.data;return true;}var ret = handler.apply( this, arguments );return match;if ( ret !== undefined ) {},event.result = ret;POS: function(match){if ( ret === false ) {match.unshift( true );event.preventDefault();return match;event.stopPropagation();}},}filters: {enabled: function(elem){if ( event.isImmediatePropagationStopped() ) {return elem.disabled === false && elem.type !== "hidden";break;},}disabled: function(elem){return elem.disabled === true;}},checked: function(elem){return elem.checked === true;return event.result;},selected: function(elem){// Accessing this property makes selected-by-defaultprops: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),// options in Safari work properlyelem.parentNode.selectedIndex;fix: function( event ) {return elem.selected === true;if ( event[ expando ] ) {},return event;parent: function(elem){}return !!elem.firstChild;},// store a copy of the original event objectempty: function(elem){// and "clone" to set read-only propertiesreturn !elem.firstChild;var originalEvent = event;},event = jQuery.Event( originalEvent );has: function(elem, i, match){return !!Sizzle( match[3], elem ).length;for ( var i = this.props.length, prop; i; ) {},prop = this.props[ --i ];header: function(elem){event[ prop ] = originalEvent[ prop ];return /h\d/i.test( elem.nodeName );}},text: function(elem){// Fix target property, if necessaryreturn "text" === elem.type;if ( !event.target ) {},event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined eitherradio: function(elem){}return "radio" === elem.type;},// check if target is a textnode (safari)checkbox: function(elem){if ( event.target.nodeType === 3 ) {return "checkbox" === elem.type;event.target = event.target.parentNode;},file: function(elem){return "file" === elem.type;// Add relatedTarget, if necessary},if ( !event.relatedTarget && event.fromElement ) {password: function(elem){event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;return "password" === elem.type;}},submit: function(elem){// Calculate pageX/Y if missing and clientX/Y availablereturn "submit" === elem.type;if ( event.pageX == null && event.clientX != null ) {},var doc = document.documentElement, body = document.body;image: function(elem){event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);return "image" === elem.type;event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);},reset: function(elem){return "reset" === elem.type;// Add which for key events},if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {button: function(elem){event.which = event.charCode || event.keyCode;return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";}},input: function(elem){// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)return /input|select|textarea|button/i.test(elem.nodeName);if ( !event.metaKey && event.ctrlKey ) {}event.metaKey = event.ctrlKey;},}setFilters: {first: function(elem, i){// Add which for click: 1 === left; 2 === middle; 3 === rightreturn i === 0;// Note: button is not normalized, so don't use it},if ( !event.which && event.button !== undefined ) {last: function(elem, i, match, array){event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));return i === array.length - 1;}},even: function(elem, i){return event;return i % 2 === 0;},},odd: function(elem, i){// Deprecated, use jQuery.guid insteadreturn i % 2 === 1;guid: 1E8,},lt: function(elem, i, match){// Deprecated, use jQuery.proxy insteadreturn i < match[3] - 0;proxy: jQuery.proxy,},gt: function(elem, i, match){special: {return i > match[3] - 0;ready: {},// Make sure the ready event is setupnth: function(elem, i, match){setup: jQuery.bindReady,return match[3] - 0 == i;teardown: jQuery.noopeq: function(elem, i, match){return match[3] - 0 == i;live: {}add: function( proxy, data, namespaces, live ) {},jQuery.extend( proxy, data || {} );filter: {PSEUDO: function(elem, match, i, array){proxy.guid += data.selector + data.live;var name = match[1], filter = Expr.filters[ name ];jQuery.event.add( this, data.live, liveHandler, data );if ( filter ) {},return filter( elem, i, match, array );} else if ( name === "contains" ) {remove: function( namespaces ) {return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;if ( namespaces.length ) {} else if ( name === "not" ) {var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");var not = match[3];jQuery.each( (jQuery.data(this, "events").live || {}), function() {for ( var i = 0, l = not.length; i < l; i++ ) {if ( name.test(this.type) ) {if ( not[i] === elem ) {remove++;return false;}});}if ( remove < 1 ) {return true;jQuery.event.remove( this, namespaces[0], liveHandler );}},}CHILD: function(elem, match){},var type = match[1], node = elem;special: {}switch (type) {},case 'only':beforeunload: {case 'first':setup: function( data, namespaces, fn ) {while (node = node.previousSibling) {// We only want to do this special case on windowsif ( node.nodeType === 1 ) return false;if ( this.setInterval ) {}this.onbeforeunload = fn;if ( type == 'first') return true;}node = elem;case 'last':return false;while (node = node.nextSibling) {},if ( node.nodeType === 1 ) return false;teardown: function( namespaces, fn ) {}if ( this.onbeforeunload === fn ) {return true;this.onbeforeunload = null;case 'nth':}var first = match[2], last = match[3];}}if ( first == 1 && last == 0 ) {}return true;};}jQuery.Event = function( src ) {var doneName = match[0],// Allow instantiation without the 'new' keywordparent = elem.parentNode;if ( !this.preventDefault ) {return new jQuery.Event( src );if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {}var count = 0;for ( node = parent.firstChild; node; node = node.nextSibling ) {// Event objectif ( node.nodeType === 1 ) {if ( src && src.type ) {node.nodeIndex = ++count;this.originalEvent = src;}this.type = src.type;}// Event typeparent.sizcache = doneName;} else {}this.type = src;}var diff = elem.nodeIndex - last;if ( first == 0 ) {// timeStamp is buggy for some events on Firefox(#3843)return diff == 0;// So we won't rely on the native value} else {this.timeStamp = now();return ( diff % first == 0 && diff / first >= 0 );}// Mark it as fixed}this[ expando ] = true;},};ID: function(elem, match){return elem.nodeType === 1 && elem.getAttribute("id") === match;function returnFalse() {},return false;TAG: function(elem, match){}return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;function returnTrue() {},return true;CLASS: function(elem, match){}return (" " + (elem.className || elem.getAttribute("class")) + " ").indexOf( match ) > -1;// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding},// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.htmlATTR: function(elem, match){jQuery.Event.prototype = {var name = match[1],preventDefault: function() {result = Expr.attrHandle[ name ] ?this.isDefaultPrevented = returnTrue;Expr.attrHandle[ name ]( elem ) :elem[ name ] != null ?var e = this.originalEvent;elem[ name ] :if ( !e ) {elem.getAttribute( name ),return;value = result + "",}type = match[2],check = match[4];// if preventDefault exists run it on the original eventif ( e.preventDefault ) {return result == null ?e.preventDefault();type === "!=" :}type === "=" ?// otherwise set the returnValue property of the original event to false (IE)value === check :e.returnValue = false;type === "*=" ?},value.indexOf(check) >= 0 :stopPropagation: function() {type === "~=" ?this.isPropagationStopped = returnTrue;(" " + value + " ").indexOf(check) >= 0 :!check ?var e = this.originalEvent;value && result !== false :if ( !e ) {type === "!=" ?return;value != check :}type === "^=" ?// if stopPropagation exists run it on the original eventvalue.indexOf(check) === 0 :if ( e.stopPropagation ) {type === "$=" ?e.stopPropagation();value.substr(value.length - check.length) === check :}type === "|=" ?// otherwise set the cancelBubble property of the original event to true (IE)value === check || value.substr(0, check.length + 1) === check + "-" :e.cancelBubble = true;false;},},stopImmediatePropagation: function() {POS: function(elem, match, i, array){this.isImmediatePropagationStopped = returnTrue;var name = match[2], filter = Expr.setFilters[ name ];this.stopPropagation();},if ( filter ) {isDefaultPrevented: returnFalse,return filter( elem, i, match, array );isPropagationStopped: returnFalse,}isImmediatePropagationStopped: returnFalse}};}};// Checks if an event happened on an element within another element// Used in jQuery.event.special.mouseenter and mouseleave handlersvar origPOS = Expr.match.POS;var withinElement = function( event ) {// Check if mouse(over|out) are still within the same parent elementfor ( var type in Expr.match ) {var parent = event.relatedTarget;Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );}// Traverse up the treewhile ( parent && parent !== this ) {var makeArray = function(array, results) {// Firefox sometimes assigns relatedTarget a XUL elementarray = Array.prototype.slice.call( array );// which we cannot access the parentNode property oftry {if ( results ) {parent = parent.parentNode;results.push.apply( results, array );return results;// assuming we've left the element since we most likely mousedover a xul element}} catch(e) {break;return array;}};}// Perform a simple check to determine if the browser is capable ofif ( parent !== this ) {// converting a NodeList to an array using builtin methods.// set the correct event typetry {event.type = event.data;Array.prototype.slice.call( document.documentElement.childNodes );// handle event if we actually just moused on to a non sub-element// Provide a fallback method if it does not workjQuery.event.handle.apply( this, arguments );} catch(e){}makeArray = function(array, results) {var ret = results || [];},if ( toString.call(array) === "[object Array]" ) {// In case of event delegation, we only need to rename the event.type,Array.prototype.push.apply( ret, array );// liveHandler will take care of the rest.} else {delegate = function( event ) {if ( typeof array.length === "number" ) {event.type = event.data;for ( var i = 0, l = array.length; i < l; i++ ) {jQuery.event.handle.apply( this, arguments );ret.push( array[i] );};}} else {// Create mouseenter and mouseleave eventsfor ( var i = 0; array[i]; i++ ) {jQuery.each({ret.push( array[i] );mouseenter: "mouseover",}mouseleave: "mouseout"}}, function( orig, fix ) {}jQuery.event.special[ orig ] = {setup: function( data ) {return ret;jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );};},}teardown: function( data ) {jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );var sortOrder;}};if ( document.documentElement.compareDocumentPosition ) {});sortOrder = function( a, b ) {var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;// submit delegationif ( ret === 0 ) {if ( !jQuery.support.submitBubbles ) {hasDuplicate = true;}jQuery.event.special.submit = {return ret;setup: function( data, namespaces, fn ) {};if ( this.nodeName.toLowerCase() !== "form" ) {} else if ( "sourceIndex" in document.documentElement ) {jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) {sortOrder = function( a, b ) {var elem = e.target, type = elem.type;var ret = a.sourceIndex - b.sourceIndex;if ( ret === 0 ) {if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {hasDuplicate = true;return trigger( "submit", this, arguments );}return ret;});};} else if ( document.createRange ) {jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) {sortOrder = function( a, b ) {var elem = e.target, type = elem.type;var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();aRange.selectNode(a);if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {aRange.collapse(true);return trigger( "submit", this, arguments );bRange.selectNode(b);}bRange.collapse(true);});var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);if ( ret === 0 ) {} else {hasDuplicate = true;return false;return ret;},};}remove: function( namespaces, fn ) {jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") );// Check to see if the browser returns elements by name whenjQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") );// querying by getElementById (and provide a workaround)}(function(){};// We're going to inject a fake input element with a specified namevar form = document.createElement("form"),}id = "script" + (new Date).getTime();form.innerHTML = "<input name='" + id + "'/>";// change delegation, happens here so we have bind.if ( !jQuery.support.changeBubbles ) {// Inject it into the root element, check its status, and remove it quicklyvar root = document.documentElement;var formElems = /textarea|input|select/i;root.insertBefore( form, root.firstChild );function getVal( elem ) {// The workaround has to do additional checks after a getElementByIdvar type = elem.type, val = elem.value;// Which slows things down for other browsers (hence the branching)if ( !!document.getElementById( id ) ) {if ( type === "radio" || type === "checkbox" ) {Expr.find.ID = function(match, context, isXML){val = elem.checked;if ( typeof context.getElementById !== "undefined" && !isXML ) {var m = context.getElementById(match[1]);} else if ( type === "select-multiple" ) {return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];val = elem.selectedIndex > -1 ?}jQuery.map( elem.options, function( elem ) {};return elem.selected;}).join("-") :Expr.filter.ID = function(elem, match){"";var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");return elem.nodeType === 1 && node && node.nodeValue === match;} else if ( elem.nodeName.toLowerCase() === "select" ) {};val = elem.selectedIndex;root.removeChild( form );return val;})();(function(){function testChange( e ) {// Check to see if the browser returns only elementsvar elem = e.target, data, val;// when doing getElementsByTagName("*")if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {// Create a fake elementreturn;var div = document.createElement("div");}div.appendChild( document.createComment("") );data = jQuery.data( elem, "_change_data" );// Make sure no comments are foundval = getVal(elem);if ( div.getElementsByTagName("*").length > 0 ) {Expr.find.TAG = function(match, context){if ( val === data ) {var results = context.getElementsByTagName(match[1]);return;}// Filter out possible commentsif ( match[1] === "*" ) {// the current data will be also retrieved by beforeactivatevar tmp = [];if ( e.type !== "focusout" || elem.type !== "radio" ) {jQuery.data( elem, "_change_data", val );for ( var i = 0; results[i]; i++ ) {}if ( results[i].nodeType === 1 ) {tmp.push( results[i] );if ( elem.type !== "select" && (data != null || val) ) {}e.type = "change";}return jQuery.event.trigger( e, arguments[1], this );}results = tmp;}}jQuery.event.special.change = {return results;filters: {};focusout: testChange,}click: function( e ) {// Check to see if an attribute returns normalized href attributesvar elem = e.target, type = elem.type;div.innerHTML = "<a href='#'></a>";if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {div.firstChild.getAttribute("href") !== "#" ) {return testChange.call( this, e );Expr.attrHandle.href = function(elem){}return elem.getAttribute("href", 2);},};}// Change has to be called before submit})();// Keydown will be called before keypress, which is used in submit-event delegationkeydown: function( e ) {if ( document.querySelectorAll ) (function(){var elem = e.target, type = elem.type;var oldSizzle = Sizzle, div = document.createElement("div");div.innerHTML = "<p class='TEST'></p>";if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||// Safari can't handle uppercase or unicode characters whentype === "select-multiple" ) {// in quirks mode.return testChange.call( this, e );if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {}return;},}// Beforeactivate happens also before the previous element is blurredSizzle = function(query, context, extra, seed){// with this event you can't trigger a change event, but you can storecontext = context || document;// information/focus[in] is not needed anymorebeforeactivate: function( e ) {// Only use querySelectorAll on non-XML documentsvar elem = e.target;// (ID selectors don't work in non-HTML documents)if ( !seed && context.nodeType === 9 && !isXML(context) ) {if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) {try {jQuery.data( elem, "_change_data", getVal(elem) );return makeArray( context.querySelectorAll(query), extra );}} catch(e){}}},setup: function( data, namespaces, fn ) {return oldSizzle(query, context, extra, seed);for ( var type in changeFilters ) {};jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );}Sizzle.find = oldSizzle.find;Sizzle.filter = oldSizzle.filter;return formElems.test( this.nodeName );Sizzle.selectors = oldSizzle.selectors;},Sizzle.matches = oldSizzle.matches;remove: function( namespaces, fn ) {})();for ( var type in changeFilters ) {jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){}var div = document.createElement("div");div.innerHTML = "<div class='test e'></div><div class='test'></div>";return formElems.test( this.nodeName );}// Opera can't find a second classname (in 9.6)};if ( div.getElementsByClassName("e").length === 0 )return;var changeFilters = jQuery.event.special.change.filters;// Safari caches class attributes, doesn't catch changes (in 3.2)}div.lastChild.className = "e";function trigger( type, elem, args ) {if ( div.getElementsByClassName("e").length === 1 )args[0].type = type;return;return jQuery.event.handle.apply( elem, args );}Expr.order.splice(1, 0, "CLASS");Expr.find.CLASS = function(match, context, isXML) {// Create "bubbling" focus and blur eventsif ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {if ( document.addEventListener ) {return context.getElementsByClassName(match[1]);jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {}jQuery.event.special[ fix ] = {};setup: function() {})();this.addEventListener( orig, handler, true );},function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {teardown: function() {var sibDir = dir == "previousSibling" && !isXML;this.removeEventListener( orig, handler, true );for ( var i = 0, l = checkSet.length; i < l; i++ ) {}var elem = checkSet[i];};if ( elem ) {if ( sibDir && elem.nodeType === 1 ){function handler( e ) {elem.sizcache = doneName;e = jQuery.event.fix( e );elem.sizset = i;e.type = fix;}return jQuery.event.handle.call( this, e );elem = elem[dir];}var match = false;});}while ( elem ) {if ( elem.sizcache === doneName ) {jQuery.each(["bind", "one"], function( i, name ) {match = checkSet[elem.sizset];jQuery.fn[ name ] = function( type, data, fn ) {break;// Handle object literals}if ( typeof type === "object" ) {for ( var key in type ) {if ( elem.nodeType === 1 && !isXML ){this[ name ](key, data, type[key], fn);elem.sizcache = doneName;}elem.sizset = i;return this;}if ( elem.nodeName === cur ) {if ( jQuery.isFunction( data ) ) {match = elem;thisObject = fn;break;fn = data;}data = undefined;}elem = elem[dir];}var handler = name === "one" ? jQuery.proxy( fn, function( event ) {jQuery( this ).unbind( event, handler );checkSet[i] = match;return fn.apply( this, arguments );}) : fn;}}return type === "unload" && name !== "one" ?this.one( type, data, fn, thisObject ) :function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {this.each(function() {var sibDir = dir == "previousSibling" && !isXML;jQuery.event.add( this, type, handler, data );for ( var i = 0, l = checkSet.length; i < l; i++ ) {});var elem = checkSet[i];};if ( elem ) {});if ( sibDir && elem.nodeType === 1 ) {elem.sizcache = doneName;jQuery.fn.extend({elem.sizset = i;unbind: function( type, fn ) {}// Handle object literalselem = elem[dir];if ( typeof type === "object" && !type.preventDefault ) {var match = false;for ( var key in type ) {this.unbind(key, type[key]);while ( elem ) {}if ( elem.sizcache === doneName ) {return this;match = checkSet[elem.sizset];}break;}return this.each(function() {jQuery.event.remove( this, type, fn );if ( elem.nodeType === 1 ) {});if ( !isXML ) {},elem.sizcache = doneName;trigger: function( type, data ) {elem.sizset = i;return this.each(function() {}jQuery.event.trigger( type, data, this );if ( typeof cur !== "string" ) {});if ( elem === cur ) {},match = true;break;triggerHandler: function( type, data ) {}if ( this[0] ) {var event = jQuery.Event( type );} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {event.preventDefault();match = elem;event.stopPropagation();break;jQuery.event.trigger( event, data, this[0] );}return event.result;}},elem = elem[dir];}toggle: function( fn ) {// Save reference to arguments for access in closurecheckSet[i] = match;var args = arguments, i = 1;}}// link all the functions, so any of them can unbind this click handler}while ( i < args.length ) {jQuery.proxy( fn, args[ i++ ] );var contains = document.compareDocumentPosition ? function(a, b){}return a.compareDocumentPosition(b) & 16;} : function(a, b){return this.click( jQuery.proxy( fn, function( event ) {return a !== b && (a.contains ? a.contains(b) : true);// Figure out which function to execute};var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );var isXML = function(elem){return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||// Make sure that clicks stop!!elem.ownerDocument && isXML( elem.ownerDocument );event.preventDefault();};// and execute the functionvar posProcess = function(selector, context){return args[ lastToggle ].apply( this, arguments ) || false;var tmpSet = [], later = "", match,}));root = context.nodeType ? [context] : context;},// Position selectors must be done after the filterhover: function( fnOver, fnOut ) {// And so must :not(positional) so we move all PSEUDOs to the endreturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );while ( (match = Expr.match.PSEUDO.exec( selector )) ) {},later += match[0];selector = selector.replace( Expr.match.PSEUDO, "" );live: function( type, data, fn ) {}if ( jQuery.isFunction( data ) ) {fn = data;selector = Expr.relative[selector] ? selector + "*" : selector;data = undefined;}for ( var i = 0, l = root.length; i < l; i++ ) {Sizzle( selector, root[i], tmpSet );jQuery( this.context ).bind( liveConvert( type, this.selector ), {}data: data, selector: this.selector, live: type}, fn );return Sizzle.filter( later, tmpSet );};return this;},// EXPOSEjQuery.find = Sizzle;die: function( type, fn ) {jQuery.filter = Sizzle.filter;jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );jQuery.expr = Sizzle.selectors;return this;jQuery.expr[":"] = jQuery.expr.filters;}});Sizzle.selectors.filters.hidden = function(elem){return elem.offsetWidth === 0 || elem.offsetHeight === 0;function liveHandler( event ) {};var stop = true, elems = [], selectors = [], args = arguments,related, match, fn, elem, j, i, data,Sizzle.selectors.filters.visible = function(elem){live = jQuery.extend({}, jQuery.data( this, "events" ).live);return elem.offsetWidth > 0 || elem.offsetHeight > 0;};for ( j in live ) {fn = live[j];Sizzle.selectors.filters.animated = function(elem){if ( fn.live === event.type ||return jQuery.grep(jQuery.timers, function(fn){fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) {return elem === fn.elem;}).length;data = fn.data;};if ( !(data.beforeFilter && data.beforeFilter[event.type] &&!data.beforeFilter[event.type](event)) ) {jQuery.multiFilter = function( expr, elems, not ) {selectors.push( fn.selector );if ( not ) {}expr = ":not(" + expr + ")";} else {}delete live[j];}return Sizzle.matches(expr, elems);}};match = jQuery( event.target ).closest( selectors, event.currentTarget );jQuery.dir = function( elem, dir ){var matched = [], cur = elem[dir];for ( i = 0, l = match.length; i < l; i++ ) {while ( cur && cur != document ) {for ( j in live ) {if ( cur.nodeType == 1 )fn = live[j];matched.push( cur );elem = match[i].elem;cur = cur[dir];related = null;}return matched;if ( match[i].selector === fn.selector ) {};// Those two events require additional checkingif ( fn.live === "mouseenter" || fn.live === "mouseleave" ) {jQuery.nth = function(cur, result, dir, elem){related = jQuery( event.relatedTarget ).closest( fn.selector )[0];result = result || 1;}var num = 0;if ( !related || related !== elem ) {for ( ; cur; cur = cur[dir] )elems.push({ elem: elem, fn: fn });if ( cur.nodeType == 1 && ++num == result )}break;}}return cur;}};for ( i = 0, l = elems.length; i < l; i++ ) {jQuery.sibling = function(n, elem){match = elems[i];var r = [];event.currentTarget = match.elem;event.data = match.fn.data;for ( ; n; n = n.nextSibling ) {if ( match.fn.apply( match.elem, args ) === false ) {if ( n.nodeType == 1 && n != elem )stop = false;r.push( n );break;}}return r;};return stop;}return;function liveConvert( type, selector ) {window.Sizzle = Sizzle;return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "&")].join(".");}})();/*jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +* A number of helper functions used for managing events."mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +* Many of the ideas behind this code originated from"change select submit keydown keypress keyup error").split(" "), function( i, name ) {* Dean Edwards' addEvent library.*/// Handle event bindingjQuery.event = {jQuery.fn[ name ] = function( fn ) {return fn ? this.bind( name, fn ) : this.trigger( name );// Bind an event to an element};// Original by Dean Edwardsadd: function(elem, types, handler, data) {if ( jQuery.attrFn ) {if ( elem.nodeType == 3 || elem.nodeType == 8 )jQuery.attrFn[ name ] = true;return;}});// For whatever reason, IE has trouble passing the window object// around, causing it to be cloned in the process// Prevent memory leaks in IEif ( elem.setInterval && elem != window )// Window isn't included so as not to unbind existing unload eventselem = window;// More info:// - http://isaacschlueter.com/2006/10/msie-memory-leaks/// Make sure that the function being executed has a unique IDif ( window.attachEvent && !window.addEventListener ) {if ( !handler.guid )window.attachEvent("onunload", function() {handler.guid = this.guid++;for ( var id in jQuery.cache ) {if ( jQuery.cache[ id ].handle ) {// if data is passed, bind to handler// Try/Catch is to handle iframes being unloaded, see #4280if ( data !== undefined ) {try {// Create temporary function pointer to original handlerjQuery.event.remove( jQuery.cache[ id ].handle.elem );var fn = handler;} catch(e) {}}// Create unique handler function, wrapped around original handler}handler = this.proxy( fn );});}// Store data in unique handler/*!handler.data = data;* Sizzle CSS Selector Engine - v1.0}* Copyright 2009, The Dojo Foundation* Released under the MIT, BSD, and GPL Licenses.// Init the element's event structure* More information: http://sizzlejs.com/var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),*/handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){(function(){// Handle the second event of a trigger and when// an event is called after a page has unloadedvar chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,return typeof jQuery !== "undefined" && !jQuery.event.triggered ?done = 0,jQuery.event.handle.apply(arguments.callee.elem, arguments) :toString = Object.prototype.toString,undefined;hasDuplicate = false,});baseHasDuplicate = true;// Add elem as a property of the handle function// This is to prevent a memory leak with non-native// Here we check if the JavaScript engine is using some sort of// event in IE.// optimization where it does not always call our comparisionhandle.elem = elem;// function. If that is the case, discard the hasDuplicate value.// Thus far that includes Google Chrome.// Handle multiple events separated by a space[0, 0].sort(function(){// jQuery(...).bind("mouseover mouseout", fn);baseHasDuplicate = false;jQuery.each(types.split(/\s+/), function(index, type) {return 0;// Namespaced event handlers});var namespaces = type.split(".");type = namespaces.shift();var Sizzle = function(selector, context, results, seed) {handler.type = namespaces.slice().sort().join(".");results = results || [];var origContext = context = context || document;// Get the current list of functions bound to this eventvar handlers = events[type];if ( context.nodeType !== 1 && context.nodeType !== 9 ) {return [];if ( jQuery.event.specialAll[type] )}jQuery.event.specialAll[type].setup.call(elem, data, namespaces);if ( !selector || typeof selector !== "string" ) {// Init the event handler queuereturn results;if (!handlers) {}handlers = events[type] = {};var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),// Check for a special event handlersoFar = selector;// Only use addEventListener/attachEvent if the special// events handler returns false// Reset the position of the chunker regexp (start from head)if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {// Bind the global event handler to the elementsoFar = m[3];if (elem.addEventListener)elem.addEventListener(type, handle, false);parts.push( m[1] );else if (elem.attachEvent)elem.attachEvent("on" + type, handle);if ( m[2] ) {}extra = m[3];}break;}// Add the function to the element's handler list}handlers[handler.guid] = handler;if ( parts.length > 1 && origPOS.exec( selector ) ) {// Keep track of which events have been used, for global triggeringif ( parts.length === 2 && Expr.relative[ parts[0] ] ) {jQuery.event.global[type] = true;set = posProcess( parts[0] + parts[1], context );});} else {set = Expr.relative[ parts[0] ] ?// Nullify elem to prevent memory leaks in IE[ context ] :elem = null;Sizzle( parts.shift(), context );},while ( parts.length ) {guid: 1,selector = parts.shift();global: {},if ( Expr.relative[ selector ] ) {// Detach an event or set of events from an elementselector += parts.shift();remove: function(elem, types, handler) {}// don't do events on text and comment nodesif ( elem.nodeType == 3 || elem.nodeType == 8 )set = posProcess( selector, set );return;}}var events = jQuery.data(elem, "events"), ret, index;} else {// Take a shortcut and set the context if the root selector is an IDif ( events ) {// (but not if it'll be faster if the inner selector is an ID)// Unbind all events for the elementif ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {for ( var type in events )var ret = Sizzle.find( parts.shift(), context, contextXML );this.remove( elem, type + (types || "") );context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];else {}// types is actually an event object hereif ( types.type ) {if ( context ) {handler = types.handler;var ret = seed ?types = types.type;{ expr: parts.pop(), set: makeArray(seed) } :}Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;// Handle multiple events seperated by a space// jQuery(...).unbind("mouseover mouseout", fn);if ( parts.length > 0 ) {jQuery.each(types.split(/\s+/), function(index, type){checkSet = makeArray(set);// Namespaced event handlers} else {var namespaces = type.split(".");prune = false;type = namespaces.shift();}var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");while ( parts.length ) {if ( events[type] ) {var cur = parts.pop(), pop = cur;// remove the given handler for the given typeif ( handler )if ( !Expr.relative[ cur ] ) {delete events[type][handler.guid];cur = "";} else {// remove all handlers for the given typepop = parts.pop();else}for ( var handle in events[type] )// Handle the removal of namespaced eventsif ( pop == null ) {if ( namespace.test(events[type][handle].type) )pop = context;delete events[type][handle];}if ( jQuery.event.specialAll[type] )Expr.relative[ cur ]( checkSet, pop, contextXML );jQuery.event.specialAll[type].teardown.call(elem, namespaces);}} else {// remove generic event handler if no more handlers existcheckSet = parts = [];for ( ret in events[type] ) break;}if ( !ret ) {}if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {if (elem.removeEventListener)if ( !checkSet ) {elem.removeEventListener(type, jQuery.data(elem, "handle"), false);checkSet = set;else if (elem.detachEvent)}elem.detachEvent("on" + type, jQuery.data(elem, "handle"));}if ( !checkSet ) {ret = null;throw "Syntax error, unrecognized expression: " + (cur || selector);delete events[type];}}}if ( toString.call(checkSet) === "[object Array]" ) {});if ( !prune ) {}results.push.apply( results, checkSet );} else if ( context && context.nodeType === 1 ) {// Remove the expando if it's no longer usedfor ( var i = 0; checkSet[i] != null; i++ ) {for ( ret in events ) break;if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {if ( !ret ) {results.push( set[i] );var handle = jQuery.data( elem, "handle" );}if ( handle ) handle.elem = null;}jQuery.removeData( elem, "events" );} else {jQuery.removeData( elem, "handle" );for ( var i = 0; checkSet[i] != null; i++ ) {}if ( checkSet[i] && checkSet[i].nodeType === 1 ) {}results.push( set[i] );},}}// bubbling is internal}trigger: function( event, data, elem, bubbling ) {} else {// Event object or event typemakeArray( checkSet, results );var type = event.type || event;}if( !bubbling ){if ( extra ) {event = typeof event === "object" ?Sizzle( extra, origContext, results, seed );// jQuery.Event objectSizzle.uniqueSort( results );event[expando] ? event :}// Object literaljQuery.extend( jQuery.Event(type), event ) :return results;// Just the event type (string)};jQuery.Event(type);Sizzle.uniqueSort = function(results){if ( type.indexOf("!") >= 0 ) {if ( sortOrder ) {event.type = type = type.slice(0, -1);hasDuplicate = baseHasDuplicate;event.exclusive = true;results.sort(sortOrder);}if ( hasDuplicate ) {// Handle a global triggerfor ( var i = 1; i < results.length; i++ ) {if ( !elem ) {if ( results[i] === results[i-1] ) {// Don't bubble custom events when global (to avoid too much overhead)results.splice(i--, 1);event.stopPropagation();}// Only trigger if we've ever bound an event for it}if ( this.global[type] )}jQuery.each( jQuery.cache, function(){}if ( this.events && this.events[type] )jQuery.event.trigger( event, data, this.handle.elem );return results;});};}Sizzle.matches = function(expr, set){// Handle triggering a single elementreturn Sizzle(expr, null, null, set);};// don't do events on text and comment nodesif ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )Sizzle.find = function(expr, context, isXML){return undefined;var set, match;// Clean up in case it is reusedif ( !expr ) {event.result = undefined;return [];event.target = elem;}// Clone the incoming data, if anyfor ( var i = 0, l = Expr.order.length; i < l; i++ ) {data = jQuery.makeArray(data);var type = Expr.order[i], match;data.unshift( event );}if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {var left = match[1];event.currentTarget = elem;match.splice(1,1);// Trigger the event, it is assumed that "handle" is a functionif ( left.substr( left.length - 1 ) !== "\\" ) {var handle = jQuery.data(elem, "handle");match[1] = (match[1] || "").replace(/\\/g, "");if ( handle )set = Expr.find[ type ]( match, context, isXML );handle.apply( elem, data );if ( set != null ) {expr = expr.replace( Expr.match[ type ], "" );// Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)break;if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )}event.result = false;}}// Trigger the native events (except for clicks on links)}if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {this.triggered = true;if ( !set ) {try {set = context.getElementsByTagName("*");elem[ type ]();}// prevent IE from throwing an error for some hidden elements} catch (e) {}return {set: set, expr: expr};}};this.triggered = false;Sizzle.filter = function(expr, set, inplace, not){var old = expr, result = [], curLoop = set, match, anyFound,if ( !event.isPropagationStopped() ) {isXMLFilter = set && set[0] && isXML(set[0]);var parent = elem.parentNode || elem.ownerDocument;if ( parent )while ( expr && set.length ) {jQuery.event.trigger(event, data, parent, true);for ( var type in Expr.filter ) {}if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {},var filter = Expr.filter[ type ], found, item, left = match[1];anyFound = false;handle: function(event) {// returned undefined or falsematch.splice(1,1);var all, handlers;if ( left.substr( left.length - 1 ) === "\\" ) {event = arguments[0] = jQuery.event.fix( event || window.event );continue;event.currentTarget = this;}// Namespaced event handlersif ( curLoop === result ) {var namespaces = event.type.split(".");result = [];event.type = namespaces.shift();}// Cache this now, all = true means, any handlerif ( Expr.preFilter[ type ] ) {all = !namespaces.length && !event.exclusive;match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");if ( !match ) {anyFound = found = true;handlers = ( jQuery.data(this, "events") || {} )[event.type];} else if ( match === true ) {continue;for ( var j in handlers ) {}var handler = handlers[j];}// Filter the functions by classif ( match ) {if ( all || namespace.test(handler.type) ) {for ( var i = 0; (item = curLoop[i]) != null; i++ ) {// Pass in a reference to the handler function itselfif ( item ) {// So that we can later remove itfound = filter( item, match, i, curLoop );event.handler = handler;var pass = not ^ !!found;event.data = handler.data;if ( inplace && found != null ) {var ret = handler.apply(this, arguments);if ( pass ) {anyFound = true;if( ret !== undefined ){} else {event.result = ret;curLoop[i] = false;if ( ret === false ) {}event.preventDefault();} else if ( pass ) {event.stopPropagation();result.push( item );}anyFound = true;}}if( event.isImmediatePropagationStopped() )}break;}}if ( found !== undefined ) {}if ( !inplace ) {},curLoop = result;}props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),expr = expr.replace( Expr.match[ type ], "" );fix: function(event) {if ( event[expando] )if ( !anyFound ) {return event;return [];}// store a copy of the original event object// and "clone" to set read-only propertiesbreak;var originalEvent = event;}event = jQuery.Event( originalEvent );}}for ( var i = this.props.length, prop; i; ){prop = this.props[ --i ];// Improper expressionevent[ prop ] = originalEvent[ prop ];if ( expr === old ) {}if ( anyFound == null ) {throw "Syntax error, unrecognized expression: " + expr;// Fix target property, if necessary} else {if ( !event.target )break;event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either}}// check if target is a textnode (safari)if ( event.target.nodeType == 3 )old = expr;event.target = event.target.parentNode;}// Add relatedTarget, if necessaryreturn curLoop;if ( !event.relatedTarget && event.fromElement )};event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;var Expr = Sizzle.selectors = {// Calculate pageX/Y if missing and clientX/Y availableorder: [ "ID", "NAME", "TAG" ],if ( event.pageX == null && event.clientX != null ) {match: {var doc = document.documentElement, body = document.body;ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,}ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,// Add which for key eventsCHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,event.which = event.charCode || event.keyCode;PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)leftMatch: {},if ( !event.metaKey && event.ctrlKey )attrMap: {event.metaKey = event.ctrlKey;"class": "className","for": "htmlFor"// Add which for click: 1 == left; 2 == middle; 3 == right},// Note: button is not normalized, so don't use itattrHandle: {if ( !event.which && event.button )href: function(elem){event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));return elem.getAttribute("href");}return event;},},relative: {"+": function(checkSet, part){proxy: function( fn, proxy ){var isPartStr = typeof part === "string",proxy = proxy || function(){ return fn.apply(this, arguments); };isTag = isPartStr && !/\W/.test(part),// Set the guid of unique handler to the same of original handler, so it can be removedisPartStrNotTag = isPartStr && !isTag;proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;// So proxy can be declared as an argumentif ( isTag ) {return proxy;part = part.toLowerCase();},}special: {for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {ready: {if ( (elem = checkSet[i]) ) {// Make sure the ready event is setupwhile ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}setup: bindReady,teardown: function() {}checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?}elem || false :},elem === part;}specialAll: {}live: {setup: function( selector, namespaces ){if ( isPartStrNotTag ) {jQuery.event.add( this, namespaces[0], liveHandler );Sizzle.filter( part, checkSet, true );},teardown: function( namespaces ){},if ( namespaces.length ) {">": function(checkSet, part){var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");var isPartStr = typeof part === "string";jQuery.each( (jQuery.data(this, "events").live || {}), function(){if ( isPartStr && !/\W/.test(part) ) {if ( name.test(this.type) )part = part.toLowerCase();remove++;});for ( var i = 0, l = checkSet.length; i < l; i++ ) {var elem = checkSet[i];if ( remove < 1 )if ( elem ) {jQuery.event.remove( this, namespaces[0], liveHandler );var parent = elem.parentNode;}checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;}}}} else {};for ( var i = 0, l = checkSet.length; i < l; i++ ) {var elem = checkSet[i];jQuery.Event = function( src ){if ( elem ) {// Allow instantiation without the 'new' keywordcheckSet[i] = isPartStr ?if( !this.preventDefault )elem.parentNode :return new jQuery.Event(src);elem.parentNode === part;}// Event object}if( src && src.type ){this.originalEvent = src;if ( isPartStr ) {this.type = src.type;Sizzle.filter( part, checkSet, true );// Event type}}else}this.type = src;},"": function(checkSet, part, isXML){// timeStamp is buggy for some events on Firefox(#3843)var doneName = done++, checkFn = dirCheck;// So we won't rely on the native valuethis.timeStamp = now();if ( typeof part === "string" && !/\W/.test(part) ) {var nodeCheck = part = part.toLowerCase();// Mark it as fixedcheckFn = dirNodeCheck;this[expando] = true;}};checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);function returnFalse(){},return false;"~": function(checkSet, part, isXML){}var doneName = done++, checkFn = dirCheck;function returnTrue(){return true;if ( typeof part === "string" && !/\W/.test(part) ) {}var nodeCheck = part = part.toLowerCase();checkFn = dirNodeCheck;// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding}// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.htmljQuery.Event.prototype = {checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);preventDefault: function() {}this.isDefaultPrevented = returnTrue;},find: {var e = this.originalEvent;ID: function(match, context, isXML){if( !e )if ( typeof context.getElementById !== "undefined" && !isXML ) {return;var m = context.getElementById(match[1]);// if preventDefault exists run it on the original eventreturn m ? [m] : [];if (e.preventDefault)}e.preventDefault();},// otherwise set the returnValue property of the original event to false (IE)NAME: function(match, context){e.returnValue = false;if ( typeof context.getElementsByName !== "undefined" ) {},var ret = [], results = context.getElementsByName(match[1]);stopPropagation: function() {this.isPropagationStopped = returnTrue;for ( var i = 0, l = results.length; i < l; i++ ) {if ( results[i].getAttribute("name") === match[1] ) {var e = this.originalEvent;ret.push( results[i] );if( !e )}return;}// if stopPropagation exists run it on the original eventif (e.stopPropagation)return ret.length === 0 ? null : ret;e.stopPropagation();}// otherwise set the cancelBubble property of the original event to true (IE)},e.cancelBubble = true;TAG: function(match, context){},return context.getElementsByTagName(match[1]);stopImmediatePropagation:function(){}this.isImmediatePropagationStopped = returnTrue;},this.stopPropagation();preFilter: {},CLASS: function(match, curLoop, inplace, result, not, isXML){isDefaultPrevented: returnFalse,match = " " + match[1].replace(/\\/g, "") + " ";isPropagationStopped: returnFalse,isImmediatePropagationStopped: returnFalseif ( isXML ) {};return match;// Checks if an event happened on an element within another element}// Used in jQuery.event.special.mouseenter and mouseleave handlersvar withinElement = function(event) {for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {// Check if mouse(over|out) are still within the same parent elementif ( elem ) {var parent = event.relatedTarget;if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {// Traverse up the treeif ( !inplace ) {while ( parent && parent != this )result.push( elem );try { parent = parent.parentNode; }}catch(e) { parent = this; }} else if ( inplace ) {curLoop[i] = false;if( parent != this ){}// set the correct event type}event.type = event.data;}// handle event if we actually just moused on to a non sub-elementjQuery.event.handle.apply( this, arguments );return false;}},};ID: function(match){return match[1].replace(/\\/g, "");jQuery.each({},mouseover: 'mouseenter',TAG: function(match, curLoop){mouseout: 'mouseleave'return match[1].toLowerCase();}, function( orig, fix ){},jQuery.event.special[ fix ] = {CHILD: function(match){setup: function(){if ( match[1] === "nth" ) {jQuery.event.add( this, orig, withinElement, fix );// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'},var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(teardown: function(){match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||jQuery.event.remove( this, orig, withinElement );!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);}};// calculate the numbers (first)n+(last) including if they are negative});match[2] = (test[1] + (test[2] || 1)) - 0;match[3] = test[3] - 0;jQuery.fn.extend({}bind: function( type, data, fn ) {return type == "unload" ? this.one(type, data, fn) : this.each(function(){// TODO: Move to normal caching systemjQuery.event.add( this, type, fn || data, fn && data );match[0] = done++;});},return match;},one: function( type, data, fn ) {ATTR: function(match, curLoop, inplace, result, not, isXML){var one = jQuery.event.proxy( fn || data, function(event) {var name = match[1].replace(/\\/g, "");jQuery(this).unbind(event, one);return (fn || data).apply( this, arguments );if ( !isXML && Expr.attrMap[name] ) {});match[1] = Expr.attrMap[name];return this.each(function(){}jQuery.event.add( this, type, one, fn && data);});if ( match[2] === "~=" ) {},match[4] = " " + match[4] + " ";}unbind: function( type, fn ) {return this.each(function(){return match;jQuery.event.remove( this, type, fn );},});PSEUDO: function(match, curLoop, inplace, result, not){},if ( match[1] === "not" ) {// If we're dealing with a complex expression, or a simple onetrigger: function( type, data ) {if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {return this.each(function(){match[3] = Sizzle(match[3], null, null, curLoop);jQuery.event.trigger( type, data, this );} else {});var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);},if ( !inplace ) {result.push.apply( result, ret );triggerHandler: function( type, data ) {}if( this[0] ){return false;var event = jQuery.Event(type);}event.preventDefault();} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {event.stopPropagation();return true;jQuery.event.trigger( event, data, this[0] );}return event.result;}return match;},POS: function(match){toggle: function( fn ) {match.unshift( true );// Save reference to arguments for access in closurereturn match;var args = arguments, i = 1;}},// link all the functions, so any of them can unbind this click handlerfilters: {while( i < args.length )enabled: function(elem){jQuery.event.proxy( fn, args[i++] );return elem.disabled === false && elem.type !== "hidden";},return this.click( jQuery.event.proxy( fn, function(event) {disabled: function(elem){// Figure out which function to executereturn elem.disabled === true;this.lastToggle = ( this.lastToggle || 0 ) % i;},checked: function(elem){// Make sure that clicks stopreturn elem.checked === true;event.preventDefault();},selected: function(elem){// and execute the function// Accessing this property makes selected-by-defaultreturn args[ this.lastToggle++ ].apply( this, arguments ) || false;// options in Safari work properly}));elem.parentNode.selectedIndex;},return elem.selected === true;},hover: function(fnOver, fnOut) {parent: function(elem){return this.mouseenter(fnOver).mouseleave(fnOut);return !!elem.firstChild;},empty: function(elem){ready: function(fn) {return !elem.firstChild;// Attach the listeners},bindReady();has: function(elem, i, match){return !!Sizzle( match[3], elem ).length;// If the DOM is already ready},if ( jQuery.isReady )header: function(elem){// Execute the function immediatelyreturn /h\d/i.test( elem.nodeName );fn.call( document, jQuery );},text: function(elem){// Otherwise, remember the function for laterreturn "text" === elem.type;else},// Add the function to the wait listradio: function(elem){jQuery.readyList.push( fn );return "radio" === elem.type;},return this;checkbox: function(elem){},return "checkbox" === elem.type;},live: function( type, fn ){file: function(elem){var proxy = jQuery.event.proxy( fn );return "file" === elem.type;proxy.guid += this.selector + type;},password: function(elem){jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );return "password" === elem.type;},return this;submit: function(elem){},return "submit" === elem.type;},die: function( type, fn ){image: function(elem){jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );return "image" === elem.type;return this;},}reset: function(elem){});return "reset" === elem.type;},function liveHandler( event ){button: function(elem){var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),return "button" === elem.type || elem.nodeName.toLowerCase() === "button";stop = true,},elems = [];input: function(elem){return /input|select|textarea|button/i.test(elem.nodeName);jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){}if ( check.test(fn.type) ) {},var elem = jQuery(event.target).closest(fn.data)[0];setFilters: {if ( elem )first: function(elem, i){elems.push({ elem: elem, fn: fn });return i === 0;},});last: function(elem, i, match, array){return i === array.length - 1;elems.sort(function(a,b) {},return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");even: function(elem, i){});return i % 2 === 0;},jQuery.each(elems, function(){odd: function(elem, i){if ( this.fn.call(this.elem, event, this.fn.data) === false )return i % 2 === 1;return (stop = false);},});lt: function(elem, i, match){return i < match[3] - 0;return stop;},}gt: function(elem, i, match){return i > match[3] - 0;function liveConvert(type, selector){},return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");nth: function(elem, i, match){}return match[3] - 0 === i;},jQuery.extend({eq: function(elem, i, match){isReady: false,return match[3] - 0 === i;readyList: [],}// Handle when the DOM is ready},ready: function() {filter: {// Make sure that the DOM is not already loadedPSEUDO: function(elem, match, i, array){if ( !jQuery.isReady ) {var name = match[1], filter = Expr.filters[ name ];// Remember that the DOM is readyjQuery.isReady = true;if ( filter ) {return filter( elem, i, match, array );// If there are functions bound, to execute} else if ( name === "contains" ) {if ( jQuery.readyList ) {return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;// Execute all of them} else if ( name === "not" ) {jQuery.each( jQuery.readyList, function(){var not = match[3];this.call( document, jQuery );});for ( var i = 0, l = not.length; i < l; i++ ) {if ( not[i] === elem ) {// Reset the list of functionsreturn false;jQuery.readyList = null;}}// Trigger any bound ready eventsreturn true;jQuery(document).triggerHandler("ready");} else {}throw "Syntax error, unrecognized expression: " + name;}});},CHILD: function(elem, match){var readyBound = false;var type = match[1], node = elem;switch (type) {function bindReady(){case 'only':if ( readyBound ) return;case 'first':readyBound = true;while ( (node = node.previousSibling) ) {if ( node.nodeType === 1 ) {// Mozilla, Opera and webkit nightlies currently support this eventreturn false;if ( document.addEventListener ) {}// Use the handy event callback}document.addEventListener( "DOMContentLoaded", function(){if ( type === "first" ) {document.removeEventListener( "DOMContentLoaded", arguments.callee, false );return true;jQuery.ready();}}, false );node = elem;case 'last':// If IE event model is usedwhile ( (node = node.nextSibling) ) {} else if ( document.attachEvent ) {if ( node.nodeType === 1 ) {// ensure firing before onload,return false;// maybe late but safe also for iframes}document.attachEvent("onreadystatechange", function(){}if ( document.readyState === "complete" ) {return true;document.detachEvent( "onreadystatechange", arguments.callee );case 'nth':jQuery.ready();var first = match[2], last = match[3];}});if ( first === 1 && last === 0 ) {return true;// If IE and not an iframe}// continually check to see if the document is readyif ( document.documentElement.doScroll && window == window.top ) (function(){var doneName = match[0],if ( jQuery.isReady ) return;parent = elem.parentNode;try {if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {// If IE is used, use the trick by Diego Perinivar count = 0;// http://javascript.nwbox.com/IEContentLoaded/for ( node = parent.firstChild; node; node = node.nextSibling ) {document.documentElement.doScroll("left");if ( node.nodeType === 1 ) {} catch( error ) {node.nodeIndex = ++count;setTimeout( arguments.callee, 0 );}return;}}parent.sizcache = doneName;}// and execute any waiting functionsjQuery.ready();var diff = elem.nodeIndex - last;})();if ( first === 0 ) {}return diff === 0;} else {// A fallback to window.onload, that will always workreturn ( diff % first === 0 && diff / first >= 0 );jQuery.event.add( window, "load", jQuery.ready );}}},jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +ID: function(elem, match){"mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +return elem.nodeType === 1 && elem.getAttribute("id") === match;"change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){},TAG: function(elem, match){// Handle event bindingreturn (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;jQuery.fn[name] = function(fn){},return fn ? this.bind(name, fn) : this.trigger(name);CLASS: function(elem, match){};return (" " + (elem.className || elem.getAttribute("class")) + " ")});.indexOf( match ) > -1;},// Prevent memory leaks in IEATTR: function(elem, match){// And prevent errors on refresh with events like mouseover in other browsersvar name = match[1],// Window isn't included so as not to unbind existing unload eventsresult = Expr.attrHandle[ name ] ?jQuery( window ).bind( 'unload', function(){Expr.attrHandle[ name ]( elem ) :for ( var id in jQuery.cache )elem[ name ] != null ?// Skip the windowelem[ name ] :if ( id != 1 && jQuery.cache[ id ].handle )elem.getAttribute( name ),jQuery.event.remove( jQuery.cache[ id ].handle.elem );value = result + "",});type = match[2],(function(){check = match[4];jQuery.support = {};return result == null ?type === "!=" :var root = document.documentElement,type === "=" ?script = document.createElement("script"),value === check :div = document.createElement("div"),type === "*=" ?id = "script" + (new Date).getTime();value.indexOf(check) >= 0 :type === "~=" ?div.style.display = "none";(" " + value + " ").indexOf(check) >= 0 :div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';!check ?value && result !== false :var all = div.getElementsByTagName("*"),type === "!=" ?a = div.getElementsByTagName("a")[0];value !== check :type === "^=" ?// Can't get basic test supportvalue.indexOf(check) === 0 :if ( !all || !all.length || !a ) {type === "$=" ?return;value.substr(value.length - check.length) === check :}type === "|=" ?value === check || value.substr(0, check.length + 1) === check + "-" :jQuery.support = {false;// IE strips leading whitespace when .innerHTML is used},leadingWhitespace: div.firstChild.nodeType == 3,POS: function(elem, match, i, array){var name = match[2], filter = Expr.setFilters[ name ];// Make sure that tbody elements aren't automatically inserted// IE will insert them into empty tablesif ( filter ) {tbody: !div.getElementsByTagName("tbody").length,return filter( elem, i, match, array );}// Make sure that you can get all elements in an <object> element}// IE 7 always returns no results}objectAll: !!div.getElementsByTagName("object")[0]};.getElementsByTagName("*").length,var origPOS = Expr.match.POS;// Make sure that link elements get serialized correctly by innerHTML// This requires a wrapper element in IEfor ( var type in Expr.match ) {htmlSerialize: !!div.getElementsByTagName("link").length,Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){// Get the style information from getAttributereturn "\\" + (num - 0 + 1);// (IE uses .cssText insted)}));style: /red/.test( a.getAttribute("style") ),}// Make sure that URLs aren't manipulatedvar makeArray = function(array, results) {// (IE normalizes it by default)array = Array.prototype.slice.call( array, 0 );hrefNormalized: a.getAttribute("href") === "/a",if ( results ) {// Make sure that element opacity existsresults.push.apply( results, array );// (IE uses filter instead)return results;opacity: a.style.opacity === "0.5",}// Verify style float existencereturn array;// (IE uses styleFloat instead of cssFloat)};cssFloat: !!a.style.cssFloat,// Perform a simple check to determine if the browser is capable of// Will be defined later// converting a NodeList to an array using builtin methods.scriptEval: false,try {noCloneEvent: true,Array.prototype.slice.call( document.documentElement.childNodes, 0 );boxModel: null};// Provide a fallback method if it does not work} catch(e){script.type = "text/javascript";makeArray = function(array, results) {try {var ret = results || [];script.appendChild( document.createTextNode( "window." + id + "=1;" ) );} catch(e){}if ( toString.call(array) === "[object Array]" ) {Array.prototype.push.apply( ret, array );root.insertBefore( script, root.firstChild );} else {if ( typeof array.length === "number" ) {// Make sure that the execution of code works by injecting a scriptfor ( var i = 0, l = array.length; i < l; i++ ) {// tag with appendChild/createTextNoderet.push( array[i] );// (IE doesn't support this, fails, and uses .text instead)}if ( window[ id ] ) {} else {jQuery.support.scriptEval = true;for ( var i = 0; array[i]; i++ ) {delete window[ id ];ret.push( array[i] );}}root.removeChild( script );}if ( div.attachEvent && div.fireEvent ) {return ret;div.attachEvent("onclick", function(){};// Cloning a node shouldn't copy over any}// bound event handlers (IE does this)jQuery.support.noCloneEvent = false;var sortOrder;div.detachEvent("onclick", arguments.callee);});if ( document.documentElement.compareDocumentPosition ) {div.cloneNode(true).fireEvent("onclick");sortOrder = function( a, b ) {}if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {if ( a == b ) {// Figure out if the W3C box model works as expectedhasDuplicate = true;// document.body must exist before we can do this}jQuery(function(){return a.compareDocumentPosition ? -1 : 1;var div = document.createElement("div");}div.style.width = div.style.paddingLeft = "1px";var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;document.body.appendChild( div );if ( ret === 0 ) {jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;hasDuplicate = true;document.body.removeChild( div ).style.display = 'none';}});return ret;})();};} else if ( "sourceIndex" in document.documentElement ) {var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";sortOrder = function( a, b ) {if ( !a.sourceIndex || !b.sourceIndex ) {jQuery.props = {if ( a == b ) {"for": "htmlFor",hasDuplicate = true;"class": "className",}"float": styleFloat,return a.sourceIndex ? -1 : 1;cssFloat: styleFloat,}styleFloat: styleFloat,readonly: "readOnly",var ret = a.sourceIndex - b.sourceIndex;maxlength: "maxLength",if ( ret === 0 ) {cellspacing: "cellSpacing",hasDuplicate = true;rowspan: "rowSpan",}tabindex: "tabIndex"return ret;};jQuery.fn.extend({} else if ( document.createRange ) {// Keep a copy of the old loadsortOrder = function( a, b ) {_load: jQuery.fn.load,if ( !a.ownerDocument || !b.ownerDocument ) {if ( a == b ) {load: function( url, params, callback ) {hasDuplicate = true;if ( typeof url !== "string" )}return this._load( url );return a.ownerDocument ? -1 : 1;}var off = url.indexOf(" ");if ( off >= 0 ) {var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();var selector = url.slice(off, url.length);aRange.setStart(a, 0);url = url.slice(0, off);aRange.setEnd(a, 0);}bRange.setStart(b, 0);bRange.setEnd(b, 0);// Default to a GET requestvar ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);var type = "GET";if ( ret === 0 ) {hasDuplicate = true;// If the second parameter was provided}if ( params )return ret;// If it's a function};if ( jQuery.isFunction( params ) ) {}// We assume that it's the callbackcallback = params;// Utility function for retreiving the text value of an array of DOM nodesparams = null;function getText( elems ) {var ret = "", elem;// Otherwise, build a param string} else if( typeof params === "object" ) {for ( var i = 0; elems[i]; i++ ) {params = jQuery.param( params );elem = elems[i];type = "POST";}// Get the text from text nodes and CDATA nodesif ( elem.nodeType === 3 || elem.nodeType === 4 ) {var self = this;ret += elem.nodeValue;// Request the remote document// Traverse everything else, except comment nodesjQuery.ajax({} else if ( elem.nodeType !== 8 ) {url: url,ret += getText( elem.childNodes );type: type,}dataType: "html",}data: params,complete: function(res, status){return ret;// If successful, inject the HTML into all the matched elements}if ( status == "success" || status == "notmodified" )// See if a selector was specified// Check to see if the browser returns elements by name whenself.html( selector ?// querying by getElementById (and provide a workaround)// Create a dummy div to hold the results(function(){jQuery("<div/>")// We're going to inject a fake input element with a specified name// inject the contents of the document in, removing the scriptsvar form = document.createElement("div"),// to avoid any 'Permission Denied' errors in IEid = "script" + (new Date).getTime();.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))form.innerHTML = "<a name='" + id + "'/>";// Locate the specified elements// Inject it into the root element, check its status, and remove it quickly.find(selector) :var root = document.documentElement;root.insertBefore( form, root.firstChild );// If not, just inject the full resultres.responseText );// The workaround has to do additional checks after a getElementById// Which slows things down for other browsers (hence the branching)if( callback )if ( document.getElementById( id ) ) {self.each( callback, [res.responseText, status, res] );Expr.find.ID = function(match, context, isXML){}if ( typeof context.getElementById !== "undefined" && !isXML ) {});var m = context.getElementById(match[1]);return this;return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];},}};serialize: function() {return jQuery.param(this.serializeArray());Expr.filter.ID = function(elem, match){},var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");serializeArray: function() {return elem.nodeType === 1 && node && node.nodeValue === match;return this.map(function(){};return this.elements ? jQuery.makeArray(this.elements) : this;}}).filter(function(){root.removeChild( form );return this.name && !this.disabled &&root = form = null; // release memory in IE(this.checked || /select|textarea/i.test(this.nodeName) ||})();/text|hidden|password|search/i.test(this.type));})(function(){.map(function(i, elem){// Check to see if the browser returns only elementsvar val = jQuery(this).val();// when doing getElementsByTagName("*")return val == null ? null :jQuery.isArray(val) ?// Create a fake elementjQuery.map( val, function(val, i){var div = document.createElement("div");return {name: elem.name, value: val};div.appendChild( document.createComment("") );}) :{name: elem.name, value: val};// Make sure no comments are found}).get();if ( div.getElementsByTagName("*").length > 0 ) {}Expr.find.TAG = function(match, context){});var results = context.getElementsByTagName(match[1]);// Attach a bunch of functions for handling common AJAX events// Filter out possible commentsjQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){if ( match[1] === "*" ) {jQuery.fn[o] = function(f){var tmp = [];return this.bind(o, f);};for ( var i = 0; results[i]; i++ ) {});if ( results[i].nodeType === 1 ) {tmp.push( results[i] );var jsc = now();}}jQuery.extend({results = tmp;get: function( url, data, callback, type ) {}// shift arguments if data argument was ommitedif ( jQuery.isFunction( data ) ) {return results;callback = data;};data = null;}}// Check to see if an attribute returns normalized href attributesreturn jQuery.ajax({div.innerHTML = "<a href='#'></a>";type: "GET",if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&url: url,div.firstChild.getAttribute("href") !== "#" ) {data: data,Expr.attrHandle.href = function(elem){success: callback,return elem.getAttribute("href", 2);dataType: type};});}},div = null; // release memory in IEgetScript: function( url, callback ) {})();return jQuery.get(url, null, callback, "script");},if ( document.querySelectorAll ) {(function(){getJSON: function( url, data, callback ) {var oldSizzle = Sizzle, div = document.createElement("div");return jQuery.get(url, data, callback, "json");div.innerHTML = "<p class='TEST'></p>";},// Safari can't handle uppercase or unicode characters whenpost: function( url, data, callback, type ) {// in quirks mode.if ( jQuery.isFunction( data ) ) {if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {callback = data;return;data = {};}}Sizzle = function(query, context, extra, seed){return jQuery.ajax({context = context || document;type: "POST",url: url,// Only use querySelectorAll on non-XML documentsdata: data,// (ID selectors don't work in non-HTML documents)success: callback,if ( !seed && context.nodeType === 9 && !isXML(context) ) {dataType: typetry {});return makeArray( context.querySelectorAll(query), extra );},} catch(e){}}ajaxSetup: function( settings ) {jQuery.extend( jQuery.ajaxSettings, settings );return oldSizzle(query, context, extra, seed);},};ajaxSettings: {for ( var prop in oldSizzle ) {url: location.href,Sizzle[ prop ] = oldSizzle[ prop ];global: true,}type: "GET",contentType: "application/x-www-form-urlencoded",div = null; // release memory in IEprocessData: true,})();async: true,}/*timeout: 0,(function(){data: null,var div = document.createElement("div");username: null,password: null,div.innerHTML = "<div class='test e'></div><div class='test'></div>";*/// Create the request object; Microsoft failed to properly// Opera can't find a second classname (in 9.6)// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available// Also, make sure that getElementsByClassName actually exists// This function can be overriden by calling jQuery.ajaxSetupif ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {xhr:function(){return;return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();}},accepts: {// Safari caches class attributes, doesn't catch changes (in 3.2)xml: "application/xml, text/xml",div.lastChild.className = "e";html: "text/html",script: "text/javascript, application/javascript",if ( div.getElementsByClassName("e").length === 1 ) {json: "application/json, text/javascript",return;text: "text/plain",}_default: "*/*"}Expr.order.splice(1, 0, "CLASS");},Expr.find.CLASS = function(match, context, isXML) {if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {// Last-Modified header cache for next requestreturn context.getElementsByClassName(match[1]);lastModified: {},}};ajax: function( s ) {// Extend the settings, but re-extend 's' so that it can bediv = null; // release memory in IE// checked again later (in the test suite, specifically)})();s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {var jsonp, jsre = /=\?(&|$)/g, status, data,for ( var i = 0, l = checkSet.length; i < l; i++ ) {type = s.type.toUpperCase();var elem = checkSet[i];if ( elem ) {// convert data if not already a stringelem = elem[dir];if ( s.data && s.processData && typeof s.data !== "string" )var match = false;s.data = jQuery.param(s.data);while ( elem ) {// Handle JSONP Parameter Callbacksif ( elem.sizcache === doneName ) {if ( s.dataType == "jsonp" ) {match = checkSet[elem.sizset];if ( type == "GET" ) {break;if ( !s.url.match(jsre) )}s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";} else if ( !s.data || !s.data.match(jsre) )if ( elem.nodeType === 1 && !isXML ){s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";elem.sizcache = doneName;s.dataType = "json";elem.sizset = i;}// Build temporary JSONP functionif ( elem.nodeName.toLowerCase() === cur ) {if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {match = elem;jsonp = "jsonp" + jsc++;break;}// Replace the =? sequence both in the query string and the dataif ( s.data )elem = elem[dir];s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");}s.url = s.url.replace(jsre, "=" + jsonp + "$1");checkSet[i] = match;// We need to make sure}// that a JSONP style response is executed properly}s.dataType = "script";}// Handle JSONP-style loadingfunction dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {window[ jsonp ] = function(tmp){for ( var i = 0, l = checkSet.length; i < l; i++ ) {data = tmp;var elem = checkSet[i];success();if ( elem ) {complete();elem = elem[dir];// Garbage collectvar match = false;window[ jsonp ] = undefined;try{ delete window[ jsonp ]; } catch(e){}while ( elem ) {if ( head )if ( elem.sizcache === doneName ) {head.removeChild( script );match = checkSet[elem.sizset];};break;}if ( s.dataType == "script" && s.cache == null )if ( elem.nodeType === 1 ) {s.cache = false;if ( !isXML ) {elem.sizcache = doneName;if ( s.cache === false && type == "GET" ) {elem.sizset = i;var ts = now();}// try replacing _= if it is thereif ( typeof cur !== "string" ) {var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");if ( elem === cur ) {// if nothing was replaced, add timestamp to the endmatch = true;s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");break;}// If data is available, append data to url for get requests} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {if ( s.data && type == "GET" ) {match = elem;s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;break;}// IE likes to send both get and post data, prevent this}s.data = null;}elem = elem[dir];}// Watch for a new set of requestsif ( s.global && ! jQuery.active++ )checkSet[i] = match;jQuery.event.trigger( "ajaxStart" );}}// Matches an absolute URL, and saves the domain}var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );var contains = document.compareDocumentPosition ? function(a, b){// If we're requesting a remote documentreturn a.compareDocumentPosition(b) & 16;// and trying to load JSON or Script with a GET} : function(a, b){if ( s.dataType == "script" && type == "GET" && partsreturn a !== b && (a.contains ? a.contains(b) : true);&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){};var head = document.getElementsByTagName("head")[0];var isXML = function(elem){var script = document.createElement("script");// documentElement is verified for cases where it doesn't yet existscript.src = s.url;// (such as loading iframes in IE - #4833)if (s.scriptCharset)var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;script.charset = s.scriptCharset;return documentElement ? documentElement.nodeName !== "HTML" : false;};// Handle Script loadingif ( !jsonp ) {var posProcess = function(selector, context){var done = false;var tmpSet = [], later = "", match,root = context.nodeType ? [context] : context;// Attach handlers for all browsersscript.onload = script.onreadystatechange = function(){// Position selectors must be done after the filterif ( !done && (!this.readyState ||// And so must :not(positional) so we move all PSEUDOs to the endthis.readyState == "loaded" || this.readyState == "complete") ) {while ( (match = Expr.match.PSEUDO.exec( selector )) ) {done = true;later += match[0];success();selector = selector.replace( Expr.match.PSEUDO, "" );complete();}// Handle memory leak in IEselector = Expr.relative[selector] ? selector + "*" : selector;script.onload = script.onreadystatechange = null;head.removeChild( script );for ( var i = 0, l = root.length; i < l; i++ ) {}Sizzle( selector, root[i], tmpSet );};}}return Sizzle.filter( later, tmpSet );head.appendChild(script);};// We handle everything using the script element injection// EXPOSEreturn undefined;jQuery.find = Sizzle;}jQuery.expr = Sizzle.selectors;jQuery.expr[":"] = jQuery.expr.filters;var requestDone = false;jQuery.unique = Sizzle.uniqueSort;jQuery.getText = getText;// Create the request objectjQuery.isXMLDoc = isXML;var xhr = s.xhr();jQuery.contains = contains;// Open the socketreturn;// Passing null username, generates a login popup on Opera (#2865)if( s.username )window.Sizzle = Sizzle;xhr.open(type, s.url, s.async, s.username, s.password);else})();xhr.open(type, s.url, s.async);var runtil = /Until$/,rparentsprev = /^(?:parents|prevUntil|prevAll)/,// Need an extra try/catch for cross domain requests in Firefox 3// Note: This RegExp should be improved, or likely pulled from Sizzletry {rmultiselector = /,/,// Set the correct header, if data is being sentslice = Array.prototype.slice;if ( s.data )xhr.setRequestHeader("Content-Type", s.contentType);// Implement the identical functionality for filter and notvar winnow = function( elements, qualifier, keep ) {// Set the If-Modified-Since header, if ifModified mode.if ( jQuery.isFunction( qualifier ) ) {if ( s.ifModified )return jQuery.grep(elements, function( elem, i ) {xhr.setRequestHeader("If-Modified-Since",return !!qualifier.call( elem, i, elem ) === keep;jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );});// Set header so the called script knows that it's an XMLHttpRequest} else if ( qualifier.nodeType ) {xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");return jQuery.grep(elements, function( elem, i ) {return (elem === qualifier) === keep;// Set the Accepts header for the server, depending on the dataType});xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?s.accepts[ s.dataType ] + ", */*" :} else if ( typeof qualifier === "string" ) {s.accepts._default );var filtered = jQuery.grep(elements, function( elem ) {} catch(e){}return elem.nodeType === 1;});// Allow custom headers/mimetypes and early abortif ( s.beforeSend && s.beforeSend(xhr, s) === false ) {if ( isSimple.test( qualifier ) ) {// Handle the global AJAX counterreturn jQuery.filter(qualifier, filtered, !keep);if ( s.global && ! --jQuery.active )} else {jQuery.event.trigger( "ajaxStop" );qualifier = jQuery.filter( qualifier, elements );// close opended socket}xhr.abort();}return false;}return jQuery.grep(elements, function( elem, i ) {return (jQuery.inArray( elem, qualifier ) >= 0) === keep;if ( s.global )});jQuery.event.trigger("ajaxSend", [xhr, s]);};// Wait for a response to come backjQuery.fn.extend({var onreadystatechange = function(isTimeout){find: function( selector ) {// The request was aborted, clear the interval and decrement jQuery.activevar ret = this.pushStack( "", "find", selector ), length = 0;if (xhr.readyState == 0) {if (ival) {for ( var i = 0, l = this.length; i < l; i++ ) {// clear poll intervallength = ret.length;clearInterval(ival);jQuery.find( selector, this[i], ret );ival = null;// Handle the global AJAX counterif ( i > 0 ) {if ( s.global && ! --jQuery.active )// Make sure that the results are uniquejQuery.event.trigger( "ajaxStop" );for ( var n = length; n < ret.length; n++ ) {}for ( var r = 0; r < length; r++ ) {// The transfer is complete and the data is available, or the request timed outif ( ret[r] === ret[n] ) {} else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {ret.splice(n--, 1);requestDone = true;break;}// clear poll interval}if (ival) {}clearInterval(ival);}ival = null;}}return ret;status = isTimeout == "timeout" ? "timeout" :},!jQuery.httpSuccess( xhr ) ? "error" :s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :has: function( target ) {"success";var targets = jQuery( target );return this.filter(function() {if ( status == "success" ) {for ( var i = 0, l = targets.length; i < l; i++ ) {// Watch for, and catch, XML document parse errorsif ( jQuery.contains( this, targets[i] ) ) {try {return true;// process the data (runs the xml through httpData regardless of callback)}data = jQuery.httpData( xhr, s.dataType, s );}} catch(e) {});status = "parsererror";},}}not: function( selector ) {return this.pushStack( winnow(this, selector, false), "not", selector);// Make sure that the request was successful or notmodified},if ( status == "success" ) {// Cache Last-Modified header, if ifModified mode.filter: function( selector ) {var modRes;return this.pushStack( winnow(this, selector, true), "filter", selector );try {},modRes = xhr.getResponseHeader("Last-Modified");} catch(e) {} // swallow exception thrown by FF if header is not availableis: function( selector ) {return !!selector && jQuery.filter( selector, this ).length > 0;if ( s.ifModified && modRes )},jQuery.lastModified[s.url] = modRes;closest: function( selectors, context ) {// JSONP handles its own success callbackif ( jQuery.isArray( selectors ) ) {if ( !jsonp )var ret = [], cur = this[0], match, matches = {}, selector;success();} elseif ( cur && selectors.length ) {jQuery.handleError(s, xhr, status);for ( var i = 0, l = selectors.length; i < l; i++ ) {selector = selectors[i];// Fire the complete handlerscomplete();if ( !matches[selector] ) {matches[selector] = jQuery.expr.match.POS.test( selector ) ?if ( isTimeout )jQuery( selector, context || this.context ) :xhr.abort();selector;}// Stop memory leaks}if ( s.async )xhr = null;while ( cur && cur.ownerDocument && cur !== context ) {}for ( selector in matches ) {};match = matches[selector];if ( s.async ) {if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {// don't attach the handler to the request, just poll it insteadret.push({ selector: selector, elem: cur });var ival = setInterval(onreadystatechange, 13);delete matches[selector];}// Timeout checker}if ( s.timeout > 0 )cur = cur.parentNode;setTimeout(function(){}// Check to see if the request is still happening}if ( xhr && !requestDone )onreadystatechange( "timeout" );return ret;}, s.timeout);}}var pos = jQuery.expr.match.POS.test( selectors ) ?// Send the datajQuery( selectors, context || this.context ) : null;try {xhr.send(s.data);return this.map(function( i, cur ) {} catch(e) {while ( cur && cur.ownerDocument && cur !== context ) {jQuery.handleError(s, xhr, null, e);if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {}return cur;}// firefox 1.5 doesn't fire statechange for sync requestscur = cur.parentNode;if ( !s.async )}onreadystatechange();return null;});function success(){},// If a local callback was specified, fire it and pass it the dataif ( s.success )// Determine the position of an element withins.success( data, status );// the matched set of elementsindex: function( elem ) {// Fire the global callbackif ( !elem || typeof elem === "string" ) {if ( s.global )return jQuery.inArray( this[0],jQuery.event.trigger( "ajaxSuccess", [xhr, s] );// If it receives a string, the selector is used}// If it receives nothing, the siblings are usedelem ? jQuery( elem ) : this.parent().children() );function complete(){}// Process result// Locate the position of the desired elementif ( s.complete )return jQuery.inArray(s.complete(xhr, status);// If it receives a jQuery object, the first element is usedelem.jquery ? elem[0] : elem, this );// The request was completed},if ( s.global )jQuery.event.trigger( "ajaxComplete", [xhr, s] );add: function( selector, context ) {var set = typeof selector === "string" ?// Handle the global AJAX counterjQuery( selector, context || this.context ) :if ( s.global && ! --jQuery.active )jQuery.makeArray( selector ),jQuery.event.trigger( "ajaxStop" );all = jQuery.merge( this.get(), set );}return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?// return XMLHttpRequest to allow aborting the request etc.all :return xhr;jQuery.unique( all ) );handleError: function( s, xhr, status, e ) {andSelf: function() {// If a local callback was specified, fire itreturn this.add( this.prevObject );if ( s.error ) s.error( xhr, status, e );}});// Fire the global callbackif ( s.global )// A painfully simple check to see if an element is disconnectedjQuery.event.trigger( "ajaxError", [xhr, s, e] );// from a document (should be improved, where feasible).},function isDisconnected( node ) {return !node || !node.parentNode || node.parentNode.nodeType === 11;// Counter for holding the number of active queries}active: 0,jQuery.each({// Determines if an XMLHttpRequest was successful or notparent: function( elem ) {httpSuccess: function( xhr ) {var parent = elem.parentNode;try {return parent && parent.nodeType !== 11 ? parent : null;// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450},return !xhr.status && location.protocol == "file:" ||parents: function( elem ) {( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;return jQuery.dir( elem, "parentNode" );} catch(e){}},return false;parentsUntil: function( elem, i, until ) {},return jQuery.dir( elem, "parentNode", until );},// Determines if an XMLHttpRequest returns NotModifiednext: function( elem ) {httpNotModified: function( xhr, url ) {return jQuery.nth( elem, 2, "nextSibling" );try {},var xhrRes = xhr.getResponseHeader("Last-Modified");prev: function( elem ) {return jQuery.nth( elem, 2, "previousSibling" );// Firefox always returns 200. check Last-Modified date},return xhr.status == 304 || xhrRes == jQuery.lastModified[url];nextAll: function( elem ) {} catch(e){}return jQuery.dir( elem, "nextSibling" );return false;},},prevAll: function( elem ) {return jQuery.dir( elem, "previousSibling" );httpData: function( xhr, type, s ) {},var ct = xhr.getResponseHeader("content-type"),nextUntil: function( elem, i, until ) {xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,return jQuery.dir( elem, "nextSibling", until );data = xml ? xhr.responseXML : xhr.responseText;},prevUntil: function( elem, i, until ) {if ( xml && data.documentElement.tagName == "parsererror" )return jQuery.dir( elem, "previousSibling", until );throw "parsererror";},siblings: function( elem ) {// Allow a pre-filtering function to sanitize the responsereturn jQuery.sibling( elem.parentNode.firstChild, elem );// s != null is checked to keep backwards compatibility},if( s && s.dataFilter )children: function( elem ) {data = s.dataFilter( data, type );return jQuery.sibling( elem.firstChild );},// The filter can actually parse the responsecontents: function( elem ) {if( typeof data === "string" ){return jQuery.nodeName( elem, "iframe" ) ?elem.contentDocument || elem.contentWindow.document :// If the type is "script", eval it in global contextjQuery.makeArray( elem.childNodes );if ( type == "script" )}jQuery.globalEval( data );}, function( name, fn ) {jQuery.fn[ name ] = function( until, selector ) {// Get the JavaScript object, if JSON is used.var ret = jQuery.map( this, fn, until );if ( type == "json" )data = window["eval"]("(" + data + ")");if ( !runtil.test( name ) ) {}selector = until;}return data;},if ( selector && typeof selector === "string" ) {ret = jQuery.filter( selector, ret );// Serialize an array of form elements or a set of}// key/values into a query stringparam: function( a ) {ret = this.length > 1 ? jQuery.unique( ret ) : ret;var s = [ ];if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {function add( key, value ){ret = ret.reverse();s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);}};return this.pushStack( ret, name, slice.call(arguments).join(",") );// If an array was passed in, assume that it is an array};// of form elements});if ( jQuery.isArray(a) || a.jquery )// Serialize the form elementsjQuery.extend({jQuery.each( a, function(){filter: function( expr, elems, not ) {add( this.name, this.value );if ( not ) {});expr = ":not(" + expr + ")";}// Otherwise, assume that it's an object of key/value pairselsereturn jQuery.find.matches(expr, elems);// Serialize the key/values},for ( var j in a )// If the value is an array then the key names need to be repeateddir: function( elem, dir, until ) {if ( jQuery.isArray(a[j]) )var matched = [], cur = elem[dir];jQuery.each( a[j], function(){while ( cur && cur.nodeType !== 9 && (until === undefined || !jQuery( cur ).is( until )) ) {add( j, this );if ( cur.nodeType === 1 ) {});matched.push( cur );else}add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );cur = cur[dir];}// Return the resulting serializationreturn matched;return s.join("&").replace(/%20/g, "+");},}nth: function( cur, result, dir, elem ) {});result = result || 1;var elemdisplay = {},var num = 0;timerId,fxAttrs = [for ( ; cur; cur = cur[dir] ) {// height animationsif ( cur.nodeType === 1 && ++num === result ) {[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],break;// width animations}[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],}// opacity animations[ "opacity" ]return cur;];},function genFx( type, num ){sibling: function( n, elem ) {var obj = {};var r = [];jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){obj[ this ] = type;for ( ; n; n = n.nextSibling ) {});if ( n.nodeType === 1 && n !== elem ) {return obj;r.push( n );}}jQuery.fn.extend({show: function(speed,callback){return r;if ( speed ) {}return this.animate( genFx("show", 3), speed, callback);});} else {var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,for ( var i = 0, l = this.length; i < l; i++ ){rleadingWhitespace = /^\s+/,var old = jQuery.data(this[i], "olddisplay");rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,this[i].style.display = old || "";rtagName = /<([\w:]+)/,rtbody = /<tbody/i,if ( jQuery.css(this[i], "display") === "none" ) {rhtml = /<|&\w+;/,var tagName = this[i].tagName, display;fcloseTag = function( all, front, tag ) {return rselfClosing.test( tag ) ?if ( elemdisplay[ tagName ] ) {all :display = elemdisplay[ tagName ];front + "></" + tag + ">";} else {},var elem = jQuery("<" + tagName + " />").appendTo("body");wrapMap = {option: [ 1, "<select multiple='multiple'>", "</select>" ],display = elem.css("display");legend: [ 1, "<fieldset>", "</fieldset>" ],if ( display === "none" )thead: [ 1, "<table>", "</table>" ],display = "block";tr: [ 2, "<table><tbody>", "</tbody></table>" ],td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],elem.remove();col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],area: [ 1, "<map>", "</map>" ],elemdisplay[ tagName ] = display;_default: [ 0, "", "" ]}};jQuery.data(this[i], "olddisplay", display);wrapMap.optgroup = wrapMap.option;}wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;}wrapMap.th = wrapMap.td;// Set the display of the elements in a second loop// IE can't serialize <link> and <script> tags normally// to avoid the constant reflowif ( !jQuery.support.htmlSerialize ) {for ( var i = 0, l = this.length; i < l; i++ ){wrapMap._default = [ 1, "div<div>", "</div>" ];this[i].style.display = jQuery.data(this[i], "olddisplay") || "";}}jQuery.fn.extend({return this;text: function( text ) {}if ( jQuery.isFunction(text) ) {},return this.each(function(i) {var self = jQuery(this);hide: function(speed,callback){return self.text( text.call(this, i, self.text()) );if ( speed ) {});return this.animate( genFx("hide", 3), speed, callback);}} else {for ( var i = 0, l = this.length; i < l; i++ ){if ( typeof text !== "object" && text !== undefined ) {var old = jQuery.data(this[i], "olddisplay");return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );if ( !old && old !== "none" )}jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));}return jQuery.getText( this );},// Set the display of the elements in a second loop// to avoid the constant reflowwrapAll: function( html ) {for ( var i = 0, l = this.length; i < l; i++ ){if ( jQuery.isFunction( html ) ) {this[i].style.display = "none";return this.each(function(i) {}jQuery(this).wrapAll( html.call(this, i) );});return this;}}},if ( this[0] ) {// The elements to wrap the target around// Save the old toggle functionvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);_toggle: jQuery.fn.toggle,if ( this[0].parentNode ) {toggle: function( fn, fn2 ){wrap.insertBefore( this[0] );var bool = typeof fn === "boolean";}return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?wrap.map(function() {this._toggle.apply( this, arguments ) :var elem = this;fn == null || bool ?this.each(function(){while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {var state = bool ? fn : jQuery(this).is(":hidden");elem = elem.firstChild;jQuery(this)[ state ? "show" : "hide" ]();}}) :this.animate(genFx("toggle", 3), fn, fn2);return elem;},}).append(this);}fadeTo: function(speed,to,callback){return this.animate({opacity: to}, speed, callback);animate: function( prop, speed, easing, callback ) {wrapInner: function( html ) {var optall = jQuery.speed(speed, easing, callback);return this.each(function() {var self = jQuery( this ), contents = self.contents();return this[ optall.queue === false ? "each" : "queue" ](function(){if ( contents.length ) {var opt = jQuery.extend({}, optall), p,contents.wrapAll( html );hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),self = this;} else {self.append( html );for ( p in prop ) {}if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )});return opt.complete.call(this);},if ( ( p == "height" || p == "width" ) && this.style ) {wrap: function( html ) {// Store display propertyreturn this.each(function() {opt.display = jQuery.css(this, "display");jQuery( this ).wrapAll( html );});// Make sure that nothing sneaks out},opt.overflow = this.style.overflow;}unwrap: function() {}return this.parent().each(function() {if ( !jQuery.nodeName( this, "body" ) ) {if ( opt.overflow != null )jQuery( this ).replaceWith( this.childNodes );this.style.overflow = "hidden";}}).end();opt.curAnim = jQuery.extend({}, prop);},jQuery.each( prop, function(name, val){append: function() {var e = new jQuery.fx( self, opt, name );return this.domManip(arguments, true, function( elem ) {if ( this.nodeType === 1 ) {if ( /toggle|show|hide/.test(val) )this.appendChild( elem );e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );}else {});var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),},start = e.cur(true) || 0;prepend: function() {if ( parts ) {return this.domManip(arguments, true, function( elem ) {var end = parseFloat(parts[2]),if ( this.nodeType === 1 ) {unit = parts[3] || "px";this.insertBefore( elem, this.firstChild );}// We need to compute starting value});if ( unit != "px" ) {},self.style[ name ] = (end || 1) + unit;start = ((end || 1) / e.cur(true)) * start;before: function() {self.style[ name ] = start + unit;if ( this[0] && this[0].parentNode ) {}return this.domManip(arguments, false, function( elem ) {this.parentNode.insertBefore( elem, this );// If a +=/-= token was provided, we're doing a relative animation});if ( parts[1] )} else if ( arguments.length ) {end = ((parts[1] == "-=" ? -1 : 1) * end) + start;var set = jQuery(arguments[0]);set.push.apply( set, this.toArray() );e.custom( start, end, unit );return this.pushStack( set, "before", arguments );} else}e.custom( start, val, "" );},}});after: function() {if ( this[0] && this[0].parentNode ) {// For JS strict compliancereturn this.domManip(arguments, false, function( elem ) {return true;this.parentNode.insertBefore( elem, this.nextSibling );});},} else if ( arguments.length ) {var set = this.pushStack( this, "after", arguments );stop: function(clearQueue, gotoEnd){set.push.apply( set, jQuery(arguments[0]).toArray() );var timers = jQuery.timers;return set;}if (clearQueue)},this.queue([]);clone: function( events ) {this.each(function(){// Do the clone// go in reverse order so anything added to the queue during the loop is ignoredvar ret = this.map(function() {for ( var i = timers.length - 1; i >= 0; i-- )if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {if ( timers[i].elem == this ) {// IE copies events bound via attachEvent whenif (gotoEnd)// using cloneNode. Calling detachEvent on the// force the next step to be the last// clone will also remove the events from the orignaltimers[i](true);// In order to get around this, we use innerHTML.timers.splice(i, 1);// Unfortunately, this means some modifications to}// attributes in IE that are actually only stored});// as properties will not be copied (such as the// the name attribute on an input).// start the next in the queue if the last step wasn't forcedvar html = this.outerHTML, ownerDocument = this.ownerDocument;if (!gotoEnd)if ( !html ) {this.dequeue();var div = ownerDocument.createElement("div");div.appendChild( this.cloneNode(true) );return this;html = div.innerHTML;}});return jQuery.clean([html.replace(rinlinejQuery, "").replace(rleadingWhitespace, "")], ownerDocument)[0];// Generate shortcuts for custom animations} else {jQuery.each({return this.cloneNode(true);slideDown: genFx("show", 1),}slideUp: genFx("hide", 1),});slideToggle: genFx("toggle", 1),fadeIn: { opacity: "show" },// Copy the events from the original to the clonefadeOut: { opacity: "hide" }if ( events === true ) {}, function( name, props ){cloneCopyEvent( this, ret );jQuery.fn[ name ] = function( speed, callback ){cloneCopyEvent( this.find("*"), ret.find("*") );return this.animate( props, speed, callback );}};});// Return the cloned setreturn ret;jQuery.extend({},speed: function(speed, easing, fn) {html: function( value ) {var opt = typeof speed === "object" ? speed : {if ( value === undefined ) {complete: fn || !fn && easing ||return this[0] && this[0].nodeType === 1 ?jQuery.isFunction( speed ) && speed,this[0].innerHTML.replace(rinlinejQuery, "") :duration: speed,null;easing: fn && easing || easing && !jQuery.isFunction(easing) && easing};// See if we can take a shortcut and just use innerHTML} else if ( typeof value === "string" && !/<script/i.test( value ) &&opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {// Queueingtry {opt.old = opt.complete;for ( var i = 0, l = this.length; i < l; i++ ) {opt.complete = function(){// Remove element nodes and prevent memory leaksif ( opt.queue !== false )if ( this[i].nodeType === 1 ) {jQuery(this).dequeue();cleanData( this[i].getElementsByTagName("*") );if ( jQuery.isFunction( opt.old ) )this[i].innerHTML = value;opt.old.call( this );}};}return opt;// If using innerHTML throws an exception, use the fallback method},} catch(e) {this.empty().append( value );easing: {}linear: function( p, n, firstNum, diff ) {return firstNum + diff * p;} else if ( jQuery.isFunction( value ) ) {},this.each(function(i){swing: function( p, n, firstNum, diff ) {var self = jQuery(this), old = self.html();return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;self.empty().append(function(){}return value.call( this, i, old );},});});timers: [],} else {fx: function( elem, options, prop ){this.empty().append( value );this.options = options;}this.elem = elem;this.prop = prop;return this;},if ( !options.orig )options.orig = {};replaceWith: function( value ) {}if ( this[0] && this[0].parentNode ) {// Make sure that the elements are removed from the DOM before they are inserted});// this can help fix replacing a parent with child elementsif ( !jQuery.isFunction( value ) ) {jQuery.fx.prototype = {value = jQuery( value ).detach();}// Simple function for setting a style valueupdate: function(){return this.each(function() {if ( this.options.step )var next = this.nextSibling, parent = this.parentNode;this.options.step.call( this.elem, this.now, this );jQuery(this).remove();(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );if ( next ) {// Set display property to block for height/width animationsjQuery(next).before( value );if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )} else {this.elem.style.display = "block";jQuery(parent).append( value );},}});// Get the current size} else {cur: function(force){return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )}return this.elem[ this.prop ];},var r = parseFloat(jQuery.css(this.elem, this.prop, force));detach: function( selector ) {return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;return this.remove( selector, true );// Start an animation from one number to anotherdomManip: function( args, table, callback ) {custom: function(from, to, unit){var results, first, value = args[0], scripts = [];this.startTime = now();this.start = from;if ( jQuery.isFunction(value) ) {this.end = to;return this.each(function(i) {this.unit = unit || this.unit || "px";var self = jQuery(this);this.now = this.start;args[0] = value.call(this, i, table ? self.html() : undefined);this.pos = this.state = 0;return self.domManip( args, table, callback );});var self = this;}function t(gotoEnd){return self.step(gotoEnd);if ( this[0] ) {}// If we're in a fragment, just use that instead of building a new oneif ( args[0] && args[0].parentNode && args[0].parentNode.nodeType === 11 ) {t.elem = this.elem;results = { fragment: args[0].parentNode };} else {if ( t() && jQuery.timers.push(t) && !timerId ) {results = buildFragment( args, this, scripts );timerId = setInterval(function(){}var timers = jQuery.timers;first = results.fragment.firstChild;for ( var i = 0; i < timers.length; i++ )if ( !timers[i]() )if ( first ) {timers.splice(i--, 1);table = table && jQuery.nodeName( first, "tr" );if ( !timers.length ) {for ( var i = 0, l = this.length; i < l; i++ ) {clearInterval( timerId );callback.call(timerId = undefined;table ?}root(this[i], first) :}, 13);this[i],}results.cacheable || this.length > 1 || i > 0 ?},results.fragment.cloneNode(true) :results.fragment// Simple 'show' function);show: function(){}// Remember where we started, so that we can go back to it later}this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );this.options.show = true;if ( scripts ) {jQuery.each( scripts, evalScript );// Begin the animation}// Make sure that we start at a small width/height to avoid any}// flash of contentthis.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());return this;// Start by showing the elementfunction root( elem, cur ) {jQuery(this.elem).show();return jQuery.nodeName(elem, "table") ?},(elem.getElementsByTagName("tbody")[0] ||elem.appendChild(elem.ownerDocument.createElement("tbody"))) :// Simple 'hide' functionelem;hide: function(){}// Remember where we started, so that we can go back to it later}this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );});this.options.hide = true;function cloneCopyEvent(orig, ret) {// Begin the animationvar i = 0;this.custom(this.cur(), 0);},ret.each(function() {if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {// Each step of an animationreturn;step: function(gotoEnd){}var t = now();var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;if ( gotoEnd || t >= this.options.duration + this.startTime ) {this.now = this.end;if ( events ) {this.pos = this.state = 1;delete curData.handle;this.update();curData.events = {};this.options.curAnim[ this.prop ] = true;for ( var type in events ) {for ( var handler in events[ type ] ) {var done = true;jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );for ( var i in this.options.curAnim )}if ( this.options.curAnim[i] !== true )}done = false;}});if ( done ) {}if ( this.options.display != null ) {// Reset the overflowfunction buildFragment( args, nodes, scripts ) {this.elem.style.overflow = this.options.overflow;var fragment, cacheable, cached, cacheresults, doc;// Reset the displayif ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 ) {this.elem.style.display = this.options.display;cacheable = true;if ( jQuery.css(this.elem, "display") == "none" )cacheresults = jQuery.fragments[ args[0] ];this.elem.style.display = "block";if ( cacheresults ) {}if ( cacheresults !== 1 ) {fragment = cacheresults;// Hide the element if the "hide" operation was done}if ( this.options.hide )cached = true;jQuery(this.elem).hide();}}// Reset the properties, if the item has been hidden or shownif ( this.options.hide || this.options.show )if ( !fragment ) {for ( var p in this.options.curAnim )doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);jQuery.attr(this.elem.style, p, this.options.orig[p]);fragment = doc.createDocumentFragment();jQuery.clean( args, doc, fragment, scripts );// Execute the complete function}this.options.complete.call( this.elem );}if ( cacheable ) {jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;return false;}} else {var n = t - this.startTime;return { fragment: fragment, cacheable: cacheable };this.state = n / this.options.duration;}// Perform the easing function, defaults to swingjQuery.fragments = {};this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);this.now = this.start + ((this.end - this.start) * this.pos);jQuery.each({appendTo: "append",// Perform the next step of the animationprependTo: "prepend",this.update();insertBefore: "before",}insertAfter: "after",replaceAll: "replaceWith"return true;}, function( name, original ) {}jQuery.fn[ name ] = function( selector ) {var ret = [], insert = jQuery( selector );};for ( var i = 0, l = insert.length; i < l; i++ ) {jQuery.extend( jQuery.fx, {var elems = (i > 0 ? this.clone(true) : this).get();speeds:{jQuery.fn[ original ].apply( jQuery(insert[i]), elems );slow: 600,ret = ret.concat( elems );fast: 200,}// Default speedreturn this.pushStack( ret, name, insert.selector );_default: 400};},});step: {jQuery.each({opacity: function(fx){// keepData is for internal use only--do not documentjQuery.attr(fx.elem.style, "opacity", fx.now);remove: function( selector, keepData ) {},if ( !selector || jQuery.filter( selector, [ this ] ).length ) {if ( !keepData && this.nodeType === 1 ) {_default: function(fx){cleanData( this.getElementsByTagName("*") );if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )cleanData( [ this ] );fx.elem.style[ fx.prop ] = fx.now + fx.unit;}elsefx.elem[ fx.prop ] = fx.now;if ( this.parentNode ) {}this.parentNode.removeChild( this );}});}if ( document.documentElement["getBoundingClientRect"] )},jQuery.fn.offset = function() {if ( !this[0] ) return { top: 0, left: 0 };empty: function() {if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );// Remove element nodes and prevent memory leaksvar box = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,if ( this.nodeType === 1 ) {clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,cleanData( this.getElementsByTagName("*") );top = box.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,}left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;return { top: top, left: left };// Remove any remaining nodes};while ( this.firstChild ) {elsethis.removeChild( this.firstChild );jQuery.fn.offset = function() {}if ( !this[0] ) return { top: 0, left: 0 };}if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );}, function( name, fn ) {jQuery.offset.initialized || jQuery.offset.initialize();jQuery.fn[ name ] = function() {return this.each( fn, arguments );var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,};doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,});body = doc.body, defaultView = doc.defaultView,prevComputedStyle = defaultView.getComputedStyle(elem, null),jQuery.extend({top = elem.offsetTop, left = elem.offsetLeft;clean: function( elems, context, fragment, scripts ) {context = context || document;while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {computedStyle = defaultView.getComputedStyle(elem, null);// !context.createElement fails in IE with an error but returns typeof 'object'top -= elem.scrollTop, left -= elem.scrollLeft;if ( typeof context.createElement === "undefined" ) {if ( elem === offsetParent ) {context = context.ownerDocument || context[0] && context[0].ownerDocument || document;top += elem.offsetTop, left += elem.offsetLeft;}if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )top += parseInt( computedStyle.borderTopWidth, 10) || 0,var ret = [];left += parseInt( computedStyle.borderLeftWidth, 10) || 0;prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;jQuery.each(elems, function( i, elem ) {}if ( typeof elem === "number" ) {if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )elem += "";top += parseInt( computedStyle.borderTopWidth, 10) || 0,}left += parseInt( computedStyle.borderLeftWidth, 10) || 0;prevComputedStyle = computedStyle;if ( !elem ) {}return;}if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )top += body.offsetTop,// Convert html string into DOM nodesleft += body.offsetLeft;if ( typeof elem === "string" && !rhtml.test( elem ) ) {elem = context.createTextNode( elem );if ( prevComputedStyle.position === "fixed" )top += Math.max(docElem.scrollTop, body.scrollTop),} else if ( typeof elem === "string" ) {left += Math.max(docElem.scrollLeft, body.scrollLeft);// Fix "XHTML"-style tags in all browserselem = elem.replace(rxhtmlTag, fcloseTag);return { top: top, left: left };};// Trim whitespace, otherwise indexOf won't work as expectedvar tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),jQuery.offset = {wrap = wrapMap[ tag ] || wrapMap._default,initialize: function() {depth = wrap[0],if ( this.initialized ) return;div = context.createElement("div");var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';// Go to html and back, then peel off extra wrappersdiv.innerHTML = wrap[1] + elem + wrap[2];rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };for ( prop in rules ) container.style[prop] = rules[prop];// Move to the right depthwhile ( depth-- ) {container.innerHTML = html;div = div.lastChild;body.insertBefore(container, body.firstChild);}innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;// Remove IE's autoinserted <tbody> from table fragmentsthis.doesNotAddBorder = (checkDiv.offsetTop !== 5);if ( !jQuery.support.tbody ) {this.doesAddBorderForTableAndCells = (td.offsetTop === 5);// String was a <table>, *may* have spurious <tbody>innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';var hasBody = rtbody.test(elem),this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);tbody = tag === "table" && !hasBody ?div.firstChild && div.firstChild.childNodes :body.style.marginTop = '1px';this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);// String was a bare <thead> or <tfoot>body.style.marginTop = bodyMarginTop;wrap[1] === "<table>" && !hasBody ?div.childNodes :body.removeChild(container);[];this.initialized = true;},for ( var j = tbody.length - 1; j >= 0 ; --j ) {if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {bodyOffset: function(body) {tbody[ j ].parentNode.removeChild( tbody[ j ] );jQuery.offset.initialized || jQuery.offset.initialize();}var top = body.offsetTop, left = body.offsetLeft;}if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )top += parseInt( jQuery.curCSS(body, 'marginTop', true), 10 ) || 0,}left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;return { top: top, left: left };// IE completely kills leading whitespace when innerHTML is used}if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {};div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );}jQuery.fn.extend({elem = jQuery.makeArray( div.childNodes );position: function() {}var left = 0, top = 0, results;if ( elem.nodeType ) {if ( this[0] ) {ret.push( elem );// Get *real* offsetParent} else {var offsetParent = this.offsetParent(),ret = jQuery.merge( ret, elem );}// Get correct offsetsoffset = this.offset(),});parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();if ( fragment ) {// Subtract element marginsfor ( var i = 0; ret[i]; i++ ) {// note: when an element has margin: auto the offsetLeft and marginLeftif ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {// are the same in Safari causing offset.left to incorrectly be 0scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );offset.top -= num( this, 'marginTop' );} else {offset.left -= num( this, 'marginLeft' );if ( ret[i].nodeType === 1 ) {ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );// Add offsetParent borders}parentOffset.top += num( offsetParent, 'borderTopWidth' );fragment.appendChild( ret[i] );parentOffset.left += num( offsetParent, 'borderLeftWidth' );}}// Subtract the two offsets}results = {top: offset.top - parentOffset.top,return ret;left: offset.left - parentOffset.left}};});}function cleanData( elems ) {return results;for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) {},if ( !jQuery.noData[elem.nodeName.toLowerCase()] && (id = elem[expando]) ) {delete jQuery.cache[ id ];offsetParent: function() {}var offsetParent = this[0].offsetParent || document.body;}while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )}offsetParent = offsetParent.offsetParent;// exclude the following css properties to add pxreturn jQuery(offsetParent);var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,}ralpha = /alpha\([^)]*\)/,});ropacity = /opacity=([^)]*)/,rfloat = /float/i,rdashAlpha = /-([a-z])/ig,// Create scrollLeft and scrollTop methodsrupper = /([A-Z])/g,jQuery.each( ['Left', 'Top'], function(i, name) {rnumpx = /^-?\d+(?:px)?$/i,var method = 'scroll' + name;rnum = /^-?\d/,jQuery.fn[ method ] = function(val) {cssShow = { position: "absolute", visibility: "hidden", display:"block" },if (!this[0]) return null;cssWidth = [ "Left", "Right" ],cssHeight = [ "Top", "Bottom" ],return val !== undefined ?// cache check for defaultView.getComputedStyle// Set the scroll offsetgetComputedStyle = document.defaultView && document.defaultView.getComputedStyle,this.each(function() {// normalize float css propertythis == window || this == document ?styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",window.scrollTo(fcamelCase = function( all, letter ) {!i ? val : jQuery(window).scrollLeft(),return letter.toUpperCase();i ? val : jQuery(window).scrollTop()};) :this[ method ] = val;jQuery.fn.css = function( name, value ) {}) :return access( this, name, value, true, function( elem, name, value ) {if ( value === undefined ) {// Return the scroll offsetreturn jQuery.curCSS( elem, name );this[0] == window || this[0] == document ?}self[ i ? 'pageYOffset' : 'pageXOffset' ] ||jQuery.boxModel && document.documentElement[ method ] ||if ( typeof value === "number" && !rexclude.test(name) ) {document.body[ method ] :value += "px";this[0][ method ];}};});jQuery.style( elem, name, value );// Create innerHeight, innerWidth, outerHeight and outerWidth methods});jQuery.each([ "Height", "Width" ], function(i, name){};var tl = i ? "Left" : "Top", // top or leftjQuery.extend({br = i ? "Right" : "Bottom", // bottom or rightstyle: function( elem, name, value ) {lower = name.toLowerCase();// don't set styles on text and comment nodesif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {// innerHeight and innerWidthreturn undefined;jQuery.fn["inner" + name] = function(){}return this[0] ?jQuery.css( this[0], lower, false, "padding" ) :// ignore negative width and height values #1599null;if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {};value = undefined;}// outerHeight and outerWidthjQuery.fn["outer" + name] = function(margin) {var style = elem.style || elem, set = value !== undefined;return this[0] ?jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :// IE uses filters for opacitynull;if ( !jQuery.support.opacity && name === "opacity" ) {};if ( set ) {// IE has trouble with opacity if it does not have layoutvar type = name.toLowerCase();// Force it by setting the zoom levelstyle.zoom = 1;jQuery.fn[ type ] = function( size ) {// Get window width or height// Set the alpha filter to set the opacityreturn this[0] == window ?var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";// Everyone else use document.documentElement or document.body depending on Quirks vs Standards modevar filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;document.body[ "client" + name ] :}// Get document width or heightreturn style.filter && style.filter.indexOf("opacity=") >= 0 ?this[0] == document ?(parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":// Either scroll[Width/Height] or offset[Width/Height], whichever is greater"";Math.max(}document.documentElement["client" + name],document.body["scroll" + name], document.documentElement["scroll" + name],// Make sure we're using the right name for getting the float valuedocument.body["offset" + name], document.documentElement["offset" + name]if ( rfloat.test( name ) ) {) :name = styleFloat;}// Get or set width or height on the elementsize === undefined ?name = name.replace(rdashAlpha, fcamelCase);// Get width or height on the element(this.length ? jQuery.css( this[0], type ) : null) :if ( set ) {style[ name ] = value;// Set the width or height on the element (default to pixels if value is unitless)}this.css( type, typeof size === "string" ? size : size + "px" );};return style[ name ];},});})();css: function( elem, name, force, extra ) {if ( name === "width" || name === "height" ) {var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;function getWH() {val = name === "width" ? elem.offsetWidth : elem.offsetHeight;if ( extra === "border" ) {return;}jQuery.each( which, function() {if ( !extra ) {val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;}if ( extra === "margin" ) {val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;} else {val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;}});}if ( elem.offsetWidth !== 0 ) {getWH();} else {jQuery.swap( elem, props, getWH );}return Math.max(0, Math.round(val));}return jQuery.curCSS( elem, name, force );},curCSS: function( elem, name, force ) {var ret, style = elem.style, filter;// IE uses filters for opacityif ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {ret = ropacity.test(elem.currentStyle.filter || "") ?(parseFloat(RegExp.$1) / 100) + "" :"";return ret === "" ?"1" :ret;}// Make sure we're using the right name for getting the float valueif ( rfloat.test( name ) ) {name = styleFloat;}if ( !force && style && style[ name ] ) {ret = style[ name ];} else if ( getComputedStyle ) {// Only "float" is needed hereif ( rfloat.test( name ) ) {name = "float";}name = name.replace( rupper, "-$1" ).toLowerCase();var defaultView = elem.ownerDocument.defaultView;if ( !defaultView ) {return null;}var computedStyle = defaultView.getComputedStyle( elem, null );if ( computedStyle ) {ret = computedStyle.getPropertyValue( name );}// We should always get a number back from opacityif ( name === "opacity" && ret === "" ) {ret = "1";}} else if ( elem.currentStyle ) {var camelCase = name.replace(rdashAlpha, fcamelCase);ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];// From the awesome hack by Dean Edwards// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291// If we're not dealing with a regular pixel number// but a number that has a weird ending, we need to convert it to pixelsif ( !rnumpx.test( ret ) && rnum.test( ret ) ) {// Remember the original valuesvar left = style.left, rsLeft = elem.runtimeStyle.left;// Put in the new values to get a computed value outelem.runtimeStyle.left = elem.currentStyle.left;style.left = camelCase === "fontSize" ? "1em" : (ret || 0);ret = style.pixelLeft + "px";// Revert the changed valuesstyle.left = left;elem.runtimeStyle.left = rsLeft;}}return ret;},// A method for quickly swapping in/out CSS properties to get correct calculationsswap: function( elem, options, callback ) {var old = {};// Remember the old values, and insert the new onesfor ( var name in options ) {old[ name ] = elem.style[ name ];elem.style[ name ] = options[ name ];}callback.call( elem );// Revert the old valuesfor ( var name in options ) {elem.style[ name ] = old[ name ];}}});if ( jQuery.expr && jQuery.expr.filters ) {jQuery.expr.filters.hidden = function( elem ) {var width = elem.offsetWidth, height = elem.offsetHeight,skip = elem.nodeName.toLowerCase() === "tr";return width === 0 && height === 0 && !skip ?true :width > 0 && height > 0 && !skip ?false :jQuery.curCSS(elem, "display") === "none";};jQuery.expr.filters.visible = function( elem ) {return !jQuery.expr.filters.hidden( elem );};}var jsc = now(),rscript = /<script(.|\s)*?\/script>/gi,rselectTextarea = /select|textarea/i,rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,jsre = /=\?(&|$)/,rquery = /\?/,rts = /(\?|&)_=.*?(&|$)/,rurl = /^(\w+:)?\/\/([^\/?#]+)/,r20 = /%20/g;jQuery.fn.extend({// Keep a copy of the old load_load: jQuery.fn.load,load: function( url, params, callback ) {if ( typeof url !== "string" ) {return this._load( url );// Don't do a request if no elements are being requested} else if ( !this.length ) {return this;}var off = url.indexOf(" ");if ( off >= 0 ) {var selector = url.slice(off, url.length);url = url.slice(0, off);}// Default to a GET requestvar type = "GET";// If the second parameter was providedif ( params ) {// If it's a functionif ( jQuery.isFunction( params ) ) {// We assume that it's the callbackcallback = params;params = null;// Otherwise, build a param string} else if ( typeof params === "object" ) {params = jQuery.param( params, jQuery.ajaxSettings.traditional );type = "POST";}}// Request the remote documentjQuery.ajax({url: url,type: type,dataType: "html",data: params,context:this,complete: function( res, status ) {// If successful, inject the HTML into all the matched elementsif ( status === "success" || status === "notmodified" ) {// See if a selector was specifiedthis.html( selector ?// Create a dummy div to hold the resultsjQuery("<div />")// inject the contents of the document in, removing the scripts// to avoid any 'Permission Denied' errors in IE.append(res.responseText.replace(rscript, ""))// Locate the specified elements.find(selector) :// If not, just inject the full resultres.responseText );}if ( callback ) {this.each( callback, [res.responseText, status, res] );}}});return this;},serialize: function() {return jQuery.param(this.serializeArray());},serializeArray: function() {return this.map(function() {return this.elements ? jQuery.makeArray(this.elements) : this;}).filter(function() {return this.name && !this.disabled &&(this.checked || rselectTextarea.test(this.nodeName) ||rinput.test(this.type));}).map(function( i, elem ) {var val = jQuery(this).val();return val == null ?null :jQuery.isArray(val) ?jQuery.map( val, function( val, i ) {return { name: elem.name, value: val };}) :{ name: elem.name, value: val };}).get();}});// Attach a bunch of functions for handling common AJAX eventsjQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {jQuery.fn[o] = function( f ) {return this.bind(o, f);};});jQuery.extend({get: function( url, data, callback, type ) {// shift arguments if data argument was omitedif ( jQuery.isFunction( data ) ) {type = type || callback;callback = data;data = null;}return jQuery.ajax({type: "GET",url: url,data: data,success: callback,dataType: type});},getScript: function( url, callback ) {return jQuery.get(url, null, callback, "script");},getJSON: function( url, data, callback ) {return jQuery.get(url, data, callback, "json");},post: function( url, data, callback, type ) {// shift arguments if data argument was omitedif ( jQuery.isFunction( data ) ) {type = type || callback;callback = data;data = {};}return jQuery.ajax({type: "POST",url: url,data: data,success: callback,dataType: type});},ajaxSetup: function( settings ) {jQuery.extend( jQuery.ajaxSettings, settings );},ajaxSettings: {url: location.href,global: true,type: "GET",contentType: "application/x-www-form-urlencoded",processData: true,async: true,/*timeout: 0,data: null,username: null,password: null,traditional: false,*/// Create the request object; Microsoft failed to properly// implement the XMLHttpRequest in IE7 (can't request local files),// so we use the ActiveXObject when it is available// This function can be overriden by calling jQuery.ajaxSetupxhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?function() {return new window.XMLHttpRequest();} :function() {try {return new window.ActiveXObject("Microsoft.XMLHTTP");} catch(e) {}},accepts: {xml: "application/xml, text/xml",html: "text/html",script: "text/javascript, application/javascript",json: "application/json, text/javascript",text: "text/plain",_default: "*/*"}},// Last-Modified header cache for next requestlastModified: {},etag: {},ajax: function( origSettings ) {var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);var jsonp, status, data,callbackContext = s.context || s,type = s.type.toUpperCase();// convert data if not already a stringif ( s.data && s.processData && typeof s.data !== "string" ) {s.data = jQuery.param( s.data, s.traditional );}// Handle JSONP Parameter Callbacksif ( s.dataType === "jsonp" ) {if ( type === "GET" ) {if ( !jsre.test( s.url ) ) {s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";}} else if ( !s.data || !jsre.test(s.data) ) {s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";}s.dataType = "json";}// Build temporary JSONP functionif ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {jsonp = s.jsonpCallback || ("jsonp" + jsc++);// Replace the =? sequence both in the query string and the dataif ( s.data ) {s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");}s.url = s.url.replace(jsre, "=" + jsonp + "$1");// We need to make sure// that a JSONP style response is executed properlys.dataType = "script";// Handle JSONP-style loadingwindow[ jsonp ] = window[ jsonp ] || function( tmp ) {data = tmp;success();complete();// Garbage collectwindow[ jsonp ] = undefined;try {delete window[ jsonp ];} catch(e) {}if ( head ) {head.removeChild( script );}};}if ( s.dataType === "script" && s.cache === null ) {s.cache = false;}if ( s.cache === false && type === "GET" ) {var ts = now();// try replacing _= if it is therevar ret = s.url.replace(rts, "$1_=" + ts + "$2");// if nothing was replaced, add timestamp to the ends.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");}// If data is available, append data to url for get requestsif ( s.data && type === "GET" ) {s.url += (rquery.test(s.url) ? "&" : "?") + s.data;}// Watch for a new set of requestsif ( s.global && ! jQuery.active++ ) {jQuery.event.trigger( "ajaxStart" );}// Matches an absolute URL, and saves the domainvar parts = rurl.exec( s.url ),remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);// If we're requesting a remote document// and trying to load JSON or Script with a GETif ( s.dataType === "script" && type === "GET" && remote ) {var head = document.getElementsByTagName("head")[0] || document.documentElement;var script = document.createElement("script");script.src = s.url;if ( s.scriptCharset ) {script.charset = s.scriptCharset;}// Handle Script loadingif ( !jsonp ) {var done = false;// Attach handlers for all browsersscript.onload = script.onreadystatechange = function() {if ( !done && (!this.readyState ||this.readyState === "loaded" || this.readyState === "complete") ) {done = true;success();complete();// Handle memory leak in IEscript.onload = script.onreadystatechange = null;if ( head && script.parentNode ) {head.removeChild( script );}}};}// Use insertBefore instead of appendChild to circumvent an IE6 bug.// This arises when a base node is used (#2709 and #4378).head.insertBefore( script, head.firstChild );// We handle everything using the script element injectionreturn undefined;}var requestDone = false;// Create the request objectvar xhr = s.xhr();if ( !xhr ) {return;}// Open the socket// Passing null username, generates a login popup on Opera (#2865)if ( s.username ) {xhr.open(type, s.url, s.async, s.username, s.password);} else {xhr.open(type, s.url, s.async);}// Need an extra try/catch for cross domain requests in Firefox 3try {// Set the correct header, if data is being sentif ( s.data || origSettings && origSettings.contentType ) {xhr.setRequestHeader("Content-Type", s.contentType);}// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.if ( s.ifModified ) {if ( jQuery.lastModified[s.url] ) {xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);}if ( jQuery.etag[s.url] ) {xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);}}// Set header so the called script knows that it's an XMLHttpRequest// Only send the header if it's not a remote XHRif ( !remote ) {xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");}// Set the Accepts header for the server, depending on the dataTypexhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?s.accepts[ s.dataType ] + ", */*" :s.accepts._default );} catch(e) {}// Allow custom headers/mimetypes and early abortif ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {// Handle the global AJAX counterif ( s.global && ! --jQuery.active ) {jQuery.event.trigger( "ajaxStop" );}// close opended socketxhr.abort();return false;}if ( s.global ) {trigger("ajaxSend", [xhr, s]);}// Wait for a response to come backvar onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {// The request was abortedif ( !xhr || xhr.readyState === 0 ) {// Opera doesn't call onreadystatechange before this point// so we simulate the callif ( !requestDone ) {complete();}requestDone = true;if ( xhr ) {xhr.onreadystatechange = jQuery.noop;}// The transfer is complete and the data is available, or the request timed out} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {requestDone = true;xhr.onreadystatechange = jQuery.noop;status = isTimeout === "timeout" ?"timeout" :!jQuery.httpSuccess( xhr ) ?"error" :s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?"notmodified" :"success";if ( status === "success" ) {// Watch for, and catch, XML document parse errorstry {// process the data (runs the xml through httpData regardless of callback)data = jQuery.httpData( xhr, s.dataType, s );} catch(e) {status = "parsererror";}}// Make sure that the request was successful or notmodifiedif ( status === "success" || status === "notmodified" ) {// JSONP handles its own success callbackif ( !jsonp ) {success();}} else {jQuery.handleError(s, xhr, status);}// Fire the complete handlerscomplete();if ( isTimeout === "timeout" ) {xhr.abort();}// Stop memory leaksif ( s.async ) {xhr = null;}}};// Override the abort handler, if we can (IE doesn't allow it, but that's OK)// Opera doesn't fire onreadystatechange at all on aborttry {var oldAbort = xhr.abort;xhr.abort = function() {if ( xhr ) {oldAbort.call( xhr );if ( xhr ) {xhr.readyState = 0;}}onreadystatechange();};} catch(e) { }// Timeout checkerif ( s.async && s.timeout > 0 ) {setTimeout(function() {// Check to see if the request is still happeningif ( xhr && !requestDone ) {onreadystatechange( "timeout" );}}, s.timeout);}// Send the datatry {xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );} catch(e) {jQuery.handleError(s, xhr, null, e);// Fire the complete handlerscomplete();}// firefox 1.5 doesn't fire statechange for sync requestsif ( !s.async ) {onreadystatechange();}function success() {// If a local callback was specified, fire it and pass it the dataif ( s.success ) {s.success.call( callbackContext, data, status, xhr );}// Fire the global callbackif ( s.global ) {trigger( "ajaxSuccess", [xhr, s] );}}function complete() {// Process resultif ( s.complete ) {s.complete.call( callbackContext, xhr, status);}// The request was completedif ( s.global ) {trigger( "ajaxComplete", [xhr, s] );}// Handle the global AJAX counterif ( s.global && ! --jQuery.active ) {jQuery.event.trigger( "ajaxStop" );}}function trigger(type, args) {(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);}// return XMLHttpRequest to allow aborting the request etc.return xhr;},handleError: function( s, xhr, status, e ) {// If a local callback was specified, fire itif ( s.error ) {s.error.call( s.context || window, xhr, status, e );}// Fire the global callbackif ( s.global ) {(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );}},// Counter for holding the number of active queriesactive: 0,// Determines if an XMLHttpRequest was successful or nothttpSuccess: function( xhr ) {try {// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450return !xhr.status && location.protocol === "file:" ||// Opera returns 0 when status is 304( xhr.status >= 200 && xhr.status < 300 ) ||xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;} catch(e) {}return false;},// Determines if an XMLHttpRequest returns NotModifiedhttpNotModified: function( xhr, url ) {var lastModified = xhr.getResponseHeader("Last-Modified"),etag = xhr.getResponseHeader("Etag");if ( lastModified ) {jQuery.lastModified[url] = lastModified;}if ( etag ) {jQuery.etag[url] = etag;}// Opera returns 0 when status is 304return xhr.status === 304 || xhr.status === 0;},httpData: function( xhr, type, s ) {var ct = xhr.getResponseHeader("content-type") || "",xml = type === "xml" || !type && ct.indexOf("xml") >= 0,data = xml ? xhr.responseXML : xhr.responseText;if ( xml && data.documentElement.nodeName === "parsererror" ) {throw "parsererror";}// Allow a pre-filtering function to sanitize the response// s is checked to keep backwards compatibilityif ( s && s.dataFilter ) {data = s.dataFilter( data, type );}// The filter can actually parse the responseif ( typeof data === "string" ) {// Get the JavaScript object, if JSON is used.if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {// Make sure the incoming data is actual JSON// Logic borrowed from http://json.org/json2.jsif (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {// Try to use the native JSON parser firstif ( window.JSON && window.JSON.parse ) {data = window.JSON.parse( data );} else {data = (new Function("return " + data))();}} else {throw "Invalid JSON: " + data;}// If the type is "script", eval it in global context} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {jQuery.globalEval( data );}}return data;},// Serialize an array of form elements or a set of// key/values into a query stringparam: function( a, traditional ) {var s = [];// Set traditional to true for jQuery <= 1.3.2 behavior.if ( traditional === undefined ) {traditional = jQuery.ajaxSettings.traditional;}function add( key, value ) {// If value is a function, invoke it and return its valuevalue = jQuery.isFunction(value) ? value() : value;s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);}// If an array was passed in, assume that it is an array of form elements.if ( jQuery.isArray(a) || a.jquery ) {// Serialize the form elementsjQuery.each( a, function() {add( this.name, this.value );});} else {// If traditional, encode the "old" way (the way 1.3.2 or older// did it), otherwise encode params recursively.jQuery.each( a, function buildParams( prefix, obj ) {if ( jQuery.isArray(obj) ) {// Serialize array item.jQuery.each( obj, function( i, v ) {if ( traditional ) {// Treat each array item as a scalar.add( prefix, v );} else {// If array item is non-scalar (array or object), encode its// numeric index to resolve deserialization ambiguity issues.// Note that rack (as of 1.0.0) can't currently deserialize// nested arrays properly, and attempting to do so may cause// a server error. Possible fixes are to modify rack's// deserialization algorithm or to provide an option or flag// to force array serialization to be shallow.buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );}});} else if ( !traditional && obj != null && typeof obj === "object" ) {// Serialize object item.jQuery.each( obj, function( k, v ) {buildParams( prefix + "[" + k + "]", v );});} else {// Serialize scalar item.add( prefix, obj );}});}// Return the resulting serializationreturn s.join("&").replace(r20, "+");}});var elemdisplay = {},rfxtypes = /toggle|show|hide/,rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,timerId,fxAttrs = [// height animations[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],// width animations[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],// opacity animations[ "opacity" ]];jQuery.fn.extend({show: function( speed, callback ) {if ( speed != null ) {return this.animate( genFx("show", 3), speed, callback);} else {for ( var i = 0, l = this.length; i < l; i++ ) {var old = jQuery.data(this[i], "olddisplay");this[i].style.display = old || "";if ( jQuery.css(this[i], "display") === "none" ) {var nodeName = this[i].nodeName, display;if ( elemdisplay[ nodeName ] ) {display = elemdisplay[ nodeName ];} else {var elem = jQuery("<" + nodeName + " />").appendTo("body");display = elem.css("display");if ( display === "none" ) {display = "block";}elem.remove();elemdisplay[ nodeName ] = display;}jQuery.data(this[i], "olddisplay", display);}}// Set the display of the elements in a second loop// to avoid the constant reflowfor ( var j = 0, k = this.length; j < k; j++ ) {this[j].style.display = jQuery.data(this[j], "olddisplay") || "";}return this;}},hide: function( speed, callback ) {if ( speed != null ) {return this.animate( genFx("hide", 3), speed, callback);} else {for ( var i = 0, l = this.length; i < l; i++ ) {var old = jQuery.data(this[i], "olddisplay");if ( !old && old !== "none" ) {jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));}}// Set the display of the elements in a second loop// to avoid the constant reflowfor ( var j = 0, k = this.length; j < k; j++ ) {this[j].style.display = "none";}return this;}},// Save the old toggle function_toggle: jQuery.fn.toggle,toggle: function( fn, fn2 ) {var bool = typeof fn === "boolean";if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {this._toggle.apply( this, arguments );} else if ( fn == null || bool ) {this.each(function() {var state = bool ? fn : jQuery(this).is(":hidden");jQuery(this)[ state ? "show" : "hide" ]();});} else {this.animate(genFx("toggle", 3), fn, fn2);}return this;},fadeTo: function( speed, to, callback ) {return this.filter(":hidden").css("opacity", 0).show().end().animate({opacity: to}, speed, callback);},animate: function( prop, speed, easing, callback ) {var optall = jQuery.speed(speed, easing, callback);if ( jQuery.isEmptyObject( prop ) ) {return this.each( optall.complete );}return this[ optall.queue === false ? "each" : "queue" ](function() {var opt = jQuery.extend({}, optall), p,hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),self = this;for ( p in prop ) {var name = p.replace(rdashAlpha, fcamelCase);if ( p !== name ) {prop[ name ] = prop[ p ];delete prop[ p ];p = name;}if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {return opt.complete.call(this);}if ( ( p === "height" || p === "width" ) && this.style ) {// Store display propertyopt.display = jQuery.css(this, "display");// Make sure that nothing sneaks outopt.overflow = this.style.overflow;}if ( jQuery.isArray( prop[p] ) ) {// Create (if needed) and add to specialEasing(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];prop[p] = prop[p][0];}}if ( opt.overflow != null ) {this.style.overflow = "hidden";}opt.curAnim = jQuery.extend({}, prop);jQuery.each( prop, function( name, val ) {var e = new jQuery.fx( self, opt, name );if ( rfxtypes.test(val) ) {e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );} else {var parts = rfxnum.exec(val),start = e.cur(true) || 0;if ( parts ) {var end = parseFloat( parts[2] ),unit = parts[3] || "px";// We need to compute starting valueif ( unit !== "px" ) {self.style[ name ] = (end || 1) + unit;start = ((end || 1) / e.cur(true)) * start;self.style[ name ] = start + unit;}// If a +=/-= token was provided, we're doing a relative animationif ( parts[1] ) {end = ((parts[1] === "-=" ? -1 : 1) * end) + start;}e.custom( start, end, unit );} else {e.custom( start, val, "" );}}});// For JS strict compliancereturn true;});},stop: function( clearQueue, gotoEnd ) {var timers = jQuery.timers;if ( clearQueue ) {this.queue([]);}this.each(function() {// go in reverse order so anything added to the queue during the loop is ignoredfor ( var i = timers.length - 1; i >= 0; i-- ) {if ( timers[i].elem === this ) {if (gotoEnd) {// force the next step to be the lasttimers[i](true);}timers.splice(i, 1);}}});// start the next in the queue if the last step wasn't forcedif ( !gotoEnd ) {this.dequeue();}return this;}});// Generate shortcuts for custom animationsjQuery.each({slideDown: genFx("show", 1),slideUp: genFx("hide", 1),slideToggle: genFx("toggle", 1),fadeIn: { opacity: "show" },fadeOut: { opacity: "hide" }}, function( name, props ) {jQuery.fn[ name ] = function( speed, callback ) {return this.animate( props, speed, callback );};});jQuery.extend({speed: function( speed, easing, fn ) {var opt = speed && typeof speed === "object" ? speed : {complete: fn || !fn && easing ||jQuery.isFunction( speed ) && speed,duration: speed,easing: fn && easing || easing && !jQuery.isFunction(easing) && easing};opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;// Queueingopt.old = opt.complete;opt.complete = function() {if ( opt.queue !== false ) {jQuery(this).dequeue();}if ( jQuery.isFunction( opt.old ) ) {opt.old.call( this );}};return opt;},easing: {linear: function( p, n, firstNum, diff ) {return firstNum + diff * p;},swing: function( p, n, firstNum, diff ) {return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;}},timers: [],fx: function( elem, options, prop ) {this.options = options;this.elem = elem;this.prop = prop;if ( !options.orig ) {options.orig = {};}}});jQuery.fx.prototype = {// Simple function for setting a style valueupdate: function() {if ( this.options.step ) {this.options.step.call( this.elem, this.now, this );}(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );// Set display property to block for height/width animationsif ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {this.elem.style.display = "block";}},// Get the current sizecur: function( force ) {if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {return this.elem[ this.prop ];}var r = parseFloat(jQuery.css(this.elem, this.prop, force));return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;},// Start an animation from one number to anothercustom: function( from, to, unit ) {this.startTime = now();this.start = from;this.end = to;this.unit = unit || this.unit || "px";this.now = this.start;this.pos = this.state = 0;var self = this;function t( gotoEnd ) {return self.step(gotoEnd);}t.elem = this.elem;if ( t() && jQuery.timers.push(t) && !timerId ) {timerId = setInterval(jQuery.fx.tick, 13);}},// Simple 'show' functionshow: function() {// Remember where we started, so that we can go back to it laterthis.options.orig[this.prop] = jQuery.style( this.elem, this.prop );this.options.show = true;// Begin the animation// Make sure that we start at a small width/height to avoid any// flash of contentthis.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());// Start by showing the elementjQuery( this.elem ).show();},// Simple 'hide' functionhide: function() {// Remember where we started, so that we can go back to it laterthis.options.orig[this.prop] = jQuery.style( this.elem, this.prop );this.options.hide = true;// Begin the animationthis.custom(this.cur(), 0);},// Each step of an animationstep: function( gotoEnd ) {var t = now(), done = true;if ( gotoEnd || t >= this.options.duration + this.startTime ) {this.now = this.end;this.pos = this.state = 1;this.update();this.options.curAnim[ this.prop ] = true;for ( var i in this.options.curAnim ) {if ( this.options.curAnim[i] !== true ) {done = false;}}if ( done ) {if ( this.options.display != null ) {// Reset the overflowthis.elem.style.overflow = this.options.overflow;// Reset the displayvar old = jQuery.data(this.elem, "olddisplay");this.elem.style.display = old ? old : this.options.display;if ( jQuery.css(this.elem, "display") === "none" ) {this.elem.style.display = "block";}}// Hide the element if the "hide" operation was doneif ( this.options.hide ) {jQuery(this.elem).hide();}// Reset the properties, if the item has been hidden or shownif ( this.options.hide || this.options.show ) {for ( var p in this.options.curAnim ) {jQuery.style(this.elem, p, this.options.orig[p]);}}// Execute the complete functionthis.options.complete.call( this.elem );}return false;} else {var n = t - this.startTime;this.state = n / this.options.duration;// Perform the easing function, defaults to swingvar specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);this.now = this.start + ((this.end - this.start) * this.pos);// Perform the next step of the animationthis.update();}return true;}};jQuery.extend( jQuery.fx, {tick: function() {var timers = jQuery.timers;for ( var i = 0; i < timers.length; i++ ) {if ( !timers[i]() ) {timers.splice(i--, 1);}}if ( !timers.length ) {jQuery.fx.stop();}},stop: function() {clearInterval( timerId );timerId = null;},speeds: {slow: 600,fast: 200,// Default speed_default: 400},step: {opacity: function( fx ) {jQuery.style(fx.elem, "opacity", fx.now);},_default: function( fx ) {if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;} else {fx.elem[ fx.prop ] = fx.now;}}}});if ( jQuery.expr && jQuery.expr.filters ) {jQuery.expr.filters.animated = function( elem ) {return jQuery.grep(jQuery.timers, function( fn ) {return elem === fn.elem;}).length;};}function genFx( type, num ) {var obj = {};jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {obj[ this ] = type;});return obj;}if ( "getBoundingClientRect" in document.documentElement ) {jQuery.fn.offset = function( options ) {var elem = this[0];if ( !elem || !elem.ownerDocument ) {return null;}if ( options ) {return this.each(function( i ) {jQuery.offset.setOffset( this, options, i );});}if ( elem === elem.ownerDocument.body ) {return jQuery.offset.bodyOffset( elem );}var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,top = box.top + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;return { top: top, left: left };};} else {jQuery.fn.offset = function( options ) {var elem = this[0];if ( !elem || !elem.ownerDocument ) {return null;}if ( options ) {return this.each(function( i ) {jQuery.offset.setOffset( this, options, i );});}if ( elem === elem.ownerDocument.body ) {return jQuery.offset.bodyOffset( elem );}jQuery.offset.initialize();var offsetParent = elem.offsetParent, prevOffsetParent = elem,doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,body = doc.body, defaultView = doc.defaultView,prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,top = elem.offsetTop, left = elem.offsetLeft;while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {break;}computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;top -= elem.scrollTop;left -= elem.scrollLeft;if ( elem === offsetParent ) {top += elem.offsetTop;left += elem.offsetLeft;if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {top += parseFloat( computedStyle.borderTopWidth ) || 0;left += parseFloat( computedStyle.borderLeftWidth ) || 0;}prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;}if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {top += parseFloat( computedStyle.borderTopWidth ) || 0;left += parseFloat( computedStyle.borderLeftWidth ) || 0;}prevComputedStyle = computedStyle;}if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {top += body.offsetTop;left += body.offsetLeft;}if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {top += Math.max( docElem.scrollTop, body.scrollTop );left += Math.max( docElem.scrollLeft, body.scrollLeft );}return { top: top, left: left };};}jQuery.offset = {initialize: function() {var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );container.innerHTML = html;body.insertBefore( container, body.firstChild );innerDiv = container.firstChild;checkDiv = innerDiv.firstChild;td = innerDiv.nextSibling.firstChild.firstChild;this.doesNotAddBorder = (checkDiv.offsetTop !== 5);this.doesAddBorderForTableAndCells = (td.offsetTop === 5);checkDiv.style.position = "fixed", checkDiv.style.top = "20px";// safari subtracts parent border width here which is 5pxthis.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);checkDiv.style.position = checkDiv.style.top = "";innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);body.removeChild( container );body = container = innerDiv = checkDiv = table = td = null;jQuery.offset.initialize = jQuery.noop;},bodyOffset: function( body ) {var top = body.offsetTop, left = body.offsetLeft;jQuery.offset.initialize();if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {top += parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0;left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;}return { top: top, left: left };},setOffset: function( elem, options, i ) {// set position first, in-case top/left are set even on static elemif ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {elem.style.position = "relative";}var curElem = jQuery( elem ),curOffset = curElem.offset(),curTop = parseInt( jQuery.curCSS( elem, "top", true ), 10 ) || 0,curLeft = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;if ( jQuery.isFunction( options ) ) {options = options.call( elem, i, curOffset );}var props = {top: (options.top - curOffset.top) + curTop,left: (options.left - curOffset.left) + curLeft};if ( "using" in options ) {options.using.call( elem, props );} else {curElem.css( props );}}};jQuery.fn.extend({position: function() {if ( !this[0] ) {return null;}var elem = this[0],// Get *real* offsetParentoffsetParent = this.offsetParent(),// Get correct offsetsoffset = this.offset(),parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();// Subtract element margins// note: when an element has margin: auto the offsetLeft and marginLeft// are the same in Safari causing offset.left to incorrectly be 0offset.top -= parseFloat( jQuery.curCSS(elem, "marginTop", true) ) || 0;offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;// Add offsetParent bordersparentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth", true) ) || 0;parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;// Subtract the two offsetsreturn {top: offset.top - parentOffset.top,left: offset.left - parentOffset.left};},offsetParent: function() {return this.map(function() {var offsetParent = this.offsetParent || document.body;while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {offsetParent = offsetParent.offsetParent;}return offsetParent;});}});// Create scrollLeft and scrollTop methodsjQuery.each( ["Left", "Top"], function( i, name ) {var method = "scroll" + name;jQuery.fn[ method ] = function(val) {var elem = this[0], win;if ( !elem ) {return null;}if ( val !== undefined ) {// Set the scroll offsetreturn this.each(function() {win = getWindow( this );if ( win ) {win.scrollTo(!i ? val : jQuery(win).scrollLeft(),i ? val : jQuery(win).scrollTop());} else {this[ method ] = val;}});} else {win = getWindow( elem );// Return the scroll offsetreturn win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :jQuery.support.boxModel && win.document.documentElement[ method ] ||win.document.body[ method ] :elem[ method ];}};});function getWindow( elem ) {return ("scrollTo" in elem && elem.document) ?elem :elem.nodeType === 9 ?elem.defaultView || elem.parentWindow :false;}// Create innerHeight, innerWidth, outerHeight and outerWidth methodsjQuery.each([ "Height", "Width" ], function( i, name ) {var type = name.toLowerCase();// innerHeight and innerWidthjQuery.fn["inner" + name] = function() {return this[0] ?jQuery.css( this[0], type, false, "padding" ) :null;};// outerHeight and outerWidthjQuery.fn["outer" + name] = function( margin ) {return this[0] ?jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :null;};jQuery.fn[ type ] = function( size ) {// Get window width or heightvar elem = this[0];if ( !elem ) {return size == null ? null : this;}return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?// Everyone else use document.documentElement or document.body depending on Quirks vs Standards modeelem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||elem.document.body[ "client" + name ] :// Get document width or height(elem.nodeType === 9) ? // is it a document// Either scroll[Width/Height] or offset[Width/Height], whichever is greaterMath.max(elem.documentElement["client" + name],elem.body["scroll" + name], elem.documentElement["scroll" + name],elem.body["offset" + name], elem.documentElement["offset" + name]) :// Get or set width or height on the elementsize === undefined ?// Get width or height on the elementjQuery.css( elem, type ) :// Set the width or height on the element (default to pixels if value is unitless)this.css( type, typeof size === "string" ? size : size + "px" );};});// Expose jQuery to the global objectwindow.jQuery = window.$ = jQuery;})(window);