?R Nx'-V?($@?(\@-V?( @?(8@-=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement){while(t.length){n.createElement(t.pop())}}return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e)){return}var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle;o.events={};for(n in u){for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement){Ht=(Pt.contentWindow||Pt.contentDocument).document;Ht.write("");Ht.close()}t=Ht.body.appendChild(Ht.createElement(e));n=Dt(t,"display");i.body.removeChild(Pt)}Wt[e]=n;return n}function fn(e,t,n,r){var i;if(v.isArray(t)){v.each(t,function(t,i){if(n||sn.test(e)){r(e,i)}else{fn(e+"["+(typeof i==="object"?t:"")+"]",i,n,r)}})}else if(!n&&v.type(t)==="object"){for(i in t){fn(e+"["+i+"]",t[i],n,r)}}else{r(e,t)}}function Cn(e){return function(t,n){if(typeof t!=="string"){n=t;t="*"}var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n)){for(;u Date: Mon Apr 8 2013 19:41:28 UTC * http://jquerymobile.com * * Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors * Released under the MIT license. * http://jquery.org/license * */ (function ( root, doc, factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery" ], function ( $ ) { factory( $, root, doc ); return $.mobile; }); } else { // Browser globals factory( root.jQuery, root, doc ); } }( this, document, function ( jQuery, window, document, undefined ) { (function( $ ) { $.mobile = {}; }( jQuery )); (function( $, window, undefined ) { var nsNormalizeDict = {}; // jQuery.mobile configurable options $.mobile = $.extend($.mobile, { // Version of the jQuery Mobile Framework version: "1.3.1", // Namespace used framework-wide for data-attrs. Default is no namespace ns: "", // Define the url parameter used for referencing widget-generated sub-pages. // Translates to to example.html&ui-page=subpageIdentifier // hash segment before &ui-page= is used to make Ajax request subPageUrlKey: "ui-page", // Class assigned to page currently in view, and during transitions activePageClass: "ui-page-active", // Class used for "active" button state, from CSS framework activeBtnClass: "ui-btn-active", // Class used for "focus" form element state, from CSS framework focusClass: "ui-focus", // Automatically handle clicks and form submissions through Ajax, when same-domain ajaxEnabled: true, // Automatically load and show pages based on location.hash hashListeningEnabled: true, // disable to prevent jquery from bothering with links linkBindingEnabled: true, // Set default page transition - 'none' for no transitions defaultPageTransition: "fade", // Set maximum window width for transitions to apply - 'false' for no limit maxTransitionWidth: false, // Minimum scroll distance that will be remembered when returning to a page minScrollBack: 250, // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts touchOverflowEnabled: false, // Set default dialog transition - 'none' for no transitions defaultDialogTransition: "pop", // Error response message - appears when an Ajax page request fails pageLoadErrorMessage: "Error Loading Page", // For error messages, which theme does the box uses? pageLoadErrorMessageTheme: "e", // replace calls to window.history.back with phonegaps navigation helper // where it is provided on the window object phonegapNavigationEnabled: false, //automatically initialize the DOM when it's ready autoInitializePage: true, pushStateEnabled: true, // allows users to opt in to ignoring content by marking a parent element as // data-ignored ignoreContentEnabled: false, // turn of binding to the native orientationchange due to android orientation behavior orientationChangeEnabled: true, buttonMarkup: { hoverDelay: 200 }, // define the window and the document objects window: $( window ), document: $( document ), // TODO might be useful upstream in jquery itself ? keyCode: { ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, // COMMAND COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, // COMMAND_RIGHT NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91 // COMMAND }, // Place to store various widget extensions behaviors: {}, // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value silentScroll: function( ypos ) { if ( $.type( ypos ) !== "number" ) { ypos = $.mobile.defaultHomeScroll; } // prevent scrollstart and scrollstop events $.event.special.scrollstart.enabled = false; setTimeout( function() { window.scrollTo( 0, ypos ); $.mobile.document.trigger( "silentscroll", { x: 0, y: ypos }); }, 20 ); setTimeout( function() { $.event.special.scrollstart.enabled = true; }, 150 ); }, // Expose our cache for testing purposes. nsNormalizeDict: nsNormalizeDict, // Take a data attribute property, prepend the namespace // and then camel case the attribute string. Add the result // to our nsNormalizeDict so we don't have to do this again. nsNormalize: function( prop ) { if ( !prop ) { return; } return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) ); }, // Find the closest parent with a theme class on it. Note that // we are not using $.fn.closest() on purpose here because this // method gets called quite a bit and we need it to be as fast // as possible. getInheritedTheme: function( el, defaultTheme ) { var e = el[ 0 ], ltr = "", re = /ui-(bar|body|overlay)-([a-z])\b/, c, m; while ( e ) { c = e.className || ""; if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) { // We found a parent with a theme class // on it so bail from this loop. break; } e = e.parentNode; } // Return the theme letter we found, if none, return the // specified default. return ltr || defaultTheme || "a"; }, // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers // // Find the closest javascript page element to gather settings data jsperf test // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit // possibly naive, but it shows that the parsing overhead for *just* the page selector vs // the page and dialog selector is negligable. This could probably be speed up by // doing a similar parent node traversal to the one found in the inherited theme code above closestPageData: function( $target ) { return $target .closest( ':jqmData(role="page"), :jqmData(role="dialog")' ) .data( "mobile-page" ); }, enhanceable: function( $set ) { return this.haveParents( $set, "enhance" ); }, hijackable: function( $set ) { return this.haveParents( $set, "ajax" ); }, haveParents: function( $set, attr ) { if ( !$.mobile.ignoreContentEnabled ) { return $set; } var count = $set.length, $newSet = $(), e, $element, excluded; for ( var i = 0; i < count; i++ ) { $element = $set.eq( i ); excluded = false; e = $set[ i ]; while ( e ) { var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : ""; if ( c === "false" ) { excluded = true; break; } e = e.parentNode; } if ( !excluded ) { $newSet = $newSet.add( $element ); } } return $newSet; }, getScreenHeight: function() { // Native innerHeight returns more accurate value for this across platforms, // jQuery version is here as a normalized fallback for platforms like Symbian return window.innerHeight || $.mobile.window.height(); } }, $.mobile ); // Mobile version of data and removeData and hasData methods // ensures all data is set and retrieved using jQuery Mobile's data namespace $.fn.jqmData = function( prop, value ) { var result; if ( typeof prop !== "undefined" ) { if ( prop ) { prop = $.mobile.nsNormalize( prop ); } // undefined is permitted as an explicit input for the second param // in this case it returns the value and does not set it to undefined if( arguments.length < 2 || value === undefined ){ result = this.data( prop ); } else { result = this.data( prop, value ); } } return result; }; $.jqmData = function( elem, prop, value ) { var result; if ( typeof prop !== "undefined" ) { result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value ); } return result; }; $.fn.jqmRemoveData = /* * Copyright 2010-2011 Research In Motion Limited. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ (function() { navigationController = { SAFE_MARGIN : 30, SUPPRESS_NAVIGATION_INPUT_TYPES : '|checkbox|radio|button|', AUTO_FOCUS_INPUT_TYPES : '|color|date|month|time|week|email|number|password|search|text|url|tel|', SCROLLABLE_INPUT_TYPES : '|text|password|email|search|tel|number|url|', REQUIRE_CLICK_INPUT_TYPES : '|file|', querySelector : 'textarea:not([x-blackberry-focusable=false]),a:not([x-blackberry-focusable=false]),input:not([x-blackberry-focusable=false]), select:not([x-blackberry-focusable=false]), iframe:not([x-blackberry-focusable=false]), button:not([x-blackberry-focusable=false]), [x-blackberry-focusable=true]', DOWN : 3, UP : 2, RIGHT : 0, LEFT : 1, domDirty : false, // This is for use with BB5 only currentFocused : null, priorFocusedId : '', lastDirection : null, focusableNodes : [], // Scroll Data zoomScale : null, currentDirection : null, delta : null, virtualHeight : null, virtualWidth : null, verticalScroll : null, horizontalScroll : null, height : null, width : null, rangeNavigationOn : false, lastCaretPosition : 0, /* Sets the top mose focusable item as selected on first load of the page */ initialize : function(data) { // Prepend 'x-blackberry-' in front of these types to prevent browser from automatically displaying its UI on focus navigationController.changeInputNodeTypes(["date", "month", "time", "datetime", "datetime-local"]); // Initialize the scroll information navigationController.assignScrollData(data); navigationController.focusableNodes = navigationController.getFocusableElements(); // Figure out our safe margins /* * if (navigationController.device.isBB5() || * navigationController.device.isBB6()) { * navigationController.SAFE_MARGIN = 30; } else { * navigationController.SAFE_MARGIN = 50; } */ navigationController.SAFE_MARGIN = navigationController.height / 10; /* * Set our DOM Mutation events if it is BB5 to mark the DOM as dirty if * any elements were inserted or removed from the DOM */ if (navigationController.device.isBB5()) { addEventListener("DOMNodeInsertedIntoDocument", function() { navigationController.domDirty = true; }, true); addEventListener("DOMNodeRemovedFromDocument", function() { navigationController.domDirty = true; }, true); } // Find our first focusable item var initialItems = document.body.querySelectorAll('[x-blackberry-initialFocus=true]'); if (initialItems.length === 0) { navigationController.setRimFocus(navigationController.findHighestFocusableNodeInScreen()); } else { var nextFocusNode = initialItems[0]; if (!navigationController.isValidFocusableNode(nextFocusNode)) { nextFocusNode = null; } if (nextFocusNode !== null) { var result = navigationController.determineBoundingRect(nextFocusNode); var bounds = { 'element' : nextFocusNode, 'rect' : result.rect, 'scrollableParent' : result.scrollableParent }; navigationController.setRimFocus(bounds); } else { // Get the top most node navigationController.setRimFocus(navigationController.findHighestFocusableNodeInScreen()); } } }, changeInputNodeTypes : function(inputTypes) { var i, j, selector, nodes; for(i = 0; i < inputTypes.length; i++) { selector = "input[type=" + inputTypes[i] + "]"; nodes = document.querySelectorAll(selector); for(j = 0; j < nodes.length; j++) { nodes[j].type = "x-blackberry-" + inputTypes[i]; } } }, // Contains all device information device : { // Determine if this browser is BB5 isBB5 : function() { return navigator.appVersion.indexOf('5.0.0') >= 0; }, // Determine if this browser is BB6 isBB6 : function() { return navigator.appVersion.indexOf('6.0.0') >= 0; }, // Determine if this browser is BB7 isBB7 : function() { return navigator.appVersion.indexOf('7.0.0') >= 0; } }, // Assigns all the scrolling data assignScrollData : function(data) { navigationController.currentDirection = data.direction; navigationController.delta = data.delta; navigationController.zoomScale = data.zoomScale; navigationController.virtualHeight = data.virtualHeight; navigationController.virtualWidth = data.virtualWidth; navigationController.verticalScroll = data.verticalScroll; navigationController.horizontalScroll = data.horizontalScroll; navigationController.height = data.height; navigationController.width = data.width; }, /* returns the current scrolling direction */ getDirection : function() { return navigationController.currentDirection; }, /* Returns the current focused element's id */ getFocus : function() { if (navigationController.currentFocused === null) { return null; } else { return navigationController.currentFocused.element.getAttribute('id'); } }, /* Set's the focus to an element with the supplied id */ setFocus : function(id) { if (id.length === 0) { navigationController.focusOut(); return; } var nextFocusNode = null; nextFocusNode = document.getElementById(id); if (nextFocusNode !== null) { if (!navigationController.isValidFocusableNode(nextFocusNode)) { nextFocusNode = null; } } if (nextFocusNode !== null) { var result = navigationController.determineBoundingRect(nextFocusNode); var bounds = { 'element' : nextFocusNode, 'rect' : result.rect, 'scrollableParent' : result.scrollableParent }; navigationController.setRimFocus(bounds); } }, /* Returns the previously focused element's id */ getPriorFocus : function() { return navigationController.priorFocusedId; }, isScrollableElement : function(element) { if (element.tagName == 'TEXTAREA') { return true; } if (element.tagName == 'INPUT' && element.hasAttribute('type')) { var type = element.getAttribute('type').toLowerCase(); return navigationController.SCROLLABLE_INPUT_TYPES.indexOf(type) > 0; } return false; }, /* Handle scrolling the focus in the proper direction */ onScroll : function(data) { navigationController.assignScrollData(data); // If it is BB5 then don't re-calculate the bounding rects unless // the DOM is dirty // it's too much of a performance hit on BB5 to re-calculate each z7/* Ultimate Fade-in slideshow (v2.4) * Last updated: May 24th, 2010. This notice must stay intact for usage * Author: Dynamic Drive at http://www.dynamicdrive.com/ * Visit http://www.dynamicdrive.com/ for full source code */ //Oct 6th, 09' (v2.1): Adds option to randomize display order of images, via new option displaymode.randomize //May 24th, 10' (v2.4): Adds new "peakaboo" option to "descreveal" setting. oninit and onslide event handlers added. var fadeSlideShow_descpanel={ controls: [['img/x.png',7,7], ['img/restore.png',10,11], ['img/loading.gif',54,55]], //full URL and dimensions of close, restore, and loading images fontStyle: 'normal 11px Verdana', //font style for text descriptions slidespeed: 200 //speed of description panel animation (in millisec) } //No need to edit beyond here... //jQuery.noConflict() function fadeSlideShow(settingarg){ this.setting=settingarg settingarg=null var setting=this.setting setting.fadeduration=setting.fadeduration? parseInt(setting.fadeduration) : 500 setting.curimage=(setting.persist)? fadeSlideShow.routines.getCookie("gallery-"+setting.wrapperid) : 0 setting.curimage=setting.curimage || 0 //account for curimage being null if cookie is empty setting.currentstep=0 //keep track of # of slides slideshow has gone through (applicable in displaymode='auto' only) setting.totalsteps=setting.imagearray.length*(setting.displaymode.cycles>0? setting.displaymode.cycles : Infinity) //Total steps limit (applicable in displaymode='auto' only w/ cycles>0) setting.fglayer=0, setting.bglayer=1 //index of active and background layer (switches after each change of slide) setting.oninit=setting.oninit || function(){} setting.onslide=setting.onslide || function(){} if (setting.displaymode.randomize) //randomly shuffle order of images? setting.imagearray.sort(function() {return 0.5 - Math.random()}) var preloadimages=[] //preload images setting.longestdesc="" //get longest description of all slides. If no desciptions defined, variable contains "" for (var i=0; isetting.longestdesc.length) setting.longestdesc=setting.imagearray[i][3] } var closebutt=fadeSlideShow_descpanel.controls[0] //add close button to "desc" panel if descreveal="always" setting.closebutton=(setting.descreveal=="always")? '' : '' var slideshow=this $(document).ready(function(){ //fire on DOM ready var setting=slideshow.setting var fullhtml=fadeSlideShow.routines.getFullHTML(setting.imagearray) //get full HTML of entire slideshow setting.$wrapperdiv=$('#'+setting.wrapperid).css({position:'relative', visibility:'visible', background:'black', overflow:'hidden', width:setting.dimensions[0] + '%', height:setting.dimensions[1]}).empty() //main slideshow DIV if (setting.$wrapperdiv.length==0){ //if no wrapper DIV found alert("Error: DIV with ID \""+setting.wrapperid+"\" not found on page.") return } setting.$gallerylayers=$('
') //two stacked DIVs to display the actual slide .css({position:'absolute', left:0, top:0, width:'100%', height:'100%', background:'black'}) .appendTo(setting.$wrapperdiv) var $loadingimg=$('') .css({left:setting.dimensions[0]/2-fadeSlideShow_descpanel.controls[2][1]/2, top:setting.dimensions[1]/2-fadeSlideShow_descpanel.controls[2][2]}) //center loading gif .appendTo(setting.$wrapperdiv) var $curimage=setting.$gallerylayers.html(fullhtml).find('img').hide().eq(setting.curimage) //prefill both layers with entire slideshow content, hide all images, and return current image if (setting.longestdesc!="" && setting.descreveal!="none"){ //if at least one slide contains a description (versus feature is enabled but no descriptions defined) and descreveal not explicitly disabled fadeSlideShow.routines.adddescpanel($, setting) if (setting.descreveal=="always"){ //position desc panel so it's visible to begin with setting.$descpanel.css({top:setting.dimensions[1]-setting.panelheight}) setting.$descinner.click(function(e){ //asign click behavior to "close" icon if (e.target.className=="close"){ slideshow.showhidedescpanel('hide') } }) setting.$restorebutton.click(function(e){ //asign click behavior to "restore" icon slideshow.showhidedescpanel('show') $(this).css({visibility:'hidden'}) }) } else if (setting.descreveal=="ondemand"){ //display desc panel on demand (mouseover) setting.$wrapperdiv.bind('mouseenter', function(){slideshow.showhidedescpanel('show')}) setting.$wrapperdiv.bind('mouseleave', function(){slideshow.showhidedescpanel('hide')}) } } setting.$wrapperdiv.bind('mouseenter', function(){setting.ismouseover=true}) //pause slideshow mouseover setting.$wrapperdiv.bind('mouseleave', function(){setting.ismouseover=false}) if ($curimage.get(0).complete){ //accounf for IE not firing image.onload $loadingimg.hide() slideshow.paginateinit($) slideshow.showslide(setting.curimage) } else{ //initialize slideshow when first image has fully loaded $loadingimg.hide() slideshow.paginateinit($) $curimage.bind('load', function(){slideshow.showslide(setting.curimage)}) } setting.oninit.call(slideshow) //trigger oninit() event $(window).bind('unload', function(){ //clean up and persist if (slideshow.setting.persist) //remember last shown image's index fadeSlideShow.routines.setCookie("gallery-"+setting.wrapperid, setting.curimage) jQuery.each(slideshow.setting, function(k){ if (slideshow.setting[k] instanceof Array){ for (var i=0; i0? setting.curimage-1 : totalimages-1) : Math.min(keyword, totalimages-1) var $slideimage=setting.$gallerylayers.eq(setting.bglayer).find('img').hide().eq(imgindex).show() //hide all images except current one var imgdimensions=[$slideimage.width(), $slideimage.height()] //center align image $slideimage.css({marginLeft: (imgdimensions[0]>0 && imgdimensions[0]0 && imgdimensions[1]