IF YOU HAVE NOT ALREADY DONE SO, PLEASE DO VISIT THE BELOW PETITION AND SIGN FOR ELVIS’ BIRTHDAY TO BE MADE A NATIONAL HOLIDAY.
https://www.change.org/p/us-government-make-january-8th-elvis-presley-s-birthday-of-every-year-a-national-holiday?recruiter=11063340&utm_source=share_petition&utm_medium=email&utm_campaign=share_email_responsive
Choose who must hold the title of the king for 2016!
Elvis Presley – The King of Music 2015. All Hail The King!
PLEASE DON’T FORGET TO VISIT “THE KING OF MUSIC” POLLING SITE AND VOTE FOR ELVIS EVERY SINGLE DAY DURING 2016. WE SIMPLY CANNOT LET ANYONE ELSE CLAIM ELVIS’ RIGHTFUL TITLE. BELOW IS THE LINK TO THE SITE FOR VOTING:
http://thekingofmusic.com/
I vote every single day and I hope everyone who reads this will do so also for every day the rest of this year.
Lets make it happen again for this new year of 2016!
<<<<<<<<<<>>>>>>>>>>
MORE GOOD NEWS FOR 2015
Lets make it happen again for this new year of 2016!
The Song of Ages 2015 is Suspicious Minds – Elvis Presley.
Let’s all remember to vote every single day in 2016 for this same song again or any Elvis song which may be added to the list. Below is the link for voting for the new year.
http://songofages.com/
<<<<<<<<<<<>>>>>>>>>>
SATURDAY, JUNE 4, 2016
There are so many people all over the world whose hearts are sad and heavy today upon hearing of the death of Muhammad Ali and I am certainly one of those.
I have admired, respected and enjoyed him since way back in the days when he was starting out as Cassius Clay. Truly, he was THE GREATEST in the world of boxing and on the public stage of life.
I want to share something personal to me from Ali back 26 years ago in 1990. I wrote him a letter of appreciation and respect in October, 1989. I never had an address for him until then and wrote soon after I did see his address. The following February, 1990, I received an envelope from him. He had autographed my letter to him and thanked me for the “great letter”. He also drew a large heart on a sheet of his personal letterhead stationary with a note to me and his beautiful autograph. This was the only fan letter that I have ever written to a “living” public figure. I did not write to Elvis before 1977 because I knew he got so much mail and mine would be only one of a huge pile of mail. I waited until after he “died” to write to him. LOL
As we all know, Elvis and Ali were very good friends before 1977. In the second page of my letter, I told Ali that I was so happy that they had been friends and that I could certainly see why they became friends. My heart hurts for Jesse now because I know that he has so many happy memories of his time with Ali.
I want to share my autographed notes from Ali as my tribute to his memory. He was a shining example for all of humanity. A man who stood up for his principles and never backed down. My everlasting respect to his memory.
“Elvis Presley was the sweetest, most humble and nicest man you’d want to know.”
Muhammad Ali
Here is a video of Ali speaking, during an interview, about Elvis.
Muhamad Ali Talks About Elvis
Oron Ron Uploaded on Jul 10, 2011
www://www.youtube.com/watch?v=2RlYdbGax9A
<<<<<<<<<<>>>>>>>>>>
SUNDAY, JUNE 5, 2016
My friend, Elaine, shared this beautiful photo with me on Facebook. I thank her so much for showing this to me.
Guitar MAN from Facebook
<<<<<<<<<<>>>>>>>>>>
R.I.P Muhammad Ali
Published on Jun 3, 2016
“Elvis was my close personal friend. He came to my Deer Lake training camp about two years before he died. He told us he didn’t want nobody to bother us. He wanted peace and quiet and I gave him a cabin in my camp and nobody even knew it. When the cameras started watching me train, he was up on the hill sleeping in the cabin. Elvis had a robe made for me. I don’t admire nobody, but Elvis Presley was the sweetest, most humble and nicest man you’d want to know.”
Goodbye Ali, The Greatest of All Time
January 17, 1942 – June 3, 2016
www.youtube.com/watch?v=9O2PGtOfVUY&feature=youtu.be
<<<<<<<<<<>>>>>>>>>>>
MONDAY, JUNE 6, 2016
The below is from a page which I used to have on my site years ago:
Linda Hood Sigmon My Website | lindahoodsigmoncom l lindahoodsigmontruth// // <![CDATA[
/*!
* jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Sat Feb 13 22:33:48 2010 -0500
*/
(function( window, undefined ) {
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
// Map over jQuery in case of overwrite
_jQuery = window.jQueryWS,
// Map over the $ in case of overwrite
_$ = window.$,
// Use the correct document accordingly with window argument (sandbox)
document = window.document,
// A central reference to the root jQuery(document)
rootjQuery,
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*()[^>]*$|^#([w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#[.,]*$/,
// Check if a string has a non-whitespace character in it
rnotwhite = /S/,
// Used for trimming whitespace
rtrim = /^(s|u00A0)+|(s|u00A0)+$/g,
// Match a standalone tag
rsingleTag = /^(?:)?$/,
// Keep a UserAgent string for use with jQuery.browser
userAgent = navigator.userAgent,
// For matching the engine and version of the browser
browserMatch,
// Has the ready events already been bound?
readyBound = false,
// The functions to execute on DOM ready
readyList = [],
// The ready event handler
DOMContentLoaded,
// Save a reference to some core methods
toString = Object.prototype.toString,
hasOwnProperty = Object.prototype.hasOwnProperty,
push = Array.prototype.push,
slice = Array.prototype.slice,
indexOf = Array.prototype.indexOf;
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
var match, elem, ret, doc;
// Handle $(“”), $(null), or $(undefined)
if ( !selector ) {
return this;
}
// Handle $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
// The body element only exists once, optimize finding it
if ( selector === “body” && !context ) {
this.context = document;
this[0] = document.body;
this.selector = “body”;
this.length = 1;
return this;
}
// Handle HTML strings
if ( typeof selector === “string” ) {
// Are we dealing with HTML string or an ID?
match = quickExpr.exec( selector );
// Verify a match, and that no context was specified for #id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
doc = (context ? context.ownerDocument || context : document);
// If a single string is passed in and it’s a single tag
// just do a createElement and skip the rest
ret = rsingleTag.exec( selector );
if ( ret ) {
if ( jQuery.isPlainObject( context ) ) {
selector = [ document.createElement( ret[1] ) ];
jQuery.fn.attr.call( selector, context, true );
} else {
selector = [ doc.createElement( ret[1] ) ];
}
} else {
ret = buildFragment( [ match[1] ], [ doc ] );
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
}
return jQuery.merge( this, selector );
// HANDLE: $(“#id”)
} else {
elem = document.getElementById( match[2] );
if ( elem ) {
// Handle the case where IE and Opera return items
// by name instead of ID
if ( elem.id !== match[2] ) {
return rootjQuery.find( selector );
}
// Otherwise, we inject the element directly into the jQuery object
this.length = 1;
this[0] = elem;
}
this.context = document;
this.selector = selector;
return this;
}
// HANDLE: $(“TAG”)
} else if ( !context && /^w+$/.test( selector ) ) {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName( selector );
return jQuery.merge( this, selector );
// HANDLE: $(expr, $(…))
} else if ( !context || context.jquery ) {
return (context || rootjQuery).find( selector );
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
return jQuery( context ).find( selector );
}
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
if (selector.selector !== undefined) {
this.selector = selector.selector;
this.context = selector.context;
}
return jQuery.makeArray( selector, this );
},
// Start with an empty selector
selector: “”,
// The current version of jQuery being used
jquery: “1.4.2”,
// The default length of a jQuery object is 0
length: 0,
// The number of elements contained in the matched element set
size: function() {
return this.length;
},
toArray: function() {
return slice.call( this, 0 );
},
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num == null ?
// Return a ‘clean’ array
this.toArray() :
// Return just the object
( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
},
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery();
if ( jQuery.isArray( elems ) ) {
push.apply( ret, elems );
} else {
jQuery.merge( ret, elems );
}
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" ) {
ret.selector = this.selector + (this.selector ? " " : "") + selector;
} else if ( name ) {
ret.selector = this.selector + "." + name + "(" + selector + ")";
}
// Return the newly-formed element set
return ret;
},
// Execute a callback for every element in the matched set.
// (You can seed the arguments with an array of args, but this is
// only used internally.)
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
// If the DOM is already ready
if ( jQuery.isReady ) {
// Execute the function immediately
fn.call( document, jQuery );
// Otherwise, remember the function for later
} else if ( readyList ) {
// Add the function to the wait list
readyList.push( fn );
}
return this;
},
eq: function( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +i + 1 );
},
first: function() {
return this.eq( 0 );
},
last: function() {
return this.eq( -1 );
},
slice: function() {
return this.pushStack( slice.apply( this, arguments ),
"slice", slice.call(arguments).join(",") );
},
map: function( callback ) {
return this.pushStack( jQuery.map(this, function( elem, i ) {
return callback.call( elem, i, elem );
}));
},
end: function() {
return this.prevObject || jQuery(null);
},
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: [].sort,
splice: [].splice
};
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
// extend jQuery itself if only one argument is passed
if ( length === i ) {
target = this;
–i;
}
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
// Recurse if we're merging object literal values or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
: jQuery.isArray(copy) ? [] : {};
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
// Return the modified object
return target;
};
jQuery.extend({
noConflict: function( deep ) {
window.$ = _$;
if ( deep ) {
window.jQueryWS = _jQuery;
}
return jQuery;
},
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
// Handle when the DOM is ready
ready: function() {
// Make sure that the DOM is not already loaded
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 );
}
// Remember that the DOM is ready
jQuery.isReady = true;
// If there are functions bound, to execute
if ( readyList ) {
// Execute all of them
var fn, i = 0;
while ( (fn = readyList[ i++ ]) ) {
fn.call( document, jQuery );
}
// Reset the list of functions
readyList = null;
}
// Trigger any bound ready events
if ( jQuery.fn.triggerHandler ) {
jQuery( document ).triggerHandler( "ready" );
}
}
},
bindReady: function() {
if ( readyBound ) {
return;
}
readyBound = true;
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if ( document.readyState === "complete" ) {
return jQuery.ready();
}
// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", jQuery.ready, false );
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent( "onload", jQuery.ready );
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
}
},
// 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).
isFunction: function( obj ) {
return toString.call(obj) === "[object Function]";
},
isArray: function( obj ) {
return toString.call(obj) === "[object Array]";
},
isPlainObject: function( obj ) {
// Must be an Object.
// Because of IE, we also have to check the presence of the constructor property.
// Make sure that DOM nodes and window objects don't pass through, as well
if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
return false;
}
// Not own constructor property must be Object
if ( obj.constructor
&& !hasOwnProperty.call(obj, "constructor")
&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
var key;
for ( key in obj ) {}
return key === undefined || hasOwnProperty.call( obj, key );
},
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
},
error: function( msg ) {
throw msg;
},
parseJSON: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
}
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( /^[],:{}s]*$/.test(data.replace(/\(?:["\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\nr]*"|true|false|null|-?d+(?:.d*)?(?:[eE][+-]?d+)?/g, "]")
.replace(/(?:^|:|,)(?:s*[)+/g, "")) ) {
// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
window.JSON.parse( data ) :
(new Function("return " + data))();
} else {
jQuery.error( "Invalid JSON: " + data );
}
},
noop: function() {},
// Evalulates a script in a global context
globalEval: function( data ) {
if ( data && rnotwhite.test(data) ) {
// Inspired by code by Andrea Giammarchi
// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
var head = document.getElementsByTagName("head")[0] || document.documentElement,
script = document.createElement("script");
script.type = "text/javascript";
if ( jQuery.support.scriptEval ) {
script.appendChild( document.createTextNode( data ) );
} else {
script.text = data;
}
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
// This arises when a base node is used (#2709).
head.insertBefore( script, head.firstChild );
head.removeChild( script );
}
},
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
// args is for internal usage only
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction(object);
if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( var value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
}
}
return object;
},
trim: function( text ) {
return (text || "").replace( rtrim, "" );
},
// results is for internal usage only
makeArray: function( array, results ) {
var ret = results || [];
if ( array != null ) {
// The window, strings (and functions) also have 'length'
// The extra typeof function check is to prevent crashes
// in Safari 2 (See: #3039)
if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
push.call( ret, array );
} else {
jQuery.merge( ret, array );
}
}
return ret;
},
inArray: function( elem, array ) {
if ( array.indexOf ) {
return array.indexOf( elem );
}
for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;
}
}
return -1;
},
merge: function( first, second ) {
var i = first.length, j = 0;
if ( typeof second.length === "number" ) {
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}
first.length = i;
return first;
},
grep: function( elems, callback, inv ) {
var ret = [];
// Go through the array, only saving the items
// that pass the validator function
for ( var i = 0, length = elems.length; i < length; i++ ) {
if ( !inv !== !callback( elems[ i ], i ) ) {
ret.push( elems[ i ] );
}
}
return ret;
},
// arg is for internal usage only
map: function( elems, callback, arg ) {
var ret = [], value;
// Go through the array, translating each of the items to their
// new value (or values).
for ( var i = 0, length = elems.length; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret[ ret.length ] = value;
}
}
return ret.concat.apply( [], ret );
},
// A global GUID counter for objects
guid: 1,
proxy: function( fn, proxy, thisObject ) {
if ( arguments.length === 2 ) {
if ( typeof proxy === "string" ) {
thisObject = fn;
fn = thisObject[ proxy ];
proxy = undefined;
} else if ( proxy && !jQuery.isFunction( proxy ) ) {
thisObject = proxy;
proxy = undefined;
}
}
if ( !proxy && fn ) {
proxy = function() {
return fn.apply( thisObject || this, arguments );
};
}
// Set the guid of unique handler to the same of original handler, so it can be removed
if ( fn ) {
proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
}
// So proxy can be declared as an argument
return proxy;
},
// Use of jQuery.browser is frowned upon.
// More details: http://docs.jquery.com/Utilities/jQuery.browser
uaMatch: function( ua ) {
ua = ua.toLowerCase();
var match = /(webkit)[ /]([w.]+)/.exec( ua ) ||
/(opera)(?:.*version)?[ /]([w.]+)/.exec( ua ) ||
/(msie) ([w.]+)/.exec( ua ) ||
!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([w.]+))?/.exec( ua ) ||
[];
return { browser: match[1] || "", version: match[2] || "0" };
},
browser: {}
});
browserMatch = jQuery.uaMatch( userAgent );
if ( browserMatch.browser ) {
jQuery.browser[ browserMatch.browser ] = true;
jQuery.browser.version = browserMatch.version;
}
// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}
if ( indexOf ) {
jQuery.inArray = function( elem, array ) {
return indexOf.call( array, elem );
};
}
// All jQuery objects should point back to these
rootjQuery = jQuery(document);
// Cleanup functions for the document ready method
if ( document.addEventListener ) {
DOMContentLoaded = function() {
document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
jQuery.ready();
};
} else if ( document.attachEvent ) {
DOMContentLoaded = function() {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( document.readyState === "complete" ) {
document.detachEvent( "onreadystatechange", DOMContentLoaded );
jQuery.ready();
}
};
}
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch( error ) {
setTimeout( doScrollCheck, 1 );
return;
}
// and execute any waiting functions
jQuery.ready();
}
function evalScript( i, elem ) {
if ( elem.src ) {
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
} else {
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
}
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
// Mutifunctional method to get and set values to a collection
// The value/s can be optionally by executed if its a function
function access( elems, key, value, exec, fn, pass ) {
var length = elems.length;
// Setting many attributes
if ( typeof key === "object" ) {
for ( var k in key ) {
access( elems, k, key[k], exec, fn, value );
}
return elems;
}
// Setting one attribute
if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
exec = !pass && exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) {
fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
}
return elems;
}
// Getting an attribute
return length ? fn( elems[0], key ) : undefined;
}
function now() {
return (new Date).getTime();
}
(function() {
jQuery.support = {};
var root = document.documentElement,
script = document.createElement("script"),
div = document.createElement("div"),
id = "script" + now();
div.style.display = "none";
div.innerHTML = "
a“;
var all = div.getElementsByTagName(“*”),
a = div.getElementsByTagName(“a”)[0];
// Can’t get basic test support
if ( !all || !all.length || !a ) {
return;
}
jQuery.support = {
// IE strips leading whitespace when .innerHTML is used
leadingWhitespace: div.firstChild.nodeType === 3,
// Make sure that tbody elements aren’t automatically inserted
// IE will insert them into empty tables
tbody: !div.getElementsByTagName(“tbody”).length,
// Make sure that link elements get serialized correctly by innerHTML
// This requires a wrapper element in IE
htmlSerialize: !!div.getElementsByTagName(“link”).length,
// Get the style information from getAttribute
// (IE uses .cssText insted)
style: /red/.test( a.getAttribute(“style”) ),
// Make sure that URLs aren’t manipulated
// (IE normalizes it by default)
hrefNormalized: a.getAttribute(“href”) === “/a”,
// Make sure that element opacity exists
// (IE uses filter instead)
// Use a regex to work around a WebKit issue. See #5145
opacity: /^0.55$/.test( a.style.opacity ),
// Verify style float existence
// (IE uses styleFloat instead of cssFloat)
cssFloat: !!a.style.cssFloat,
// Make sure that if no value is specified for a checkbox
// that it defaults to “on”.
// (WebKit defaults to “” instead)
checkOn: div.getElementsByTagName(“input”)[0].value === “on”,
// 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)
optSelected: document.createElement(“select”).appendChild( document.createElement(“option”) ).selected,
parentNode: div.removeChild( div.appendChild( document.createElement(“div”) ) ).parentNode === null,
// Will be defined later
deleteExpando: true,
checkClone: false,
scriptEval: false,
noCloneEvent: true,
boxModel: null
};
script.type = “text/javascript”;
try {
script.appendChild( document.createTextNode( “window.” + id + “=1;” ) );
} catch(e) {}
root.insertBefore( script, root.firstChild );
// Make sure that the execution of code works by injecting a script
// tag with appendChild/createTextNode
// (IE doesn’t support this, fails, and uses .text instead)
if ( window[ id ] ) {
jQuery.support.scriptEval = true;
delete window[ id ];
}
// Test to see if it’s possible to delete an expando from an element
// Fails in Internet Explorer
try {
delete script.test;
} catch(e) {
jQuery.support.deleteExpando = false;
}
root.removeChild( script );
if ( div.attachEvent && div.fireEvent ) {
div.attachEvent(“onclick”, function click() {
// Cloning a node shouldn’t copy over any
// bound event handlers (IE does this)
jQuery.support.noCloneEvent = false;
div.detachEvent(“onclick”, click);
});
div.cloneNode(true).fireEvent(“onclick”);
}
div = document.createElement(“div”);
div.innerHTML = “”;
var fragment = document.createDocumentFragment();
fragment.appendChild( div.firstChild );
// WebKit doesn’t clone checked state correctly in fragments
jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
// Figure out if the W3C box model works as expected
// document.body must exist before we can do this
jQuery(function() {
var div = document.createElement(“div”);
div.style.width = div.style.paddingLeft = “1px”;
document.body.appendChild( div );
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
document.body.removeChild( div ).style.display = ‘none’;
div = null;
});
// Technique from Juriy Zaytsev
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
var eventSupported = function( eventName ) {
var el = document.createElement(“div”);
eventName = “on” + eventName;
var isSupported = (eventName in el);
if ( !isSupported ) {
el.setAttribute(eventName, “return;”);
isSupported = typeof el[eventName] === “function”;
}
el = null;
return isSupported;
};
jQuery.support.submitBubbles = eventSupported(“submit”);
jQuery.support.changeBubbles = eventSupported(“change”);
// release memory in IE
root = script = div = all = a = null;
})();
jQuery.props = {
“for”: “htmlFor”,
“class”: “className”,
readonly: “readOnly”,
maxlength: “maxLength”,
cellspacing: “cellSpacing”,
rowspan: “rowSpan”,
colspan: “colSpan”,
tabindex: “tabIndex”,
usemap: “useMap”,
frameborder: “frameBorder”
};
var expando = “jQuery” + now(), uuid = 0, windowData = {};
jQuery.extend({
cache: {},
expando:expando,
// The following elements throw uncatchable exceptions if you
// attempt to add expando properties to them.
noData: {
“embed”: true,
“object”: true,
“applet”: true
},
data: function( elem, name, data ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
return;
}
elem = elem == window ?
windowData :
elem;
var id = elem[ expando ], cache = jQuery.cache, thisCache;
if ( !id && typeof name === “string” && data === undefined ) {
return null;
}
// Compute a unique ID for the element
if ( !id ) {
id = ++uuid;
}
// Avoid generating a new cache unless none exists and we
// want to manipulate it.
if ( typeof name === “object” ) {
elem[ expando ] = id;
thisCache = cache[ id ] = jQuery.extend(true, {}, name);
} else if ( !cache[ id ] ) {
elem[ expando ] = id;
cache[ id ] = {};
}
thisCache = cache[ id ];
// Prevent overriding the named cache with undefined values
if ( data !== undefined ) {
thisCache[ name ] = data;
}
return typeof name === “string” ? thisCache[ name ] : thisCache;
},
removeData: function( elem, name ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
return;
}
elem = elem == window ?
windowData :
elem;
var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
// If we want to remove a specific section of the element’s data
if ( name ) {
if ( thisCache ) {
// Remove the section of cache data
delete thisCache[ name ];
// If we’ve removed all the data, remove the element’s cache
if ( jQuery.isEmptyObject(thisCache) ) {
jQuery.removeData( elem );
}
}
// Otherwise, we want to remove all of the element’s data
} else {
if ( jQuery.support.deleteExpando ) {
delete elem[ jQuery.expando ];
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
}
// Completely remove the data cache
delete cache[ id ];
}
}
});
jQuery.fn.extend({
data: function( key, value ) {
if ( typeof key === “undefined” && this.length ) {
return jQuery.data( this[0] );
} else if ( typeof key === “object” ) {
return this.each(function() {
jQuery.data( this, key );
});
}
var parts = key.split(“.”);
parts[1] = parts[1] ? “.” + parts[1] : “”;
if ( value === undefined ) {
var data = this.triggerHandler(“getData” + parts[1] + “!”, [parts[0]]);
if ( data === undefined && this.length ) {
data = jQuery.data( this[0], key );
}
return data === undefined && parts[1] ?
this.data( parts[0] ) :
data;
} else {
return this.trigger(“setData” + parts[1] + “!”, [parts[0], value]).each(function() {
jQuery.data( this, key, value );
});
}
},
removeData: function( key ) {
return this.each(function() {
jQuery.removeData( this, key );
});
}
});
jQuery.extend({
queue: function( elem, type, data ) {
if ( !elem ) {
return;
}
type = (type || “fx”) + “queue”;
var q = jQuery.data( elem, type );
// Speed up dequeue by getting out quickly if this is just a lookup
if ( !data ) {
return q || [];
}
if ( !q || jQuery.isArray(data) ) {
q = jQuery.data( elem, type, jQuery.makeArray(data) );
} else {
q.push( data );
}
return q;
},
dequeue: function( elem, type ) {
type = type || “fx”;
var queue = jQuery.queue( elem, type ), fn = queue.shift();
// If the fx queue is dequeued, always remove the progress sentinel
if ( fn === “inprogress” ) {
fn = queue.shift();
}
if ( fn ) {
// Add a progress sentinel to prevent the fx queue from being
// automatically dequeued
if ( type === “fx” ) {
queue.unshift(“inprogress”);
}
fn.call(elem, function() {
jQuery.dequeue(elem, type);
});
}
}
});
jQuery.fn.extend({
queue: function( type, data ) {
if ( typeof type !== “string” ) {
data = type;
type = “fx”;
}
if ( data === undefined ) {
return jQuery.queue( this[0], type );
}
return this.each(function( i, elem ) {
var queue = jQuery.queue( this, type, data );
if ( type === “fx” && queue[0] !== “inprogress” ) {
jQuery.dequeue( this, type );
}
});
},
dequeue: function( type ) {
return this.each(function() {
jQuery.dequeue( this, type );
});
},
// Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) {
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
type = type || “fx”;
return this.queue( type, function() {
var elem = this;
setTimeout(function() {
jQuery.dequeue( elem, type );
}, time );
});
},
clearQueue: function( type ) {
return this.queue( type || “fx”, [] );
}
});
var rclass = /[nt]/g,
rspace = /s+/,
rreturn = /r/g,
rspecialurl = /href|src|style/,
rtype = /(button|input)/i,
rfocusable = /(button|input|object|select|textarea)/i,
rclickable = /^(a|area)$/i,
rradiocheck = /radio|checkbox/;
jQuery.fn.extend({
attr: function( name, value ) {
return access( this, name, value, true, jQuery.attr );
},
removeAttr: function( name, fn ) {
return this.each(function(){
jQuery.attr( this, name, “” );
if ( this.nodeType === 1 ) {
this.removeAttribute( name );
}
});
},
addClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.addClass( value.call(this, i, self.attr(“class”)) );
});
}
if ( value && typeof value === “string” ) {
var classNames = (value || “”).split( rspace );
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
if ( elem.nodeType === 1 ) {
if ( !elem.className ) {
elem.className = value;
} else {
var className = " " + elem.className + " ", setClass = elem.className;
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
setClass += " " + classNames[c];
}
}
elem.className = jQuery.trim( setClass );
}
}
}
}
return this;
},
removeClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.removeClass( value.call(this, i, self.attr("class")) );
});
}
if ( (value && typeof value === "string") || value === undefined ) {
var classNames = (value || "").split(rspace);
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
if ( elem.nodeType === 1 && elem.className ) {
if ( value ) {
var className = (" " + elem.className + " ").replace(rclass, " ");
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " ");
}
elem.className = jQuery.trim( className );
} else {
elem.className = "";
}
}
}
}
return this;
},
toggleClass: function( value, stateVal ) {
var type = typeof value, isBool = typeof stateVal === "boolean";
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this);
self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
});
}
return this.each(function() {
if ( type === "string" ) {
// toggle individual class names
var className, i = 0, self = jQuery(this),
state = stateVal,
classNames = value.split( rspace );
while ( (className = classNames[ i++ ]) ) {
// check each className given, space seperated list
state = isBool ? state : !self.hasClass( className );
self[ state ? "addClass" : "removeClass" ]( className );
}
} else if ( type === "undefined" || type === "boolean" ) {
if ( this.className ) {
// store className if set
jQuery.data( this, "__className__", this.className );
}
// toggle whole className
this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
}
});
},
hasClass: function( selector ) {
var className = " " + selector + " ";
for ( var i = 0, l = this.length; i -1 ) {
return true;
}
}
return false;
},
val: function( value ) {
if ( value === undefined ) {
var elem = this[0];
if ( elem ) {
if ( jQuery.nodeName( elem, “option” ) ) {
return (elem.attributes.value || {}).specified ? elem.value : elem.text;
}
// We need to handle select boxes special
if ( jQuery.nodeName( elem, “select” ) ) {
var index = elem.selectedIndex,
values = [],
options = elem.options,
one = elem.type === “select-one”;
// Nothing was selected
if ( index < 0 ) {
return null;
}
// Loop through all the selected options
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i = 0;
} else if ( jQuery.nodeName( this, “select” ) ) {
var values = jQuery.makeArray(val);
jQuery( “option”, this ).each(function() {
this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
});
if ( !values.length ) {
this.selectedIndex = -1;
}
} else {
this.value = val;
}
});
}
});
jQuery.extend({
attrFn: {
val: true,
css: true,
html: true,
text: true,
data: true,
width: true,
height: true,
offset: true
},
attr: function( elem, name, value, pass ) {
// don’t set attributes on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
if ( pass && name in jQuery.attrFn ) {
return jQuery(elem)[name](value);
}
var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
// Whether we are setting (or getting)
set = value !== undefined;
// Try to normalize/fix the name
name = notxml && jQuery.props[ name ] || name;
// Only do all the following if this is a node (faster for style)
if ( elem.nodeType === 1 ) {
// These attributes require special treatment
var special = rspecialurl.test( name );
// Safari mis-reports the default selected property of an option
// Accessing the parent’s selectedIndex property fixes it
if ( name === “selected” && !jQuery.support.optSelected ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
// Make sure that it also works with optgroups, see #5701
if ( parent.parentNode ) {
parent.parentNode.selectedIndex;
}
}
}
// If applicable, access the attribute via the DOM 0 way
if ( name in elem && notxml && !special ) {
if ( set ) {
// We can’t allow the type property to be changed (since it causes problems in IE)
if ( name === “type” && rtype.test( elem.nodeName ) && elem.parentNode ) {
jQuery.error( “type property can’t be changed” );
}
elem[ name ] = value;
}
// 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;
}
// 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/
if ( name === “tabIndex” ) {
var attributeNode = elem.getAttributeNode( “tabIndex” );
return attributeNode && attributeNode.specified ?
attributeNode.value :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
}
return elem[ name ];
}
if ( !jQuery.support.style && notxml && name === “style” ) {
if ( set ) {
elem.style.cssText = “” + value;
}
return elem.style.cssText;
}
if ( set ) {
// convert the value to a string (all browsers do this but IE) see #1070
elem.setAttribute( name, “” + value );
}
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
// elem is actually elem.style … set the style
// Using attr for specific style information is now deprecated. Use style instead.
return jQuery.style( elem, name, value );
}
});
var rnamespaces = /.(.*)$/,
fcleanup = function( nm ) {
return nm.replace(/[^ws.|`]/g, function( ch ) {
return “\” + ch;
});
};
/*
* A number of helper functions used for managing events.
* Many of the ideas behind this code originated from
* Dean Edwards’ addEvent library.
*/
jQuery.event = {
// Bind an event to an element
// Original by Dean Edwards
add: function( elem, types, handler, data ) {
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
elem = window;
}
var handleObjIn, handleObj;
if ( handler.handler ) {
handleObjIn = handler;
handler = handleObjIn.handler;
}
// Make sure that the function being executed has a unique ID
if ( !handler.guid ) {
handler.guid = jQuery.guid++;
}
// Init the element’s event structure
var elemData = jQuery.data( elem );
// If no elemData is found then we must be trying to bind to one of the
// banned noData elements
if ( !elemData ) {
return;
}
var events = elemData.events = elemData.events || {},
eventHandle = elemData.handle, eventHandle;
if ( !eventHandle ) {
elemData.handle = eventHandle = function() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== “undefined” && !jQuery.event.triggered ?
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
};
}
// Add elem as a property of the handle function
// This is to prevent a memory leak with non-native events in IE.
eventHandle.elem = elem;
// Handle multiple events separated by a space
// jQuery(…).bind(“mouseover mouseout”, fn);
types = types.split(” “);
var type, i = 0, namespaces;
while ( (type = types[ i++ ]) ) {
handleObj = handleObjIn ?
jQuery.extend({}, handleObjIn) :
{ handler: handler, data: data };
// Namespaced event handlers
if ( type.indexOf(“.”) > -1 ) {
namespaces = type.split(“.”);
type = namespaces.shift();
handleObj.namespace = namespaces.slice(0).sort().join(“.”);
} else {
namespaces = [];
handleObj.namespace = “”;
}
handleObj.type = type;
handleObj.guid = handler.guid;
// Get the current list of functions bound to this event
var handlers = events[ type ],
special = jQuery.event.special[ type ] || {};
// Init the event handler queue
if ( !handlers ) {
handlers = events[ type ] = [];
// Check for a special event handler
// Only use addEventListener/attachEvent if the special
// events handler returns false
if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
// Bind the global event handler to the element
if ( elem.addEventListener ) {
elem.addEventListener( type, eventHandle, false );
} else if ( elem.attachEvent ) {
elem.attachEvent( “on” + type, eventHandle );
}
}
}
if ( special.add ) {
special.add.call( elem, handleObj );
if ( !handleObj.handler.guid ) {
handleObj.handler.guid = handler.guid;
}
}
// Add the function to the element’s handler list
handlers.push( handleObj );
// Keep track of which events have been used, for global triggering
jQuery.event.global[ type ] = true;
}
// Nullify elem to prevent memory leaks in IE
elem = null;
},
global: {},
// Detach an event or set of events from an element
remove: function( elem, types, handler, pos ) {
// don’t do events on text and comment nodes
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
elemData = jQuery.data( elem ),
events = elemData && elemData.events;
if ( !elemData || !events ) {
return;
}
// types is actually an event object here
if ( types && types.type ) {
handler = types.handler;
types = types.type;
}
// Unbind all events for the element
if ( !types || typeof types === “string” && types.charAt(0) === “.” ) {
types = types || “”;
for ( type in events ) {
jQuery.event.remove( elem, type + types );
}
return;
}
// Handle multiple events separated by a space
// jQuery(…).unbind(“mouseover mouseout”, fn);
types = types.split(” “);
while ( (type = types[ i++ ]) ) {
origType = type;
handleObj = null;
all = type.indexOf(“.”) < 0;
namespaces = [];
if ( !all ) {
// Namespaced event handlers
namespaces = type.split(".");
type = namespaces.shift();
namespace = new RegExp("(^|\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\.(?:.*\.)?") + "(\.|$)")
}
eventType = events[ type ];
if ( !eventType ) {
continue;
}
if ( !handler ) {
for ( var j = 0; j < eventType.length; j++ ) {
handleObj = eventType[ j ];
if ( all || namespace.test( handleObj.namespace ) ) {
jQuery.event.remove( elem, origType, handleObj.handler, j );
eventType.splice( j–, 1 );
}
}
continue;
}
special = jQuery.event.special[ type ] || {};
for ( var j = pos || 0; j = 0 ) {
event.type = type = type.slice(0, -1);
event.exclusive = true;
}
// Handle a global trigger
if ( !elem ) {
// Don’t bubble custom events when global (to avoid too much overhead)
event.stopPropagation();
// Only trigger if we’ve ever bound an event for it
if ( jQuery.event.global[ type ] ) {
jQuery.each( jQuery.cache, function() {
if ( this.events && this.events[type] ) {
jQuery.event.trigger( event, data, this.handle.elem );
}
});
}
}
// Handle triggering a single element
// don’t do events on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
// Clean up in case it is reused
event.result = undefined;
event.target = elem;
// Clone the incoming data, if any
data = jQuery.makeArray( data );
data.unshift( event );
}
event.currentTarget = elem;
// Trigger the event, it is assumed that “handle” is a function
var handle = jQuery.data( elem, “handle” );
if ( handle ) {
handle.apply( elem, data );
}
var parent = elem.parentNode || elem.ownerDocument;
// Trigger an inline bound script
try {
if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
if ( elem[ “on” + type ] && elem[ “on” + type ].apply( elem, data ) === false ) {
event.result = false;
}
}
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (e) {}
if ( !event.isPropagationStopped() && parent ) {
jQuery.event.trigger( event, data, parent, true );
} else if ( !event.isDefaultPrevented() ) {
var target = event.target, old,
isClick = jQuery.nodeName(target, “a”) && type === “click”,
special = jQuery.event.special[ type ] || {};
if ( (!special._default || special._default.call( elem, event ) === false) &&
!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
try {
if ( target[ type ] ) {
// Make sure that we don’t accidentally re-trigger the onFOO events
old = target[ “on” + type ];
if ( old ) {
target[ “on” + type ] = null;
}
jQuery.event.triggered = true;
target[ type ]();
}
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (e) {}
if ( old ) {
target[ “on” + type ] = old;
}
jQuery.event.triggered = false;
}
}
},
handle: function( event ) {
var all, handlers, namespaces, namespace, events;
event = arguments[0] = jQuery.event.fix( event || window.event );
event.currentTarget = this;
// Namespaced event handlers
all = event.type.indexOf(“.”) < 0 && !event.exclusive;
if ( !all ) {
namespaces = event.type.split(".");
event.type = namespaces.shift();
namespace = new RegExp("(^|\.)" + namespaces.slice(0).sort().join("\.(?:.*\.)?") + "(\.|$)");
}
var events = jQuery.data(this, "events"), handlers = events[ event.type ];
if ( events && handlers ) {
// Clone the handlers to prevent manipulation
handlers = handlers.slice(0);
for ( var j = 0, l = handlers.length; j -1 ?
jQuery.map( elem.options, function( elem ) {
return elem.selected;
}).join(“-“) :
“”;
} else if ( elem.nodeName.toLowerCase() === “select” ) {
val = elem.selectedIndex;
}
return val;
},
testChange = function testChange( e ) {
var elem = e.target, data, val;
if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
return;
}
data = jQuery.data( elem, “_change_data” );
val = getVal(elem);
// the current data will be also retrieved by beforeactivate
if ( e.type !== “focusout” || elem.type !== “radio” ) {
jQuery.data( elem, “_change_data”, val );
}
if ( data === undefined || val === data ) {
return;
}
if ( data != null || val ) {
e.type = “change”;
return jQuery.event.trigger( e, arguments[1], elem );
}
};
jQuery.event.special.change = {
filters: {
focusout: testChange,
click: function( e ) {
var elem = e.target, type = elem.type;
if ( type === “radio” || type === “checkbox” || elem.nodeName.toLowerCase() === “select” ) {
return testChange.call( this, e );
}
},
// Change has to be called before submit
// Keydown will be called before keypress, which is used in submit-event delegation
keydown: function( e ) {
var elem = e.target, type = elem.type;
if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== “textarea”) ||
(e.keyCode === 32 && (type === “checkbox” || type === “radio”)) ||
type === “select-multiple” ) {
return testChange.call( this, e );
}
},
// Beforeactivate happens also before the previous element is blurred
// with this event you can’t trigger a change event, but you can store
// information/focus[in] is not needed anymore
beforeactivate: function( e ) {
var elem = e.target;
jQuery.data( elem, “_change_data”, getVal(elem) );
}
},
setup: function( data, namespaces ) {
if ( this.type === “file” ) {
return false;
}
for ( var type in changeFilters ) {
jQuery.event.add( this, type + “.specialChange”, changeFilters[type] );
}
return formElems.test( this.nodeName );
},
teardown: function( namespaces ) {
jQuery.event.remove( this, “.specialChange” );
return formElems.test( this.nodeName );
}
};
changeFilters = jQuery.event.special.change.filters;
}
function trigger( type, elem, args ) {
args[0].type = type;
return jQuery.event.handle.apply( elem, args );
}
// Create “bubbling” focus and blur events
if ( document.addEventListener ) {
jQuery.each({ focus: “focusin”, blur: “focusout” }, function( orig, fix ) {
jQuery.event.special[ fix ] = {
setup: function() {
this.addEventListener( orig, handler, true );
},
teardown: function() {
this.removeEventListener( orig, handler, true );
}
};
function handler( e ) {
e = jQuery.event.fix( e );
e.type = fix;
return jQuery.event.handle.call( this, e );
}
});
}
jQuery.each([“bind”, “one”], function( i, name ) {
jQuery.fn[ name ] = function( type, data, fn ) {
// Handle object literals
if ( typeof type === “object” ) {
for ( var key in type ) {
this[ name ](key, data, type[key], fn);
}
return this;
}
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
var handler = name === “one” ? jQuery.proxy( fn, function( event ) {
jQuery( this ).unbind( event, handler );
return fn.apply( this, arguments );
}) : fn;
if ( type === “unload” && name !== “one” ) {
this.one( type, data, fn );
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.add( this[i], type, handler, data );
}
}
return this;
};
});
jQuery.fn.extend({
unbind: function( type, fn ) {
// Handle object literals
if ( typeof type === "object" && !type.preventDefault ) {
for ( var key in type ) {
this.unbind(key, type[key]);
}
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.remove( this[i], type, fn );
}
}
return this;
},
delegate: function( selector, types, data, fn ) {
return this.live( types, data, fn, selector );
},
undelegate: function( selector, types, fn ) {
if ( arguments.length === 0 ) {
return this.unbind( "live" );
} else {
return this.die( types, null, fn, selector );
}
},
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
});
},
triggerHandler: function( type, data ) {
if ( this[0] ) {
var event = jQuery.Event( type );
event.preventDefault();
event.stopPropagation();
jQuery.event.trigger( event, data, this[0] );
return event.result;
}
},
toggle: function( fn ) {
// Save reference to arguments for access in closure
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++ ] );
}
return this.click( jQuery.proxy( fn, function( event ) {
// Figure out which function to execute
var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
// Make sure that clicks stop
event.preventDefault();
// and execute the function
return args[ lastToggle ].apply( this, arguments ) || false;
}));
},
hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
}
});
var liveMap = {
focus: "focusin",
blur: "focusout",
mouseenter: "mouseover",
mouseleave: "mouseout"
};
jQuery.each(["live", "die"], function( i, name ) {
jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
var type, i = 0, match, namespaces, preType,
selector = origSelector || this.selector,
context = origSelector ? this : jQuery( this.context );
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
types = (types || "").split(" ");
while ( (type = types[ i++ ]) != null ) {
match = rnamespaces.exec( type );
namespaces = "";
if ( match ) {
namespaces = match[0];
type = type.replace( rnamespaces, "" );
}
if ( type === "hover" ) {
types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
continue;
}
preType = type;
if ( type === "focus" || type === "blur" ) {
types.push( liveMap[ type ] + namespaces );
type = type + namespaces;
} else {
type = (liveMap[ type ] || type) + namespaces;
}
if ( name === "live" ) {
// bind live handler
context.each(function(){
jQuery.event.add( this, liveConvert( type, selector ),
{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
});
} else {
// unbind live handler
context.unbind( liveConvert( type, selector ), fn );
}
}
return this;
}
});
function liveHandler( event ) {
var stop, elems = [], selectors = [], args = arguments,
related, match, handleObj, elem, j, i, l, data,
events = jQuery.data( this, "events" );
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
return;
}
event.liveFired = this;
var live = events.live.slice(0);
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
selectors.push( handleObj.selector );
} else {
live.splice( j–, 1 );
}
}
match = jQuery( event.target ).closest( selectors, event.currentTarget );
for ( i = 0, l = match.length; i < l; i++ ) {
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
if ( match[i].selector === handleObj.selector ) {
elem = match[i].elem;
related = null;
// Those two events require additional checking
if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
}
if ( !related || related !== elem ) {
elems.push({ elem: elem, handleObj: handleObj });
}
}
}
}
for ( i = 0, l = elems.length; i +~,([\]+)+|[>+~])(s*,s*)?((?:.|r|n)*)/g,
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
baseHasDuplicate = true;
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
// Thus far that includes Google Chrome.
[0, 0].sort(function(){
baseHasDuplicate = false;
return 0;
});
var Sizzle = function(selector, context, results, seed) {
results = results || [];
var origContext = context = context || document;
if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
return [];
}
if ( !selector || typeof selector !== “string” ) {
return results;
}
var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
soFar = selector;
// Reset the position of the chunker regexp (start from head)
while ( (chunker.exec(“”), m = chunker.exec(soFar)) !== null ) {
soFar = m[3];
parts.push( m[1] );
if ( m[2] ) {
extra = m[3];
break;
}
}
if ( parts.length > 1 && origPOS.exec( selector ) ) {
if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
set = posProcess( parts[0] + parts[1], context );
} else {
set = Expr.relative[ parts[0] ] ?
[ context ] :
Sizzle( parts.shift(), context );
while ( parts.length ) {
selector = parts.shift();
if ( Expr.relative[ selector ] ) {
selector += parts.shift();
}
set = posProcess( selector, set );
}
}
} else {
// Take a shortcut and set the context if the root selector is an ID
// (but not if it’ll be faster if the inner selector is an ID)
if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length – 1]) ) {
var ret = Sizzle.find( parts.shift(), context, contextXML );
context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
}
if ( context ) {
var ret = seed ?
{ 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;
if ( parts.length > 0 ) {
checkSet = makeArray(set);
} else {
prune = false;
}
while ( parts.length ) {
var cur = parts.pop(), pop = cur;
if ( !Expr.relative[ cur ] ) {
cur = “”;
} else {
pop = parts.pop();
}
if ( pop == null ) {
pop = context;
}
Expr.relative[ cur ]( checkSet, pop, contextXML );
}
} else {
checkSet = parts = [];
}
}
if ( !checkSet ) {
checkSet = set;
}
if ( !checkSet ) {
Sizzle.error( cur || selector );
}
if ( toString.call(checkSet) === “[object Array]” ) {
if ( !prune ) {
results.push.apply( results, checkSet );
} else if ( context && context.nodeType === 1 ) {
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] );
}
}
} else {
for ( var i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
results.push( set[i] );
}
}
}
} else {
makeArray( checkSet, results );
}
if ( extra ) {
Sizzle( extra, origContext, results, seed );
Sizzle.uniqueSort( results );
}
return results;
};
Sizzle.uniqueSort = function(results){
if ( sortOrder ) {
hasDuplicate = baseHasDuplicate;
results.sort(sortOrder);
if ( hasDuplicate ) {
for ( var i = 1; i < results.length; i++ ) {
if ( results[i] === results[i-1] ) {
results.splice(i–, 1);
}
}
}
}
return results;
};
Sizzle.matches = function(expr, set){
return Sizzle(expr, null, null, set);
};
Sizzle.find = function(expr, context, isXML){
var set, match;
if ( !expr ) {
return [];
}
for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
var type = Expr.order[i], match;
if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
var left = match[1];
match.splice(1,1);
if ( left.substr( left.length – 1 ) !== "\" ) {
match[1] = (match[1] || "").replace(/\/g, "");
set = Expr.find[ type ]( match, context, isXML );
if ( set != null ) {
expr = expr.replace( Expr.match[ type ], "" );
break;
}
}
}
}
if ( !set ) {
set = context.getElementsByTagName("*");
}
return {set: set, expr: expr};
};
Sizzle.filter = function(expr, set, inplace, not){
var old = expr, result = [], curLoop = set, match, anyFound,
isXMLFilter = set && set[0] && isXML(set[0]);
while ( expr && set.length ) {
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;
match.splice(1,1);
if ( left.substr( left.length – 1 ) === "\" ) {
continue;
}
if ( curLoop === result ) {
result = [];
}
if ( Expr.preFilter[ type ] ) {
match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
if ( !match ) {
anyFound = found = true;
} else if ( match === true ) {
continue;
}
}
if ( match ) {
for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
if ( item ) {
found = filter( item, match, i, curLoop );
var pass = not ^ !!found;
if ( inplace && found != null ) {
if ( pass ) {
anyFound = true;
} else {
curLoop[i] = false;
}
} else if ( pass ) {
result.push( item );
anyFound = true;
}
}
}
}
if ( found !== undefined ) {
if ( !inplace ) {
curLoop = result;
}
expr = expr.replace( Expr.match[ type ], "" );
if ( !anyFound ) {
return [];
}
break;
}
}
}
// Improper expression
if ( expr === old ) {
if ( anyFound == null ) {
Sizzle.error( expr );
} else {
break;
}
}
old = expr;
}
return curLoop;
};
Sizzle.error = function( msg ) {
throw "Syntax error, unrecognized expression: " + msg;
};
var Expr = Sizzle.selectors = {
order: [ "ID", "NAME", "TAG" ],
match: {
ID: /#((?:[wu00c0-uFFFF-]|\.)+)/,
CLASS: /.((?:[wu00c0-uFFFF-]|\.)+)/,
NAME: /[name=['"]*((?:[wu00c0-uFFFF-]|\.)+)['"]*]/,
ATTR: /[s*((?:[wu00c0-uFFFF-]|\.)+)s*(?:(S?=)s*(['"]*)(.*?)3|)s*]/,
TAG: /^((?:[wu00c0-uFFFF*-]|\.)+)/,
CHILD: /:(only|nth|last|first)-child(?:((even|odd|[dn+-]*)))?/,
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:((d*)))?(?=[^-]|$)/,
PSEUDO: /:((?:[wu00c0-uFFFF-]|\.)+)(?:((['"]?)((?:([^)]+)|[^()]*)+)2))?/
},
leftMatch: {},
attrMap: {
"class": "className",
"for": "htmlFor"
},
attrHandle: {
href: function(elem){
return elem.getAttribute("href");
}
},
relative: {
"+": function(checkSet, part){
var isPartStr = typeof part === "string",
isTag = isPartStr && !/W/.test(part),
isPartStrNotTag = isPartStr && !isTag;
if ( isTag ) {
part = part.toLowerCase();
}
for ( var i = 0, l = checkSet.length, elem; i “: function(checkSet, part){
var isPartStr = typeof part === “string”;
if ( isPartStr && !/W/.test(part) ) {
part = part.toLowerCase();
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
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];
if ( elem ) {
checkSet[i] = isPartStr ?
elem.parentNode :
elem.parentNode === part;
}
}
if ( isPartStr ) {
Sizzle.filter( part, checkSet, true );
}
}
},
"": function(checkSet, part, isXML){
var doneName = done++, checkFn = dirCheck;
if ( typeof part === "string" && !/W/.test(part) ) {
var nodeCheck = part = part.toLowerCase();
checkFn = dirNodeCheck;
}
checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
},
"~": function(checkSet, part, isXML){
var doneName = done++, checkFn = dirCheck;
if ( typeof part === "string" && !/W/.test(part) ) {
var nodeCheck = part = part.toLowerCase();
checkFn = dirNodeCheck;
}
checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
}
},
find: {
ID: function(match, context, isXML){
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
return m ? [m] : [];
}
},
NAME: function(match, context){
if ( typeof context.getElementsByName !== "undefined" ) {
var ret = [], results = context.getElementsByName(match[1]);
for ( var i = 0, l = results.length; i = 0) ) {
if ( !inplace ) {
result.push( elem );
}
} else if ( inplace ) {
curLoop[i] = false;
}
}
}
return false;
},
ID: function(match){
return match[1].replace(/\/g, “”);
},
TAG: function(match, curLoop){
return match[1].toLowerCase();
},
CHILD: function(match){
if ( match[1] === “nth” ) {
// parse equations like ‘even’, ‘odd’, ‘5’, ‘2n’, ‘3n+2’, ‘4n-1’, ‘-n+6’
var test = /(-?)(d*)n((?:+|-)?d*)/.exec(
match[2] === “even” && “2n” || match[2] === “odd” && “2n+1” ||
!/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;
}
// TODO: Move to normal caching system
match[0] = done++;
return match;
},
ATTR: function(match, curLoop, inplace, result, not, isXML){
var name = match[1].replace(/\/g, “”);
if ( !isXML && Expr.attrMap[name] ) {
match[1] = Expr.attrMap[name];
}
if ( match[2] === “~=” ) {
match[4] = ” ” + match[4] + ” “;
}
return match;
},
PSEUDO: function(match, curLoop, inplace, result, not){
if ( match[1] === “not” ) {
// If we’re dealing with a complex expression, or a simple one
if ( ( chunker.exec(match[3]) || “” ).length > 1 || /^w/.test(match[3]) ) {
match[3] = Sizzle(match[3], null, null, curLoop);
} else {
var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
if ( !inplace ) {
result.push.apply( result, ret );
}
return false;
}
} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
return true;
}
return match;
},
POS: function(match){
match.unshift( true );
return match;
}
},
filters: {
enabled: function(elem){
return elem.disabled === false && elem.type !== “hidden”;
},
disabled: function(elem){
return elem.disabled === true;
},
checked: function(elem){
return elem.checked === true;
},
selected: function(elem){
// Accessing this property makes selected-by-default
// options in Safari work properly
elem.parentNode.selectedIndex;
return elem.selected === true;
},
parent: function(elem){
return !!elem.firstChild;
},
empty: function(elem){
return !elem.firstChild;
},
has: function(elem, i, match){
return !!Sizzle( match[3], elem ).length;
},
header: function(elem){
return /hd/i.test( elem.nodeName );
},
text: function(elem){
return “text” === elem.type;
},
radio: function(elem){
return “radio” === elem.type;
},
checkbox: function(elem){
return “checkbox” === elem.type;
},
file: function(elem){
return “file” === elem.type;
},
password: function(elem){
return “password” === elem.type;
},
submit: function(elem){
return “submit” === elem.type;
},
image: function(elem){
return “image” === elem.type;
},
reset: function(elem){
return “reset” === elem.type;
},
button: function(elem){
return “button” === elem.type || elem.nodeName.toLowerCase() === “button”;
},
input: function(elem){
return /input|select|textarea|button/i.test(elem.nodeName);
}
},
setFilters: {
first: function(elem, i){
return i === 0;
},
last: function(elem, i, match, array){
return i === array.length – 1;
},
even: function(elem, i){
return i % 2 === 0;
},
odd: function(elem, i){
return i % 2 === 1;
},
lt: function(elem, i, match){
return i match[3] – 0;
},
nth: function(elem, i, match){
return match[3] – 0 === i;
},
eq: function(elem, i, match){
return match[3] – 0 === i;
}
},
filter: {
PSEUDO: function(elem, match, i, array){
var name = match[1], filter = Expr.filters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
} else if ( name === “contains” ) {
return (elem.textContent || elem.innerText || getText([ elem ]) || “”).indexOf(match[3]) >= 0;
} else if ( name === “not” ) {
var not = match[3];
for ( var i = 0, l = not.length; i = 0 );
}
}
},
ID: function(elem, match){
return elem.nodeType === 1 && elem.getAttribute(“id”) === match;
},
TAG: function(elem, match){
return (match === “*” && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
},
CLASS: function(elem, match){
return (” ” + (elem.className || elem.getAttribute(“class”)) + ” “)
.indexOf( match ) > -1;
},
ATTR: function(elem, match){
var name = match[1],
result = Expr.attrHandle[ name ] ?
Expr.attrHandle[ name ]( elem ) :
elem[ name ] != null ?
elem[ name ] :
elem.getAttribute( name ),
value = result + “”,
type = match[2],
check = match[4];
return result == null ?
type === “!=” :
type === “=” ?
value === check :
type === “*=” ?
value.indexOf(check) >= 0 :
type === “~=” ?
(” ” + value + ” “).indexOf(check) >= 0 :
!check ?
value && result !== false :
type === “!=” ?
value !== check :
type === “^=” ?
value.indexOf(check) === 0 :
type === “$=” ?
value.substr(value.length – check.length) === check :
type === “|=” ?
value === check || value.substr(0, check.length + 1) === check + “-” :
false;
},
POS: function(elem, match, i, array){
var name = match[2], filter = Expr.setFilters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
}
}
}
};
var origPOS = Expr.match.POS;
for ( var type in Expr.match ) {
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){
return “\” + (num – 0 + 1);
}));
}
var makeArray = function(array, results) {
array = Array.prototype.slice.call( array, 0 );
if ( results ) {
results.push.apply( results, array );
return results;
}
return array;
};
// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
// Also verifies that the returned array holds DOM nodes
// (which is not the case in the Blackberry browser)
try {
Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
// Provide a fallback method if it does not work
} catch(e){
makeArray = function(array, results) {
var ret = results || [];
if ( toString.call(array) === “[object Array]” ) {
Array.prototype.push.apply( ret, array );
} else {
if ( typeof array.length === “number” ) {
for ( var i = 0, l = array.length; i < l; i++ ) {
ret.push( array[i] );
}
} else {
for ( var i = 0; array[i]; i++ ) {
ret.push( array[i] );
}
}
}
return ret;
};
}
var sortOrder;
if ( document.documentElement.compareDocumentPosition ) {
sortOrder = function( a, b ) {
if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
if ( a == b ) {
hasDuplicate = true;
}
return a.compareDocumentPosition ? -1 : 1;
}
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
if ( ret === 0 ) {
hasDuplicate = true;
}
return ret;
};
} else if ( "sourceIndex" in document.documentElement ) {
sortOrder = function( a, b ) {
if ( !a.sourceIndex || !b.sourceIndex ) {
if ( a == b ) {
hasDuplicate = true;
}
return a.sourceIndex ? -1 : 1;
}
var ret = a.sourceIndex – b.sourceIndex;
if ( ret === 0 ) {
hasDuplicate = true;
}
return ret;
};
} else if ( document.createRange ) {
sortOrder = function( a, b ) {
if ( !a.ownerDocument || !b.ownerDocument ) {
if ( a == b ) {
hasDuplicate = true;
}
return a.ownerDocument ? -1 : 1;
}
var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
aRange.setStart(a, 0);
aRange.setEnd(a, 0);
bRange.setStart(b, 0);
bRange.setEnd(b, 0);
var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
if ( ret === 0 ) {
hasDuplicate = true;
}
return ret;
};
}
// Utility function for retreiving the text value of an array of DOM nodes
function getText( elems ) {
var ret = "", elem;
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
ret += elem.nodeValue;
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
ret += getText( elem.childNodes );
}
}
return ret;
}
// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
// We're going to inject a fake input element with a specified name
var form = document.createElement("div"),
id = "script" + (new Date).getTime();
form.innerHTML = "“;
// Inject it into the root element, check its status, and remove it quickly
var root = document.documentElement;
root.insertBefore( form, root.firstChild );
// The workaround has to do additional checks after a getElementById
// Which slows things down for other browsers (hence the branching)
if ( document.getElementById( id ) ) {
Expr.find.ID = function(match, context, isXML){
if ( typeof context.getElementById !== “undefined” && !isXML ) {
var m = context.getElementById(match[1]);
return m ? m.id === match[1] || typeof m.getAttributeNode !== “undefined” && m.getAttributeNode(“id”).nodeValue === match[1] ? [m] : undefined : [];
}
};
Expr.filter.ID = function(elem, match){
var node = typeof elem.getAttributeNode !== “undefined” && elem.getAttributeNode(“id”);
return elem.nodeType === 1 && node && node.nodeValue === match;
};
}
root.removeChild( form );
root = form = null; // release memory in IE
})();
(function(){
// Check to see if the browser returns only elements
// when doing getElementsByTagName(“*”)
// Create a fake element
var div = document.createElement(“div”);
div.appendChild( document.createComment(“”) );
// Make sure no comments are found
if ( div.getElementsByTagName(“*”).length > 0 ) {
Expr.find.TAG = function(match, context){
var results = context.getElementsByTagName(match[1]);
// Filter out possible comments
if ( match[1] === “*” ) {
var tmp = [];
for ( var i = 0; results[i]; i++ ) {
if ( results[i].nodeType === 1 ) {
tmp.push( results[i] );
}
}
results = tmp;
}
return results;
};
}
// Check to see if an attribute returns normalized href attributes
div.innerHTML = ““;
if ( div.firstChild && typeof div.firstChild.getAttribute !== “undefined” &&
div.firstChild.getAttribute(“href”) !== “#” ) {
Expr.attrHandle.href = function(elem){
return elem.getAttribute(“href”, 2);
};
}
div = null; // release memory in IE
})();
if ( document.querySelectorAll ) {
(function(){
var oldSizzle = Sizzle, div = document.createElement(“div”);
div.innerHTML = ”
“;
// Safari can’t handle uppercase or unicode characters when
// in quirks mode.
if ( div.querySelectorAll && div.querySelectorAll(“.TEST”).length === 0 ) {
return;
}
Sizzle = function(query, context, extra, seed){
context = context || document;
// Only use querySelectorAll on non-XML documents
// (ID selectors don’t work in non-HTML documents)
if ( !seed && context.nodeType === 9 && !isXML(context) ) {
try {
return makeArray( context.querySelectorAll(query), extra );
} catch(e){}
}
return oldSizzle(query, context, extra, seed);
};
for ( var prop in oldSizzle ) {
Sizzle[ prop ] = oldSizzle[ prop ];
}
div = null; // release memory in IE
})();
}
(function(){
var div = document.createElement(“div”);
div.innerHTML = ”
“;
// Opera can’t find a second classname (in 9.6)
// Also, make sure that getElementsByClassName actually exists
if ( !div.getElementsByClassName || div.getElementsByClassName(“e”).length === 0 ) {
return;
}
// Safari caches class attributes, doesn’t catch changes (in 3.2)
div.lastChild.className = “e”;
if ( div.getElementsByClassName(“e”).length === 1 ) {
return;
}
Expr.order.splice(1, 0, “CLASS”);
Expr.find.CLASS = function(match, context, isXML) {
if ( typeof context.getElementsByClassName !== “undefined” && !isXML ) {
return context.getElementsByClassName(match[1]);
}
};
div = null; // release memory in IE
})();
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
elem = elem[dir];
var match = false;
while ( elem ) {
if ( elem.sizcache === doneName ) {
match = checkSet[elem.sizset];
break;
}
if ( elem.nodeType === 1 && !isXML ){
elem.sizcache = doneName;
elem.sizset = i;
}
if ( elem.nodeName.toLowerCase() === cur ) {
match = elem;
break;
}
elem = elem[dir];
}
checkSet[i] = match;
}
}
}
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i 0 ) {
match = elem;
break;
}
}
elem = elem[dir];
}
checkSet[i] = match;
}
}
}
var contains = document.compareDocumentPosition ? function(a, b){
return !!(a.compareDocumentPosition(b) & 16);
} : function(a, b){
return a !== b && (a.contains ? a.contains(b) : true);
};
var isXML = function(elem){
// documentElement is verified for cases where it doesn’t yet exist
// (such as loading iframes in IE – #4833)
var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
return documentElement ? documentElement.nodeName !== “HTML” : false;
};
var posProcess = function(selector, context){
var tmpSet = [], later = “”, match,
root = context.nodeType ? [context] : context;
// Position selectors must be done after the filter
// And so must :not(positional) so we move all PSEUDOs to the end
while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
later += match[0];
selector = selector.replace( Expr.match.PSEUDO, “” );
}
selector = Expr.relative[selector] ? selector + “*” : selector;
for ( var i = 0, l = root.length; i = 0) === keep;
});
};
jQuery.fn.extend({
find: function( selector ) {
var ret = this.pushStack( “”, “find”, selector ), length = 0;
for ( var i = 0, l = this.length; i 0 ) {
// Make sure that the results are unique
for ( var n = length; n < ret.length; n++ ) {
for ( var r = 0; r < length; r++ ) {
if ( ret[r] === ret[n] ) {
ret.splice(n–, 1);
break;
}
}
}
}
}
return ret;
},
has: function( target ) {
var targets = jQuery( target );
return this.filter(function() {
for ( var i = 0, l = targets.length; i 0;
},
closest: function( selectors, context ) {
if ( jQuery.isArray( selectors ) ) {
var ret = [], cur = this[0], match, matches = {}, selector;
if ( cur && selectors.length ) {
for ( var i = 0, l = selectors.length; i -1 : jQuery(cur).is(match) ) {
ret.push({ selector: selector, elem: cur });
delete matches[selector];
}
}
cur = cur.parentNode;
}
}
return ret;
}
var pos = jQuery.expr.match.POS.test( selectors ) ?
jQuery( selectors, context || this.context ) : null;
return this.map(function( i, cur ) {
while ( cur && cur.ownerDocument && cur !== context ) {
if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
return cur;
}
cur = cur.parentNode;
}
return null;
});
},
// Determine the position of an element within
// the matched set of elements
index: function( elem ) {
if ( !elem || typeof elem === “string” ) {
return jQuery.inArray( this[0],
// If it receives a string, the selector is used
// If it receives nothing, the siblings are used
elem ? jQuery( elem ) : this.parent().children() );
}
// Locate the position of the desired element
return jQuery.inArray(
// If it receives a jQuery object, the first element is used
elem.jquery ? elem[0] : elem, this );
},
add: function( selector, context ) {
var set = typeof selector === “string” ?
jQuery( selector, context || this.context ) :
jQuery.makeArray( selector ),
all = jQuery.merge( this.get(), set );
return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
all :
jQuery.unique( all ) );
},
andSelf: function() {
return this.add( this.prevObject );
}
});
// A painfully simple check to see if an element is disconnected
// from a document (should be improved, where feasible).
function isDisconnected( node ) {
return !node || !node.parentNode || node.parentNode.nodeType === 11;
}
jQuery.each({
parent: function( elem ) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function( elem ) {
return jQuery.dir( elem, “parentNode” );
},
parentsUntil: function( elem, i, until ) {
return jQuery.dir( elem, “parentNode”, until );
},
next: function( elem ) {
return jQuery.nth( elem, 2, “nextSibling” );
},
prev: function( elem ) {
return jQuery.nth( elem, 2, “previousSibling” );
},
nextAll: function( elem ) {
return jQuery.dir( elem, “nextSibling” );
},
prevAll: function( elem ) {
return jQuery.dir( elem, “previousSibling” );
},
nextUntil: function( elem, i, until ) {
return jQuery.dir( elem, “nextSibling”, until );
},
prevUntil: function( elem, i, until ) {
return jQuery.dir( elem, “previousSibling”, until );
},
siblings: function( elem ) {
return jQuery.sibling( elem.parentNode.firstChild, elem );
},
children: function( elem ) {
return jQuery.sibling( elem.firstChild );
},
contents: function( elem ) {
return jQuery.nodeName( elem, “iframe” ) ?
elem.contentDocument || elem.contentWindow.document :
jQuery.makeArray( elem.childNodes );
}
}, function( name, fn ) {
jQuery.fn[ name ] = function( until, selector ) {
var ret = jQuery.map( this, fn, until );
if ( !runtil.test( name ) ) {
selector = until;
}
if ( selector && typeof selector === “string” ) {
ret = jQuery.filter( selector, ret );
}
ret = this.length > 1 ? jQuery.unique( ret ) : ret;
if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
ret = ret.reverse();
}
return this.pushStack( ret, name, slice.call(arguments).join(“,”) );
};
});
jQuery.extend({
filter: function( expr, elems, not ) {
if ( not ) {
expr = “:not(” + expr + “)”;
}
return jQuery.find.matches(expr, elems);
},
dir: function( elem, dir, until ) {
var matched = [], cur = elem[dir];
while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
if ( cur.nodeType === 1 ) {
matched.push( cur );
}
cur = cur[dir];
}
return matched;
},
nth: function( cur, result, dir, elem ) {
result = result || 1;
var num = 0;
for ( ; cur; cur = cur[dir] ) {
if ( cur.nodeType === 1 && ++num === result ) {
break;
}
}
return cur;
},
sibling: function( n, elem ) {
var r = [];
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
r.push( n );
}
}
return r;
}
});
var rinlinejQuery = / jQueryd+=”(?:d+|null)”/g,
rleadingWhitespace = /^s+/,
rxhtmlTag = /(]*?)/>/g,
rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
rtagName = /<([w:]+)/,
rtbody = /
<tbody/i,
rhtml = /<|&#?w+;/,
rnocache = /<script|<object|<embed|
<option|
“;
},
wrapMap = {
option: [ 1, “”, ”
” ],
legend: [ 1, ”
“, ”
” ],
thead: [ 1, ”
” ],
tr: [ 2, ”
” ],
td: [ 3, ”
” ],
col: [ 2, ”
” ],
area: [ 1, ”
” ],
_default: [ 0, “”, “” ]
};
wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
// IE can’t serialize
and tags normally
if ( !jQuery.support.htmlSerialize ) {
wrapMap._default = [ 1, “div
” ];
}
jQuery.fn.extend({
text: function( text ) {
if ( jQuery.isFunction(text) ) {
return this.each(function(i) {
var self = jQuery(this);
self.text( text.call(this, i, self.text()) );
});
}
if ( typeof text !== “object” && text !== undefined ) {
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
}
return jQuery.text( this );
},
wrapAll: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapAll( html.call(this, i) );
});
}
if ( this[0] ) {
// The elements to wrap the target around
var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
if ( this[0].parentNode ) {
wrap.insertBefore( this[0] );
}
wrap.map(function() {
var elem = this;
while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
elem = elem.firstChild;
}
return elem;
}).append(this);
}
return this;
},
wrapInner: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapInner( html.call(this, i) );
});
}
return this.each(function() {
var self = jQuery( this ), contents = self.contents();
if ( contents.length ) {
contents.wrapAll( html );
} else {
self.append( html );
}
});
},
wrap: function( html ) {
return this.each(function() {
jQuery( this ).wrapAll( html );
});
},
unwrap: function() {
return this.parent().each(function() {
if ( !jQuery.nodeName( this, “body” ) ) {
jQuery( this ).replaceWith( this.childNodes );
}
}).end();
},
append: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.appendChild( elem );
}
});
},
prepend: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.insertBefore( elem, this.firstChild );
}
});
},
before: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this );
});
} else if ( arguments.length ) {
var set = jQuery(arguments[0]);
set.push.apply( set, this.toArray() );
return this.pushStack( set, “before”, arguments );
}
},
after: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this.nextSibling );
});
} else if ( arguments.length ) {
var set = this.pushStack( this, “after”, arguments );
set.push.apply( set, jQuery(arguments[0]).toArray() );
return set;
}
},
// keepData is for internal use only–do not document
remove: function( selector, keepData ) {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName(“*”) );
jQuery.cleanData( [ elem ] );
}
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
}
return this;
},
empty: function() {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
// Remove element nodes and prevent memory leaks
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName(“*”) );
}
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild );
}
}
return this;
},
clone: function( events ) {
// Do the clone
var ret = this.map(function() {
if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
// IE copies events bound via attachEvent when
// using cloneNode. Calling detachEvent on the
// clone will also remove the events from the orignal
// In order to get around this, we use innerHTML.
// 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).
var html = this.outerHTML, ownerDocument = this.ownerDocument;
if ( !html ) {
var div = ownerDocument.createElement(“div”);
div.appendChild( this.cloneNode(true) );
html = div.innerHTML;
}
return jQuery.clean([html.replace(rinlinejQuery, “”)
// Handle the case in IE 8 where action=/test/> self-closes a tag
.replace(/=([^=”‘>s]+/)>/g, ‘=”$1″>’)
.replace(rleadingWhitespace, “”)], ownerDocument)[0];
} else {
return this.cloneNode(true);
}
});
// Copy the events from the original to the clone
if ( events === true ) {
cloneCopyEvent( this, ret );
cloneCopyEvent( this.find(“*”), ret.find(“*”) );
}
// Return the cloned set
return ret;
},
html: function( value ) {
if ( value === undefined ) {
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, “”) :
null;
// See if we can take a shortcut and just use innerHTML
} else if ( typeof value === “string” && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || [“”, “”])[1].toLowerCase() ] ) {
value = value.replace(rxhtmlTag, fcloseTag);
try {
for ( var i = 0, l = this.length; i < l; i++ ) {
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) {
jQuery.cleanData( this[i].getElementsByTagName("*") );
this[i].innerHTML = value;
}
}
// If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value );
}
} else if ( jQuery.isFunction( value ) ) {
this.each(function(i){
var self = jQuery(this), old = self.html();
self.empty().append(function(){
return value.call( this, i, old );
});
});
} else {
this.empty().append( value );
}
return this;
},
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 elements
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this), old = self.html();
self.replaceWith( value.call( this, i, old ) );
});
}
if ( typeof value !== "string" ) {
value = jQuery(value).detach();
}
return this.each(function() {
var next = this.nextSibling, parent = this.parentNode;
jQuery(this).remove();
if ( next ) {
jQuery(next).before( value );
} else {
jQuery(parent).append( value );
}
});
} else {
return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
}
},
detach: function( selector ) {
return this.remove( selector, true );
},
domManip: function( args, table, callback ) {
var results, first, value = args[0], scripts = [], fragment, parent;
// We can't cloneNode fragments that contain checked, in WebKit
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
return this.each(function() {
jQuery(this).domManip( args, table, callback, true );
});
}
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
args[0] = value.call(this, i, table ? self.html() : undefined);
self.domManip( args, table, callback );
});
}
if ( this[0] ) {
parent = value && value.parentNode;
// If we're in a fragment, just use that instead of building a new one
if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
results = { fragment: parent };
} else {
results = buildFragment( args, this, scripts );
}
fragment = results.fragment;
if ( fragment.childNodes.length === 1 ) {
first = fragment = fragment.firstChild;
} else {
first = fragment.firstChild;
}
if ( first ) {
table = table && jQuery.nodeName( first, "tr" );
for ( var i = 0, l = this.length; i 0 || results.cacheable || this.length > 1 ?
fragment.cloneNode(true) :
fragment
);
}
}
if ( scripts.length ) {
jQuery.each( scripts, evalScript );
}
}
return this;
function root( elem, cur ) {
return jQuery.nodeName(elem, “table”) ?
(elem.getElementsByTagName(“tbody”)[0] ||
elem.appendChild(elem.ownerDocument.createElement(“tbody”))) :
elem;
}
}
});
function cloneCopyEvent(orig, ret) {
var i = 0;
ret.each(function() {
if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
return;
}
var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
if ( events ) {
delete curData.handle;
curData.events = {};
for ( var type in events ) {
for ( var handler in events[ type ] ) {
jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
}
}
}
});
}
function buildFragment( args, nodes, scripts ) {
var fragment, cacheable, cacheresults,
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
// Only cache “small” (1/2 KB) strings that are associated with the main document
// Cloning options loses the selected state, so don’t cache them
// IE 6 doesn’t like it when you put or elements in a fragment
// Also, WebKit does not clone ‘checked’ attributes on cloneNode, so don’t cache
if ( args.length === 1 && typeof args[0] === “string” && args[0].length < 512 && doc === document &&
!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
cacheable = true;
cacheresults = jQuery.fragments[ args[0] ];
if ( cacheresults ) {
if ( cacheresults !== 1 ) {
fragment = cacheresults;
}
}
}
if ( !fragment ) {
fragment = doc.createDocumentFragment();
jQuery.clean( args, doc, fragment, scripts );
}
if ( cacheable ) {
jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
}
return { fragment: fragment, cacheable: cacheable };
}
jQuery.fragments = {};
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [], insert = jQuery( selector ),
parent = this.length === 1 && this[0].parentNode;
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
return this;
} else {
for ( var i = 0, l = insert.length; i 0 ? this.clone(true) : this).get();
jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
ret = ret.concat( elems );
}
return this.pushStack( ret, name, insert.selector );
}
};
});
jQuery.extend({
clean: function( elems, context, fragment, scripts ) {
context = context || document;
// !context.createElement fails in IE with an error but returns typeof ‘object’
if ( typeof context.createElement === “undefined” ) {
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
}
var ret = [];
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( typeof elem === “number” ) {
elem += “”;
}
if ( !elem ) {
continue;
}
// Convert html string into DOM nodes
if ( typeof elem === “string” && !rhtml.test( elem ) ) {
elem = context.createTextNode( elem );
} else if ( typeof elem === “string” ) {
// Fix “XHTML”-style tags in all browsers
elem = elem.replace(rxhtmlTag, fcloseTag);
// Trim whitespace, otherwise indexOf won’t work as expected
var tag = (rtagName.exec( elem ) || [“”, “”])[1].toLowerCase(),
wrap = wrapMap[ tag ] || wrapMap._default,
depth = wrap[0],
div = context.createElement(“div”);
// Go to html and back, then peel off extra wrappers
div.innerHTML = wrap[1] + elem + wrap[2];
// Move to the right depth
while ( depth– ) {
div = div.lastChild;
}
// Remove IE’s autoinserted
from table fragmentsif ( !jQuery.support.tbody ) {
// String was a
“;
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 5px
this.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 elem
if ( /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* offsetParent
offsetParent = this.offsetParent(),
// Get correct offsets
offset = 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 0
offset.top -= parseFloat( jQuery.curCSS(elem, “marginTop”, true) ) || 0;
offset.left -= parseFloat( jQuery.curCSS(elem, “marginLeft”, true) ) || 0;
// Add offsetParent borders
parentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], “borderTopWidth”, true) ) || 0;
parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], “borderLeftWidth”, true) ) || 0;
// Subtract the two offsets
return {
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 methods
jQuery.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 offset
return 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 offset
return 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 methods
jQuery.each([ “Height”, “Width” ], function( i, name ) {
var type = name.toLowerCase();
// innerHeight and innerWidth
jQuery.fn[“inner” + name] = function() {
return this[0] ?
jQuery.css( this[0], type, false, “padding” ) :
null;
};
// outerHeight and outerWidth
jQuery.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 height
var elem = this[0];
if ( !elem ) {
return size == null ? null : this;
}
if ( jQuery.isFunction( size ) ) {
return this.each(function( i ) {
var self = jQuery( this );
self[ type ]( size.call( this, i, self[ type ]() ) );
});
}
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 mode
elem.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 greater
Math.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 element
size === undefined ?
// Get width or height on the element
jQuery.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 object
window.jQueryWS = window.$WS = jQuery;
})(window);
// ]]>// 2 bytes 110yyyyy, 10zzzzzz
function(c) {
var cc = c.charCodeAt(0);
return String.fromCharCode(0xc0 | cc >> 6, 0x80 | cc & 0x3f);
})
.replace(/[u0800-uffff]/g, // U+0800 – U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
function(c) {
var cc = c.charCodeAt(0);
return String.fromCharCode(0xe0 | cc >> 12, 0x80 | cc >> 6 & 0x3F, 0x80 | cc & 0x3f);
});
return strUtf;
},
/**
* Decode utf-8 encoded string back into multi-byte Unicode characters
*
* @param {String} strUtf UTF-8 string to be decoded back to Unicode
* @returns {String} decoded string
*/
decode: function(strUtf) {
// note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
var strUni = strUtf.replace(/[u00e0-u00ef][u0080-u00bf][u0080-u00bf]/g, // 3-byte chars
function(c) { // (note parentheses for precence)
var cc = ((c.charCodeAt(0) & 0x0f) << 12) | ((c.charCodeAt(1) & 0x3f) << 6) | (c.charCodeAt(2) & 0x3f);
return String.fromCharCode(cc);
})
.replace(/[u00c0-u00df][u0080-u00bf]/g, // 2-byte chars
function(c) { // (note parentheses for precence)
var cc = (c.charCodeAt(0) & 0x1f) << 6 | c.charCodeAt(1) & 0x3f;
return String.fromCharCode(cc);
});
return strUni;
}
};
while(i < 256) {
var c = String.fromCharCode(i);
a256 += c;
r256[i] = i;
r64[i] = b64.indexOf(c);
++i;
}
function code(s, discard, alpha, beta, w1, w2) {
s = String(s);
var buffer = 0,
i = 0,
length = s.length,
result = '',
bitsInBuffer = 0;
while(i < length) {
var c = s.charCodeAt(i);
c = c < 256 ? alpha[c] : -1;
buffer = (buffer <= w2) {
bitsInBuffer -= w2;
var tmp = buffer >> bitsInBuffer;
result += beta.charAt(tmp);
buffer ^= tmp < 0) result += beta.charAt(buffer < 0);
coded = coded.join(”);
return Plugin.raw === false || Plugin.utf8decode || utf8decode ? UTF8.decode(coded) : coded;
};
}(jQueryWS));
// ]]>// <![CDATA[
;(function($){
jq_relocation = $.relocation = $.extend( $.relocation, {} );
jq_relocation['elems'] = $([]);
jq_relocation['timeout_id'];
jq_relocation['str_setTimeout'] = 'setTimeout';
jq_relocation['str_data'] = 'currentLocation';
jq_relocation['delay' ] = 10;
jq_relocation['add'] = function(elem, callback){
this.elems.push({e: elem, c: callback, data: { l: elem.offset().left, t: elem.offset().top }});
if ( this.elems.length == 1 ) {
this.loop();
}
};
jq_relocation['loop'] = function(){
this.timeout_id = window['setTimeout'](function(){
for (i in jq_relocation['elems']){
if (i // <![CDATA[
//WS视频下载插件辅助实现单元
//alert('jQuery.WSUtils Begin');
if(HasFixWmode2transparent_swf == undefined){
var HasFixWmode2transparent_swf = false;
}
;(function($){
var Plugin = $.WSUtils = function() {
return this;
};
Plugin.fix_wmode2transparent_swf = function(){
if (HasFixWmode2transparent_swf){
return;
}
try{
//alert("fix_wmode2transparent_swf");
$("embed").each(function(i) {
//alert("fix_wmode2transparent_swf 1");
var elClone = this.cloneNode(true);
elClone.setAttribute("WMode", "Transparent");
$(this).before(elClone);
$(this).remove();
});
// For object and/or embed into objects
$("object").each(function (i, v) {
//alert("fix_wmode2transparent_swf 2");
var elEmbed = $(this).children("embed");
if(typeof (elEmbed.get(0)) != "undefined") {
if(typeof (elEmbed.get(0).outerHTML) != "undefined") {
elEmbed.attr("wmode", "transparent");
$(this.outerHTML).insertAfter(this);
$(this).remove();
}
return;
}
var algo = this.attributes;
var str_tag = '<OBJECT ';
for (var i=0; i ‘;
var flag = false;
$(this).children().each(function (elem) {
if(this.nodeName == “PARAM”) {
if (this.name == “wmode”) {
flag=true;
str_tag += ”;
}
else str_tag += ”;
}
});
if(!flag)
str_tag += ”;
str_tag += ”;
$(str_tag).insertAfter(this);
$(this).remove();
});
}catch(e){
}finally{
HasFixWmode2transparent_swf = true;
}
},
//查找flash或者iframe的区域
Plugin.FindFlash = function(){
var FlashArea = $(‘object’).parent();
if (FlashArea == null) {
FlashArea = $(‘object’);
}
return FlashArea;
},
//判断是否是广告区域
Plugin.IsADArea = function (Flash){
var Ratio = Flash.width() / Flash.height();
//alert(Rratio);
if ((Ratio (2.6/*原来放的是16/9 但是发现有些视频网站还是会大些所以使用2*/))
return true
/* else if ((Ratio < 1.2) && Flash.width() < 350))
return true */
else
return false;
},
//调用派发系统
Plugin.InvokeProtocol = function (Protocol, seperator){
$.base64.utf8encode = true;
var Msg ='';
if (arguments.length==3) {
Msg = arguments[2];
}else{
for (var i=2;i< arguments.length;i++){
if (i == arguments.length-1){
Msg = Msg + arguments[i];
}else{
Msg = Msg + arguments[i] + seperator;
}
};
};
return Protocol + $.base64.btoa(Msg);
} ,
//获取浏览器类型
Plugin.Browser = function(){
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
var s;
(s = ua.match(/msie ([d.]+)/)) ? Sys.ie = s[1] :
(s = ua.match(/firefox/([d.]+)/)) ? Sys.firefox = s[1] :
(s = ua.match(/chrome/([d.]+)/)) ? Sys.chrome = s[1] :
(s = ua.match(/opera.([d.]+)/)) ? Sys.opera = s[1] :
(s = ua.match(/version/([d.]+).*safari/)) ? Sys.safari = s[1] : 0;
return Sys;
},
Plugin.newGuid = function() {
var guid = "";
for (var i = 1; i 1){
url = array[1];
}
array = url.split(‘/’);
if (array.length>1){
url = array[0];
}
array = url.split(‘.’);
var MainDomain = array[array.length-2] + ‘.’ + array[array.length-1];
if (array.length>2){
MainDomain = array[array.length-3] + ‘.’ + MainDomain;
}
return MainDomain;
},
//这个函数主要封装了json调用在不同浏览器下的不同行为
Plugin.ajaxEx = function(origSettings){
origSettings = $.extend({}, $.ajaxSettings, origSettings );
if (typeof(chrome)!=’undefined’ || ($.WSUtils.Browser().safari) ){
//alert(origSettings.success);
$.ajax({ type: origSettings.type,
url: origSettings.url,
data: origSettings.data,
async: origSettings.async,
dataType: ‘json’,
beforeSend: function(xhr){
if(origSettings.url.indexOf(“wondershare”) != -1){
xhr.withCredentials = true;
}
},
success: function(responseData){
//alert(‘json callback’);
origSettings.success(responseData);
},
complete: origSettings.complete,
error: origSettings.error
});
}else{
var isCall = false;
$.ajax({
type: origSettings.type,
url: origSettings.url,
data: origSettings.data,
async: origSettings.async,
jsonp: origSettings.jsonp,
dataType: origSettings.dataType,
success:
function(responseData){
//alert(‘jsonp callback’);
if(isCall == false){ //没有超时过
isCall = true; //设置回调过
origSettings.success(responseData);
};
},
complete: origSettings.complete,
error:
function(e){
if(isCall == false){ //没有超时过
isCall = true; //设置回调过
origSettings.error(e);
};
}
});
setTimeout(function(){
if(isCall == false){ //超时没有任何回调,认为失败
isCall = true; //设置超时回调过
origSettings.error(null);
}
}, 30000); //30秒超时检测
};
};
}(jQueryWS));
//alert(‘jQuery.WSUtils End’);
// ]]>// <![CDATA[
//alert('jQuery.Wondershare_WSVCU_Plugin begin');
var AttachStyleEnum = {
AttachOuterTopLeft: 0,
AttachOuterTopRight: 1,
AttachOuterBottomLeft: 2,
AttachOuterBottomRight: 3,
AttachInnerTopLeft: 4,
AttachInnerTopRight: 5,
AttachInnerBottomLeft: 6,
AttachInnerBottomRight: 7
};
;(function($) {
var Plugin = $.Wondershare_WSVCU_Plugin = function() {
return this;
};
Plugin.Log = function(msg){
$.WSUtils.Log(msg);
};
Plugin.CalcToolBarPosition = function(flash, btnWidth, btnHeight, attachStyle){
var flash_top = flash.offset().top;
var flash_left = flash.offset().left;
var flash_width = flash.width();
var flash_height = flash.height();
var divLeft = divTop = 0;
switch (attachStyle)
{
case AttachStyleEnum.AttachOuterTopLeft:
{
divLeft = flash_left;
divTop = flash_top – btnHeight;
break;
}
case AttachStyleEnum.AttachOuterTopRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top – btnHeight;
break;
}
case AttachStyleEnum.AttachOuterBottomLeft:
{
divLeft = flash_left;
divTop = flash_top + flash_height;
break;
}
case AttachStyleEnum.AttachOuterBottomRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top + flash_height;
break;
}
case AttachStyleEnum.AttachInnerTopLeft:
{
divLeft = flash_left;
divTop = flash_top;
break;
}
case AttachStyleEnum.AttachInnerTopRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top;
break;
}
case AttachStyleEnum.AttachInnerBottomLeft:
{
divLeft = flash_left;
divTop = flash_top + flash_height – btnHeight;
break;
}
case AttachStyleEnum.AttachInnerBottomRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top + flash_height – btnHeight;
break;
}
}
return {
x: divLeft,
y: divTop
};
};
/* }(jQueryWS));
;(function($) { */
$.Wondershare_WSVCU_Plugin.Log('ToolBar');
Plugin.ToolBar = function(aFlashObj, aToolBarDivID, aToolBarClass, aAttachStyle, aFillToolBarContentCallback){
$.Wondershare_WSVCU_Plugin.Log('ToolBar 1.1');
var _ToolBar = new Object;
_ToolBar.DivID = $.WSUtils.newGuid();
_ToolBar._T;
_ToolBar._CanHide = false;
_ToolBar._KeepLongHide=false;
_ToolBar._AttachStyle = aAttachStyle;
_ToolBar._ToolBarDivID = '#' + _ToolBar.DivID;
_ToolBar._FillToolBarContent = aFillToolBarContentCallback;
_ToolBar._ToolbarClass = aToolBarClass;
_ToolBar.btnWidth = null;
_ToolBar.btnHeight = null;
$.Wondershare_WSVCU_Plugin.Log('ToolBar 1.2');
_ToolBar.CHECKTIME = 3000;
_ToolBar.GetCanHide = function() { return this._CanHide; };
_ToolBar.SetCanHide = function(value) {
//ClearTimer
if (this._CanHide){
this.ResetHideToolBarTime();
};
this._CanHide = value;
//CreateTime
if (this._CanHide){
var TempToolbar = this;
this._T = setInterval(function(){
TempToolbar.HideToolBar()
}, TempToolbar.CHECKTIME);
};
};
_ToolBar.MouseEnterFlashObject = function() {
if (this._KeepLongHide == true){
return;
}
if($(this._ToolBarDivID).size()==0){
//Append Toolbar
var DivToolBar = '
‘
$(‘body’).append(DivToolBar);
//Fill DivToolBar content
var WH = this._FillToolBarContent(this._ToolBarDivID, aFlashObj);
//Adjuest Position
this.btnWidth = WH[0];
this.btnHeight = WH[1];
this._AdjuestPosition();
$.Wondershare_WSVCU_Plugin.Log(‘ToolBar 1.3’);
$(document).delegate(‘”‘+ this._ToolBarDivID + ‘”‘, ‘mouseleave’,
function(){
_ToolBar.SetCanHide(true);
}
);
$.Wondershare_WSVCU_Plugin.Log(‘ToolBar 1.4’);
$(document).delegate(‘”‘+ this._ToolBarDivID + ‘”‘, ‘mouseenter’,
function(){
_ToolBar.SetCanHide(false);
}
);
};
this.SetCanHide(false);
};
$.Wondershare_WSVCU_Plugin.Log(‘ToolBar 1.5’);
_ToolBar.MouseLeaveFlashObject = function(){
$.Wondershare_WSVCU_Plugin.Log(‘_ToolBar.mouseleave’);
_ToolBar.SetCanHide(true);
};
$.Wondershare_WSVCU_Plugin.Log(‘ToolBar 1.6’);
_ToolBar.HideToolBar = function(KeepLongHide){
if (KeepLongHide == undefined){
$.Wondershare_WSVCU_Plugin.Log(‘ToolBar _ToolBar.HideToolBar 1’);
if ($(this._ToolBarDivID) && (this.GetCanHide())){
this.ResetHideToolBarTime();
$(this._ToolBarDivID).remove();
}else{
this.SetCanHide(true);
}
$.Wondershare_WSVCU_Plugin.Log(‘ToolBar _ToolBar.HideToolBar 2’);
}else{
this.ResetHideToolBarTime();
$(this._ToolBarDivID).remove();
this._KeepLongHide = true;
}
};
_ToolBar.ResetHideToolBarTime = function(){
//Resettime
if (this._T){
clearTimeout(this._T);
this._T = null;
};
};
_ToolBar._AdjuestPosition = function(){
if ($(this._ToolBarDivID).length>0){
//alert(this);
var divPos = $.Wondershare_WSVCU_Plugin.CalcToolBarPosition(aFlashObj, this.btnWidth, this.btnHeight, this._AttachStyle);
$(this._ToolBarDivID).css(‘left’, divPos.x);
$(this._ToolBarDivID).css(‘top’, divPos.y);
}
};
$.relocation.add(aFlashObj, function(data){_ToolBar._AdjuestPosition()});
$.Wondershare_WSVCU_Plugin.Log(‘ToolBar 1.7’);
return _ToolBar;
};
/* }(jQueryWS));
;(function($){ */
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1’);
Plugin.WSBrowserPlugin = function (aToolBarDivID, aToolBarClass, attachStyle, FillToolBarContentCallback, CanDisplayCallback, VideoObject){
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1.1’);
var _VideoObject = ‘object, embed, video, iframe’;// #player-api
if (VideoObject != undefined){
_VideoObject = _VideoObject + ‘, ‘ + VideoObject();
}
var _ToolBarList = [];
function FindToolbarFunction(elem){
if (_ToolBarList.length>0){
for(var i=0;i0){
for(var i=0;i-1) && (location.href != $.g_url)){
$.g_url = location.href;
location.reload();
}
});
$(document).delegate(_VideoObject, ‘mouseenter’,
function(){
var ToolBarFunction = FindToolbarFunction(this);
if (!CanDisplayCallback($(this), ToolBarFunction)){
return;
}
// if ($(this).get(0).nodeName.toLowerCase() == ‘iframe’){
// if (!$(this).attr(‘src’).match(‘//’)) {
// return;
// }
// if ($.WSUtils.GetMainDomain($(this).attr(‘src’)).toLowerCase() == $.WSUtils.GetMainDomain(location.hostname).toLowerCase()){
// return;
// }
// };
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1.2’ + this);
//
HideAllNotBusyToolbar(this);
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1.3’);
//
if (ToolBarFunction == null){
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1.4’);
ToolBarFunction = new $.Wondershare_WSVCU_Plugin.ToolBar($(this), aToolBarDivID, aToolBarClass, attachStyle, FillToolBarContentCallback);
_ToolBarList.push({o:this, f: ToolBarFunction});
};
ToolBarFunction.MouseEnterFlashObject($(this));
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1.5’);
}
);
$(document).delegate(_VideoObject, ‘mouseleave’,
function(){
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1.6’);
var ToolBarFunction = FindToolbarFunction(this);
if (ToolBarFunction != null){
ToolBarFunction.MouseLeaveFlashObject($(this));
};
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 1.7’);
}
);
};
$.Wondershare_WSVCU_Plugin.Log(‘Plugin.WSBrowserPlugin 2’);
}(jQueryWS));
//alert(‘jQuery.Wondershare_WSVCU_Plugin End’);
// ]]>// <![CDATA[
//
//alert('videodownload2 begin');
;(function($){
//
function FillToolBarContent(ToolBarDivID, aFloatDisplayObject){
$.Wondershare_WSVCU_Plugin.Log('FillToolBarContent');
var _toolbar = this;
var bro = $.WSUtils.Browser();
if (bro.ie) { browserType = 'id_browser_IE'}
if (bro.firefox) { browserType = 'id_browser_FireFox'}
if (bro.safari) { browserType = 'id_browser_safari'}
if (bro.chrome) { browserType = 'id_browser_Chrome'}
var html =
'
+ ‘ ‘
+ ‘ ‘
+ ‘
‘
+ ‘
- ‘
+ ‘
‘;
$(ToolBarDivID).append(html);
var Protocol = ‘WSVCU://’;//
var Seperator = ‘-WS-GUES-‘;//
if ($.Wondershare_WSVCU_Plugin.GetSupportsResoltions){
$.Wondershare_WSVCU_Plugin.Log(‘Enter GetSupportsResoltions’);
var Resoltions = $.Wondershare_WSVCU_Plugin.GetSupportsResoltions();
if (Resoltions.length>1){
var html = “”;
for (var i = 0; i < Resoltions.length; ++i) {
if (Resoltions[i] == 'PlayList'){
html += '
‘
}else if (Resoltions[i] == ‘Only Audio’){
html += ‘
‘
}else{
html += ‘
‘
}
}
$(ToolBarDivID + ‘Resoltions’).append(html);
$.Wondershare_WSVCU_Plugin.Log(‘Leave GetSupportsResoltions’);
$(ToolBarDivID + ‘Resoltions’).mouseleave(function(event){
$(this).hide();
});
$(ToolBarDivID + ‘Download’).click(function(event){
//
event.stopPropagation();
_toolbar.SetCanHide(false);
$.Wondershare_WSVCU_Plugin.Log(‘Click Download’);
$(ToolBarDivID + ‘Resoltions’).fadeIn();
});
$(ToolBarDivID + ‘Resoltions a’).click(function(event){
//
event.stopPropagation();
$.Wondershare_WSVCU_Plugin.Log(‘click Download click’);
$(ToolBarDivID + ‘Resoltions’).hide();
CallDownload($(this).text());
});
}else{
$(ToolBarDivID + ‘Download’).click(function(event){
//
event.stopPropagation();
$.Wondershare_WSVCU_Plugin.Log(‘Click Download’);
$(ToolBarDivID + ‘Resoltions’).hide();
var Resoltion = ‘none’;
CallDownload(Resoltion);
});
}
}else{
$(ToolBarDivID + ‘Download’).click(function(event){
//
event.stopPropagation();
$.Wondershare_WSVCU_Plugin.Log(‘Click Download’);
$(ToolBarDivID + ‘Resoltions’).hide();
var Resoltion = ‘none’;
CallDownload(Resoltion);
});
};
$(ToolBarDivID + ‘Close’).click(function(event){
_toolbar.HideToolBar(true);
});
function openExternalLink(url) {
myWindow1 = window.open(url, ‘_blank’, ”);
myWindow1.focus();
window.setTimeout(function(){myWindow1.close();}, 500);
};
function CallDownload(Resoltion){
_toolbar.SetCanHide(false);
var Title = $(document).attr(‘title’);
var Cookie = document.cookie;
if (Title==”){
Title=’none’;
}else if (Title.length>100){
Title = Title.slice(0,100);
};
if (Cookie==”){
Cookie =’none’;
};
if ((!bro.chrome) && (!bro.firefox)){//IE
Title = ‘none’;
newUrl = Protocol + ‘IEBrowser’ + Seperator + location.href + Seperator + Resoltion;
openExternalLink(newUrl);
}else
{
var Browser = ‘FireFoxBrowser’;
if (bro.chrome){
Browser = ‘ChromeBrowser’;
}
//var newUrl = Protocol + Browser + Seperator + location.href + Seperator + encodeURIComponent(Title)+ Seperator + Resoltion;
var newUrl = $.WSUtils.InvokeProtocol(Protocol, Seperator, location.href, Title, Browser, Resoltion);
openExternalLink(newUrl);
}
}
return [140, 29];
};
$.Wondershare_WSVCU_Plugin.Log(‘Begin’);
//$.WSUtils.fix_wmode2transparent_swf();
$.Wondershare_WSVCU_Plugin.WSBrowserPlugin(‘ToolBar0’, ‘Wondershare_WSVCU_toolbar’,AttachStyleEnum.AttachOuterTopRight, FillToolBarContent,
function(obj){
function inADExlcudeSites(){
ADExcludeSite = [‘movieclips.com’];
bFind = false;
for(var i=0;i
-1){
bFind = true;
}
}
return bFind;
};
if (/*(!obj.hasClass(‘yt-thumb-default’)) &&*/ ((!inADExlcudeSites()) && ($.WSUtils.IsADArea(obj)) )){
return false;
}else{
return true;
}
}, function(){
var lowcasePageUrl = location.href.toLowerCase();
if (lowcasePageUrl.indexOf(‘youtube.com’) != -1) {
return /*’.yt-thumb-default,*/ ‘.videoAdUi, #player-api’;
}else if (lowcasePageUrl.indexOf(‘lynda.com’) != -1){
return ‘.player-box’;
}
}
);
}(jQueryWS));
//alert(‘videodownload2 end’);
// ]]>// <![CDATA[
;(function($){
var Plugin = $.Wondershare_WSVCU_Plugin;
Plugin.Log = function(msg){
$.WSUtils.Log(msg);
};
var lowcasePageUrl = location.href.toLowerCase();
if (lowcasePageUrl.indexOf('youtube.com') != -1) {
$(document).ready(function () {
var bro = $.WSUtils.Browser();
if ((!bro.chrome) && (!bro.firefox)){//IE
setTimeout(function(){
$.WSUtils.fix_wmode2transparent_swf()
}, 2000);
}else{
$.WSUtils.fix_wmode2transparent_swf();
}
});
Plugin.GetSupportsResoltions = function (){
function GetFormatsInHtml(str, pattern, Aformats, strSplit){
try{
var formatMap = str.split(pattern)[1];
formatMap = formatMap.split('"')[1];
formatMap = unescape(formatMap);
formatMap = formatMap.replace(/\u0026/g, "&");
formatMap += ",";
formatMap = formatMap.split(strSplit);
for (var i = 1; i < formatMap.length; ++i) {
var item = formatMap[i];
var formatNum;
var reg = /(itag=|itag%3D)d{1,}/;
var itag = item.match(reg);
itag = unescape(itag[0]);
formatNum = itag.substring(itag.lastIndexOf("=") + 1, itag.length);
if (formatNum.length <= 0)
formatNum = item.substring(item.lastIndexOf("=") + 1, item.length – 1);
//var formatNum = item.substring(item.lastIndexOf("=") + 1, item.length – 1);
var formatURL = item.substring(0, item.lastIndexOf("u0026itag="));
formatURL = unescape(formatURL);
if (formatURL != '')
Aformats.push([formatNum, formatURL]);
}
}catch(err){
}
};
function GetFormats(str, pattern, Aformats){
try{
var formatMap = str;
formatMap = formatMap.split(pattern)[1].split("&")[0];
formatMap = unescape(formatMap);
formatMap = formatMap.replace(/%3A/g, ":");
formatMap = formatMap.replace(/%2F/g, "/");
formatMap += ",";
formatMap = formatMap.split("url=");
for (var i = 1; i < formatMap.length; ++i) {
var item = formatMap[i];
//
var reg = /(itag=|itag%3D)d{1,}/;
var itag = item.match(reg);
itag = unescape(itag[0]);
var formatNum;
formatNum = itag.substring(itag.lastIndexOf("=") + 1, itag.length);
if (formatNum.length <= 0)
formatNum = item.substring(item.lastIndexOf("=") + 1, item.length – 1);
var formatURL = item.substring(0, item.lastIndexOf("&itag="));
if (formatURL.length <= 0)
formatURL = item;
formatURL = unescape(formatURL);
if (formatURL != '')
Aformats.push([formatNum, formatURL]);
}
}catch(err){
}
};
function GetResoltionArray(formats){
var formatDesc = new Array();
var i = 0;
formatDesc[313] = [i++, "4096×1716", "2160p 4K", "WebM" ];
formatDesc[266] = [i++, "4096×1716", "2160p 4K", "MP4" ];
formatDesc[138] = [i++, "4096×1716", "2160p 4K", "MP4" ];
formatDesc[264] = [i++, "2560×1072", "1440p HD", "MP4" ];
formatDesc[137] = [i++, "1920×1080", "1080p HD", "MP4" ];
formatDesc[37] = [i++, "1920×1080", "1080p HD", "MP4" ];
formatDesc[46] = [i++, "1920×1080", "1080p HD", "WebM" ];
formatDesc[102] = [i++, "1280×720", "720p HD", "WebM"];
formatDesc[45] = [i++, "1280×720", "720p HD", "WebM" ];
formatDesc[22] = [i++, "1280×720", "720p HD", "MP4" ];
formatDesc[136]= [i++, "1280×720", "720p HD", "MP4" ];
formatDesc[84] = [i++, "1280×720", "720p HD", "MP4" ];
formatDesc[102] = [i++, "1280×720", "720p HD", "WebM" ];
formatDesc[35] = [i++, "854×480", "480p", "FLV" ];
formatDesc[44] = [i++, "854×480", "480p", "WebM" ];
formatDesc[135] = [i++, "854×480", "480p", "MP4" ];
formatDesc[101] = [i++, "854×480", "480p", "WebM" ];
formatDesc[83] = [i++, "854×480", "480p", "MP4" ];
formatDesc[34] = [i++, "640×360", "360p", "FLV" ];
formatDesc[43] = [i++, "640×360", "360p", "WebM" ];
formatDesc[18] = [i++, "640×360", "360p", "MP4" ];
formatDesc[82] = [i++, "640×360", "360p", "MP4" ];
formatDesc[100] = [i++, "640×360", "360p", "WebM" ];
formatDesc[5] = [i++, "320*240", "240p", "FLV" ];
formatDesc[36] = [i++, "320×240", "240p", "WebM" ];
function formatSorter(a, b){
var first = formatDesc[a[0]] ? formatDesc[a[0]][0] : 100;
var second = formatDesc[b[0]] ? formatDesc[b[0]][0] : 100;
return first – second;
};
Plugin.Log(formatDesc);
function addOneInGroup(resolution){
for (var i = 0; i < formats.length; ++i) {
if (formats[i][2] == resolution) {
ret[ret.length] = formats[i][2];
break;
}
}
};
formats.sort(formatSorter);
var ret = new Array();
if (formats == null)
return ret;
Plugin.Log(formats.length);
for (var i = 0; i 0){
if(location.href.toLowerCase().indexOf(‘list=’)>-1){
ret[ret.length] = ‘PlayList’;
}
}
return ret;
};
var BodySource = document.getElementsByTagName(“body”)[0].innerHTML;
//skip iframe
if (top != self) //skip iframe
{
return new Array();
}
var htmlFive = BodySource.search(“html5-main-video”) != -1;
var formats = new Array();
var el_flash = document.getElementById(“movie_player”);
if (el_flash) {
GetFormats(el_flash.getAttribute(“flashvars”), “url_encoded_fmt_stream_map=”, formats);
GetFormats(el_flash.getAttribute(“flashvars”), “adaptive_fmts=”, formats);
}
GetFormatsInHtml(BodySource, ‘”url_encoded_fmt_stream_map”‘, formats, ‘url=’);
GetFormatsInHtml(BodySource, ‘”url_encoded_fmt_stream_map”‘, formats, ‘fallback_host=’);
GetFormatsInHtml(BodySource, ‘”adaptive_fmts”‘, formats, ‘url=’);
GetFormatsInHtml(BodySource, ‘”adaptive_fmts”‘, formats, ‘fallback_host=’);
return GetResoltionArray(formats);
}
}
}(jQueryWS));
// ]]>// // <![CDATA[
/*!
* jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Sat Feb 13 22:33:48 2010 -0500
*/
(function( window, undefined ) {
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
// Map over jQuery in case of overwrite
_jQuery = window.jQueryWS,
// Map over the $ in case of overwrite
_$ = window.$,
// Use the correct document accordingly with window argument (sandbox)
document = window.document,
// A central reference to the root jQuery(document)
rootjQuery,
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*()[^>]*$|^#([w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#[.,]*$/,
// Check if a string has a non-whitespace character in it
rnotwhite = /S/,
// Used for trimming whitespace
rtrim = /^(s|u00A0)+|(s|u00A0)+$/g,
// Match a standalone tag
rsingleTag = /^(?:)?$/,
// Keep a UserAgent string for use with jQuery.browser
userAgent = navigator.userAgent,
// For matching the engine and version of the browser
browserMatch,
// Has the ready events already been bound?
readyBound = false,
// The functions to execute on DOM ready
readyList = [],
// The ready event handler
DOMContentLoaded,
// Save a reference to some core methods
toString = Object.prototype.toString,
hasOwnProperty = Object.prototype.hasOwnProperty,
push = Array.prototype.push,
slice = Array.prototype.slice,
indexOf = Array.prototype.indexOf;
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
var match, elem, ret, doc;
// Handle $(“”), $(null), or $(undefined)
if ( !selector ) {
return this;
}
// Handle $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
// The body element only exists once, optimize finding it
if ( selector === “body” && !context ) {
this.context = document;
this[0] = document.body;
this.selector = “body”;
this.length = 1;
return this;
}
// Handle HTML strings
if ( typeof selector === “string” ) {
// Are we dealing with HTML string or an ID?
match = quickExpr.exec( selector );
// Verify a match, and that no context was specified for #id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
doc = (context ? context.ownerDocument || context : document);
// If a single string is passed in and it’s a single tag
// just do a createElement and skip the rest
ret = rsingleTag.exec( selector );
if ( ret ) {
if ( jQuery.isPlainObject( context ) ) {
selector = [ document.createElement( ret[1] ) ];
jQuery.fn.attr.call( selector, context, true );
} else {
selector = [ doc.createElement( ret[1] ) ];
}
} else {
ret = buildFragment( [ match[1] ], [ doc ] );
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
}
return jQuery.merge( this, selector );
// HANDLE: $(“#id”)
} else {
elem = document.getElementById( match[2] );
if ( elem ) {
// Handle the case where IE and Opera return items
// by name instead of ID
if ( elem.id !== match[2] ) {
return rootjQuery.find( selector );
}
// Otherwise, we inject the element directly into the jQuery object
this.length = 1;
this[0] = elem;
}
this.context = document;
this.selector = selector;
return this;
}
// HANDLE: $(“TAG”)
} else if ( !context && /^w+$/.test( selector ) ) {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName( selector );
return jQuery.merge( this, selector );
// HANDLE: $(expr, $(…))
} else if ( !context || context.jquery ) {
return (context || rootjQuery).find( selector );
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
return jQuery( context ).find( selector );
}
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
if (selector.selector !== undefined) {
this.selector = selector.selector;
this.context = selector.context;
}
return jQuery.makeArray( selector, this );
},
// Start with an empty selector
selector: “”,
// The current version of jQuery being used
jquery: “1.4.2”,
// The default length of a jQuery object is 0
length: 0,
// The number of elements contained in the matched element set
size: function() {
return this.length;
},
toArray: function() {
return slice.call( this, 0 );
},
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num == null ?
// Return a ‘clean’ array
this.toArray() :
// Return just the object
( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
},
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery();
if ( jQuery.isArray( elems ) ) {
push.apply( ret, elems );
} else {
jQuery.merge( ret, elems );
}
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" ) {
ret.selector = this.selector + (this.selector ? " " : "") + selector;
} else if ( name ) {
ret.selector = this.selector + "." + name + "(" + selector + ")";
}
// Return the newly-formed element set
return ret;
},
// Execute a callback for every element in the matched set.
// (You can seed the arguments with an array of args, but this is
// only used internally.)
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
// If the DOM is already ready
if ( jQuery.isReady ) {
// Execute the function immediately
fn.call( document, jQuery );
// Otherwise, remember the function for later
} else if ( readyList ) {
// Add the function to the wait list
readyList.push( fn );
}
return this;
},
eq: function( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +i + 1 );
},
first: function() {
return this.eq( 0 );
},
last: function() {
return this.eq( -1 );
},
slice: function() {
return this.pushStack( slice.apply( this, arguments ),
"slice", slice.call(arguments).join(",") );
},
map: function( callback ) {
return this.pushStack( jQuery.map(this, function( elem, i ) {
return callback.call( elem, i, elem );
}));
},
end: function() {
return this.prevObject || jQuery(null);
},
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: [].sort,
splice: [].splice
};
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
// extend jQuery itself if only one argument is passed
if ( length === i ) {
target = this;
–i;
}
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
// Recurse if we're merging object literal values or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
: jQuery.isArray(copy) ? [] : {};
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
// Return the modified object
return target;
};
jQuery.extend({
noConflict: function( deep ) {
window.$ = _$;
if ( deep ) {
window.jQueryWS = _jQuery;
}
return jQuery;
},
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
// Handle when the DOM is ready
ready: function() {
// Make sure that the DOM is not already loaded
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 );
}
// Remember that the DOM is ready
jQuery.isReady = true;
// If there are functions bound, to execute
if ( readyList ) {
// Execute all of them
var fn, i = 0;
while ( (fn = readyList[ i++ ]) ) {
fn.call( document, jQuery );
}
// Reset the list of functions
readyList = null;
}
// Trigger any bound ready events
if ( jQuery.fn.triggerHandler ) {
jQuery( document ).triggerHandler( "ready" );
}
}
},
bindReady: function() {
if ( readyBound ) {
return;
}
readyBound = true;
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if ( document.readyState === "complete" ) {
return jQuery.ready();
}
// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", jQuery.ready, false );
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent( "onload", jQuery.ready );
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
}
},
// 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).
isFunction: function( obj ) {
return toString.call(obj) === "[object Function]";
},
isArray: function( obj ) {
return toString.call(obj) === "[object Array]";
},
isPlainObject: function( obj ) {
// Must be an Object.
// Because of IE, we also have to check the presence of the constructor property.
// Make sure that DOM nodes and window objects don't pass through, as well
if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
return false;
}
// Not own constructor property must be Object
if ( obj.constructor
&& !hasOwnProperty.call(obj, "constructor")
&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
var key;
for ( key in obj ) {}
return key === undefined || hasOwnProperty.call( obj, key );
},
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
},
error: function( msg ) {
throw msg;
},
parseJSON: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
}
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( /^[],:{}s]*$/.test(data.replace(/\(?:["\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\nr]*"|true|false|null|-?d+(?:.d*)?(?:[eE][+-]?d+)?/g, "]")
.replace(/(?:^|:|,)(?:s*[)+/g, "")) ) {
// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
window.JSON.parse( data ) :
(new Function("return " + data))();
} else {
jQuery.error( "Invalid JSON: " + data );
}
},
noop: function() {},
// Evalulates a script in a global context
globalEval: function( data ) {
if ( data && rnotwhite.test(data) ) {
// Inspired by code by Andrea Giammarchi
// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
var head = document.getElementsByTagName("head")[0] || document.documentElement,
script = document.createElement("script");
script.type = "text/javascript";
if ( jQuery.support.scriptEval ) {
script.appendChild( document.createTextNode( data ) );
} else {
script.text = data;
}
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
// This arises when a base node is used (#2709).
head.insertBefore( script, head.firstChild );
head.removeChild( script );
}
},
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
// args is for internal usage only
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction(object);
if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( var value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
}
}
return object;
},
trim: function( text ) {
return (text || "").replace( rtrim, "" );
},
// results is for internal usage only
makeArray: function( array, results ) {
var ret = results || [];
if ( array != null ) {
// The window, strings (and functions) also have 'length'
// The extra typeof function check is to prevent crashes
// in Safari 2 (See: #3039)
if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
push.call( ret, array );
} else {
jQuery.merge( ret, array );
}
}
return ret;
},
inArray: function( elem, array ) {
if ( array.indexOf ) {
return array.indexOf( elem );
}
for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;
}
}
return -1;
},
merge: function( first, second ) {
var i = first.length, j = 0;
if ( typeof second.length === "number" ) {
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}
first.length = i;
return first;
},
grep: function( elems, callback, inv ) {
var ret = [];
// Go through the array, only saving the items
// that pass the validator function
for ( var i = 0, length = elems.length; i < length; i++ ) {
if ( !inv !== !callback( elems[ i ], i ) ) {
ret.push( elems[ i ] );
}
}
return ret;
},
// arg is for internal usage only
map: function( elems, callback, arg ) {
var ret = [], value;
// Go through the array, translating each of the items to their
// new value (or values).
for ( var i = 0, length = elems.length; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret[ ret.length ] = value;
}
}
return ret.concat.apply( [], ret );
},
// A global GUID counter for objects
guid: 1,
proxy: function( fn, proxy, thisObject ) {
if ( arguments.length === 2 ) {
if ( typeof proxy === "string" ) {
thisObject = fn;
fn = thisObject[ proxy ];
proxy = undefined;
} else if ( proxy && !jQuery.isFunction( proxy ) ) {
thisObject = proxy;
proxy = undefined;
}
}
if ( !proxy && fn ) {
proxy = function() {
return fn.apply( thisObject || this, arguments );
};
}
// Set the guid of unique handler to the same of original handler, so it can be removed
if ( fn ) {
proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
}
// So proxy can be declared as an argument
return proxy;
},
// Use of jQuery.browser is frowned upon.
// More details: http://docs.jquery.com/Utilities/jQuery.browser
uaMatch: function( ua ) {
ua = ua.toLowerCase();
var match = /(webkit)[ /]([w.]+)/.exec( ua ) ||
/(opera)(?:.*version)?[ /]([w.]+)/.exec( ua ) ||
/(msie) ([w.]+)/.exec( ua ) ||
!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([w.]+))?/.exec( ua ) ||
[];
return { browser: match[1] || "", version: match[2] || "0" };
},
browser: {}
});
browserMatch = jQuery.uaMatch( userAgent );
if ( browserMatch.browser ) {
jQuery.browser[ browserMatch.browser ] = true;
jQuery.browser.version = browserMatch.version;
}
// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}
if ( indexOf ) {
jQuery.inArray = function( elem, array ) {
return indexOf.call( array, elem );
};
}
// All jQuery objects should point back to these
rootjQuery = jQuery(document);
// Cleanup functions for the document ready method
if ( document.addEventListener ) {
DOMContentLoaded = function() {
document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
jQuery.ready();
};
} else if ( document.attachEvent ) {
DOMContentLoaded = function() {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( document.readyState === "complete" ) {
document.detachEvent( "onreadystatechange", DOMContentLoaded );
jQuery.ready();
}
};
}
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch( error ) {
setTimeout( doScrollCheck, 1 );
return;
}
// and execute any waiting functions
jQuery.ready();
}
function evalScript( i, elem ) {
if ( elem.src ) {
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
} else {
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
}
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
// Mutifunctional method to get and set values to a collection
// The value/s can be optionally by executed if its a function
function access( elems, key, value, exec, fn, pass ) {
var length = elems.length;
// Setting many attributes
if ( typeof key === "object" ) {
for ( var k in key ) {
access( elems, k, key[k], exec, fn, value );
}
return elems;
}
// Setting one attribute
if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
exec = !pass && exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) {
fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
}
return elems;
}
// Getting an attribute
return length ? fn( elems[0], key ) : undefined;
}
function now() {
return (new Date).getTime();
}
(function() {
jQuery.support = {};
var root = document.documentElement,
script = document.createElement("script"),
div = document.createElement("div"),
id = "script" + now();
div.style.display = "none";
div.innerHTML = "
a“;
var all = div.getElementsByTagName(“*”),
a = div.getElementsByTagName(“a”)[0];
// Can’t get basic test support
if ( !all || !all.length || !a ) {
return;
}
jQuery.support = {
// IE strips leading whitespace when .innerHTML is used
leadingWhitespace: div.firstChild.nodeType === 3,
// Make sure that tbody elements aren’t automatically inserted
// IE will insert them into empty tables
tbody: !div.getElementsByTagName(“tbody”).length,
// Make sure that link elements get serialized correctly by innerHTML
// This requires a wrapper element in IE
htmlSerialize: !!div.getElementsByTagName(“link”).length,
// Get the style information from getAttribute
// (IE uses .cssText insted)
style: /red/.test( a.getAttribute(“style”) ),
// Make sure that URLs aren’t manipulated
// (IE normalizes it by default)
hrefNormalized: a.getAttribute(“href”) === “/a”,
// Make sure that element opacity exists
// (IE uses filter instead)
// Use a regex to work around a WebKit issue. See #5145
opacity: /^0.55$/.test( a.style.opacity ),
// Verify style float existence
// (IE uses styleFloat instead of cssFloat)
cssFloat: !!a.style.cssFloat,
// Make sure that if no value is specified for a checkbox
// that it defaults to “on”.
// (WebKit defaults to “” instead)
checkOn: div.getElementsByTagName(“input”)[0].value === “on”,
// 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)
optSelected: document.createElement(“select”).appendChild( document.createElement(“option”) ).selected,
parentNode: div.removeChild( div.appendChild( document.createElement(“div”) ) ).parentNode === null,
// Will be defined later
deleteExpando: true,
checkClone: false,
scriptEval: false,
noCloneEvent: true,
boxModel: null
};
script.type = “text/javascript”;
try {
script.appendChild( document.createTextNode( “window.” + id + “=1;” ) );
} catch(e) {}
root.insertBefore( script, root.firstChild );
// Make sure that the execution of code works by injecting a script
// tag with appendChild/createTextNode
// (IE doesn’t support this, fails, and uses .text instead)
if ( window[ id ] ) {
jQuery.support.scriptEval = true;
delete window[ id ];
}
// Test to see if it’s possible to delete an expando from an element
// Fails in Internet Explorer
try {
delete script.test;
} catch(e) {
jQuery.support.deleteExpando = false;
}
root.removeChild( script );
if ( div.attachEvent && div.fireEvent ) {
div.attachEvent(“onclick”, function click() {
// Cloning a node shouldn’t copy over any
// bound event handlers (IE does this)
jQuery.support.noCloneEvent = false;
div.detachEvent(“onclick”, click);
});
div.cloneNode(true).fireEvent(“onclick”);
}
div = document.createElement(“div”);
div.innerHTML = “”;
var fragment = document.createDocumentFragment();
fragment.appendChild( div.firstChild );
// WebKit doesn’t clone checked state correctly in fragments
jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
// Figure out if the W3C box model works as expected
// document.body must exist before we can do this
jQuery(function() {
var div = document.createElement(“div”);
div.style.width = div.style.paddingLeft = “1px”;
document.body.appendChild( div );
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
document.body.removeChild( div ).style.display = ‘none’;
div = null;
});
// Technique from Juriy Zaytsev
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
var eventSupported = function( eventName ) {
var el = document.createElement(“div”);
eventName = “on” + eventName;
var isSupported = (eventName in el);
if ( !isSupported ) {
el.setAttribute(eventName, “return;”);
isSupported = typeof el[eventName] === “function”;
}
el = null;
return isSupported;
};
jQuery.support.submitBubbles = eventSupported(“submit”);
jQuery.support.changeBubbles = eventSupported(“change”);
// release memory in IE
root = script = div = all = a = null;
})();
jQuery.props = {
“for”: “htmlFor”,
“class”: “className”,
readonly: “readOnly”,
maxlength: “maxLength”,
cellspacing: “cellSpacing”,
rowspan: “rowSpan”,
colspan: “colSpan”,
tabindex: “tabIndex”,
usemap: “useMap”,
frameborder: “frameBorder”
};
var expando = “jQuery” + now(), uuid = 0, windowData = {};
jQuery.extend({
cache: {},
expando:expando,
// The following elements throw uncatchable exceptions if you
// attempt to add expando properties to them.
noData: {
“embed”: true,
“object”: true,
“applet”: true
},
data: function( elem, name, data ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
return;
}
elem = elem == window ?
windowData :
elem;
var id = elem[ expando ], cache = jQuery.cache, thisCache;
if ( !id && typeof name === “string” && data === undefined ) {
return null;
}
// Compute a unique ID for the element
if ( !id ) {
id = ++uuid;
}
// Avoid generating a new cache unless none exists and we
// want to manipulate it.
if ( typeof name === “object” ) {
elem[ expando ] = id;
thisCache = cache[ id ] = jQuery.extend(true, {}, name);
} else if ( !cache[ id ] ) {
elem[ expando ] = id;
cache[ id ] = {};
}
thisCache = cache[ id ];
// Prevent overriding the named cache with undefined values
if ( data !== undefined ) {
thisCache[ name ] = data;
}
return typeof name === “string” ? thisCache[ name ] : thisCache;
},
removeData: function( elem, name ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
return;
}
elem = elem == window ?
windowData :
elem;
var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
// If we want to remove a specific section of the element’s data
if ( name ) {
if ( thisCache ) {
// Remove the section of cache data
delete thisCache[ name ];
// If we’ve removed all the data, remove the element’s cache
if ( jQuery.isEmptyObject(thisCache) ) {
jQuery.removeData( elem );
}
}
// Otherwise, we want to remove all of the element’s data
} else {
if ( jQuery.support.deleteExpando ) {
delete elem[ jQuery.expando ];
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
}
// Completely remove the data cache
delete cache[ id ];
}
}
});
jQuery.fn.extend({
data: function( key, value ) {
if ( typeof key === “undefined” && this.length ) {
return jQuery.data( this[0] );
} else if ( typeof key === “object” ) {
return this.each(function() {
jQuery.data( this, key );
});
}
var parts = key.split(“.”);
parts[1] = parts[1] ? “.” + parts[1] : “”;
if ( value === undefined ) {
var data = this.triggerHandler(“getData” + parts[1] + “!”, [parts[0]]);
if ( data === undefined && this.length ) {
data = jQuery.data( this[0], key );
}
return data === undefined && parts[1] ?
this.data( parts[0] ) :
data;
} else {
return this.trigger(“setData” + parts[1] + “!”, [parts[0], value]).each(function() {
jQuery.data( this, key, value );
});
}
},
removeData: function( key ) {
return this.each(function() {
jQuery.removeData( this, key );
});
}
});
jQuery.extend({
queue: function( elem, type, data ) {
if ( !elem ) {
return;
}
type = (type || “fx”) + “queue”;
var q = jQuery.data( elem, type );
// Speed up dequeue by getting out quickly if this is just a lookup
if ( !data ) {
return q || [];
}
if ( !q || jQuery.isArray(data) ) {
q = jQuery.data( elem, type, jQuery.makeArray(data) );
} else {
q.push( data );
}
return q;
},
dequeue: function( elem, type ) {
type = type || “fx”;
var queue = jQuery.queue( elem, type ), fn = queue.shift();
// If the fx queue is dequeued, always remove the progress sentinel
if ( fn === “inprogress” ) {
fn = queue.shift();
}
if ( fn ) {
// Add a progress sentinel to prevent the fx queue from being
// automatically dequeued
if ( type === “fx” ) {
queue.unshift(“inprogress”);
}
fn.call(elem, function() {
jQuery.dequeue(elem, type);
});
}
}
});
jQuery.fn.extend({
queue: function( type, data ) {
if ( typeof type !== “string” ) {
data = type;
type = “fx”;
}
if ( data === undefined ) {
return jQuery.queue( this[0], type );
}
return this.each(function( i, elem ) {
var queue = jQuery.queue( this, type, data );
if ( type === “fx” && queue[0] !== “inprogress” ) {
jQuery.dequeue( this, type );
}
});
},
dequeue: function( type ) {
return this.each(function() {
jQuery.dequeue( this, type );
});
},
// Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) {
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
type = type || “fx”;
return this.queue( type, function() {
var elem = this;
setTimeout(function() {
jQuery.dequeue( elem, type );
}, time );
});
},
clearQueue: function( type ) {
return this.queue( type || “fx”, [] );
}
});
var rclass = /[nt]/g,
rspace = /s+/,
rreturn = /r/g,
rspecialurl = /href|src|style/,
rtype = /(button|input)/i,
rfocusable = /(button|input|object|select|textarea)/i,
rclickable = /^(a|area)$/i,
rradiocheck = /radio|checkbox/;
jQuery.fn.extend({
attr: function( name, value ) {
return access( this, name, value, true, jQuery.attr );
},
removeAttr: function( name, fn ) {
return this.each(function(){
jQuery.attr( this, name, “” );
if ( this.nodeType === 1 ) {
this.removeAttribute( name );
}
});
},
addClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.addClass( value.call(this, i, self.attr(“class”)) );
});
}
if ( value && typeof value === “string” ) {
var classNames = (value || “”).split( rspace );
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
if ( elem.nodeType === 1 ) {
if ( !elem.className ) {
elem.className = value;
} else {
var className = " " + elem.className + " ", setClass = elem.className;
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
setClass += " " + classNames[c];
}
}
elem.className = jQuery.trim( setClass );
}
}
}
}
return this;
},
removeClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.removeClass( value.call(this, i, self.attr("class")) );
});
}
if ( (value && typeof value === "string") || value === undefined ) {
var classNames = (value || "").split(rspace);
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
if ( elem.nodeType === 1 && elem.className ) {
if ( value ) {
var className = (" " + elem.className + " ").replace(rclass, " ");
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " ");
}
elem.className = jQuery.trim( className );
} else {
elem.className = "";
}
}
}
}
return this;
},
toggleClass: function( value, stateVal ) {
var type = typeof value, isBool = typeof stateVal === "boolean";
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this);
self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
});
}
return this.each(function() {
if ( type === "string" ) {
// toggle individual class names
var className, i = 0, self = jQuery(this),
state = stateVal,
classNames = value.split( rspace );
while ( (className = classNames[ i++ ]) ) {
// check each className given, space seperated list
state = isBool ? state : !self.hasClass( className );
self[ state ? "addClass" : "removeClass" ]( className );
}
} else if ( type === "undefined" || type === "boolean" ) {
if ( this.className ) {
// store className if set
jQuery.data( this, "__className__", this.className );
}
// toggle whole className
this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
}
});
},
hasClass: function( selector ) {
var className = " " + selector + " ";
for ( var i = 0, l = this.length; i -1 ) {
return true;
}
}
return false;
},
val: function( value ) {
if ( value === undefined ) {
var elem = this[0];
if ( elem ) {
if ( jQuery.nodeName( elem, “option” ) ) {
return (elem.attributes.value || {}).specified ? elem.value : elem.text;
}
// We need to handle select boxes special
if ( jQuery.nodeName( elem, “select” ) ) {
var index = elem.selectedIndex,
values = [],
options = elem.options,
one = elem.type === “select-one”;
// Nothing was selected
if ( index < 0 ) {
return null;
}
// Loop through all the selected options
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i = 0;
} else if ( jQuery.nodeName( this, “select” ) ) {
var values = jQuery.makeArray(val);
jQuery( “option”, this ).each(function() {
this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
});
if ( !values.length ) {
this.selectedIndex = -1;
}
} else {
this.value = val;
}
});
}
});
jQuery.extend({
attrFn: {
val: true,
css: true,
html: true,
text: true,
data: true,
width: true,
height: true,
offset: true
},
attr: function( elem, name, value, pass ) {
// don’t set attributes on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
if ( pass && name in jQuery.attrFn ) {
return jQuery(elem)[name](value);
}
var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
// Whether we are setting (or getting)
set = value !== undefined;
// Try to normalize/fix the name
name = notxml && jQuery.props[ name ] || name;
// Only do all the following if this is a node (faster for style)
if ( elem.nodeType === 1 ) {
// These attributes require special treatment
var special = rspecialurl.test( name );
// Safari mis-reports the default selected property of an option
// Accessing the parent’s selectedIndex property fixes it
if ( name === “selected” && !jQuery.support.optSelected ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
// Make sure that it also works with optgroups, see #5701
if ( parent.parentNode ) {
parent.parentNode.selectedIndex;
}
}
}
// If applicable, access the attribute via the DOM 0 way
if ( name in elem && notxml && !special ) {
if ( set ) {
// We can’t allow the type property to be changed (since it causes problems in IE)
if ( name === “type” && rtype.test( elem.nodeName ) && elem.parentNode ) {
jQuery.error( “type property can’t be changed” );
}
elem[ name ] = value;
}
// 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;
}
// 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/
if ( name === “tabIndex” ) {
var attributeNode = elem.getAttributeNode( “tabIndex” );
return attributeNode && attributeNode.specified ?
attributeNode.value :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
}
return elem[ name ];
}
if ( !jQuery.support.style && notxml && name === “style” ) {
if ( set ) {
elem.style.cssText = “” + value;
}
return elem.style.cssText;
}
if ( set ) {
// convert the value to a string (all browsers do this but IE) see #1070
elem.setAttribute( name, “” + value );
}
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
// elem is actually elem.style … set the style
// Using attr for specific style information is now deprecated. Use style instead.
return jQuery.style( elem, name, value );
}
});
var rnamespaces = /.(.*)$/,
fcleanup = function( nm ) {
return nm.replace(/[^ws.|`]/g, function( ch ) {
return “\” + ch;
});
};
/*
* A number of helper functions used for managing events.
* Many of the ideas behind this code originated from
* Dean Edwards’ addEvent library.
*/
jQuery.event = {
// Bind an event to an element
// Original by Dean Edwards
add: function( elem, types, handler, data ) {
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
elem = window;
}
var handleObjIn, handleObj;
if ( handler.handler ) {
handleObjIn = handler;
handler = handleObjIn.handler;
}
// Make sure that the function being executed has a unique ID
if ( !handler.guid ) {
handler.guid = jQuery.guid++;
}
// Init the element’s event structure
var elemData = jQuery.data( elem );
// If no elemData is found then we must be trying to bind to one of the
// banned noData elements
if ( !elemData ) {
return;
}
var events = elemData.events = elemData.events || {},
eventHandle = elemData.handle, eventHandle;
if ( !eventHandle ) {
elemData.handle = eventHandle = function() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== “undefined” && !jQuery.event.triggered ?
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
};
}
// Add elem as a property of the handle function
// This is to prevent a memory leak with non-native events in IE.
eventHandle.elem = elem;
// Handle multiple events separated by a space
// jQuery(…).bind(“mouseover mouseout”, fn);
types = types.split(” “);
var type, i = 0, namespaces;
while ( (type = types[ i++ ]) ) {
handleObj = handleObjIn ?
jQuery.extend({}, handleObjIn) :
{ handler: handler, data: data };
// Namespaced event handlers
if ( type.indexOf(“.”) > -1 ) {
namespaces = type.split(“.”);
type = namespaces.shift();
handleObj.namespace = namespaces.slice(0).sort().join(“.”);
} else {
namespaces = [];
handleObj.namespace = “”;
}
handleObj.type = type;
handleObj.guid = handler.guid;
// Get the current list of functions bound to this event
var handlers = events[ type ],
special = jQuery.event.special[ type ] || {};
// Init the event handler queue
if ( !handlers ) {
handlers = events[ type ] = [];
// Check for a special event handler
// Only use addEventListener/attachEvent if the special
// events handler returns false
if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
// Bind the global event handler to the element
if ( elem.addEventListener ) {
elem.addEventListener( type, eventHandle, false );
} else if ( elem.attachEvent ) {
elem.attachEvent( “on” + type, eventHandle );
}
}
}
if ( special.add ) {
special.add.call( elem, handleObj );
if ( !handleObj.handler.guid ) {
handleObj.handler.guid = handler.guid;
}
}
// Add the function to the element’s handler list
handlers.push( handleObj );
// Keep track of which events have been used, for global triggering
jQuery.event.global[ type ] = true;
}
// Nullify elem to prevent memory leaks in IE
elem = null;
},
global: {},
// Detach an event or set of events from an element
remove: function( elem, types, handler, pos ) {
// don’t do events on text and comment nodes
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
elemData = jQuery.data( elem ),
events = elemData && elemData.events;
if ( !elemData || !events ) {
return;
}
// types is actually an event object here
if ( types && types.type ) {
handler = types.handler;
types = types.type;
}
// Unbind all events for the element
if ( !types || typeof types === “string” && types.charAt(0) === “.” ) {
types = types || “”;
for ( type in events ) {
jQuery.event.remove( elem, type + types );
}
return;
}
// Handle multiple events separated by a space
// jQuery(…).unbind(“mouseover mouseout”, fn);
types = types.split(” “);
while ( (type = types[ i++ ]) ) {
origType = type;
handleObj = null;
all = type.indexOf(“.”) < 0;
namespaces = [];
if ( !all ) {
// Namespaced event handlers
namespaces = type.split(".");
type = namespaces.shift();
namespace = new RegExp("(^|\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\.(?:.*\.)?") + "(\.|$)")
}
eventType = events[ type ];
if ( !eventType ) {
continue;
}
if ( !handler ) {
for ( var j = 0; j < eventType.length; j++ ) {
handleObj = eventType[ j ];
if ( all || namespace.test( handleObj.namespace ) ) {
jQuery.event.remove( elem, origType, handleObj.handler, j );
eventType.splice( j–, 1 );
}
}
continue;
}
special = jQuery.event.special[ type ] || {};
for ( var j = pos || 0; j = 0 ) {
event.type = type = type.slice(0, -1);
event.exclusive = true;
}
// Handle a global trigger
if ( !elem ) {
// Don’t bubble custom events when global (to avoid too much overhead)
event.stopPropagation();
// Only trigger if we’ve ever bound an event for it
if ( jQuery.event.global[ type ] ) {
jQuery.each( jQuery.cache, function() {
if ( this.events && this.events[type] ) {
jQuery.event.trigger( event, data, this.handle.elem );
}
});
}
}
// Handle triggering a single element
// don’t do events on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
// Clean up in case it is reused
event.result = undefined;
event.target = elem;
// Clone the incoming data, if any
data = jQuery.makeArray( data );
data.unshift( event );
}
event.currentTarget = elem;
// Trigger the event, it is assumed that “handle” is a function
var handle = jQuery.data( elem, “handle” );
if ( handle ) {
handle.apply( elem, data );
}
var parent = elem.parentNode || elem.ownerDocument;
// Trigger an inline bound script
try {
if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
if ( elem[ “on” + type ] && elem[ “on” + type ].apply( elem, data ) === false ) {
event.result = false;
}
}
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (e) {}
if ( !event.isPropagationStopped() && parent ) {
jQuery.event.trigger( event, data, parent, true );
} else if ( !event.isDefaultPrevented() ) {
var target = event.target, old,
isClick = jQuery.nodeName(target, “a”) && type === “click”,
special = jQuery.event.special[ type ] || {};
if ( (!special._default || special._default.call( elem, event ) === false) &&
!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
try {
if ( target[ type ] ) {
// Make sure that we don’t accidentally re-trigger the onFOO events
old = target[ “on” + type ];
if ( old ) {
target[ “on” + type ] = null;
}
jQuery.event.triggered = true;
target[ type ]();
}
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (e) {}
if ( old ) {
target[ “on” + type ] = old;
}
jQuery.event.triggered = false;
}
}
},
handle: function( event ) {
var all, handlers, namespaces, namespace, events;
event = arguments[0] = jQuery.event.fix( event || window.event );
event.currentTarget = this;
// Namespaced event handlers
all = event.type.indexOf(“.”) < 0 && !event.exclusive;
if ( !all ) {
namespaces = event.type.split(".");
event.type = namespaces.shift();
namespace = new RegExp("(^|\.)" + namespaces.slice(0).sort().join("\.(?:.*\.)?") + "(\.|$)");
}
var events = jQuery.data(this, "events"), handlers = events[ event.type ];
if ( events && handlers ) {
// Clone the handlers to prevent manipulation
handlers = handlers.slice(0);
for ( var j = 0, l = handlers.length; j -1 ?
jQuery.map( elem.options, function( elem ) {
return elem.selected;
}).join(“-“) :
“”;
} else if ( elem.nodeName.toLowerCase() === “select” ) {
val = elem.selectedIndex;
}
return val;
},
testChange = function testChange( e ) {
var elem = e.target, data, val;
if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
return;
}
data = jQuery.data( elem, “_change_data” );
val = getVal(elem);
// the current data will be also retrieved by beforeactivate
if ( e.type !== “focusout” || elem.type !== “radio” ) {
jQuery.data( elem, “_change_data”, val );
}
if ( data === undefined || val === data ) {
return;
}
if ( data != null || val ) {
e.type = “change”;
return jQuery.event.trigger( e, arguments[1], elem );
}
};
jQuery.event.special.change = {
filters: {
focusout: testChange,
click: function( e ) {
var elem = e.target, type = elem.type;
if ( type === “radio” || type === “checkbox” || elem.nodeName.toLowerCase() === “select” ) {
return testChange.call( this, e );
}
},
// Change has to be called before submit
// Keydown will be called before keypress, which is used in submit-event delegation
keydown: function( e ) {
var elem = e.target, type = elem.type;
if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== “textarea”) ||
(e.keyCode === 32 && (type === “checkbox” || type === “radio”)) ||
type === “select-multiple” ) {
return testChange.call( this, e );
}
},
// Beforeactivate happens also before the previous element is blurred
// with this event you can’t trigger a change event, but you can store
// information/focus[in] is not needed anymore
beforeactivate: function( e ) {
var elem = e.target;
jQuery.data( elem, “_change_data”, getVal(elem) );
}
},
setup: function( data, namespaces ) {
if ( this.type === “file” ) {
return false;
}
for ( var type in changeFilters ) {
jQuery.event.add( this, type + “.specialChange”, changeFilters[type] );
}
return formElems.test( this.nodeName );
},
teardown: function( namespaces ) {
jQuery.event.remove( this, “.specialChange” );
return formElems.test( this.nodeName );
}
};
changeFilters = jQuery.event.special.change.filters;
}
function trigger( type, elem, args ) {
args[0].type = type;
return jQuery.event.handle.apply( elem, args );
}
// Create “bubbling” focus and blur events
if ( document.addEventListener ) {
jQuery.each({ focus: “focusin”, blur: “focusout” }, function( orig, fix ) {
jQuery.event.special[ fix ] = {
setup: function() {
this.addEventListener( orig, handler, true );
},
teardown: function() {
this.removeEventListener( orig, handler, true );
}
};
function handler( e ) {
e = jQuery.event.fix( e );
e.type = fix;
return jQuery.event.handle.call( this, e );
}
});
}
jQuery.each([“bind”, “one”], function( i, name ) {
jQuery.fn[ name ] = function( type, data, fn ) {
// Handle object literals
if ( typeof type === “object” ) {
for ( var key in type ) {
this[ name ](key, data, type[key], fn);
}
return this;
}
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
var handler = name === “one” ? jQuery.proxy( fn, function( event ) {
jQuery( this ).unbind( event, handler );
return fn.apply( this, arguments );
}) : fn;
if ( type === “unload” && name !== “one” ) {
this.one( type, data, fn );
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.add( this[i], type, handler, data );
}
}
return this;
};
});
jQuery.fn.extend({
unbind: function( type, fn ) {
// Handle object literals
if ( typeof type === "object" && !type.preventDefault ) {
for ( var key in type ) {
this.unbind(key, type[key]);
}
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.remove( this[i], type, fn );
}
}
return this;
},
delegate: function( selector, types, data, fn ) {
return this.live( types, data, fn, selector );
},
undelegate: function( selector, types, fn ) {
if ( arguments.length === 0 ) {
return this.unbind( "live" );
} else {
return this.die( types, null, fn, selector );
}
},
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
});
},
triggerHandler: function( type, data ) {
if ( this[0] ) {
var event = jQuery.Event( type );
event.preventDefault();
event.stopPropagation();
jQuery.event.trigger( event, data, this[0] );
return event.result;
}
},
toggle: function( fn ) {
// Save reference to arguments for access in closure
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++ ] );
}
return this.click( jQuery.proxy( fn, function( event ) {
// Figure out which function to execute
var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
// Make sure that clicks stop
event.preventDefault();
// and execute the function
return args[ lastToggle ].apply( this, arguments ) || false;
}));
},
hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
}
});
var liveMap = {
focus: "focusin",
blur: "focusout",
mouseenter: "mouseover",
mouseleave: "mouseout"
};
jQuery.each(["live", "die"], function( i, name ) {
jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
var type, i = 0, match, namespaces, preType,
selector = origSelector || this.selector,
context = origSelector ? this : jQuery( this.context );
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
types = (types || "").split(" ");
while ( (type = types[ i++ ]) != null ) {
match = rnamespaces.exec( type );
namespaces = "";
if ( match ) {
namespaces = match[0];
type = type.replace( rnamespaces, "" );
}
if ( type === "hover" ) {
types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
continue;
}
preType = type;
if ( type === "focus" || type === "blur" ) {
types.push( liveMap[ type ] + namespaces );
type = type + namespaces;
} else {
type = (liveMap[ type ] || type) + namespaces;
}
if ( name === "live" ) {
// bind live handler
context.each(function(){
jQuery.event.add( this, liveConvert( type, selector ),
{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
});
} else {
// unbind live handler
context.unbind( liveConvert( type, selector ), fn );
}
}
return this;
}
});
function liveHandler( event ) {
var stop, elems = [], selectors = [], args = arguments,
related, match, handleObj, elem, j, i, l, data,
events = jQuery.data( this, "events" );
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
return;
}
event.liveFired = this;
var live = events.live.slice(0);
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
selectors.push( handleObj.selector );
} else {
live.splice( j–, 1 );
}
}
match = jQuery( event.target ).closest( selectors, event.currentTarget );
for ( i = 0, l = match.length; i < l; i++ ) {
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
if ( match[i].selector === handleObj.selector ) {
elem = match[i].elem;
related = null;
// Those two events require additional checking
if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
}
if ( !related || related !== elem ) {
elems.push({ elem: elem, handleObj: handleObj });
}
}
}
}
for ( i = 0, l = elems.length; i +~,([\]+)+|[>+~])(s*,s*)?((?:.|r|n)*)/g,
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
baseHasDuplicate = true;
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
// Thus far that includes Google Chrome.
[0, 0].sort(function(){
baseHasDuplicate = false;
return 0;
});
var Sizzle = function(selector, context, results, seed) {
results = results || [];
var origContext = context = context || document;
if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
return [];
}
if ( !selector || typeof selector !== “string” ) {
return results;
}
var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
soFar = selector;
// Reset the position of the chunker regexp (start from head)
while ( (chunker.exec(“”), m = chunker.exec(soFar)) !== null ) {
soFar = m[3];
parts.push( m[1] );
if ( m[2] ) {
extra = m[3];
break;
}
}
if ( parts.length > 1 && origPOS.exec( selector ) ) {
if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
set = posProcess( parts[0] + parts[1], context );
} else {
set = Expr.relative[ parts[0] ] ?
[ context ] :
Sizzle( parts.shift(), context );
while ( parts.length ) {
selector = parts.shift();
if ( Expr.relative[ selector ] ) {
selector += parts.shift();
}
set = posProcess( selector, set );
}
}
} else {
// Take a shortcut and set the context if the root selector is an ID
// (but not if it’ll be faster if the inner selector is an ID)
if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length – 1]) ) {
var ret = Sizzle.find( parts.shift(), context, contextXML );
context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
}
if ( context ) {
var ret = seed ?
{ 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;
if ( parts.length > 0 ) {
checkSet = makeArray(set);
} else {
prune = false;
}
while ( parts.length ) {
var cur = parts.pop(), pop = cur;
if ( !Expr.relative[ cur ] ) {
cur = “”;
} else {
pop = parts.pop();
}
if ( pop == null ) {
pop = context;
}
Expr.relative[ cur ]( checkSet, pop, contextXML );
}
} else {
checkSet = parts = [];
}
}
if ( !checkSet ) {
checkSet = set;
}
if ( !checkSet ) {
Sizzle.error( cur || selector );
}
if ( toString.call(checkSet) === “[object Array]” ) {
if ( !prune ) {
results.push.apply( results, checkSet );
} else if ( context && context.nodeType === 1 ) {
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] );
}
}
} else {
for ( var i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
results.push( set[i] );
}
}
}
} else {
makeArray( checkSet, results );
}
if ( extra ) {
Sizzle( extra, origContext, results, seed );
Sizzle.uniqueSort( results );
}
return results;
};
Sizzle.uniqueSort = function(results){
if ( sortOrder ) {
hasDuplicate = baseHasDuplicate;
results.sort(sortOrder);
if ( hasDuplicate ) {
for ( var i = 1; i < results.length; i++ ) {
if ( results[i] === results[i-1] ) {
results.splice(i–, 1);
}
}
}
}
return results;
};
Sizzle.matches = function(expr, set){
return Sizzle(expr, null, null, set);
};
Sizzle.find = function(expr, context, isXML){
var set, match;
if ( !expr ) {
return [];
}
for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
var type = Expr.order[i], match;
if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
var left = match[1];
match.splice(1,1);
if ( left.substr( left.length – 1 ) !== "\" ) {
match[1] = (match[1] || "").replace(/\/g, "");
set = Expr.find[ type ]( match, context, isXML );
if ( set != null ) {
expr = expr.replace( Expr.match[ type ], "" );
break;
}
}
}
}
if ( !set ) {
set = context.getElementsByTagName("*");
}
return {set: set, expr: expr};
};
Sizzle.filter = function(expr, set, inplace, not){
var old = expr, result = [], curLoop = set, match, anyFound,
isXMLFilter = set && set[0] && isXML(set[0]);
while ( expr && set.length ) {
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;
match.splice(1,1);
if ( left.substr( left.length – 1 ) === "\" ) {
continue;
}
if ( curLoop === result ) {
result = [];
}
if ( Expr.preFilter[ type ] ) {
match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
if ( !match ) {
anyFound = found = true;
} else if ( match === true ) {
continue;
}
}
if ( match ) {
for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
if ( item ) {
found = filter( item, match, i, curLoop );
var pass = not ^ !!found;
if ( inplace && found != null ) {
if ( pass ) {
anyFound = true;
} else {
curLoop[i] = false;
}
} else if ( pass ) {
result.push( item );
anyFound = true;
}
}
}
}
if ( found !== undefined ) {
if ( !inplace ) {
curLoop = result;
}
expr = expr.replace( Expr.match[ type ], "" );
if ( !anyFound ) {
return [];
}
break;
}
}
}
// Improper expression
if ( expr === old ) {
if ( anyFound == null ) {
Sizzle.error( expr );
} else {
break;
}
}
old = expr;
}
return curLoop;
};
Sizzle.error = function( msg ) {
throw "Syntax error, unrecognized expression: " + msg;
};
var Expr = Sizzle.selectors = {
order: [ "ID", "NAME", "TAG" ],
match: {
ID: /#((?:[wu00c0-uFFFF-]|\.)+)/,
CLASS: /.((?:[wu00c0-uFFFF-]|\.)+)/,
NAME: /[name=['"]*((?:[wu00c0-uFFFF-]|\.)+)['"]*]/,
ATTR: /[s*((?:[wu00c0-uFFFF-]|\.)+)s*(?:(S?=)s*(['"]*)(.*?)3|)s*]/,
TAG: /^((?:[wu00c0-uFFFF*-]|\.)+)/,
CHILD: /:(only|nth|last|first)-child(?:((even|odd|[dn+-]*)))?/,
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:((d*)))?(?=[^-]|$)/,
PSEUDO: /:((?:[wu00c0-uFFFF-]|\.)+)(?:((['"]?)((?:([^)]+)|[^()]*)+)2))?/
},
leftMatch: {},
attrMap: {
"class": "className",
"for": "htmlFor"
},
attrHandle: {
href: function(elem){
return elem.getAttribute("href");
}
},
relative: {
"+": function(checkSet, part){
var isPartStr = typeof part === "string",
isTag = isPartStr && !/W/.test(part),
isPartStrNotTag = isPartStr && !isTag;
if ( isTag ) {
part = part.toLowerCase();
}
for ( var i = 0, l = checkSet.length, elem; i “: function(checkSet, part){
var isPartStr = typeof part === “string”;
if ( isPartStr && !/W/.test(part) ) {
part = part.toLowerCase();
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
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];
if ( elem ) {
checkSet[i] = isPartStr ?
elem.parentNode :
elem.parentNode === part;
}
}
if ( isPartStr ) {
Sizzle.filter( part, checkSet, true );
}
}
},
"": function(checkSet, part, isXML){
var doneName = done++, checkFn = dirCheck;
if ( typeof part === "string" && !/W/.test(part) ) {
var nodeCheck = part = part.toLowerCase();
checkFn = dirNodeCheck;
}
checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
},
"~": function(checkSet, part, isXML){
var doneName = done++, checkFn = dirCheck;
if ( typeof part === "string" && !/W/.test(part) ) {
var nodeCheck = part = part.toLowerCase();
checkFn = dirNodeCheck;
}
checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
}
},
find: {
ID: function(match, context, isXML){
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
return m ? [m] : [];
}
},
NAME: function(match, context){
if ( typeof context.getElementsByName !== "undefined" ) {
var ret = [], results = context.getElementsByName(match[1]);
for ( var i = 0, l = results.length; i = 0) ) {
if ( !inplace ) {
result.push( elem );
}
} else if ( inplace ) {
curLoop[i] = false;
}
}
}
return false;
},
ID: function(match){
return match[1].replace(/\/g, “”);
},
TAG: function(match, curLoop){
return match[1].toLowerCase();
},
CHILD: function(match){
if ( match[1] === “nth” ) {
// parse equations like ‘even’, ‘odd’, ‘5’, ‘2n’, ‘3n+2’, ‘4n-1’, ‘-n+6’
var test = /(-?)(d*)n((?:+|-)?d*)/.exec(
match[2] === “even” && “2n” || match[2] === “odd” && “2n+1” ||
!/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;
}
// TODO: Move to normal caching system
match[0] = done++;
return match;
},
ATTR: function(match, curLoop, inplace, result, not, isXML){
var name = match[1].replace(/\/g, “”);
if ( !isXML && Expr.attrMap[name] ) {
match[1] = Expr.attrMap[name];
}
if ( match[2] === “~=” ) {
match[4] = ” ” + match[4] + ” “;
}
return match;
},
PSEUDO: function(match, curLoop, inplace, result, not){
if ( match[1] === “not” ) {
// If we’re dealing with a complex expression, or a simple one
if ( ( chunker.exec(match[3]) || “” ).length > 1 || /^w/.test(match[3]) ) {
match[3] = Sizzle(match[3], null, null, curLoop);
} else {
var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
if ( !inplace ) {
result.push.apply( result, ret );
}
return false;
}
} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
return true;
}
return match;
},
POS: function(match){
match.unshift( true );
return match;
}
},
filters: {
enabled: function(elem){
return elem.disabled === false && elem.type !== “hidden”;
},
disabled: function(elem){
return elem.disabled === true;
},
checked: function(elem){
return elem.checked === true;
},
selected: function(elem){
// Accessing this property makes selected-by-default
// options in Safari work properly
elem.parentNode.selectedIndex;
return elem.selected === true;
},
parent: function(elem){
return !!elem.firstChild;
},
empty: function(elem){
return !elem.firstChild;
},
has: function(elem, i, match){
return !!Sizzle( match[3], elem ).length;
},
header: function(elem){
return /hd/i.test( elem.nodeName );
},
text: function(elem){
return “text” === elem.type;
},
radio: function(elem){
return “radio” === elem.type;
},
checkbox: function(elem){
return “checkbox” === elem.type;
},
file: function(elem){
return “file” === elem.type;
},
password: function(elem){
return “password” === elem.type;
},
submit: function(elem){
return “submit” === elem.type;
},
image: function(elem){
return “image” === elem.type;
},
reset: function(elem){
return “reset” === elem.type;
},
button: function(elem){
return “button” === elem.type || elem.nodeName.toLowerCase() === “button”;
},
input: function(elem){
return /input|select|textarea|button/i.test(elem.nodeName);
}
},
setFilters: {
first: function(elem, i){
return i === 0;
},
last: function(elem, i, match, array){
return i === array.length – 1;
},
even: function(elem, i){
return i % 2 === 0;
},
odd: function(elem, i){
return i % 2 === 1;
},
lt: function(elem, i, match){
return i match[3] – 0;
},
nth: function(elem, i, match){
return match[3] – 0 === i;
},
eq: function(elem, i, match){
return match[3] – 0 === i;
}
},
filter: {
PSEUDO: function(elem, match, i, array){
var name = match[1], filter = Expr.filters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
} else if ( name === “contains” ) {
return (elem.textContent || elem.innerText || getText([ elem ]) || “”).indexOf(match[3]) >= 0;
} else if ( name === “not” ) {
var not = match[3];
for ( var i = 0, l = not.length; i = 0 );
}
}
},
ID: function(elem, match){
return elem.nodeType === 1 && elem.getAttribute(“id”) === match;
},
TAG: function(elem, match){
return (match === “*” && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
},
CLASS: function(elem, match){
return (” ” + (elem.className || elem.getAttribute(“class”)) + ” “)
.indexOf( match ) > -1;
},
ATTR: function(elem, match){
var name = match[1],
result = Expr.attrHandle[ name ] ?
Expr.attrHandle[ name ]( elem ) :
elem[ name ] != null ?
elem[ name ] :
elem.getAttribute( name ),
value = result + “”,
type = match[2],
check = match[4];
return result == null ?
type === “!=” :
type === “=” ?
value === check :
type === “*=” ?
value.indexOf(check) >= 0 :
type === “~=” ?
(” ” + value + ” “).indexOf(check) >= 0 :
!check ?
value && result !== false :
type === “!=” ?
value !== check :
type === “^=” ?
value.indexOf(check) === 0 :
type === “$=” ?
value.substr(value.length – check.length) === check :
type === “|=” ?
value === check || value.substr(0, check.length + 1) === check + “-” :
false;
},
POS: function(elem, match, i, array){
var name = match[2], filter = Expr.setFilters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
}
}
}
};
var origPOS = Expr.match.POS;
for ( var type in Expr.match ) {
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){
return “\” + (num – 0 + 1);
}));
}
var makeArray = function(array, results) {
array = Array.prototype.slice.call( array, 0 );
if ( results ) {
results.push.apply( results, array );
return results;
}
return array;
};
// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
// Also verifies that the returned array holds DOM nodes
// (which is not the case in the Blackberry browser)
try {
Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
// Provide a fallback method if it does not work
} catch(e){
makeArray = function(array, results) {
var ret = results || [];
if ( toString.call(array) === “[object Array]” ) {
Array.prototype.push.apply( ret, array );
} else {
if ( typeof array.length === “number” ) {
for ( var i = 0, l = array.length; i < l; i++ ) {
ret.push( array[i] );
}
} else {
for ( var i = 0; array[i]; i++ ) {
ret.push( array[i] );
}
}
}
return ret;
};
}
var sortOrder;
if ( document.documentElement.compareDocumentPosition ) {
sortOrder = function( a, b ) {
if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
if ( a == b ) {
hasDuplicate = true;
}
return a.compareDocumentPosition ? -1 : 1;
}
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
if ( ret === 0 ) {
hasDuplicate = true;
}
return ret;
};
} else if ( "sourceIndex" in document.documentElement ) {
sortOrder = function( a, b ) {
if ( !a.sourceIndex || !b.sourceIndex ) {
if ( a == b ) {
hasDuplicate = true;
}
return a.sourceIndex ? -1 : 1;
}
var ret = a.sourceIndex – b.sourceIndex;
if ( ret === 0 ) {
hasDuplicate = true;
}
return ret;
};
} else if ( document.createRange ) {
sortOrder = function( a, b ) {
if ( !a.ownerDocument || !b.ownerDocument ) {
if ( a == b ) {
hasDuplicate = true;
}
return a.ownerDocument ? -1 : 1;
}
var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
aRange.setStart(a, 0);
aRange.setEnd(a, 0);
bRange.setStart(b, 0);
bRange.setEnd(b, 0);
var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
if ( ret === 0 ) {
hasDuplicate = true;
}
return ret;
};
}
// Utility function for retreiving the text value of an array of DOM nodes
function getText( elems ) {
var ret = "", elem;
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
ret += elem.nodeValue;
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
ret += getText( elem.childNodes );
}
}
return ret;
}
// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
// We're going to inject a fake input element with a specified name
var form = document.createElement("div"),
id = "script" + (new Date).getTime();
form.innerHTML = "“;
// Inject it into the root element, check its status, and remove it quickly
var root = document.documentElement;
root.insertBefore( form, root.firstChild );
// The workaround has to do additional checks after a getElementById
// Which slows things down for other browsers (hence the branching)
if ( document.getElementById( id ) ) {
Expr.find.ID = function(match, context, isXML){
if ( typeof context.getElementById !== “undefined” && !isXML ) {
var m = context.getElementById(match[1]);
return m ? m.id === match[1] || typeof m.getAttributeNode !== “undefined” && m.getAttributeNode(“id”).nodeValue === match[1] ? [m] : undefined : [];
}
};
Expr.filter.ID = function(elem, match){
var node = typeof elem.getAttributeNode !== “undefined” && elem.getAttributeNode(“id”);
return elem.nodeType === 1 && node && node.nodeValue === match;
};
}
root.removeChild( form );
root = form = null; // release memory in IE
})();
(function(){
// Check to see if the browser returns only elements
// when doing getElementsByTagName(“*”)
// Create a fake element
var div = document.createElement(“div”);
div.appendChild( document.createComment(“”) );
// Make sure no comments are found
if ( div.getElementsByTagName(“*”).length > 0 ) {
Expr.find.TAG = function(match, context){
var results = context.getElementsByTagName(match[1]);
// Filter out possible comments
if ( match[1] === “*” ) {
var tmp = [];
for ( var i = 0; results[i]; i++ ) {
if ( results[i].nodeType === 1 ) {
tmp.push( results[i] );
}
}
results = tmp;
}
return results;
};
}
// Check to see if an attribute returns normalized href attributes
div.innerHTML = ““;
if ( div.firstChild && typeof div.firstChild.getAttribute !== “undefined” &&
div.firstChild.getAttribute(“href”) !== “#” ) {
Expr.attrHandle.href = function(elem){
return elem.getAttribute(“href”, 2);
};
}
div = null; // release memory in IE
})();
if ( document.querySelectorAll ) {
(function(){
var oldSizzle = Sizzle, div = document.createElement(“div”);
div.innerHTML = ”
“;
// Safari can’t handle uppercase or unicode characters when
// in quirks mode.
if ( div.querySelectorAll && div.querySelectorAll(“.TEST”).length === 0 ) {
return;
}
Sizzle = function(query, context, extra, seed){
context = context || document;
// Only use querySelectorAll on non-XML documents
// (ID selectors don’t work in non-HTML documents)
if ( !seed && context.nodeType === 9 && !isXML(context) ) {
try {
return makeArray( context.querySelectorAll(query), extra );
} catch(e){}
}
return oldSizzle(query, context, extra, seed);
};
for ( var prop in oldSizzle ) {
Sizzle[ prop ] = oldSizzle[ prop ];
}
div = null; // release memory in IE
})();
}
(function(){
var div = document.createElement(“div”);
div.innerHTML = ”
“;
// Opera can’t find a second classname (in 9.6)
// Also, make sure that getElementsByClassName actually exists
if ( !div.getElementsByClassName || div.getElementsByClassName(“e”).length === 0 ) {
return;
}
// Safari caches class attributes, doesn’t catch changes (in 3.2)
div.lastChild.className = “e”;
if ( div.getElementsByClassName(“e”).length === 1 ) {
return;
}
Expr.order.splice(1, 0, “CLASS”);
Expr.find.CLASS = function(match, context, isXML) {
if ( typeof context.getElementsByClassName !== “undefined” && !isXML ) {
return context.getElementsByClassName(match[1]);
}
};
div = null; // release memory in IE
})();
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
elem = elem[dir];
var match = false;
while ( elem ) {
if ( elem.sizcache === doneName ) {
match = checkSet[elem.sizset];
break;
}
if ( elem.nodeType === 1 && !isXML ){
elem.sizcache = doneName;
elem.sizset = i;
}
if ( elem.nodeName.toLowerCase() === cur ) {
match = elem;
break;
}
elem = elem[dir];
}
checkSet[i] = match;
}
}
}
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i 0 ) {
match = elem;
break;
}
}
elem = elem[dir];
}
checkSet[i] = match;
}
}
}
var contains = document.compareDocumentPosition ? function(a, b){
return !!(a.compareDocumentPosition(b) & 16);
} : function(a, b){
return a !== b && (a.contains ? a.contains(b) : true);
};
var isXML = function(elem){
// documentElement is verified for cases where it doesn’t yet exist
// (such as loading iframes in IE – #4833)
var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
return documentElement ? documentElement.nodeName !== “HTML” : false;
};
var posProcess = function(selector, context){
var tmpSet = [], later = “”, match,
root = context.nodeType ? [context] : context;
// Position selectors must be done after the filter
// And so must :not(positional) so we move all PSEUDOs to the end
while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
later += match[0];
selector = selector.replace( Expr.match.PSEUDO, “” );
}
selector = Expr.relative[selector] ? selector + “*” : selector;
for ( var i = 0, l = root.length; i = 0) === keep;
});
};
jQuery.fn.extend({
find: function( selector ) {
var ret = this.pushStack( “”, “find”, selector ), length = 0;
for ( var i = 0, l = this.length; i 0 ) {
// Make sure that the results are unique
for ( var n = length; n < ret.length; n++ ) {
for ( var r = 0; r < length; r++ ) {
if ( ret[r] === ret[n] ) {
ret.splice(n–, 1);
break;
}
}
}
}
}
return ret;
},
has: function( target ) {
var targets = jQuery( target );
return this.filter(function() {
for ( var i = 0, l = targets.length; i 0;
},
closest: function( selectors, context ) {
if ( jQuery.isArray( selectors ) ) {
var ret = [], cur = this[0], match, matches = {}, selector;
if ( cur && selectors.length ) {
for ( var i = 0, l = selectors.length; i -1 : jQuery(cur).is(match) ) {
ret.push({ selector: selector, elem: cur });
delete matches[selector];
}
}
cur = cur.parentNode;
}
}
return ret;
}
var pos = jQuery.expr.match.POS.test( selectors ) ?
jQuery( selectors, context || this.context ) : null;
return this.map(function( i, cur ) {
while ( cur && cur.ownerDocument && cur !== context ) {
if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
return cur;
}
cur = cur.parentNode;
}
return null;
});
},
// Determine the position of an element within
// the matched set of elements
index: function( elem ) {
if ( !elem || typeof elem === “string” ) {
return jQuery.inArray( this[0],
// If it receives a string, the selector is used
// If it receives nothing, the siblings are used
elem ? jQuery( elem ) : this.parent().children() );
}
// Locate the position of the desired element
return jQuery.inArray(
// If it receives a jQuery object, the first element is used
elem.jquery ? elem[0] : elem, this );
},
add: function( selector, context ) {
var set = typeof selector === “string” ?
jQuery( selector, context || this.context ) :
jQuery.makeArray( selector ),
all = jQuery.merge( this.get(), set );
return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
all :
jQuery.unique( all ) );
},
andSelf: function() {
return this.add( this.prevObject );
}
});
// A painfully simple check to see if an element is disconnected
// from a document (should be improved, where feasible).
function isDisconnected( node ) {
return !node || !node.parentNode || node.parentNode.nodeType === 11;
}
jQuery.each({
parent: function( elem ) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function( elem ) {
return jQuery.dir( elem, “parentNode” );
},
parentsUntil: function( elem, i, until ) {
return jQuery.dir( elem, “parentNode”, until );
},
next: function( elem ) {
return jQuery.nth( elem, 2, “nextSibling” );
},
prev: function( elem ) {
return jQuery.nth( elem, 2, “previousSibling” );
},
nextAll: function( elem ) {
return jQuery.dir( elem, “nextSibling” );
},
prevAll: function( elem ) {
return jQuery.dir( elem, “previousSibling” );
},
nextUntil: function( elem, i, until ) {
return jQuery.dir( elem, “nextSibling”, until );
},
prevUntil: function( elem, i, until ) {
return jQuery.dir( elem, “previousSibling”, until );
},
siblings: function( elem ) {
return jQuery.sibling( elem.parentNode.firstChild, elem );
},
children: function( elem ) {
return jQuery.sibling( elem.firstChild );
},
contents: function( elem ) {
return jQuery.nodeName( elem, “iframe” ) ?
elem.contentDocument || elem.contentWindow.document :
jQuery.makeArray( elem.childNodes );
}
}, function( name, fn ) {
jQuery.fn[ name ] = function( until, selector ) {
var ret = jQuery.map( this, fn, until );
if ( !runtil.test( name ) ) {
selector = until;
}
if ( selector && typeof selector === “string” ) {
ret = jQuery.filter( selector, ret );
}
ret = this.length > 1 ? jQuery.unique( ret ) : ret;
if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
ret = ret.reverse();
}
return this.pushStack( ret, name, slice.call(arguments).join(“,”) );
};
});
jQuery.extend({
filter: function( expr, elems, not ) {
if ( not ) {
expr = “:not(” + expr + “)”;
}
return jQuery.find.matches(expr, elems);
},
dir: function( elem, dir, until ) {
var matched = [], cur = elem[dir];
while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
if ( cur.nodeType === 1 ) {
matched.push( cur );
}
cur = cur[dir];
}
return matched;
},
nth: function( cur, result, dir, elem ) {
result = result || 1;
var num = 0;
for ( ; cur; cur = cur[dir] ) {
if ( cur.nodeType === 1 && ++num === result ) {
break;
}
}
return cur;
},
sibling: function( n, elem ) {
var r = [];
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
r.push( n );
}
}
return r;
}
});
var rinlinejQuery = / jQueryd+=”(?:d+|null)”/g,
rleadingWhitespace = /^s+/,
rxhtmlTag = /(]*?)/>/g,
rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
rtagName = /<([w:]+)/,
rtbody = /
<tbody/i,
rhtml = /<|&#?w+;/,
rnocache = /<script|<object|<embed|
<option|
“;
},
wrapMap = {
option: [ 1, “”, ”
” ],
legend: [ 1, ”
“, ”
” ],
thead: [ 1, ”
” ],
tr: [ 2, ”
” ],
td: [ 3, ”
” ],
col: [ 2, ”
” ],
area: [ 1, ”
” ],
_default: [ 0, “”, “” ]
};
wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
// IE can’t serialize
and tags normally
if ( !jQuery.support.htmlSerialize ) {
wrapMap._default = [ 1, “div
” ];
}
jQuery.fn.extend({
text: function( text ) {
if ( jQuery.isFunction(text) ) {
return this.each(function(i) {
var self = jQuery(this);
self.text( text.call(this, i, self.text()) );
});
}
if ( typeof text !== “object” && text !== undefined ) {
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
}
return jQuery.text( this );
},
wrapAll: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapAll( html.call(this, i) );
});
}
if ( this[0] ) {
// The elements to wrap the target around
var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
if ( this[0].parentNode ) {
wrap.insertBefore( this[0] );
}
wrap.map(function() {
var elem = this;
while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
elem = elem.firstChild;
}
return elem;
}).append(this);
}
return this;
},
wrapInner: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapInner( html.call(this, i) );
});
}
return this.each(function() {
var self = jQuery( this ), contents = self.contents();
if ( contents.length ) {
contents.wrapAll( html );
} else {
self.append( html );
}
});
},
wrap: function( html ) {
return this.each(function() {
jQuery( this ).wrapAll( html );
});
},
unwrap: function() {
return this.parent().each(function() {
if ( !jQuery.nodeName( this, “body” ) ) {
jQuery( this ).replaceWith( this.childNodes );
}
}).end();
},
append: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.appendChild( elem );
}
});
},
prepend: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.insertBefore( elem, this.firstChild );
}
});
},
before: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this );
});
} else if ( arguments.length ) {
var set = jQuery(arguments[0]);
set.push.apply( set, this.toArray() );
return this.pushStack( set, “before”, arguments );
}
},
after: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this.nextSibling );
});
} else if ( arguments.length ) {
var set = this.pushStack( this, “after”, arguments );
set.push.apply( set, jQuery(arguments[0]).toArray() );
return set;
}
},
// keepData is for internal use only–do not document
remove: function( selector, keepData ) {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName(“*”) );
jQuery.cleanData( [ elem ] );
}
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
}
return this;
},
empty: function() {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
// Remove element nodes and prevent memory leaks
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName(“*”) );
}
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild );
}
}
return this;
},
clone: function( events ) {
// Do the clone
var ret = this.map(function() {
if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
// IE copies events bound via attachEvent when
// using cloneNode. Calling detachEvent on the
// clone will also remove the events from the orignal
// In order to get around this, we use innerHTML.
// 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).
var html = this.outerHTML, ownerDocument = this.ownerDocument;
if ( !html ) {
var div = ownerDocument.createElement(“div”);
div.appendChild( this.cloneNode(true) );
html = div.innerHTML;
}
return jQuery.clean([html.replace(rinlinejQuery, “”)
// Handle the case in IE 8 where action=/test/> self-closes a tag
.replace(/=([^=”‘>s]+/)>/g, ‘=”$1″>’)
.replace(rleadingWhitespace, “”)], ownerDocument)[0];
} else {
return this.cloneNode(true);
}
});
// Copy the events from the original to the clone
if ( events === true ) {
cloneCopyEvent( this, ret );
cloneCopyEvent( this.find(“*”), ret.find(“*”) );
}
// Return the cloned set
return ret;
},
html: function( value ) {
if ( value === undefined ) {
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, “”) :
null;
// See if we can take a shortcut and just use innerHTML
} else if ( typeof value === “string” && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || [“”, “”])[1].toLowerCase() ] ) {
value = value.replace(rxhtmlTag, fcloseTag);
try {
for ( var i = 0, l = this.length; i < l; i++ ) {
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) {
jQuery.cleanData( this[i].getElementsByTagName("*") );
this[i].innerHTML = value;
}
}
// If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value );
}
} else if ( jQuery.isFunction( value ) ) {
this.each(function(i){
var self = jQuery(this), old = self.html();
self.empty().append(function(){
return value.call( this, i, old );
});
});
} else {
this.empty().append( value );
}
return this;
},
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 elements
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this), old = self.html();
self.replaceWith( value.call( this, i, old ) );
});
}
if ( typeof value !== "string" ) {
value = jQuery(value).detach();
}
return this.each(function() {
var next = this.nextSibling, parent = this.parentNode;
jQuery(this).remove();
if ( next ) {
jQuery(next).before( value );
} else {
jQuery(parent).append( value );
}
});
} else {
return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
}
},
detach: function( selector ) {
return this.remove( selector, true );
},
domManip: function( args, table, callback ) {
var results, first, value = args[0], scripts = [], fragment, parent;
// We can't cloneNode fragments that contain checked, in WebKit
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
return this.each(function() {
jQuery(this).domManip( args, table, callback, true );
});
}
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
args[0] = value.call(this, i, table ? self.html() : undefined);
self.domManip( args, table, callback );
});
}
if ( this[0] ) {
parent = value && value.parentNode;
// If we're in a fragment, just use that instead of building a new one
if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
results = { fragment: parent };
} else {
results = buildFragment( args, this, scripts );
}
fragment = results.fragment;
if ( fragment.childNodes.length === 1 ) {
first = fragment = fragment.firstChild;
} else {
first = fragment.firstChild;
}
if ( first ) {
table = table && jQuery.nodeName( first, "tr" );
for ( var i = 0, l = this.length; i 0 || results.cacheable || this.length > 1 ?
fragment.cloneNode(true) :
fragment
);
}
}
if ( scripts.length ) {
jQuery.each( scripts, evalScript );
}
}
return this;
function root( elem, cur ) {
return jQuery.nodeName(elem, “table”) ?
(elem.getElementsByTagName(“tbody”)[0] ||
elem.appendChild(elem.ownerDocument.createElement(“tbody”))) :
elem;
}
}
});
function cloneCopyEvent(orig, ret) {
var i = 0;
ret.each(function() {
if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
return;
}
var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
if ( events ) {
delete curData.handle;
curData.events = {};
for ( var type in events ) {
for ( var handler in events[ type ] ) {
jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
}
}
}
});
}
function buildFragment( args, nodes, scripts ) {
var fragment, cacheable, cacheresults,
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
// Only cache “small” (1/2 KB) strings that are associated with the main document
// Cloning options loses the selected state, so don’t cache them
// IE 6 doesn’t like it when you put or elements in a fragment
// Also, WebKit does not clone ‘checked’ attributes on cloneNode, so don’t cache
if ( args.length === 1 && typeof args[0] === “string” && args[0].length < 512 && doc === document &&
!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
cacheable = true;
cacheresults = jQuery.fragments[ args[0] ];
if ( cacheresults ) {
if ( cacheresults !== 1 ) {
fragment = cacheresults;
}
}
}
if ( !fragment ) {
fragment = doc.createDocumentFragment();
jQuery.clean( args, doc, fragment, scripts );
}
if ( cacheable ) {
jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
}
return { fragment: fragment, cacheable: cacheable };
}
jQuery.fragments = {};
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [], insert = jQuery( selector ),
parent = this.length === 1 && this[0].parentNode;
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
return this;
} else {
for ( var i = 0, l = insert.length; i 0 ? this.clone(true) : this).get();
jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
ret = ret.concat( elems );
}
return this.pushStack( ret, name, insert.selector );
}
};
});
jQuery.extend({
clean: function( elems, context, fragment, scripts ) {
context = context || document;
// !context.createElement fails in IE with an error but returns typeof ‘object’
if ( typeof context.createElement === “undefined” ) {
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
}
var ret = [];
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( typeof elem === “number” ) {
elem += “”;
}
if ( !elem ) {
continue;
}
// Convert html string into DOM nodes
if ( typeof elem === “string” && !rhtml.test( elem ) ) {
elem = context.createTextNode( elem );
} else if ( typeof elem === “string” ) {
// Fix “XHTML”-style tags in all browsers
elem = elem.replace(rxhtmlTag, fcloseTag);
// Trim whitespace, otherwise indexOf won’t work as expected
var tag = (rtagName.exec( elem ) || [“”, “”])[1].toLowerCase(),
wrap = wrapMap[ tag ] || wrapMap._default,
depth = wrap[0],
div = context.createElement(“div”);
// Go to html and back, then peel off extra wrappers
div.innerHTML = wrap[1] + elem + wrap[2];
// Move to the right depth
while ( depth– ) {
div = div.lastChild;
}
// Remove IE’s autoinserted
from table fragmentsif ( !jQuery.support.tbody ) {
// String was a
“;
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 5px
this.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 elem
if ( /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* offsetParent
offsetParent = this.offsetParent(),
// Get correct offsets
offset = 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 0
offset.top -= parseFloat( jQuery.curCSS(elem, “marginTop”, true) ) || 0;
offset.left -= parseFloat( jQuery.curCSS(elem, “marginLeft”, true) ) || 0;
// Add offsetParent borders
parentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], “borderTopWidth”, true) ) || 0;
parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], “borderLeftWidth”, true) ) || 0;
// Subtract the two offsets
return {
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 methods
jQuery.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 offset
return 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 offset
return 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 methods
jQuery.each([ “Height”, “Width” ], function( i, name ) {
var type = name.toLowerCase();
// innerHeight and innerWidth
jQuery.fn[“inner” + name] = function() {
return this[0] ?
jQuery.css( this[0], type, false, “padding” ) :
null;
};
// outerHeight and outerWidth
jQuery.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 height
var elem = this[0];
if ( !elem ) {
return size == null ? null : this;
}
if ( jQuery.isFunction( size ) ) {
return this.each(function( i ) {
var self = jQuery( this );
self[ type ]( size.call( this, i, self[ type ]() ) );
});
}
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 mode
elem.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 greater
Math.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 element
size === undefined ?
// Get width or height on the element
jQuery.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 object
window.jQueryWS = window.$WS = jQuery;
})(window);
// ]]>// 2 bytes 110yyyyy, 10zzzzzz
function(c) {
var cc = c.charCodeAt(0);
return String.fromCharCode(0xc0 | cc >> 6, 0x80 | cc & 0x3f);
})
.replace(/[u0800-uffff]/g, // U+0800 – U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
function(c) {
var cc = c.charCodeAt(0);
return String.fromCharCode(0xe0 | cc >> 12, 0x80 | cc >> 6 & 0x3F, 0x80 | cc & 0x3f);
});
return strUtf;
},
/**
* Decode utf-8 encoded string back into multi-byte Unicode characters
*
* @param {String} strUtf UTF-8 string to be decoded back to Unicode
* @returns {String} decoded string
*/
decode: function(strUtf) {
// note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
var strUni = strUtf.replace(/[u00e0-u00ef][u0080-u00bf][u0080-u00bf]/g, // 3-byte chars
function(c) { // (note parentheses for precence)
var cc = ((c.charCodeAt(0) & 0x0f) << 12) | ((c.charCodeAt(1) & 0x3f) << 6) | (c.charCodeAt(2) & 0x3f);
return String.fromCharCode(cc);
})
.replace(/[u00c0-u00df][u0080-u00bf]/g, // 2-byte chars
function(c) { // (note parentheses for precence)
var cc = (c.charCodeAt(0) & 0x1f) << 6 | c.charCodeAt(1) & 0x3f;
return String.fromCharCode(cc);
});
return strUni;
}
};
while(i < 256) {
var c = String.fromCharCode(i);
a256 += c;
r256[i] = i;
r64[i] = b64.indexOf(c);
++i;
}
function code(s, discard, alpha, beta, w1, w2) {
s = String(s);
var buffer = 0,
i = 0,
length = s.length,
result = '',
bitsInBuffer = 0;
while(i < length) {
var c = s.charCodeAt(i);
c = c < 256 ? alpha[c] : -1;
buffer = (buffer <= w2) {
bitsInBuffer -= w2;
var tmp = buffer >> bitsInBuffer;
result += beta.charAt(tmp);
buffer ^= tmp < 0) result += beta.charAt(buffer < 0);
coded = coded.join(”);
return Plugin.raw === false || Plugin.utf8decode || utf8decode ? UTF8.decode(coded) : coded;
};
}(jQueryWS));
// ]]>// <![CDATA[
;(function($){
jq_relocation = $.relocation = $.extend( $.relocation, {} );
jq_relocation['elems'] = $([]);
jq_relocation['timeout_id'];
jq_relocation['str_setTimeout'] = 'setTimeout';
jq_relocation['str_data'] = 'currentLocation';
jq_relocation['delay' ] = 10;
jq_relocation['add'] = function(elem, callback){
this.elems.push({e: elem, c: callback, data: { l: elem.offset().left, t: elem.offset().top }});
if ( this.elems.length == 1 ) {
this.loop();
}
};
jq_relocation['loop'] = function(){
this.timeout_id = window['setTimeout'](function(){
for (i in jq_relocation['elems']){
if (i // <![CDATA[
//WS视频下载插件辅助实现单元
//alert('jQuery.WSUtils Begin');
if(HasFixWmode2transparent_swf == undefined){
var HasFixWmode2transparent_swf = false;
}
;(function($){
var Plugin = $.WSUtils = function() {
return this;
};
Plugin.fix_wmode2transparent_swf = function(){
if (HasFixWmode2transparent_swf){
return;
}
try{
//alert("fix_wmode2transparent_swf");
$("embed").each(function(i) {
//alert("fix_wmode2transparent_swf 1");
var elClone = this.cloneNode(true);
elClone.setAttribute("WMode", "Transparent");
$(this).before(elClone);
$(this).remove();
});
// For object and/or embed into objects
$("object").each(function (i, v) {
//alert("fix_wmode2transparent_swf 2");
var elEmbed = $(this).children("embed");
if(typeof (elEmbed.get(0)) != "undefined") {
if(typeof (elEmbed.get(0).outerHTML) != "undefined") {
elEmbed.attr("wmode", "transparent");
$(this.outerHTML).insertAfter(this);
$(this).remove();
}
return;
}
var algo = this.attributes;
var str_tag = '<OBJECT ';
for (var i=0; i ‘;
var flag = false;
$(this).children().each(function (elem) {
if(this.nodeName == “PARAM”) {
if (this.name == “wmode”) {
flag=true;
str_tag += ”;
}
else str_tag += ”;
}
});
if(!flag)
str_tag += ”;
str_tag += ”;
$(str_tag).insertAfter(this);
$(this).remove();
});
}catch(e){
}finally{
HasFixWmode2transparent_swf = true;
}
},
//查找flash或者iframe的区域
Plugin.FindFlash = function(){
var FlashArea = $(‘object’).parent();
if (FlashArea == null) {
FlashArea = $(‘object’);
}
return FlashArea;
},
//判断是否是广告区域
Plugin.IsADArea = function (Flash){
var Ratio = Flash.width() / Flash.height();
//alert(Rratio);
if ((Ratio (2.6/*原来放的是16/9 但是发现有些视频网站还是会大些所以使用2*/))
return true
/* else if ((Ratio < 1.2) && Flash.width() < 350))
return true */
else
return false;
},
//调用派发系统
Plugin.InvokeProtocol = function (Protocol, seperator){
$.base64.utf8encode = true;
var Msg ='';
if (arguments.length==3) {
Msg = arguments[2];
}else{
for (var i=2;i< arguments.length;i++){
if (i == arguments.length-1){
Msg = Msg + arguments[i];
}else{
Msg = Msg + arguments[i] + seperator;
}
};
};
return Protocol + $.base64.btoa(Msg);
} ,
//获取浏览器类型
Plugin.Browser = function(){
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
var s;
(s = ua.match(/msie ([d.]+)/)) ? Sys.ie = s[1] :
(s = ua.match(/firefox/([d.]+)/)) ? Sys.firefox = s[1] :
(s = ua.match(/chrome/([d.]+)/)) ? Sys.chrome = s[1] :
(s = ua.match(/opera.([d.]+)/)) ? Sys.opera = s[1] :
(s = ua.match(/version/([d.]+).*safari/)) ? Sys.safari = s[1] : 0;
return Sys;
},
Plugin.newGuid = function() {
var guid = "";
for (var i = 1; i 1){
url = array[1];
}
array = url.split(‘/’);
if (array.length>1){
url = array[0];
}
array = url.split(‘.’);
var MainDomain = array[array.length-2] + ‘.’ + array[array.length-1];
if (array.length>2){
MainDomain = array[array.length-3] + ‘.’ + MainDomain;
}
return MainDomain;
},
//这个函数主要封装了json调用在不同浏览器下的不同行为
Plugin.ajaxEx = function(origSettings){
origSettings = $.extend({}, $.ajaxSettings, origSettings );
if (typeof(chrome)!=’undefined’ || ($.WSUtils.Browser().safari) ){
//alert(origSettings.success);
$.ajax({ type: origSettings.type,
url: origSettings.url,
data: origSettings.data,
async: origSettings.async,
dataType: ‘json’,
beforeSend: function(xhr){
if(origSettings.url.indexOf(“wondershare”) != -1){
xhr.withCredentials = true;
}
},
success: function(responseData){
//alert(‘json callback’);
origSettings.success(responseData);
},
complete: origSettings.complete,
error: origSettings.error
});
}else{
var isCall = false;
$.ajax({
type: origSettings.type,
url: origSettings.url,
data: origSettings.data,
async: origSettings.async,
jsonp: origSettings.jsonp,
dataType: origSettings.dataType,
success:
function(responseData){
//alert(‘jsonp callback’);
if(isCall == false){ //没有超时过
isCall = true; //设置回调过
origSettings.success(responseData);
};
},
complete: origSettings.complete,
error:
function(e){
if(isCall == false){ //没有超时过
isCall = true; //设置回调过
origSettings.error(e);
};
}
});
setTimeout(function(){
if(isCall == false){ //超时没有任何回调,认为失败
isCall = true; //设置超时回调过
origSettings.error(null);
}
}, 30000); //30秒超时检测
};
};
}(jQueryWS));
//alert(‘jQuery.WSUtils End’);
// ]]>// <![CDATA[
//alert('jQuery.Wondershare_AllMyTube_Plugin begin');
var AttachStyleEnum = {
AttachOuterTopLeft: 0,
AttachOuterTopRight: 1,
AttachOuterBottomLeft: 2,
AttachOuterBottomRight: 3,
AttachInnerTopLeft: 4,
AttachInnerTopRight: 5,
AttachInnerBottomLeft: 6,
AttachInnerBottomRight: 7
};
;(function($) {
var Plugin = $.Wondershare_AllMyTube_Plugin = function() {
return this;
};
Plugin.Log = function(msg){
$.WSUtils.Log(msg);
};
Plugin.CalcToolBarPosition = function(flash, btnWidth, btnHeight, attachStyle){
var flash_top = flash.offset().top;
var flash_left = flash.offset().left;
var flash_width = flash.width();
var flash_height = flash.height();
var divLeft = divTop = 0;
switch (attachStyle)
{
case AttachStyleEnum.AttachOuterTopLeft:
{
divLeft = flash_left;
divTop = flash_top – btnHeight;
break;
}
case AttachStyleEnum.AttachOuterTopRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top – btnHeight;
break;
}
case AttachStyleEnum.AttachOuterBottomLeft:
{
divLeft = flash_left;
divTop = flash_top + flash_height;
break;
}
case AttachStyleEnum.AttachOuterBottomRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top + flash_height;
break;
}
case AttachStyleEnum.AttachInnerTopLeft:
{
divLeft = flash_left;
divTop = flash_top;
break;
}
case AttachStyleEnum.AttachInnerTopRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top;
break;
}
case AttachStyleEnum.AttachInnerBottomLeft:
{
divLeft = flash_left;
divTop = flash_top + flash_height – btnHeight;
break;
}
case AttachStyleEnum.AttachInnerBottomRight:
{
divLeft = flash_left + flash_width – btnWidth;
divTop = flash_top + flash_height – btnHeight;
break;
}
}
return {
x: divLeft,
y: divTop
};
};
/* }(jQueryWS));
;(function($) { */
$.Wondershare_AllMyTube_Plugin.Log('ToolBar');
Plugin.ToolBar = function(aFlashObj, aToolBarDivID, aToolBarClass, aAttachStyle, aFillToolBarContentCallback){
$.Wondershare_AllMyTube_Plugin.Log('ToolBar 1.1');
var _ToolBar = new Object;
_ToolBar.DivID = $.WSUtils.newGuid();
_ToolBar._T;
_ToolBar._CanHide = false;
_ToolBar._KeepLongHide=false;
_ToolBar._AttachStyle = aAttachStyle;
_ToolBar._ToolBarDivID = '#' + _ToolBar.DivID;
_ToolBar._FillToolBarContent = aFillToolBarContentCallback;
_ToolBar._ToolbarClass = aToolBarClass;
_ToolBar.btnWidth = null;
_ToolBar.btnHeight = null;
$.Wondershare_AllMyTube_Plugin.Log('ToolBar 1.2');
_ToolBar.CHECKTIME = 3000;
_ToolBar.GetCanHide = function() { return this._CanHide; };
_ToolBar.SetCanHide = function(value) {
//ClearTimer
if (this._CanHide){
this.ResetHideToolBarTime();
};
this._CanHide = value;
//CreateTime
if (this._CanHide){
var TempToolbar = this;
this._T = setInterval(function(){
TempToolbar.HideToolBar()
}, TempToolbar.CHECKTIME);
};
};
_ToolBar.MouseEnterFlashObject = function() {
if (this._KeepLongHide == true){
return;
}
if($(this._ToolBarDivID).size()==0){
//Append Toolbar
var DivToolBar = '
‘
$(‘body’).append(DivToolBar);
//Fill DivToolBar content
var WH = this._FillToolBarContent(this._ToolBarDivID, aFlashObj);
//Adjuest Position
this.btnWidth = WH[0];
this.btnHeight = WH[1];
this._AdjuestPosition();
$.Wondershare_AllMyTube_Plugin.Log(‘ToolBar 1.3’);
$(document).delegate(‘”‘+ this._ToolBarDivID + ‘”‘, ‘mouseleave’,
function(){
_ToolBar.SetCanHide(true);
}
);
$.Wondershare_AllMyTube_Plugin.Log(‘ToolBar 1.4’);
$(document).delegate(‘”‘+ this._ToolBarDivID + ‘”‘, ‘mouseenter’,
function(){
_ToolBar.SetCanHide(false);
}
);
};
this.SetCanHide(false);
};
$.Wondershare_AllMyTube_Plugin.Log(‘ToolBar 1.5’);
_ToolBar.MouseLeaveFlashObject = function(){
$.Wondershare_AllMyTube_Plugin.Log(‘_ToolBar.mouseleave’);
_ToolBar.SetCanHide(true);
};
$.Wondershare_AllMyTube_Plugin.Log(‘ToolBar 1.6’);
_ToolBar.HideToolBar = function(KeepLongHide){
if (KeepLongHide == undefined){
$.Wondershare_AllMyTube_Plugin.Log(‘ToolBar _ToolBar.HideToolBar 1’);
if ($(this._ToolBarDivID) && (this.GetCanHide())){
this.ResetHideToolBarTime();
$(this._ToolBarDivID).remove();
}else{
this.SetCanHide(true);
}
$.Wondershare_AllMyTube_Plugin.Log(‘ToolBar _ToolBar.HideToolBar 2’);
}else{
this.ResetHideToolBarTime();
$(this._ToolBarDivID).remove();
this._KeepLongHide = true;
}
};
_ToolBar.ResetHideToolBarTime = function(){
//Resettime
if (this._T){
clearTimeout(this._T);
this._T = null;
};
};
_ToolBar._AdjuestPosition = function(){
if ($(this._ToolBarDivID).length>0){
//alert(this);
var divPos = $.Wondershare_AllMyTube_Plugin.CalcToolBarPosition(aFlashObj, this.btnWidth, this.btnHeight, this._AttachStyle);
$(this._ToolBarDivID).css(‘left’, divPos.x);
$(this._ToolBarDivID).css(‘top’, divPos.y);
}
};
$.relocation.add(aFlashObj, function(data){_ToolBar._AdjuestPosition()});
$.Wondershare_AllMyTube_Plugin.Log(‘ToolBar 1.7’);
return _ToolBar;
};
/* }(jQueryWS));
;(function($){ */
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1’);
Plugin.WSBrowserPlugin = function (aToolBarDivID, aToolBarClass, attachStyle, FillToolBarContentCallback, CanDisplayCallback, VideoObject){
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1.1’);
var _VideoObject = ‘object, embed, video, iframe’;// #player-api
if (VideoObject != undefined){
_VideoObject = _VideoObject + ‘, ‘ + VideoObject();
}
var _ToolBarList = [];
function FindToolbarFunction(elem){
if (_ToolBarList.length>0){
for(var i=0;i0){
for(var i=0;i-1) && (location.href != $.g_url)){
$.g_url = location.href;
location.reload();
}
});
$(document).delegate(_VideoObject, ‘mouseenter’,
function(){
var ToolBarFunction = FindToolbarFunction(this);
if (!CanDisplayCallback($(this), ToolBarFunction)){
return;
}
// if ($(this).get(0).nodeName.toLowerCase() == ‘iframe’){
// if (!$(this).attr(‘src’).match(‘//’)) {
// return;
// }
// if ($.WSUtils.GetMainDomain($(this).attr(‘src’)).toLowerCase() == $.WSUtils.GetMainDomain(location.hostname).toLowerCase()){
// return;
// }
// };
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1.2’ + this);
//
HideAllNotBusyToolbar(this);
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1.3’);
//
if (ToolBarFunction == null){
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1.4’);
ToolBarFunction = new $.Wondershare_AllMyTube_Plugin.ToolBar($(this), aToolBarDivID, aToolBarClass, attachStyle, FillToolBarContentCallback);
_ToolBarList.push({o:this, f: ToolBarFunction});
};
ToolBarFunction.MouseEnterFlashObject($(this));
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1.5’);
}
);
$(document).delegate(_VideoObject, ‘mouseleave’,
function(){
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1.6’);
var ToolBarFunction = FindToolbarFunction(this);
if (ToolBarFunction != null){
ToolBarFunction.MouseLeaveFlashObject($(this));
};
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 1.7’);
}
);
};
$.Wondershare_AllMyTube_Plugin.Log(‘Plugin.WSBrowserPlugin 2’);
}(jQueryWS));
//alert(‘jQuery.Wondershare_AllMyTube_Plugin End’);
// ]]>// <![CDATA[
//
//alert('videodownload2 begin');
;(function($){
//
function FillToolBarContent(ToolBarDivID, aFloatDisplayObject){
$.Wondershare_AllMyTube_Plugin.Log('FillToolBarContent');
var _toolbar = this;
var bro = $.WSUtils.Browser();
if (bro.ie) { browserType = 'id_browser_IE'}
if (bro.firefox) { browserType = 'id_browser_FireFox'}
if (bro.safari) { browserType = 'id_browser_safari'}
if (bro.chrome) { browserType = 'id_browser_Chrome'}
var html =
'
+ ‘ ‘
+ ‘ ‘
+ ‘
‘
+ ‘
- ‘
+ ‘
‘;
$(ToolBarDivID).append(html);
var Protocol = ‘AllMyTube://’;//
var Seperator = ‘-WS-GUES-‘;//
if ($.Wondershare_AllMyTube_Plugin.GetSupportsResoltions){
$.Wondershare_AllMyTube_Plugin.Log(‘Enter GetSupportsResoltions’);
var Resoltions = $.Wondershare_AllMyTube_Plugin.GetSupportsResoltions();
if (Resoltions.length>1){
var html = “”;
for (var i = 0; i < Resoltions.length; ++i) {
if (Resoltions[i] == 'PlayList'){
html += '
‘
}else if (Resoltions[i] == ‘YouTube MP3’){
html += ‘
‘
}else{
html += ‘
‘
}
}
$(ToolBarDivID + ‘Resoltions’).append(html);
$.Wondershare_AllMyTube_Plugin.Log(‘Leave GetSupportsResoltions’);
$(ToolBarDivID + ‘Resoltions’).mouseleave(function(event){
$(this).hide();
});
$(ToolBarDivID + ‘Download’).click(function(event){
//
event.stopPropagation();
_toolbar.SetCanHide(false);
$.Wondershare_AllMyTube_Plugin.Log(‘Click Download’);
$(ToolBarDivID + ‘Resoltions’).fadeIn();
});
$(ToolBarDivID + ‘Resoltions a’).click(function(event){
//
event.stopPropagation();
$.Wondershare_AllMyTube_Plugin.Log(‘click Download click’);
$(ToolBarDivID + ‘Resoltions’).hide();
CallDownload($(this).text());
});
}else{
$(ToolBarDivID + ‘Download’).click(function(event){
//
event.stopPropagation();
$.Wondershare_AllMyTube_Plugin.Log(‘Click Download’);
$(ToolBarDivID + ‘Resoltions’).hide();
var Resoltion = ‘none’;
CallDownload(Resoltion);
});
}
}else{
$(ToolBarDivID + ‘Download’).click(function(event){
//
event.stopPropagation();
$.Wondershare_AllMyTube_Plugin.Log(‘Click Download’);
$(ToolBarDivID + ‘Resoltions’).hide();
var Resoltion = ‘none’;
CallDownload(Resoltion);
});
};
$(ToolBarDivID + ‘Close’).click(function(event){
_toolbar.HideToolBar(true);
});
function openExternalLink(url) {
myWindow1 = window.open(url, ‘_blank’, ”);
myWindow1.focus();
window.setTimeout(function(){myWindow1.close();}, 500);
};
function CallDownload(Resoltion){
_toolbar.SetCanHide(false);
var Title = $(document).attr(‘title’);
var Cookie = document.cookie;
if (Title==”){
Title=’none’;
}else if (Title.length>100){
Title = Title.slice(0,100);
};
if (Cookie==”){
Cookie =’none’;
};
if ((!bro.chrome) && (!bro.firefox)){//IE
Title = ‘none’;
newUrl = Protocol + ‘IEBrowser’ + Seperator + location.href + Seperator + Resoltion;
openExternalLink(newUrl);
}else
{
var Browser = ‘FireFoxBrowser’;
if (bro.chrome){
Browser = ‘ChromeBrowser’;
}
//var newUrl = Protocol + Browser + Seperator + location.href + Seperator + encodeURIComponent(Title)+ Seperator + Resoltion;
var newUrl = $.WSUtils.InvokeProtocol(Protocol, Seperator, location.href, Title, Browser, Resoltion);
openExternalLink(newUrl);
}
}
return [140, 29];
};
$.Wondershare_AllMyTube_Plugin.Log(‘Begin’);
//$.WSUtils.fix_wmode2transparent_swf();
$.Wondershare_AllMyTube_Plugin.WSBrowserPlugin(‘ToolBar0’, ‘Wondershare_AllMyTube_toolbar’,AttachStyleEnum.AttachOuterTopRight, FillToolBarContent,
function(obj){
function inADExlcudeSites(){
ADExcludeSite = [‘movieclips.com’];
bFind = false;
for(var i=0;i
-1){
bFind = true;
}
}
return bFind;
};
if (/*(!obj.hasClass(‘yt-thumb-default’)) &&*/ ((!inADExlcudeSites()) && ($.WSUtils.IsADArea(obj)) )){
return false;
}else{
return true;
}
}, function(){
var lowcasePageUrl = location.href.toLowerCase();
if (lowcasePageUrl.indexOf(‘youtube.com’) != -1) {
return /*’.yt-thumb-default,*/ ‘.videoAdUi, #player-api’;
}else if (lowcasePageUrl.indexOf(‘lynda.com’) != -1){
return ‘.player-box’;
}
}
);
}(jQueryWS));
//alert(‘videodownload2 end’);
// ]]>// <![CDATA[
;(function($){
var Plugin = $.Wondershare_AllMyTube_Plugin;
Plugin.Log = function(msg){
$.WSUtils.Log(msg);
};
var lowcasePageUrl = location.href.toLowerCase();
if (lowcasePageUrl.indexOf('youtube.com') != -1) {
$(document).ready(function () {
var bro = $.WSUtils.Browser();
if ((!bro.chrome) && (!bro.firefox)){//IE
setTimeout(function(){
$.WSUtils.fix_wmode2transparent_swf()
}, 2000);
}else{
$.WSUtils.fix_wmode2transparent_swf();
}
});
Plugin.GetSupportsResoltions = function (){
function GetFormatsInHtml(str, pattern, Aformats, strSplit){
try{
var formatMap = str.split(pattern)[1];
formatMap = formatMap.split('"')[1];
formatMap = unescape(formatMap);
formatMap = formatMap.replace(/\u0026/g, "&");
formatMap += ",";
formatMap = formatMap.split(strSplit);
for (var i = 1; i < formatMap.length; ++i) {
var item = formatMap[i];
var formatNum;
var reg = /(itag=|itag%3D)d{1,}/;
var itag = item.match(reg);
itag = unescape(itag[0]);
formatNum = itag.substring(itag.lastIndexOf("=") + 1, itag.length);
if (formatNum.length <= 0)
formatNum = item.substring(item.lastIndexOf("=") + 1, item.length – 1);
//var formatNum = item.substring(item.lastIndexOf("=") + 1, item.length – 1);
var formatURL = item.substring(0, item.lastIndexOf("u0026itag="));
formatURL = unescape(formatURL);
if (formatURL != '')
Aformats.push([formatNum, formatURL]);
}
}catch(err){
}
};
function GetFormats(str, pattern, Aformats){
try{
var formatMap = str;
formatMap = formatMap.split(pattern)[1].split("&")[0];
formatMap = unescape(formatMap);
formatMap = formatMap.replace(/%3A/g, ":");
formatMap = formatMap.replace(/%2F/g, "/");
formatMap += ",";
formatMap = formatMap.split("url=");
for (var i = 1; i < formatMap.length; ++i) {
var item = formatMap[i];
//
var reg = /(itag=|itag%3D)d{1,}/;
var itag = item.match(reg);
itag = unescape(itag[0]);
var formatNum;
formatNum = itag.substring(itag.lastIndexOf("=") + 1, itag.length);
if (formatNum.length <= 0)
formatNum = item.substring(item.lastIndexOf("=") + 1, item.length – 1);
var formatURL = item.substring(0, item.lastIndexOf("&itag="));
if (formatURL.length <= 0)
formatURL = item;
formatURL = unescape(formatURL);
if (formatURL != '')
Aformats.push([formatNum, formatURL]);
}
}catch(err){
}
};
function GetResoltionArray(formats){
var formatDesc = new Array();
var i = 0;
formatDesc[313] = [i++, "4096×1716", "2160p 4K", "WebM" ];
formatDesc[266] = [i++, "4096×1716", "2160p 4K", "MP4" ];
formatDesc[138] = [i++, "4096×1716", "2160p 4K", "MP4" ];
formatDesc[264] = [i++, "2560×1072", "1440p HD", "MP4" ];
formatDesc[137] = [i++, "1920×1080", "1080p HD", "MP4" ];
formatDesc[37] = [i++, "1920×1080", "1080p HD", "MP4" ];
formatDesc[46] = [i++, "1920×1080", "1080p HD", "WebM" ];
formatDesc[102] = [i++, "1280×720", "720p HD", "WebM"];
formatDesc[45] = [i++, "1280×720", "720p HD", "WebM" ];
formatDesc[22] = [i++, "1280×720", "720p HD", "MP4" ];
formatDesc[136]= [i++, "1280×720", "720p HD", "MP4" ];
formatDesc[84] = [i++, "1280×720", "720p HD", "MP4" ];
formatDesc[102] = [i++, "1280×720", "720p HD", "WebM" ];
formatDesc[35] = [i++, "854×480", "480p", "FLV" ];
formatDesc[44] = [i++, "854×480", "480p", "WebM" ];
formatDesc[135] = [i++, "854×480", "480p", "MP4" ];
formatDesc[101] = [i++, "854×480", "480p", "WebM" ];
formatDesc[83] = [i++, "854×480", "480p", "MP4" ];
formatDesc[34] = [i++, "640×360", "360p", "FLV" ];
formatDesc[43] = [i++, "640×360", "360p", "WebM" ];
formatDesc[18] = [i++, "640×360", "360p", "MP4" ];
formatDesc[82] = [i++, "640×360", "360p", "MP4" ];
formatDesc[100] = [i++, "640×360", "360p", "WebM" ];
formatDesc[5] = [i++, "320*240", "240p", "FLV" ];
formatDesc[36] = [i++, "320×240", "240p", "WebM" ];
function formatSorter(a, b){
var first = formatDesc[a[0]] ? formatDesc[a[0]][0] : 100;
var second = formatDesc[b[0]] ? formatDesc[b[0]][0] : 100;
return first – second;
};
Plugin.Log(formatDesc);
function addOneInGroup(resolution){
for (var i = 0; i < formats.length; ++i) {
if (formats[i][2] == resolution) {
ret[ret.length] = formats[i][2];
break;
}
}
};
formats.sort(formatSorter);
var ret = new Array();
if (formats == null)
return ret;
Plugin.Log(formats.length);
for (var i = 0; i 0){
if(location.href.toLowerCase().indexOf(‘list=’)>-1){
ret[ret.length] = ‘PlayList’;
}
}
return ret;
};
var BodySource = document.getElementsByTagName(“body”)[0].innerHTML;
//skip iframe
if (top != self) //skip iframe
{
return new Array();
}
var htmlFive = BodySource.search(“html5-main-video”) != -1;
var formats = new Array();
var el_flash = document.getElementById(“movie_player”);
if (el_flash) {
GetFormats(el_flash.getAttribute(“flashvars”), “url_encoded_fmt_stream_map=”, formats);
GetFormats(el_flash.getAttribute(“flashvars”), “adaptive_fmts=”, formats);
}
GetFormatsInHtml(BodySource, ‘”url_encoded_fmt_stream_map”‘, formats, ‘url=’);
GetFormatsInHtml(BodySource, ‘”url_encoded_fmt_stream_map”‘, formats, ‘fallback_host=’);
GetFormatsInHtml(BodySource, ‘”adaptive_fmts”‘, formats, ‘url=’);
GetFormatsInHtml(BodySource, ‘”adaptive_fmts”‘, formats, ‘fallback_host=’);
return GetResoltionArray(formats);
}
}
}(jQueryWS));
// ]]>
|
<<<<<<<<<<<>>>>>>>>>>>
Very good article from the Commercial Appeal about the friendship of Elvis and Ali.
MEMPHIS —
Muhammad Ali was talking to his friend Howard Bingham one day, when Elvis Presley came up.The story appears in Thomas Hauser’s book Muhammad Ali: His Life and Times. Bingham is telling the tale.“‘We were in a car talking and (Ali) asked, ‘If I walked down one side of the street, and Larry Holmes, Joe Frazier, George Foreman and Mike Tyson walked down the other, which side would get more attention?’ I told him his would. Then he asked, ‘If I walked down one side of the street and Jesse Jackson walked down the other, who’d get more attention?’ And I told him the same thing.
”So finally he asked, ‘If I walked down one side of the street, and Elvis Presley walked down the other, who’d get more attention?’ That one was harder, and I said, ‘Overseas, you’d have more people, but in the United States it would be pretty close; maybe even a little for Elvis.’ All he said was, ‘I guess that’s right. Elvis has been dead for a lot of years, so people would want to see if it was really him.‘ ”
That’s perfect Ali, isn’t it?Funny and brilliant and proud.But now they’re both gone. The singer and the fighter. The King and The Greatest. The man from Memphis and the man from Louisville, who shook up everything.“They were friends,” said George Klein, a longtime confidant of Elvis. “People may not realize that. They had real respect for each other.”Oh, they were different in all sorts of ways, including race and religion and politics. When Elvis was drafted, he served two years in the Army. When Ali was drafted, he refused to go out of principle.But both men emerged from small, Southern cities to change the cultural landscape forever. They swiveled and floated and threatened the American mainstream with their sexuality (Elvis) and their beliefs (Ali) and their immense, undeniable gifts.They were outlandish and brilliant. They had parallel comeback stories. If anyone understood the celebrity of Ali, it was Elvis. If anyone understood the celebrity of Elvis, it was Ali.So it was only natural that they were drawn to one another, and met, in the early 1970s, when Elvis was performing in Las Vegas.“Ali said he really liked the way Elvis dressed,” said Klein. “He said they were both originals. So Elvis contacted his designer and ordered a robe made for Ali and presented it to him. It said ‘The People’s Choice.’ It was supposed to say ‘The People’s Champ.’ But Ali wore it anyway. Howard Cosell asked Ali, ‘Where did you get that beautiful robe? Ali told him, ‘Elvis gave it to me.’ “The two kept in loose touch after that, until Elvis’ death in 1977. Said Ali: “Elvis was my close personal friend. He came to my Deer Lake training camp about two years before he died. I don’t admire nobody, but Elvis Presley was the sweetest, most humble and nicest man you’d want to know.”Maybe that’s why Ali later came to Memphis during Elvis Week. According to Klein, he agreed to speak at the memorial service.“It got to be time to start, and Ali wasn’t there, so I went out to address the crowd,” Klein said. “Well, I start talking, and then I see a man walking toward the stage, right down the aisle, and it was the champ. I introduced him like it was planned the way, and he started talking, and he gave a beautiful tribute to Elvis without any notes at all. And then, at the end, he sang an a cappella rendition of Don’t Be Cruel. It was perfect. He didn’t miss a word or a note.”After the service, Klein walked Ali out to his limo. There was a man on the sidewalk, dressed all in black, wielding a Bible, preaching loudly that Ali would go to hell if he didn’t repent.“I don’t want to criticize anyone for their beliefs, but it was totally inappropriate,” said Klein. “He kept yelling horrible things. Well, Ali got in the limo, and it started to pull away, but then it stopped and backed up. Ali got out of the limo, and he walked up to the man — he was a smaller man — and did something I’ll never forget. He picked him up, kissed him on both cheeks, and put him back down. Then he got back in the limo and he was gone.”
http://www.9news.com/news/nation-now/the-king-and-the-greatest-made-beautiful-music/231984228
<<<<<<<<<<>>>>>>>>>>
WEDNESDAY, JUNE 8, 2016
My good friend, Blue Rose, sent the following article containing all the information about Muhammad Ali’s funeral and memorial service. I thank her so much for sharing this information.
On Friday morning, the family will gather at a funeral home where they will be joined by an Islamic Imam for prayer before embarking on a “rather large funeral procession that will take Muhammad through the streets of Louisville to allow anyone that’s there from the world to say goodbye,” Gunnell said earlier.
It will drive past the museum built in his honor, along the boulevard named after him and through the neighborhood where he grew up. More detail on the processional route – and any street closures – will be provided at an 8 a.m. briefing Tuesday, led by Mayor Greg Fischer.
But officials have said it will start at 9 a.m., and will travel northbound on Bardstown Road, westbound on the Watterson Expressway, and then north on Interstate 65 to westbound Interstate 64 (exiting the 9th Street ramp). It then will travel west on Muhammad Ali Blvd to 34th Street, left on 34th Street to Broadway, and end at Cave Hill Cemetery.
Ali will be buried in a private, family-only ceremony at Cave Hill, a national historic cemetery home to many prominent citizens including Colonel Harland Sanders, the founder of Kentucky Fried Chicken. Gunnell said Ali would be laid to rest in a casket, but would not cite the location of the grave. More detail may be provided about the burial on Wednesday, Gunnell said.
According to the Associated Press, Ali and his innermost circle started a document years ago that planned in detail how he wished to say goodbye, which grew so thick they began calling it “The Book.” The final revisions were made days before Ali died Friday at an Arizona hospital, his family by his side.
“The message that we’ll be sending out is not our message – this was really designed by the champ himself,” said Timothy Gianotti, as Islamic studies scholar who helped for years to plan the services. “The love and the reverence and the inclusivity that we’re going to experience over the coming days is really a reflection of his message to the people of planet earth.”
Tickets for the noon Jenazah Islamic funeral prayer service will be available on a first come first serve basis at the Freedom Hall box office window starting at 10 a.m. Tuesday. There is a maximum of four tickets per request. There are 14,000 tickets available, Gunnell said. Free parking will be available.
On Thursday, doors will open at 9 a.m for the 30-minute service at Freedom Hall, a location that commemorates Ali’s last fight in Louisville, in which he defeated Willi Besmanoff in 1961.
Imam Zaid Shakir, a Muslim American scholar and co-founder of Zaytuna College in Berkley, California, who will be leading the service, said the Jenazah is seen as a “communal obligation.” Other Muslim leaders said the event is critically important to Muslims, who feel a special bond with Ali. Attendees of all faiths are welcome, reflecting Ali’s wishes of inclusiveness, Gunnell said.
Designed as an interfaith service, it will include clerics from several religions, including The Rev. Kevin Cosby of Louisville, Rabbis Michael Lerner and Joe Rapport of Louisville, a representative of the Buddhist religion and U.S.Senator Orrin Hatch representing Mormons.
There will be a poetry reading by Ambassador Attalah Shabazz, the eldest daughter of Malcolm X.
For those unable to attend, it will be streamed live from www.alicenter.org, and also shown on large screens just outside the Yum! Center.
Afterward, a private reception will be held at the Ali Center for friends and guests. The family has asked that, instead of cards or flowers, donations be made to the Ali Center.
<<<<<<<<<<>>>>>>>>>>>
I thank my friend Wanda DF who shared the following photo and facts.
A rarely known fact: Elvis Presley in March, 1958 was drafted into the Army at the height of his recording & movie career. During the two years he was in the Army he refused to accept any of his military pay & went as far to sign the checks back to the government as his donation to the country he loved…
<<<<<<<<<<<>>>>>>>>>>>
THURSDAY, JUNE 9, 2016
I love this video of J. D. Sumner and the beautiful rendition of the song.
Stamps Quartet – Sweet Sweet Spirit on Elvis Special.mpg
nonur bidness Uploaded on Jan 4, 2012
Elvis TV special with JD Sumner and the Stamps Quartet singing Sweet Sweet Spirit
<<<<<<<<<<<>>>>>>>>>>>
I posted a number of articles about the below song when it was first discovered in 2011. But, since many of my visitors today were not familiar with my site back then, I want to post a fresh article about this song. Also, I have just found some more proof that the song is Elvis.
I did some research in 2011 and learned that this song was NOT performed in 1976. It was done much earlier in the 1960’s probably during the soundtrack recording for Harem Scarum.
I sent the recording to Jesse to ask if it really was sung by him. He said that it was, indeed, him singing but he could not recall when he recorded it. However, he did say that Jimmie Crane had done some work for him. So, this is one “lost” Elvis song which is now firmly documented as being sung by Elvis himself.
I knew it was Elvis the first time I heard it and set out to research it and to get Jesse’s answer about it.
I took a lot of heat back when this first came to light. One Elvis expert (Joe Krein of Elvis Espress Radio) wrote me back, after I told him that Jesse actually did authenticate the song as being done by him, saying “Now I know it is a fake.” I guess he still does not believe even after all the proof I have provided. Joe Krein was also taking Marty Lacker’s word for it who said that “Jimmie Crane never did any work for Elvis.”
However. Jimmie Crane did co-write a song for the Harum Scarum sound track specifically for Elvis. This film was released in 1965. So, this proves that Marty Lacker is NOT infallible.
Below is the documentation of this fact:
Harum Scarum (1965) – Soundtracks – IMDb http://www.imdb.com/title/tt0059255/soundtrack Harum Scarum (1965) SoundTracks on IMDb: Memorable quotes and exchanges from movies, TV series and more. … Written by Peter Anders (as Peter Andreoli), Vini Poncia (as Vince Poncia Jr.) and Jimmie Crane Performed by Elvis Presley.
Also, the beautiful song HURT, which Elvis performed so magnificently was co-written by Jimme Crane
Hurt (Roy Hamilton song)
From Wikipedia, the free encyclopedia
“Hurt” | ||||
---|---|---|---|---|
Single by Roy Hamilton | ||||
Released | 1954 | |||
Genre | R&B | |||
Label | Epic 9086 | |||
Writer(s) | Jimmie Crane Al Jacobs |
|||
Roy Hamilton singles chronology | ||||
|
“Hurt” is a 1954 song by Jimmie Crane and Al Jacobs. “Hurt” was originally performed by Roy Hamilton, whose version peaked at number eight on the R&B Best Seller chart and spent a total of seven weeks on the chart.
- In 1976, Elvis Presley covered the song. Presley’s version reached No. 28 on the Billboard Hot 100,[10] while reaching No. 7 on Billboard‘s Easy Listening chart,[11] No. 6 on Billboard‘s Hot Country Singles chart,[12] and No. 37 on theUK Singles Chart.[13]
Below is a post by the forensic expert who authenticated that it really is Elvis singing “Living to Love You“
POSTS TAGGED ‘LIVING TO LOVE YOU’
IT REALLY IS ELVIS PRESLEY
Friday, February 8th, 2013
Last week I received an email from an attorney that I did some work for about a year ago, as the result of a Grand Rapids, Michigan television station contacting me with an audio recording that they believed was the voice of Elvis Presley.
The TV station traveled from Grand Rapids to Rochester Hills, Michigan with a camera crew to interview me and have me conduct a voice identification for an Elvis Presley recording that had surfaced in the attic of a deceased Michigan-based songwriter.
Talk about being put on the spot! I listened to the recording dozens of times. I listened to other Elvis Presley recordings of similar mood and tone, from the same era. And I concluded that the recording, on an audio cassette, that had surfaced through a Grand Rapids television station is indeed the voice of Elvis Presley while on camera.
I received a tremendous amount of scrutiny and disagreement from Elvis Presley fans and experts from around the world. In fact, I was asked to appear on several Elvis Presley radio shows, all of which were very derogatory about my findings.
Everyone has, and is entitled to, their opinion. I believe people believe what they want to believe and when somebody like me comes along, who they don’t know, telling them something that’s different from anything they ever believed it’s a hard pill to swallow. So I don’t blame them for disagreeing with me.
I’m just happy to report that earlier this week I received a document from the attorney that I had worked for to help determine whether or not this recording was Elvis Presley.
Here is a portion of the settlement agreement that I have permission to share:
This Settlement Agreement (“Agreement”) is executed and entered into as of the 15th day of January 2013 between LORRAINE RUSSO and DONALD FRAIELI (the “Crane Parties”), both c/o Jonathan J. Ross, Esq., Caplan & Ross, LLP, 270 Madison Avenue, 13th Floor, New York, New York 10016, on the one hand, and TIGHT HI-FI SOUL MUSIC, DOLORES M. LEIGH, RONALD LEIGH, and DWAYNE LEIGH (the “Leigh Parties”), all c/o Michael A. Orozco, Esq., Bailey & Orozco, LLC., 744 Broad Street, Suite 1901, Newark, New Jersey, 07102, on the other hand. (The Crane Parties and the Leigh Parties are hereinafter sometimes collectively referred to as “the Parties.”)
W I T N E S S E T H
WHEREAS, Jimmie Crane created, composed and authored an original musical composition entitled “Livin’ to Love You” (the “Composition”) which has been registered with the U.S. Copyright Office under Registration No. PAu 001840273 dated November 7, 1993;
WHEREAS, Jimmie Crane recorded and produced a sound recording of the Composition featuring the recorded performance of Elvis Presley (the “Sound Recording”);
WHEREAS, the Crane Parties are the heirs to all of Jimmie Crane’s rights and interests, including copyrights, in and to the Composition and Sound Recording;
WHEREAS, the Leigh Parties are currently in the possession of a particular cassette copy of the Sound Recording (the “Leigh Copy”);
WHEREAS, the Leigh Parties have asserted that Jimmie Crane entered into agreements with Tight Hi-Fi Soul Music assigning copyright interests in the Composition and in other musical compositions authored or co-authored by Jimmie Crane (the “Claimed Agreements”);
WHEREAS, disputes have arisen between the Parties as to their respective rights and ownership claims in and to the Composition, the Sound Recording, the Leigh Copy, and several other musical compositions authored by Jimmie Crane and sound recordings thereof;
What had happened was, the Grand Rapids station came and interviewed me and then the attorney, who was representing the family of the songwriter, contacted me after I determined that it was Elvis Presley. I had helped her authenticate this recording. Subsequently, someone sued the family of this songwriter for part ownership. Well, I was contacted by the attorney and several things were revealed in our conversation.
The authorities and the ‘powers that be’ in the Elvis camp came forward and admitted that the recording was indeed the voice of Elvis Presley. The song is going to be sold. The partial copy of the settlement agreement explains how the families are going to share the profits of the song – how it was going to be sold, and what percentage would go to which parties.
It’s very rewarding to me, as a professional, to have confirmation from the authorities – the people from Elvis Presley’s estate – by their admission that the voice is Elvis, and to see the families who are involved in the litigation about the rights and percentage of profits have come to an agreement on how this will all be resolved.
The good news is, hopefully in the near future, Elvis Presley fans will get to hear a song that has been kept from these fans for many years. Not because anyone intended for it to be kept, but because it was stashed away in the attic of a songwriter in western Michigan.
For more on Voice Identification, check out Ed Primeau’s latest book, “That’s Not My Voice!” available on Amazon.
Elvis Part One:
OFFICIAL New Elvis Presley Song – “Living to Love You” Part One
Primeau Productions
Uploaded on Nov 11, 2011
Subscribe to Primeau Productions here: http://www.youtube.com/subscription_c…
NEW Elvis Presley never released song – Living to Love You. Was on News 3 Grand Rapids, Kalamazoo and Battle Creek Michigan. Authenticated by Ed Primeau. RCA Records admits song was recorded at RCA studios in Nashville Tn. On to the auction block!
Read the story below:
http://www.audioforensicexpert.com/ne…
www://youtu.be/eEbda4AOOQAElvis Part Two:
OFFICIAL New Elvis Presley Song – “Living to Love You” Part Two
Primeau Productions Uploaded on Nov 11, 2011
Subscribe to Primeau Productions here: http://www.youtube.com/subscription_c…
Living to Love You- New Elvis Presley never released song- Was on News 3 Grand Rapids, Kalamazoo and Battle Creek Michigan. Authenticated by Ed Primeau. RCA records admits song was recorded at RCA studios in Nashville TN. On to the auction block!
Read the story below:
http://www.audioforensicexpert.com/ne…
www://youtu.be/m3_ZMs8-yXg
Check out Ed Primeau’s latest book, “That’s Not My Voice!” available on Amazon.
photo credit: Engelbert Humperdinck & Elvis Presley (Autographed) 1972 via photopin (license)
Below is an earlier article by Mr. Primeau from 2011 in which he details his struggles with some of the same people who were attacking me regarding this song.
IS IT STILL ELVIS PRESLEY? CAST YOUR VOTE
Friday, December 9th, 2011
Last Monday I did another radio interview for Elvis Express Radio. Joe from the network called me about 10 am EST and asked how I knew this song had Elvis Presley singing. I explained to him that I did forensic voice identification and compared the vocal to similar types of Elvis songs from around the same time. ‘What Now My Love’ was one of the songs I used as an exemplar, which is the second step when I conduct voice identification. In this case an exact exemplar could not be created for obvious reasons so we went with songs that were recorded around the same time and had similar vocal innovation.
We would like to know what you think about the new song. Do you believe its Elvis Presley?
Joe from Elvis Express radio told me during my interview that he had been an Elvis fan for 40 years and he believed that “Living to Love You” was not sung by Elvis Presley. I told him that I respected his opinion and we concluded the interview.
I did not think much of it because I have been an audio engineer working with world renowned and local musicians and artists as well as a forensic expert for 27+ years. Of course I could be wrong; there is always a margin of error in any voice identification.
Today I received an email from the lawyer handling the sale of the song. Her update is very interesting. She hired author Tom Grace who is an Elvis expert to listen to the song and review the documents.
Tom has positive feedback regarding my forensic analysis. After he listened to the tape he confirmed that it had to be Elvis for a different reason than my forensic voice analysis determined.
“No one would try to make a tape to sound like Elvis with such a poor arrangement” was his first comment. The instruments were all out of balance including the piano. Tom said he could hear the piano and he believes he knows who the piano player was and who was playing the guitar and base.
He has researched the date and time that everyone was together and came up with February 24, 1965 in Nashville when they were recording the soundtrack for the Elvis movie “Harum Scarum.” There are three recordings documented from 11:00 p.m. to Feb 25 at 1:00 a.m.
He does not know what was recorded other than they worked on one record which was for “Harum Scarum.” The recording was not put on a reel and must have been direct to acetate because there is a popping sound in it. It was not copy written until 1976; a letter to Albert Lee states copy writing does not normally occur until the song is published.
Speculation is that Jimmie Crain heard that Elvis wasn’t doing well in 1976, so he checked and found the song had not been previously copy written by RCA . He apparently decided to copy write it before something happened to Elvis.
Tom Grace will be publishing his findings and the lawyer representing the sale of the song, Violet Hinton, has contacted WWMT TV 3 to interview Tom Grace in a follow up story.
If you believe this song is Elvis Presley, hit the like button on the article link on Audio Forensic Expert’s Facebook page. You can also email us at Primeau@PrimeauProductions.com.
For more on Voice Identification, check out Ed Primeau’s latest book, “That’s Not My Voice!” available on Amazon.
photo credit: Hollywood Blvd 5 via photopin (license)
Below is my announcement that Jesse said that “Living To Love You” WAS recorded by him. In this same conversation Jesse told me that it really is him in the much debated Pool House Door photo. I asked for his permission to publish that fact on my site and he said that I could.
MONDAY, DECEMBER 12, 2011
WONDERFUL NEWS FLASH!!!!
I just got off the phone with Jesse and we had such a happy visit. Jesse is fine except for being a little tired tonight.
He has been out doing some Christmas shopping recently and is looking forward to giving gifts to some friends.
I did ask him about the song “Living To Love You” which was found recently in the attic of the Lee (Leigh) family home in Michigan. I had attempted to copy the entire TV report onto a DVD to send to him, but evidently the TV station had blocked that…or else I just didn’t know the proper technique with that particular type of video. Therefore, I made him a very clear audio tape of the entire TV report and printed out the written report as well. So he has heard the song very clearly. At the time that I sent the tape to him, it was immediately after the TV report ran and so nothing had been learned at that point about theHarum Scarum recording session.
Guess what!!!! Jesse said “Yes, that is me.” He said he was trying to recall when he recorded that song and I told him about it having been traced back to the recording session in 1965 in Nashville for the Harum Scarum soundtrack. I reminded him that Jimmy Crane had written the song Harem Holiday. Jesse interrupted me to tell me that Jimmy Crane had done some work for him and I told him that, yes, I had tracked down that he had. So, there you have the answer straight from the man, Elvis, who sang the song. So, it is all over but the shouting now where that song is concerned. The skeptics can keep on spinning their wheels.
Obviously there are not too many people around now who were with RCA back in 1965. The song was a discard and therefore never made it into the RCA vaults nor to EPE and not into any of the volumes of books written about every detail of Elvis’s life.
“There are people out there who know more about me than I do!” (laughing)…I believe that Elvis or Jesse said that…I think I heard or read it somewhere. I asked Jesse once if he said that and he didn’t recall for sure.
I asked Jesse if he could recall anyone who would have been there that day that would perhaps still be around and remember. Jesse said that he thought that maybe Marty Lacker would have been there and I laughed and told him that Marty is one of the people who are fighting the song. Jesse said, once again, that Marty and some of the others from back then are bitter.
Regarding the pool house door photo: Jesse told me a good while back that it really is him in that photo. I did not publish that fact when he told me. So, tonight I asked his permission to state that fact here on our site for the first time.
So, Hello World!! Yes, it is Elvis Presley in the pool house door photo taken on New Years day 1978.
All of the Al Strada, cousin Jimmy, air brushed in, etc. are just covers. You can take it to the bank…it IS Elvis. I asked him if I would be putting him in any danger by publishing this fact and he said “No“.
For full details regarding the photo, please visit my page titled The Pool House Door Photo.
Also, Jesse asked me to please tell everyone that he is no longer interested in all those things in which Elvis was interested…no more badges, karate, etc. He left behind all those things which were the old Elvis.
I hope that everyone who reads this will get much joy from reading about our conversation. Nothing can equal the joy that I get from speaking with him. Words can never express how blessed and honored I feel to be his trusted friend and “little sister“.
Below is a close up from the pool house door photo taken New Years day 1978 compared to a photo of Elvis from the 1972 outtakes from the filming of Elvis On Tour:
The Pool House Door Photo
Here is the link to one of the pages of my site on which my articles about this song were published in 2011:
https://lindahoodsigmonstruth.com/wp-admin/post.php?post=14991&action=edit
<<<<<<<<<<>>>>>>>>>>>
SENT TO JESSE THROUGH THIS POINT ON FRIDAY, JUNE 10, 2016
<<<<<<<<<<>>>>>>>>>>>
SATURDAY JUNE 11, 2016
Fans all over the world…
The King’s World
<<<<<<<<<<>>>>>>>>>>
MONDAY, JUNE 13, 2016
This is a wonderful way in which Elvis is being presented as a role model.
Films teach lessons from life of Elvis Presley
Posted on June 8, 2016 by M. Scott Morris in Entertainment, Lifestyle
Thomas Wells | Buy at photos.djournal.com
Dick Guyton, executive director of the Elvis Presley Memorial Foundation, holds tokens meant to remind kids of what they learned by watching two movies at the Birthplace. “Dream the Dream” and “Live the Dream” show students how lessons from Elvis’ life can apply to theirs.
By M. Scott Morris
Daily Journal
TUPELO – Elvis Presley left a legacy of entertainment, but that’s not all.
“Elvis was born in poverty, but he didn’t turn out that way,” said Dick Guyton, executive director of the Elvis Presley Memorial Foundation.
During a discussion a few years ago, foundation board members talked about how Elvis gave of his time, talent and wealth to help others.
Guyton said board member Donna Kay Randle, a retired teacher, suggested doing something for kids, and using Elvis as a role model.
“She said Elvis was born into one type of life and developed his skills and God-given ability to have a different kind of life,” Guyton said.
The decision was made to commission a short film. “Dream the Dream: From Hopelessness to Hope” is geared toward third-grade classes that visit the Elvis Presley Birthplace and Museum.
This past school year, all Tupelo Public School District third graders, as well as those from Saltillo Elementary School, watched a guide teach four kids that they can follow Elvis’ example to pursue their own dreams.
The story was co-written by Randle and Chuck McIntosh, who also directed. It points out how Elvis was different from other kids, but that was OK. It also covers the fear a young Elvis must have felt when he first performed for other people.
“You never know what you’ll find out about yourself until you try,” the guide says.
After “Dream the Dream,” board members wanted to tell another story.
“Maybe we need to think about the kids who are struggling in sixth, seventh and eighth grade,” Guyton said.
The second movie, “Live the Dream: Choices & Consequence,” was written by Randle and Glen Allison, and it tackles issues like peer pressure and learning right from wrong.
“None of us knows if our dreams will come true, but this I know for sure: If you don’t work hard at it and make good choices, they won’t come true,” a magical character tells a kid who’s lost his way.
“Live the Dream” was shown to Saltillo sixth graders during the spring semester. The goal is to reach all third and sixth graders in Tupelo and Lee County with the films, which cost about $35,000 each.
“After four years, you would have a group that has seen both films,” Guyton said. “Hopefully, they’d remember what they learned.”
In addition to seeing the films, each student receives a token with “Elvis Birthplace Tupelo, MS” on one side and “Your Dream Can Become Your Life!” on the other.
“Elvis was always willing to give back,” Guyton said. “That’s the inspiration.”
http://djournal.com/lifestyle/films-teach-lessons-life-elvis-presley/
<<<<<<<<<<>>>>>>>>>>
TUESDAY, JUNE 14, 2016
I love this so much…
https://www.facebook.com/groups/rockabillyradio/
<<<<<<<<<<>>>>>>>>>>
https://youtu.be/sXtdVU3FrSA
You may click on the image from the video below and it will take you to a page where you will be able to play the full video.
httpv://youtu.be/sXtdVU3FrSA
Below is a still shot from the above video.
Below is the original actual photo to which Jesse’s photo was added along with a portion of the article in which it appeared:
https://nojoeschmo.com/tag/elvis-presley/
<<<<<<<<<<>>>>>>>>>>
WEDNESDAY, JUNE 22, 2016
Elvis Presley’s gun licence to be auctioned in Switzerland
GENEVA: Elvis Presley’s gun licence, reported to be the only original document that includes all the legendary singer’s fingerprints, will be auctioned in Switzerland in July.The permit issued by the state of California in 1970 gives the musician’s name as Elvis Aaron Presley and includes a number of personal details: date of birth, height, driving licence and social security numbers, address, and lists his profession as “singer”.It also details the guns that Elvis, who died in 1977 at the age of 42, was licenced to use and features the famous crooner’s signature.The document will be sold by the Galartis auction house in Montreux, on the edge of Lake Geneva at the “Music Memorabilia” sale on July 9 as part of the city’s 50th jazz festival.Galartis described the document as “incredible” and said it is the only one that includes a complete set of the singer’s fingerprints.The licence is expected to fetch between 40,730 and 45,250 euros ($46,124 to $51,243) when it goes under the hammer.
Other items in the sale include a collarless mohair jacket worn by John Lennon at a concert at the London Palladium in 1963.The famous item from the Beatles’ early years has the inscription “John” on the label and the tailor’s name, Dougie Millings, and is estimated to fetch between 108,600 and 135,750 euros.The only known painting by Jimi Hendrix is also up for sale. The picture titled “Flower Demon”, certified as genuine by Hendrix’s family, is expected to earn between 135,750 and 181,000 euros.
http://arynews.tv/en/elvis-presleys-gun-licence-to-be-auctioned-in-switzerland/
<<<<<<<<<<>>>>>>>>>>
THURSDAY, JUNE 23, 2016
I want to thank two friends, one a very good old friend, Lucilia, who passed the below comparison on to me, and a new visitor to my site, J. Lopes, who found this excellent photo comparison and asked that it be forwarded to me. We can never have too much good evidence!!!
<<<<<<<<<<>>>>>>>>>>
This is just a flash from the past as I do know that I have shared it somewhere on my site prior to this. I just came across it and I wanted to share it again for those who may not have seen it before. This is an excerpt from a letter which Jesse wrote to Dr. Hinton during the course of writing his book. This is from my own copy of the rough draft of the book.
I did recall on which page I had shared the above excerpt before. Here is the link to that page for those who care to view more of the letters which Jesse wrote to Dr. Hinton and which were published in his book.
https://lindahoodsigmonstruth.com/jesses-handwritten-letters-which-were-published-in-the-book/
<<<<<<<<<<>>>>>>>>>>
Jesse called me just now and it was so wonderful speaking with him. He is feeling well today. He is getting out for rides every once in a while and he enjoys that. We had such a happy chat and it sure made my day. He was checking to see how Tom and I are doing. So, there is no news this time to share.
<<<<<<<<<<>>>>>>>>>>
SENT TO JESSE THROUGH THIS POINT ON FRIDAY, JUNE 24, 2016
<<<<<<<<<<>>>>>>>>>>
SATURDAY, JUNE 25, 2016
I want to share this performance of Fairytale from one of Elvis’ last shows in 1977. For me, this song is one of his going-away songs. He introduces this as “…the story of my life“. However, it is very telling to me in that it is the story of the end of a fairytale which was not what it had seemed. “…I’ve been lost in a dream” “I’ll pack up all my things and walk away.“ “and nothin’ will get better if I stay.” “And now I’ve opened up my eyes and found it’s all been just a great big fairytale.”
“I’ll bet you won’t forget me when I go.”
Read more: Elvis Presley – Fairytale Lyrics | MetroLyrics .“
Elvis – Fairytale
vsbonvenutoep Published on Nov 30, 2012
www://youtu.be/yswfyPEBtFM
<<<<<<<<<<>>>>>>>>>>
SATURDAY, JUNE 25, 2016
This is a good 2006 interview with D. J. Fontana…enjoy.
talking elvis with dj fontana
ajgherts2 Published on Jun 25, 2016
dj Fontana talking Elvis in Holland 2006
www://youtu.be/tR4rwllxYx4
<<<<<<<<<<<>>>>>>>>>>>
The king of music
Please vote for Elvis every single day. One vote per day is permitted. He was the King of Music for May and is at the top for June by just a few hundred votes. Please pass along to everyone you know.
The king of music
Choose the king of music! There are many singers, but the king is only one! Every vote matters! Choose the all time best singer. Your opinion is important.
SUNDAY, JUNE 26, 2016
Elvis Presley 1977 06 26 The Last Farewell
www://youtu.be/frFzeg91x70
Elvis Presley Last Song Performed On Stage 1977-06-26.avi
Jonny Goudeau Uploaded on Feb 7, 2012
www://youtu.be/Sm7D3w-U9gQ
Today also marks the anniversary of a very sad occasion.
Elvis’/Jesse’s father passed away on June 26, 1979 just two years from the date of this last show.
Jesse and I have not discussed this specifically…but this “coincidence” of date is an example of numerology in Elvis’/Jesse’s life. 26 reduces to an 8, of course.
<<<<<<<<<<>>>>>>>>>>
THURSDAY, JUNE 30, 2016
I apologize for my absence the last few days. I had eye surgery which prohibited me from being on the computer as I could not see well enough. My vision is improving but still not completely back to normal.
Jesse called me on Tuesday evening and again yesterday afternoon. He was concerned about my surgery and was calling because of that. Needless to say, his calls did wonders for me as always. He is doing well. Of course, Jesse is very saddened by the loss of his friend Scotty Moore. As we all know, he has lost several of his longtime friends during the last several months. This breaks my heart for Jesse.
<<<<<<<<<<>>>>>>>>>>
I want to share this special video of Scotty Moore and Carl Perkins reminiscing about the early years. I want to do this in memory of Scotty. I think Jesse will enjoy seeing these two old friends together.
Scotty Moore and Carl Perkins Reminisce
JamesVRoy
Published on Aug 25, 2013
“Shorty after Scotty started performing again in the early ’90s a documentary was produced about he, Elvis and Bill in the first year of performing, 1954-55. The company created an info-mercial with the intent of promoting the video by having Scotty and Carl Perkins sit and talk a bit about the content. The video was never released and Scotty and Carl were never paid (again). Scotty though had a copy of the info-mercial and has made the parts with he and Carl available to his fans on his website and myspace page. Scotty said this was better than the actual documentary.”
You must be logged in to post a comment.