{ "log": { "version": "1.2", "creator": { "name": "WebInspector", "version": "537.36" }, "pages": [ { "startedDateTime": "2015-09-08T18:32:23.204Z", "id": "page_6", "title": "https://secure11.oscarhost.ca/kensington/demographic/demographiccontrol.jsp?search_mode=search_hin&keyword=9146489321&orderby=last_name%2C+first_name&dboperation=search_titlename&limit1=0&limit2=10&displaymode=Search&ptstatus=active&fromMessenger=false&outofdomain=", "pageTimings": { "onContentLoad": 7442.583000000013, "onLoad": 7442.028000001301 } } ], "entries": [ { "startedDateTime": "2015-09-08T18:32:23.204Z", "time": 7157.674999998562, "request": { "method": "GET", "url": "https://secure11.oscarhost.ca/kensington/demographic/demographiccontrol.jsp?search_mode=search_hin&keyword=9146489321&orderby=last_name%2C+first_name&dboperation=search_titlename&limit1=0&limit2=10&displaymode=Search&ptstatus=active&fromMessenger=false&outofdomain=", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Accept-Encoding", "value": "gzip, deflate, lzma, sdch" }, { "name": "Host", "value": "secure11.oscarhost.ca" }, { "name": "Accept-Language", "value": "en-US,en;q=0.8" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" }, { "name": "Referer", "value": "https://secure11.oscarhost.ca/kensington/demographic/demographiccontrol.jsp?search_mode=search_name&keyword=baldwin&orderby=last_name%2C+first_name&dboperation=search_titlename&limit1=0&limit2=10&displaymode=Search&ptstatus=active&fromMessenger=false&outofdomain=" }, { "name": "Cookie", "value": "JSESSIONID=41CDC6020F6E048360624AC8FB064B3D; _ga=GA1.2.1898936923.1439425583; oscprvid=57146991964065959575879118387130192807081; RT=" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [ { "name": "search_mode", "value": "search_hin" }, { "name": "keyword", "value": "9146489321" }, { "name": "orderby", "value": "last_name%2C+first_name" }, { "name": "dboperation", "value": "search_titlename" }, { "name": "limit1", "value": "0" }, { "name": "limit2", "value": "10" }, { "name": "displaymode", "value": "Search" }, { "name": "ptstatus", "value": "active" }, { "name": "fromMessenger", "value": "false" }, { "name": "outofdomain", "value": "" } ], "cookies": [ { "name": "JSESSIONID", "value": "41CDC6020F6E048360624AC8FB064B3D", "expires": null, "httpOnly": false, "secure": false }, { "name": "RT", "value": "", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1898936923.1439425583", "expires": null, "httpOnly": false, "secure": false }, { "name": "oscprvid", "value": "57146991964065959575879118387130192807081", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 1066, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Tue, 08 Sep 2015 18:32:18 GMT" }, { "name": "Cache-Control", "value": "no-store, no-cache, must-revalidate" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Keep-Alive", "value": "timeout=15, max=100" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Content-Type", "value": "text/html;charset=UTF-8" } ], "cookies": [], "content": { "size": 11070, "mimeType": "text/html", "compression": -20, "text": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\nPATIENT SEARCH RESULTS\n\n \n \n \n \n \n \n \n\n\n\n\n\n
\n \n Cancel\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n
\n
\n Search\n
\n
\n
    \n
  • \n
    By:\n
    \n\t\n \n
  • \n
  • \n
    Input:\n
    \n \n
  • \n
  • \n\t\t\t\t\n\t\t\t\t\n \n \n \n \n \n\t\t\t\t\t\n \n\t\t\t\t    \n\t\t\t\t\n\t\t\t\t\t\n
  • \n
\n
\n
\n\n
\n\n
\n
\n Search\n
\n
\n SEARCH FOR PATIENT RECORDS\n \n
\n
\n\n\t\n\t\t\n\t\n
Results based on keyword(s) : 9146489321
\n \n
\n*Sorts by demographic number
\n1Sorts by last name
\n
\n
\n\n\n\n\n

Please select by clicking on the patient's demographic id for details.

\n
\n\n\n\n" }, "redirectURL": "", "headersSize": 232, "bodySize": 11090, "_transferSize": 11322 }, "cache": {}, "timings": { "blocked": 42.3860000009881, "dns": 0.012000000424500001, "connect": 32.8090000002703, "send": 0.09199999840349449, "wait": 28.7419999986016, "receive": 7053.6339999998745, "ssl": 15.447000001586304 }, "connection": "7793", "pageref": "page_6" }, { "startedDateTime": "2015-09-08T18:32:24.001Z", "time": 1848.2860000003711, "request": { "method": "GET", "url": "https://secure11.oscarhost.ca/kensington/js/global.js", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Accept-Encoding", "value": "gzip, deflate, lzma, sdch" }, { "name": "Host", "value": "secure11.oscarhost.ca" }, { "name": "Accept-Language", "value": "en-US,en;q=0.8" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174" }, { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "https://secure11.oscarhost.ca/kensington/demographic/demographiccontrol.jsp?search_mode=search_hin&keyword=9146489321&orderby=last_name%2C+first_name&dboperation=search_titlename&limit1=0&limit2=10&displaymode=Search&ptstatus=active&fromMessenger=false&outofdomain=" }, { "name": "Cookie", "value": "JSESSIONID=41CDC6020F6E048360624AC8FB064B3D; _ga=GA1.2.1898936923.1439425583; oscprvid=57146991964065959575879118387130192807081; RT=" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "cookies": [ { "name": "JSESSIONID", "value": "41CDC6020F6E048360624AC8FB064B3D", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1898936923.1439425583", "expires": null, "httpOnly": false, "secure": false }, { "name": "oscprvid", "value": "57146991964065959575879118387130192807081", "expires": null, "httpOnly": false, "secure": false }, { "name": "RT", "value": "", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 755, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Tue, 08 Sep 2015 18:32:19 GMT" }, { "name": "Last-Modified", "value": "Wed, 24 Jun 2015 21:22:36 GMT" }, { "name": "ETag", "value": "\"4129-1435180956000\"" }, { "name": "Content-Type", "value": "text/javascript;charset=UTF-8" }, { "name": "Cache-Control", "value": "no-store, no-cache, must-revalidate" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=15, max=100" }, { "name": "Content-Length", "value": "4129" } ], "cookies": [], "content": { "size": 4129, "mimeType": "text/javascript", "compression": 0, "text": "\n// setfocus to the current window\nfunction setfocus() {\n this.focus();\n}\n\n// refresh this page\nfunction refresh() {\n\t history.go(0);\n}\nfunction showHideItem(id){\n if(document.getElementById(id).style.display == 'none')\n document.getElementById(id).style.display = 'block';\n else\n document.getElementById(id).style.display = 'none';\n}\nvar currentWidth;\n// This function is useful to simulate min-width for the body in IE6 (for popup windows)\nfunction setMinWidth(width){\n if (currentWidth != document.documentElement.clientWidth) {\n document.body.style.width = (document.documentElement.clientWidth < (width+10))? width+\"px\" : \"auto\";\n }\n currentWidth = document.documentElement.clientWidth;\n}\n\n// open a new popup window\nfunction popupPage(vheight,vwidth,varpage) { \n var page = \"\" + varpage;\n windowprops = \"height=\"+vheight+\",width=\"+vwidth+\",location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes\";\n var popup=window.open(page, \"attachment\", windowprops);\n if (popup != null) {\n if (popup.opener == null) {\n popup.opener = self; \n }\n }\n}\n//popup and focus\n//allow to specify pageTitle\nfunction popupFocusPage(vheight,vwidth,varpage,pageTitle){\n var page = \"\" + varpage;\n var windowprops = \"height=\"+vheight+\",width=\"+vwidth+\",location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes,\"+\n \"screenX=50,screenY=50,top=0,left=0\";\n var popup=window.open(page, pageTitle, windowprops);\n if (popup != null) {\n if (popup.opener == null) {\n popup.opener = self;\n }\n popup.focus();\n }\n}\n// Prompt user if exiting without saving\nfunction onExit() {\n if(confirm(\"Are you sure you wish to exit without saving your changes?\")==true)\n {\n window.close();\n }\n return(false);\n}\n\n// Check if the entered type is a number\nfunction checkTypeNum(typeIn) {\n\tvar typeInOK = true;\n\tvar i = 0;\n\tvar length = typeIn.length;\n\tvar ch;\n\t// walk through a string and find a number\n\tif (length>=1) {\n\t while (i < length) {\n\t\tch = typeIn.substring(i, i+1);\n\t\tif ((ch < \"0\") || (ch > \"9\")) {\n\t\t\ttypeInOK = false;\n\t\t\tbreak;\n\t\t}\n\t i++;\n }\n\t} else typeInOK = false;\n\treturn typeInOK;\n}\n\n// print the current window\nfunction onPrint() {\n\twindows.print();\n}\n\n// change the case of current control's text to upper case\nfunction upCaseCtrl(ctrl) {\n\tctrl.value = ctrl.value.toUpperCase();\n}\n\n\nfunction openBrWindow(theURL,winName,features) { \n window.open(theURL,winName,features);\n}\n\nfunction Check(e) {\n\te.checked = true;\n}\n\nfunction Clear(e) {\n\te.checked = false;\n}\n \nfunction CheckAll(ml) {\n\tvar len = ml.elements.length;\n\tfor (var i = 0; i < len; i++) {\n\t var e = ml.elements[i];\n\t if (e.name == \"checkbox\") {\n\t\t\tCheck(e);\n\t }\n\t}\n}\n\nfunction ClearAll(ml) {\n\tvar len = ml.elements.length;\n\tfor (var i = 0; i < len; i++) {\n\t var e = ml.elements[i];\n\t if (e.name == \"checkbox\") {\n\t\tClear(e);\n\t }\n\t}\n}\n\n//set the focus to this window\nfunction start(){\n\t this.focus();\n}\n\n//close the current window\nfunction closeit() {\n self.opener.refresh();\n close();\n} \n\n//ajax update of the current window\nfunction updateAjax() {\n var parentAjaxId = \"<%=parentAjaxId%>\"; \n if( parentAjaxId != \"null\" ) {\n window.opener.document.forms['encForm'].elements['reloadDiv'].value = parentAjaxId;\n window.opener.updateNeeded = true; \n }\n}\n\nfunction setEnabledAll(form, enabled){\n\tfor (var i = 0; i < form.elements.length; i++) {\n\t\tform.elements[i].disabled=!enabled;\n\t}\n}\n\nfunction getSelectedRadioValue(radioGroup)\n{\n\tfor (var i=0; i\n * \n * This software was written for the \n * Department of Family Medicine \n * McMaster University \n * Hamilton \n * Ontario, Canada \n */\n\nfunction popup(height, width, url, windowName) {\n return popup2(height, width, 0, 0, url, windowName);\n}\n\n\nfunction popup2(height, width, top, left, url, windowName){ \n var page = url; \n windowprops = \"height=\"+height+\",width=\"+width+\",location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes,screenX=0,screenY=0,top=\" + top + \",left=\" + left;\n var popup=window.open(url, windowName, windowprops); \n if (popup != null){ \n if (popup.opener == null){ \n popup.opener = self; \n } \n } \n popup.focus(); \n return popup; \n}\n\nfunction confirmNGo(url, message) {\n if (confirm(message)) {\n location.href = url;\n }\n return false;\n}\n\n\nfunction showHideItem(id){ \n if(document.getElementById(id).style.display == 'none')\n showItem(id); \n else\n hideItem(id); \n}\n\nfunction showItem(id){\n document.getElementById(id).style.display = ''; \n}\n\nfunction hideItem(id){\n document.getElementById(id).style.display = 'none'; \n}\n\n/*\noElm - Mandatory. This is element in whose children you will look for the attribute.\nstrTagName - Mandatory. This is the name of the HTML elements you want to look in. Use wildcard (*) if you want to look in all elements.\nstrAttributeName - Mandatory. The name of the attribute you’re looking for.\nstrAttributeValue - Optional. If you want the attribute you’re looking for to have a certain value as well. (don't specify it if you don't know it)\n*/\ndocument.getElementsByAttribute = function(oElm, strTagName, strAttributeName, strAttributeValue){\n var arrElements = (strTagName == \"*\" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);\n var arrReturnElements = new Array();\n var oAttributeValue = (typeof strAttributeValue != \"undefined\")? new RegExp(\"(^|\\\\s)\" + strAttributeValue + \"(\\\\s|$)\") : null;\n var oCurrent;\n var oAttribute;\n for(var i=0; i 0){\n if(typeof strAttributeValue == \"undefined\" || (oAttributeValue && oAttributeValue.test(oAttribute))){\n arrReturnElements.push(oCurrent);\n }\n }\n }\n return arrReturnElements;\n}\n\nfunction validDate(id) {\n //checks if the has a valid date format yyyy/mm/dd\n var completeRawDate = document.getElementById(id).value;\n return validDateText(completeRawDate);\n}\n\nfunction validDateText(completeRawDate) {\n//Just another method that validates date in a string, useful if you want to make your own\n//date checking script.\n var delimiter = '/';\n if (completeRawDate.indexOf('/') == -1)\n delimiter = '-';\n var dateArray = completeRawDate.split(delimiter);\n if (dateArray.length != 3) return false;\n year = (dateArray[0] - 0);\n month = (dateArray[1] - 1);\n day = (dateArray[2] - 0);\n //alert(\"year: \" + year + \", \" + month + \", \" + day);\n dateObject = new Date(year,month,day);\n return ((day==dateObject.getDate()) && (month==dateObject.getMonth()) && (year==dateObject.getFullYear()));\n}\n\nfunction validDateFieldsByClass(className, parentEle) {\n//Checks if the dates are valid, identifies date fields by class name; datefield preferrably type=\"text\"\n// parentEle is any object that encloses the fields, usually the form element\n var datefields = document.getElementsByClassName(className, parentEle)\n for (var i=0; i\nfunction checkAll(master, parentEle, className){\n var val = master.checked;\n var chkList = document.getElementsByClassName(className, parentEle);\n for (i =0; i < chkList.length; i++){\n chkList[i].checked = val;\n }\n}\n\n//Calls firebugs console log if it's available. A safer way to use the console because if firebug is not enabled the javascript will error on the console.log line.\nfunction oscarLog(str){\n if(window.console){\n console.log(str);\n }\n \n}\n\n\n//Can be use the enter key in a text box and call javacript function\n//example: \nfunction grabEnter(event,callb){\n if( (window.event && window.event.keyCode == 13) || (event && event.which == 13) ) {\n eval(callb);\n return false;\n }\n}\n\n\n\n//Checks to see if a String is numeric integer ie. No decimal aloud\nfunction isNumericInt(sText){\n var validNumChars = \"0123456789\";\n var isNumber=true;\n var chara;\n for (i = 0; i < sText.length && isNumber == true; i++) {\n chara = sText.charAt(i);\n if (validNumChars.indexOf(chara) == -1) {\n isNumber = false;\n }\n }\n return isNumber;\n}\n\n//Checks to see if a String is numeric\nfunction isNumeric(sText){\n var validNumChars = \"0123456789.\";\n var isNumber=true;\n var chara;\n for (i = 0; i < sText.length && isNumber == true; i++) {\n chara = sText.charAt(i);\n if (validNumChars.indexOf(chara) == -1) {\n isNumber = false;\n }\n }\n return isNumber;\n}\n//remove leading and trailing white space\nfunction trim(str){\n str=str.replace(/^\\s+/g,\"\");\n str=str.replace(/\\s+$/g,\"\");//trim str\n return str;\n}" }, "redirectURL": "", "headersSize": 328, "bodySize": 7027, "_transferSize": 7355 }, "cache": {}, "timings": { "blocked": 101.718000001711, "dns": 0.006999998730989887, "connect": 36.556999999447996, "send": 0.11200000153601763, "wait": 1521.323999997544, "receive": 188.24999999924808, "ssl": 18.679999997402987 }, "connection": "7817", "pageref": "page_6" }, { "startedDateTime": "2015-09-08T18:32:24.002Z", "time": 1848.3930000002147, "request": { "method": "GET", "url": "https://secure11.oscarhost.ca/kensington/js/jquery.js", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Accept-Encoding", "value": "gzip, deflate, lzma, sdch" }, { "name": "Host", "value": "secure11.oscarhost.ca" }, { "name": "Accept-Language", "value": "en-US,en;q=0.8" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174" }, { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "https://secure11.oscarhost.ca/kensington/demographic/demographiccontrol.jsp?search_mode=search_hin&keyword=9146489321&orderby=last_name%2C+first_name&dboperation=search_titlename&limit1=0&limit2=10&displaymode=Search&ptstatus=active&fromMessenger=false&outofdomain=" }, { "name": "Cookie", "value": "JSESSIONID=41CDC6020F6E048360624AC8FB064B3D; _ga=GA1.2.1898936923.1439425583; oscprvid=57146991964065959575879118387130192807081; RT=" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "cookies": [ { "name": "JSESSIONID", "value": "41CDC6020F6E048360624AC8FB064B3D", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1898936923.1439425583", "expires": null, "httpOnly": false, "secure": false }, { "name": "oscprvid", "value": "57146991964065959575879118387130192807081", "expires": null, "httpOnly": false, "secure": false }, { "name": "RT", "value": "", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 755, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Tue, 08 Sep 2015 18:32:19 GMT" }, { "name": "Last-Modified", "value": "Tue, 17 Mar 2015 17:35:50 GMT" }, { "name": "ETag", "value": "\"120654-1426613750000\"" }, { "name": "Content-Type", "value": "text/javascript;charset=UTF-8" }, { "name": "Cache-Control", "value": "no-store, no-cache, must-revalidate" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=15, max=100" }, { "name": "Content-Length", "value": "120654" } ], "cookies": [], "content": { "size": 120654, "mimeType": "text/javascript", "compression": 0, "text": "/*!\n * jQuery JavaScript Library v1.3.2\n * http://jquery.com/\n *\n * Copyright (c) 2009 John Resig\n * Dual licensed under the MIT and GPL licenses.\n * http://docs.jquery.com/License\n *\n * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)\n * Revision: 6246\n */\n(function(){\n\nvar \n\t// Will speed up references to window, and allows munging its name.\n\twindow = this,\n\t// Will speed up references to undefined, and allows munging its name.\n\tundefined,\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\tjQuery = window.jQuery = window.$ = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// A simple way to check for HTML strings or ID strings\n\t// (both of which we optimize for)\n\tquickExpr = /^[^<]*(<(.|\\s)+>)[^>]*$|^#([\\w-]+)$/,\n\t// Is it a simple selector\n\tisSimple = /^.[^:#\\[\\.,]*$/;\n\njQuery.fn = jQuery.prototype = {\n\tinit: function( selector, context ) {\n\t\t// Make sure that a selection was provided\n\t\tselector = selector || document;\n\n\t\t// Handle $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\tthis.context = selector;\n\t\t\treturn this;\n\t\t}\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\t// Are we dealing with HTML string or an ID?\n\t\t\tvar match = quickExpr.exec( selector );\n\n\t\t\t// Verify a match, and that no context was specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] )\n\t\t\t\t\tselector = jQuery.clean( [ match[1] ], context );\n\n\t\t\t\t// HANDLE: $(\"#id\")\n\t\t\t\telse {\n\t\t\t\t\tvar elem = document.getElementById( match[3] );\n\n\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t// by name instead of ID\n\t\t\t\t\tif ( elem && elem.id != match[3] )\n\t\t\t\t\t\treturn jQuery().find( selector );\n\n\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\tvar ret = jQuery( elem || [] );\n\t\t\t\t\tret.context = document;\n\t\t\t\t\tret.selector = selector;\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, [context])\n\t\t\t// (which is just equivalent to: $(content).find(expr)\n\t\t\t} else\n\t\t\t\treturn jQuery( context ).find( selector );\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) )\n\t\t\treturn jQuery( document ).ready( selector );\n\n\t\t// Make sure that old selector state is passed along\n\t\tif ( selector.selector && selector.context ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn this.setArray(jQuery.isArray( selector ) ?\n\t\t\tselector :\n\t\t\tjQuery.makeArray(selector));\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The current version of jQuery being used\n\tjquery: \"1.3.2\",\n\n\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num === undefined ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tArray.prototype.slice.call( this ) :\n\n\t\t\t// Return just the object\n\t\t\tthis[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems, name, selector ) {\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery( elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\tret.context = this.context;\n\n\t\tif ( name === \"find\" )\n\t\t\tret.selector = this.selector + (this.selector ? \" \" : \"\") + selector;\n\t\telse if ( name )\n\t\t\tret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Force the current matched set of elements to become\n\t// the specified array of elements (destroying the stack in the process)\n\t// You should use pushStack() in order to do this, but maintain the stack\n\tsetArray: function( elems ) {\n\t\t// Resetting the length to 0, then using the native Array push\n\t\t// is a super-fast way to populate an object with array-like properties\n\t\tthis.length = 0;\n\t\tArray.prototype.push.apply( this, elems );\n\n\t\treturn this;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem && elem.jquery ? elem[0] : elem\n\t\t, this );\n\t},\n\n\tattr: function( name, value, type ) {\n\t\tvar options = name;\n\n\t\t// Look for the case where we're accessing a style value\n\t\tif ( typeof name === \"string\" )\n\t\t\tif ( value === undefined )\n\t\t\t\treturn this[0] && jQuery[ type || \"attr\" ]( this[0], name );\n\n\t\t\telse {\n\t\t\t\toptions = {};\n\t\t\t\toptions[ name ] = value;\n\t\t\t}\n\n\t\t// Check to see if we're setting style values\n\t\treturn this.each(function(i){\n\t\t\t// Set all the styles\n\t\t\tfor ( name in options )\n\t\t\t\tjQuery.attr(\n\t\t\t\t\ttype ?\n\t\t\t\t\t\tthis.style :\n\t\t\t\t\t\tthis,\n\t\t\t\t\tname, jQuery.prop( this, options[ name ], type, i, name )\n\t\t\t\t);\n\t\t});\n\t},\n\n\tcss: function( key, value ) {\n\t\t// ignore negative width and height values\n\t\tif ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )\n\t\t\tvalue = undefined;\n\t\treturn this.attr( key, value, \"curCSS\" );\n\t},\n\n\ttext: function( text ) {\n\t\tif ( typeof text !== \"object\" && text != null )\n\t\t\treturn this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );\n\n\t\tvar ret = \"\";\n\n\t\tjQuery.each( text || this, function(){\n\t\t\tjQuery.each( this.childNodes, function(){\n\t\t\t\tif ( this.nodeType != 8 )\n\t\t\t\t\tret += this.nodeType != 1 ?\n\t\t\t\t\t\tthis.nodeValue :\n\t\t\t\t\t\tjQuery.fn.text( [ this ] );\n\t\t\t});\n\t\t});\n\n\t\treturn ret;\n\t},\n\n\twrapAll: function( html ) {\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).clone();\n\n\t\t\tif ( this[0].parentNode )\n\t\t\t\twrap.insertBefore( this[0] );\n\n\t\t\twrap.map(function(){\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild )\n\t\t\t\t\telem = elem.firstChild;\n\n\t\t\t\treturn elem;\n\t\t\t}).append(this);\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\treturn this.each(function(){\n\t\t\tjQuery( this ).contents().wrapAll( html );\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\treturn this.each(function(){\n\t\t\tjQuery( this ).wrapAll( html );\n\t\t});\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip(arguments, true, function(elem){\n\t\t\tif (this.nodeType == 1)\n\t\t\t\tthis.appendChild( elem );\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function(elem){\n\t\t\tif (this.nodeType == 1)\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip(arguments, false, function(elem){\n\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip(arguments, false, function(elem){\n\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t});\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || jQuery( [] );\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: [].push,\n\tsort: [].sort,\n\tsplice: [].splice,\n\n\tfind: function( selector ) {\n\t\tif ( this.length === 1 ) {\n\t\t\tvar ret = this.pushStack( [], \"find\", selector );\n\t\t\tret.length = 0;\n\t\t\tjQuery.find( selector, this[0], ret );\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn this.pushStack( jQuery.unique(jQuery.map(this, function(elem){\n\t\t\t\treturn jQuery.find( selector, elem );\n\t\t\t})), \"find\", selector );\n\t\t}\n\t},\n\n\tclone: function( events ) {\n\t\t// Do the clone\n\t\tvar ret = this.map(function(){\n\t\t\tif ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {\n\t\t\t\t// IE copies events bound via attachEvent when\n\t\t\t\t// using cloneNode. Calling detachEvent on the\n\t\t\t\t// clone will also remove the events from the orignal\n\t\t\t\t// In order to get around this, we use innerHTML.\n\t\t\t\t// Unfortunately, this means some modifications to\n\t\t\t\t// attributes in IE that are actually only stored\n\t\t\t\t// as properties will not be copied (such as the\n\t\t\t\t// the name attribute on an input).\n\t\t\t\tvar html = this.outerHTML;\n\t\t\t\tif ( !html ) {\n\t\t\t\t\tvar div = this.ownerDocument.createElement(\"div\");\n\t\t\t\t\tdiv.appendChild( this.cloneNode(true) );\n\t\t\t\t\thtml = div.innerHTML;\n\t\t\t\t}\n\n\t\t\t\treturn jQuery.clean([html.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g, \"\").replace(/^\\s*/, \"\")])[0];\n\t\t\t} else\n\t\t\t\treturn this.cloneNode(true);\n\t\t});\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( events === true ) {\n\t\t\tvar orig = this.find(\"*\").andSelf(), i = 0;\n\n\t\t\tret.find(\"*\").andSelf().each(function(){\n\t\t\t\tif ( this.nodeName !== orig[i].nodeName )\n\t\t\t\t\treturn;\n\n\t\t\t\tvar events = jQuery.data( orig[i], \"events\" );\n\n\t\t\t\tfor ( var type in events ) {\n\t\t\t\t\tfor ( var handler in events[ type ] ) {\n\t\t\t\t\t\tjQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti++;\n\t\t\t});\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn ret;\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.isFunction( selector ) &&\n\t\t\tjQuery.grep(this, function(elem, i){\n\t\t\t\treturn selector.call( elem, i );\n\t\t\t}) ||\n\n\t\t\tjQuery.multiFilter( selector, jQuery.grep(this, function(elem){\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}) ), \"filter\", selector );\n\t},\n\n\tclosest: function( selector ) {\n\t\tvar pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,\n\t\t\tcloser = 0;\n\n\t\treturn this.map(function(){\n\t\t\tvar cur = this;\n\t\t\twhile ( cur && cur.ownerDocument ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {\n\t\t\t\t\tjQuery.data(cur, \"closest\", closer);\n\t\t\t\t\treturn cur;\n\t\t\t\t}\n\t\t\t\tcur = cur.parentNode;\n\t\t\t\tcloser++;\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\tif ( typeof selector === \"string\" )\n\t\t\t// test special case where just one selector is passed in\n\t\t\tif ( isSimple.test( selector ) )\n\t\t\t\treturn this.pushStack( jQuery.multiFilter( selector, this, true ), \"not\", selector );\n\t\t\telse\n\t\t\t\tselector = jQuery.multiFilter( selector, this );\n\n\t\tvar isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;\n\t\treturn this.filter(function() {\n\t\t\treturn isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;\n\t\t});\n\t},\n\n\tadd: function( selector ) {\n\t\treturn this.pushStack( jQuery.unique( jQuery.merge(\n\t\t\tthis.get(),\n\t\t\ttypeof selector === \"string\" ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tjQuery.makeArray( selector )\n\t\t)));\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && jQuery.multiFilter( selector, this ).length > 0;\n\t},\n\n\thasClass: function( selector ) {\n\t\treturn !!selector && this.is( \".\" + selector );\n\t},\n\n\tval: function( value ) {\n\t\tif ( value === undefined ) {\t\t\t\n\t\t\tvar elem = this[0];\n\n\t\t\tif ( elem ) {\n\t\t\t\tif( jQuery.nodeName( elem, 'option' ) )\n\t\t\t\t\treturn (elem.attributes.value || {}).specified ? elem.value : elem.text;\n\t\t\t\t\n\t\t\t\t// We need to handle select boxes special\n\t\t\t\tif ( jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\t\tvar index = elem.selectedIndex,\n\t\t\t\t\t\tvalues = [],\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tone = elem.type == \"select-one\";\n\n\t\t\t\t\t// Nothing was selected\n\t\t\t\t\tif ( index < 0 )\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {\n\t\t\t\t\t\tvar option = options[ i ];\n\n\t\t\t\t\t\tif ( option.selected ) {\n\t\t\t\t\t\t\t// Get the specifc value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif ( one )\n\t\t\t\t\t\t\t\treturn value;\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t// Everything else, we just grab the value\n\t\t\t\treturn (elem.value || \"\").replace(/\\r/g, \"\");\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ( typeof value === \"number\" )\n\t\t\tvalue += '';\n\n\t\treturn this.each(function(){\n\t\t\tif ( this.nodeType != 1 )\n\t\t\t\treturn;\n\n\t\t\tif ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )\n\t\t\t\tthis.checked = (jQuery.inArray(this.value, value) >= 0 ||\n\t\t\t\t\tjQuery.inArray(this.name, value) >= 0);\n\n\t\t\telse if ( jQuery.nodeName( this, \"select\" ) ) {\n\t\t\t\tvar values = jQuery.makeArray(value);\n\n\t\t\t\tjQuery( \"option\", this ).each(function(){\n\t\t\t\t\tthis.selected = (jQuery.inArray( this.value, values ) >= 0 ||\n\t\t\t\t\t\tjQuery.inArray( this.text, values ) >= 0);\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length )\n\t\t\t\t\tthis.selectedIndex = -1;\n\n\t\t\t} else\n\t\t\t\tthis.value = value;\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn value === undefined ?\n\t\t\t(this[0] ?\n\t\t\t\tthis[0].innerHTML.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g, \"\") :\n\t\t\t\tnull) :\n\t\t\tthis.empty().append( value );\n\t},\n\n\treplaceWith: function( value ) {\n\t\treturn this.after( value ).remove();\n\t},\n\n\teq: function( i ) {\n\t\treturn this.slice( i, +i + 1 );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( Array.prototype.slice.apply( this, arguments ),\n\t\t\t\"slice\", Array.prototype.slice.call(arguments).join(\",\") );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function(elem, i){\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tandSelf: function() {\n\t\treturn this.add( this.prevObject );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\t\tif ( this[0] ) {\n\t\t\tvar fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),\n\t\t\t\tscripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),\n\t\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( first )\n\t\t\t\tfor ( var i = 0, l = this.length; i < l; i++ )\n\t\t\t\t\tcallback.call( root(this[i], first), this.length > 1 || i > 0 ?\n\t\t\t\t\t\t\tfragment.cloneNode(true) : fragment );\n\t\t\n\t\t\tif ( scripts )\n\t\t\t\tjQuery.each( scripts, evalScript );\n\t\t}\n\n\t\treturn this;\n\t\t\n\t\tfunction root( elem, cur ) {\n\t\t\treturn table && jQuery.nodeName(elem, \"table\") && jQuery.nodeName(cur, \"tr\") ?\n\t\t\t\t(elem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\t\telem.appendChild(elem.ownerDocument.createElement(\"tbody\"))) :\n\t\t\t\telem;\n\t\t}\n\t}\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\nfunction evalScript( i, elem ) {\n\tif ( elem.src )\n\t\tjQuery.ajax({\n\t\t\turl: elem.src,\n\t\t\tasync: false,\n\t\t\tdataType: \"script\"\n\t\t});\n\n\telse\n\t\tjQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || \"\" );\n\n\tif ( elem.parentNode )\n\t\telem.parentNode.removeChild( elem );\n}\n\nfunction now(){\n\treturn +new Date;\n}\n\njQuery.extend = jQuery.fn.extend = function() {\n\t// copy reference to target object\n\tvar target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) )\n\t\ttarget = {};\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length == i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ )\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null )\n\t\t\t// Extend the base object\n\t\t\tfor ( var name in options ) {\n\t\t\t\tvar src = target[ name ], copy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy )\n\t\t\t\t\tcontinue;\n\n\t\t\t\t// Recurse if we're merging object values\n\t\t\t\tif ( deep && copy && typeof copy === \"object\" && !copy.nodeType )\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, \n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsrc || ( copy.length != null ? [ ] : { } )\n\t\t\t\t\t, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\telse if ( copy !== undefined )\n\t\t\t\t\ttarget[ name ] = copy;\n\n\t\t\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n// exclude the following css properties to add px\nvar\texclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,\n\t// cache defaultView\n\tdefaultView = document.defaultView || {},\n\ttoString = Object.prototype.toString;\n\njQuery.extend({\n\tnoConflict: function( deep ) {\n\t\twindow.$ = _$;\n\n\t\tif ( deep )\n\t\t\twindow.jQuery = _jQuery;\n\n\t\treturn jQuery;\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn toString.call(obj) === \"[object Function]\";\n\t},\n\n\tisArray: function( obj ) {\n\t\treturn toString.call(obj) === \"[object Array]\";\n\t},\n\n\t// check if an element is in a (or is an) XML document\n\tisXMLDoc: function( elem ) {\n\t\treturn elem.nodeType === 9 && elem.documentElement.nodeName !== \"HTML\" ||\n\t\t\t!!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );\n\t},\n\n\t// Evalulates a script in a global context\n\tglobalEval: function( data ) {\n\t\tif ( data && /\\S/.test(data) ) {\n\t\t\t// Inspired by code by Andrea Giammarchi\n\t\t\t// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html\n\t\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement,\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\tscript.type = \"text/javascript\";\n\t\t\tif ( jQuery.support.scriptEval )\n\t\t\t\tscript.appendChild( document.createTextNode( data ) );\n\t\t\telse\n\t\t\t\tscript.text = data;\n\n\t\t\t// Use insertBefore instead of appendChild to circumvent an IE6 bug.\n\t\t\t// This arises when a base node is used (#2709).\n\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\thead.removeChild( script );\n\t\t}\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( object, callback, args ) {\n\t\tvar name, i = 0, length = object.length;\n\n\t\tif ( args ) {\n\t\t\tif ( length === undefined ) {\n\t\t\t\tfor ( name in object )\n\t\t\t\t\tif ( callback.apply( object[ name ], args ) === false )\n\t\t\t\t\t\tbreak;\n\t\t\t} else\n\t\t\t\tfor ( ; i < length; )\n\t\t\t\t\tif ( callback.apply( object[ i++ ], args ) === false )\n\t\t\t\t\t\tbreak;\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( length === undefined ) {\n\t\t\t\tfor ( name in object )\n\t\t\t\t\tif ( callback.call( object[ name ], name, object[ name ] ) === false )\n\t\t\t\t\t\tbreak;\n\t\t\t} else\n\t\t\t\tfor ( var value = object[0];\n\t\t\t\t\ti < length && callback.call( value, i, value ) !== false; value = object[++i] ){}\n\t\t}\n\n\t\treturn object;\n\t},\n\n\tprop: function( elem, value, type, i, name ) {\n\t\t// Handle executable functions\n\t\tif ( jQuery.isFunction( value ) )\n\t\t\tvalue = value.call( elem, i );\n\n\t\t// Handle passing in a number to a CSS property\n\t\treturn typeof value === \"number\" && type == \"curCSS\" && !exclude.test( name ) ?\n\t\t\tvalue + \"px\" :\n\t\t\tvalue;\n\t},\n\n\tclassName: {\n\t\t// internal only, use addClass(\"class\")\n\t\tadd: function( elem, classNames ) {\n\t\t\tjQuery.each((classNames || \"\").split(/\\s+/), function(i, className){\n\t\t\t\tif ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )\n\t\t\t\t\telem.className += (elem.className ? \" \" : \"\") + className;\n\t\t\t});\n\t\t},\n\n\t\t// internal only, use removeClass(\"class\")\n\t\tremove: function( elem, classNames ) {\n\t\t\tif (elem.nodeType == 1)\n\t\t\t\telem.className = classNames !== undefined ?\n\t\t\t\t\tjQuery.grep(elem.className.split(/\\s+/), function(className){\n\t\t\t\t\t\treturn !jQuery.className.has( classNames, className );\n\t\t\t\t\t}).join(\" \") :\n\t\t\t\t\t\"\";\n\t\t},\n\n\t\t// internal only, use hasClass(\"class\")\n\t\thas: function( elem, className ) {\n\t\t\treturn elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\\s+/) ) > -1;\n\t\t}\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback ) {\n\t\tvar old = {};\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( var name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tcallback.call( elem );\n\n\t\t// Revert the old values\n\t\tfor ( var name in options )\n\t\t\telem.style[ name ] = old[ name ];\n\t},\n\n\tcss: function( elem, name, force, extra ) {\n\t\tif ( name == \"width\" || name == \"height\" ) {\n\t\t\tvar val, props = { position: \"absolute\", visibility: \"hidden\", display:\"block\" }, which = name == \"width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ];\n\n\t\t\tfunction getWH() {\n\t\t\t\tval = name == \"width\" ? elem.offsetWidth : elem.offsetHeight;\n\n\t\t\t\tif ( extra === \"border\" )\n\t\t\t\t\treturn;\n\n\t\t\t\tjQuery.each( which, function() {\n\t\t\t\t\tif ( !extra )\n\t\t\t\t\t\tval -= parseFloat(jQuery.curCSS( elem, \"padding\" + this, true)) || 0;\n\t\t\t\t\tif ( extra === \"margin\" )\n\t\t\t\t\t\tval += parseFloat(jQuery.curCSS( elem, \"margin\" + this, true)) || 0;\n\t\t\t\t\telse\n\t\t\t\t\t\tval -= parseFloat(jQuery.curCSS( elem, \"border\" + this + \"Width\", true)) || 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( elem.offsetWidth !== 0 )\n\t\t\t\tgetWH();\n\t\t\telse\n\t\t\t\tjQuery.swap( elem, props, getWH );\n\n\t\t\treturn Math.max(0, Math.round(val));\n\t\t}\n\n\t\treturn jQuery.curCSS( elem, name, force );\n\t},\n\n\tcurCSS: function( elem, name, force ) {\n\t\tvar ret, style = elem.style;\n\n\t\t// We need to handle opacity special in IE\n\t\tif ( name == \"opacity\" && !jQuery.support.opacity ) {\n\t\t\tret = jQuery.attr( style, \"opacity\" );\n\n\t\t\treturn ret == \"\" ?\n\t\t\t\t\"1\" :\n\t\t\t\tret;\n\t\t}\n\n\t\t// Make sure we're using the right name for getting the float value\n\t\tif ( name.match( /float/i ) )\n\t\t\tname = styleFloat;\n\n\t\tif ( !force && style && style[ name ] )\n\t\t\tret = style[ name ];\n\n\t\telse if ( defaultView.getComputedStyle ) {\n\n\t\t\t// Only \"float\" is needed here\n\t\t\tif ( name.match( /float/i ) )\n\t\t\t\tname = \"float\";\n\n\t\t\tname = name.replace( /([A-Z])/g, \"-$1\" ).toLowerCase();\n\n\t\t\tvar computedStyle = defaultView.getComputedStyle( elem, null );\n\n\t\t\tif ( computedStyle )\n\t\t\t\tret = computedStyle.getPropertyValue( name );\n\n\t\t\t// We should always get a number back from opacity\n\t\t\tif ( name == \"opacity\" && ret == \"\" )\n\t\t\t\tret = \"1\";\n\n\t\t} else if ( elem.currentStyle ) {\n\t\t\tvar camelCase = name.replace(/\\-(\\w)/g, function(all, letter){\n\t\t\t\treturn letter.toUpperCase();\n\t\t\t});\n\n\t\t\tret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];\n\n\t\t\t// From the awesome hack by Dean Edwards\n\t\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t\t// If we're not dealing with a regular pixel number\n\t\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t\tif ( !/^\\d+(px)?$/i.test( ret ) && /^\\d/.test( ret ) ) {\n\t\t\t\t// Remember the original values\n\t\t\t\tvar left = style.left, rsLeft = elem.runtimeStyle.left;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\telem.runtimeStyle.left = elem.currentStyle.left;\n\t\t\t\tstyle.left = ret || 0;\n\t\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.left = left;\n\t\t\t\telem.runtimeStyle.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tclean: function( elems, context, fragment ) {\n\t\tcontext = context || document;\n\n\t\t// !context.createElement fails in IE with an error but returns typeof 'object'\n\t\tif ( typeof context.createElement === \"undefined\" )\n\t\t\tcontext = context.ownerDocument || context[0] && context[0].ownerDocument || document;\n\n\t\t// If a single string is passed in and it's a single tag\n\t\t// just do a createElement and skip the rest\n\t\tif ( !fragment && elems.length === 1 && typeof elems[0] === \"string\" ) {\n\t\t\tvar match = /^<(\\w+)\\s*\\/?>$/.exec(elems[0]);\n\t\t\tif ( match )\n\t\t\t\treturn [ context.createElement( match[1] ) ];\n\t\t}\n\n\t\tvar ret = [], scripts = [], div = context.createElement(\"div\");\n\n\t\tjQuery.each(elems, function(i, elem){\n\t\t\tif ( typeof elem === \"number\" )\n\t\t\t\telem += '';\n\n\t\t\tif ( !elem )\n\t\t\t\treturn;\n\n\t\t\t// Convert html string into DOM nodes\n\t\t\tif ( typeof elem === \"string\" ) {\n\t\t\t\t// Fix \"XHTML\"-style tags in all browsers\n\t\t\t\telem = elem.replace(/(<(\\w+)[^>]*?)\\/>/g, function(all, front, tag){\n\t\t\t\t\treturn tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?\n\t\t\t\t\t\tall :\n\t\t\t\t\t\tfront + \">\";\n\t\t\t\t});\n\n\t\t\t\t// Trim whitespace, otherwise indexOf won't work as expected\n\t\t\t\tvar tags = elem.replace(/^\\s+/, \"\").substring(0, 10).toLowerCase();\n\n\t\t\t\tvar wrap =\n\t\t\t\t\t// option or optgroup\n\t\t\t\t\t!tags.indexOf(\"\", \"\" ] ||\n\n\t\t\t\t\t!tags.indexOf(\"\", \"\" ] ||\n\n\t\t\t\t\ttags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&\n\t\t\t\t\t[ 1, \"\", \"
\" ] ||\n\n\t\t\t\t\t!tags.indexOf(\"\", \"\" ] ||\n\n\t\t\t\t \t// matched above\n\t\t\t\t\t(!tags.indexOf(\"\", \"\" ] ||\n\n\t\t\t\t\t!tags.indexOf(\"\", \"\" ] ||\n\n\t\t\t\t\t// IE can't serialize and