/**** /js/jquery-1.4.2.min.js ****/
/*!
 * 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(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
;

/**** /js/jq.cookie.js ****/
/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
;

/**** /js/jq.history.js ****/
/*
 * jQuery history plugin
 *
 * Copyright (c) 2006 Taku Sano (Mikage Sawatari)
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Modified by Lincoln Cooper to add Safari support and only call the callback once during initialization
 * for msie when no initial hash supplied.
 * API rewrite by Lauris Bukis-Haberkorns
 */

(function($) {

function History()
{
	this._curHash = '';
	this._callback = function(hash){};
};

$.extend(History.prototype, {

	init: function(callback) {
		this._callback = callback;
		this._curHash = $.browser.msie ? location.href.split('#')[1] || '' : location.hash;
		if($.browser.msie) {
			// add hidden iframe for IE
			$("body").prepend('<iframe id="jQuery_history" style="display: none;"></iframe>');
			var iframe = $("#jQuery_history")[0].contentWindow.document;
			iframe.open();
			iframe.close();
			iframe.location.hash = this._curHash;
		}
		else if ($.browser.safari && !$.browser.chrome5 && !$.browser.safari5) {
			// etablish back/forward stacks
			this._historyBackStack = [];
			this._historyBackStack.length = history.length;
			this._historyForwardStack = [];
			this._isFirst = true;
			this._dontCheck = false;
		}
		this._callback(this._curHash.replace(/^#/, ''));
		setInterval(this._check, 100);
	},

	add: function(hash) {
		// This makes the looping function do something
		this._historyBackStack.push(hash);
		
		this._historyForwardStack.length = 0; // clear forwardStack (true click occured)
		this._isFirst = true;
	},
	
	_check: function() {
		if($.browser.msie) {
			// On IE, check for location.hash of iframe
			var ihistory = $("#jQuery_history")[0];
			var iframe = ihistory.contentDocument || ihistory.contentWindow.document;
			var current_hash = iframe.location.href.split('#')[1]||'';
			if(current_hash != $.history._curHash) {
			
				location.hash = current_hash;
				$.history._curHash = current_hash;
				$.history._callback(current_hash.replace(/^#/, ''));
				
			}
		} else if ($.browser.safari && !$.browser.chrome5 && !$.browser.safari5) {
			if (!$.history._dontCheck) {
				var historyDelta = history.length - $.history._historyBackStack.length;
				
				if (historyDelta) { // back or forward button has been pushed
					$.history._isFirst = false;
					if (historyDelta < 0) { // back button has been pushed
						// move items to forward stack
						for (var i = 0; i < Math.abs(historyDelta); i++) $.history._historyForwardStack.unshift($.history._historyBackStack.pop());
					} else { // forward button has been pushed
						// move items to back stack
						for (var i = 0; i < historyDelta; i++) $.history._historyBackStack.push($.history._historyForwardStack.shift());
					}
					var cachedHash = $.history._historyBackStack[$.history._historyBackStack.length - 1];
					if (cachedHash != undefined) {
						$.history._curHash = location.hash;
						$.history._callback(cachedHash);
					}
				} else if ($.history._historyBackStack[$.history._historyBackStack.length - 1] == undefined && !$.history._isFirst) {
					// back button has been pushed to beginning and URL already pointed to hash (e.g. a bookmark)
					// document.URL doesn't change in Safari
					if (document.URL.indexOf('#') >= 0) {
						$.history._callback(document.URL.split('#')[1]);
					} else {
						$.history._callback('');
					}
					$.history._isFirst = true;
				}
			}
		} else {
			// otherwise, check for location.hash
			var current_hash = location.hash;
			if(current_hash != $.history._curHash) {
				$.history._curHash = current_hash;
				$.history._callback(current_hash.replace(/^#/, ''));
			}
		}
	},

	load: function(hash) {
		var newhash;
		
		if ($.browser.safari && !$.browser.chrome5 && !$.browser.safari5) {
			newhash = hash;
		} else {
			newhash = '#' + hash;
			location.hash = newhash;
		}
		this._curHash = newhash;
		
		if ($.browser.msie) {
			var ihistory = $("#jQuery_history")[0]; // TODO: need contentDocument?
			var iframe = ihistory.contentWindow.document;
			iframe.open();
			iframe.close();
			iframe.location.hash = newhash;
			this._callback(hash);
		}
		else if ($.browser.safari && !$.browser.chrome5 && !$.browser.safari5) {
			this._dontCheck = true;
			// Manually keep track of the history values for Safari
			this.add(hash);
			
			// Wait a while before allowing checking so that Safari has time to update the "history" object
			// correctly (otherwise the check loop would detect a false change in hash).
			var fn = function() {$.history._dontCheck = false;};
			window.setTimeout(fn, 200);
			this._callback(hash);
			// N.B. "location.hash=" must be the last line of code for Safari as execution stops afterwards.
			//      By explicitly using the "location.hash" command (instead of using a variable set to "location.hash") the
			//      URL in the browser and the "history" object are both updated correctly.
			location.hash = newhash;
		}
		else {
		  this._callback(hash);
		}
	}
});

$(document).ready(function() {
	$.history = new History(); // singleton instance
});

})(jQuery);
;

/**** /js/jq.mousewheel.js ****/
/*! Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 * 
 * Requires: 1.2.2+
 */

(function($) {

var types = ['DOMMouseScroll', 'mousewheel'];

$.event.special.mousewheel = {
	setup: function() {
		if ( this.addEventListener )
			for ( var i=types.length; i; )
				this.addEventListener( types[--i], handler, false );
		else
			this.onmousewheel = handler;
	},
	
	teardown: function() {
		if ( this.removeEventListener )
			for ( var i=types.length; i; )
				this.removeEventListener( types[--i], handler, false );
		else
			this.onmousewheel = null;
	}
};

$.fn.extend({
	mousewheel: function(fn) {
		return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
	},
	
	unmousewheel: function(fn) {
		return this.unbind("mousewheel", fn);
	}
});


function handler(event) {
	var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;
	
	event = $.event.fix(event || window.event);
	event.type = "mousewheel";
	if ( event.wheelDelta ) delta = event.wheelDelta/120;
	if ( event.detail     ) delta = -event.detail/3;
	// Add events and delta to the front of the arguments
	args.unshift(event, delta);

	return $.event.handle.apply(this, args);
}

})(jQuery);
;

/**** /js/soundmanager2.js ****/
/** @license
 * SoundManager 2: Javascript Sound for the Web
 * --------------------------------------------
 * http://schillmania.com/projects/soundmanager2/
 *
 * Copyright (c) 2007, Scott Schiller. All rights reserved.
 * Code provided under the BSD License:
 * http://schillmania.com/projects/soundmanager2/license.txt
 *
 * V2.96a.20100606
 */

/*jslint white: false, onevar: true, undef: true, nomen: false, eqeqeq: true, plusplus: false, bitwise: true, regexp: true, newcap: true, immed: true, regexp: false */
/*global SM2_DEFER, sm2Debugger, alert, console, document, navigator, setTimeout, window, document, setInterval, clearInterval, Audio */

(function(window) {

var soundManager = null;

function SoundManager(smURL, smID) {

  this.flashVersion = 8;             // version of flash to require, either 8 or 9. Some API features require Flash 9.
  this.debugMode = true;             // enable debugging output (div#soundmanager-debug, OR console if available+configured)
  this.debugFlash = false;           // enable debugging output inside SWF, troubleshoot Flash/browser issues
  this.useConsole = true;            // use firebug/safari console.log()-type debug console if available
  this.consoleOnly = false;          // if console is being used, do not create/write to #soundmanager-debug
  this.waitForWindowLoad = false;    // force SM2 to wait for window.onload() before trying to call soundManager.onload()
  this.nullURL = 'about:blank';      // path to "null" (empty) MP3 file, used to unload sounds (Flash 8 only)
  this.allowPolling = true;          // allow flash to poll for status update (required for whileplaying() events, peak, sound spectrum functions to work.)
  this.useFastPolling = false;       // uses lower flash timer interval for higher callback frequency, best combined with useHighPerformance
  this.useMovieStar = true;          // enable support for Flash 9.0r115+ (codename "MovieStar") MPEG4 audio+video formats (AAC, M4V, FLV, MOV etc.)
  this.bgColor = '#ffffff';          // movie (.swf) background color, '#000000' useful if showing on-screen/full-screen video etc.
  this.useHighPerformance = false;   // position:fixed flash movie can help increase js/flash speed, minimize lag
  this.flashLoadTimeout = 1000;      // msec to wait for flash movie to load before failing (0 = infinity)
  this.wmode = null;                 // mode to render the flash movie in - null, transparent, opaque (last two allow layering of HTML on top)
  this.allowFullScreen = true;       // enter full-screen (via double-click on movie) for flash 9+ video
  this.allowScriptAccess = 'always'; // for scripting the SWF (object/embed property), either 'always' or 'sameDomain'
  this.useFlashBlock = false;        // *requires flashblock.css, see demos* - allow recovery from flash blockers. Wait indefinitely and apply timeout CSS to SWF, if applicable.
  this.useHTML5Audio = false;        // EXPERIMENTAL IN-PROGRESS feature: Use HTML 5 Audio() where API is supported (most Safari, Chrome versions), Firefox (no MP3/MP4.) Ideally, transparent vs. Flash API where possible.
  this.html5Test = /^probably$/i;    // HTML5 Audio() canPlayType() test. /^(probably|maybe)$/i if you want to be more liberal/risky.

  this.audioFormats = {
    // determines HTML5 support, flash requirements
    // eg. if MP3 or MP4 required, Flash fallback is used if HTML5 can't play it
    // shotgun approach to MIME testing due to browser variance
    'mp3': {
      type: ['audio/mpeg; codecs="mp3"','audio/mpeg','audio/mp3','audio/MPA','audio/mpa-robust'],
      required: true
    }, 
    'mp4': {
      related: ['aac','m4a'], // additional formats under the MP4 container.
      type: ['audio/mp4; codecs="mp4a.40.2"','audio/aac','audio/x-m4a','audio/MP4A-LATM','audio/mpeg4-generic'],
      required: true
    },
    'ogg': {
      type: ['audio/ogg; codecs=vorbis'],
      required: false
    },
    'wav': {
      type: ['audio/wav; codecs="1"','audio/wav','audio/wave','audio/x-wav'],
      required: false
    }
  };

  this.defaultOptions = {
    'autoLoad': false,             // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)
    'stream': true,                // allows playing before entire file has loaded (recommended)
    'autoPlay': false,             // enable playing of file as soon as possible (much faster if "stream" is true)
    'loops': 1,                    // how many times to repeat the sound (position will wrap around to 0, setPosition() will break out of loop when >0)
    'onid3': null,                 // callback function for "ID3 data is added/available"
    'onload': null,                // callback function for "load finished"
    'whileloading': null,          // callback function for "download progress update" (X of Y bytes received)
    'onplay': null,                // callback for "play" start
    'onpause': null,               // callback for "pause"
    'onresume': null,              // callback for "resume" (pause toggle)
    'whileplaying': null,          // callback during play (position update)
    'onstop': null,                // callback for "user stop"
    'onfinish': null,              // callback function for "sound finished playing"
    'onbeforefinish': null,        // callback for "before sound finished playing (at [time])"
    'onbeforefinishtime': 5000,    // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second)
    'onbeforefinishcomplete': null,// function to call when said sound finishes playing
    'onjustbeforefinish': null,    // callback for [n] msec before end of current sound
    'onjustbeforefinishtime': 200, // [n] - if not using, set to 0 (or null handler) and event will not fire.
    'multiShot': true,             // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time
    'multiShotEvents': false,      // fire multiple sound events (currently onfinish() only) when multiShot is enabled
    'position': null,              // offset (milliseconds) to seek to within loaded sound data.
    'pan': 0,                      // "pan" settings, left-to-right, -100 to 100
    'type': null,                  // MIME-like hint for file pattern / canPlay() tests, eg. audio/mp3
    'volume': 100                  // self-explanatory. 0-100, the latter being the max.
  };

  this.flash9Options = {      // flash 9-only options, merged into defaultOptions if flash 9 is being used
    'isMovieStar': null,      // "MovieStar" MPEG4 audio/video mode. Null (default) = auto detect MP4, AAC etc. based on URL. true = force on, ignore URL
    'usePeakData': false,     // enable left/right channel peak (level) data
    'useWaveformData': false, // enable sound spectrum (raw waveform data) - WARNING: CPU-INTENSIVE: may set CPUs on fire.
    'useEQData': false,       // enable sound EQ (frequency spectrum data) - WARNING: Also CPU-intensive.
    'onbufferchange': null,   // callback for "isBuffering" property change
    'ondataerror': null       // callback for waveform/eq data access error (flash playing audio in other tabs/domains)
  };

  this.movieStarOptions = { // flash 9.0r115+ MPEG4 audio/video options, merged into defaultOptions if flash 9+movieStar mode is enabled
    'onmetadata': null,     // callback for when video width/height etc. are received
    'useVideo': false,      // if loading movieStar content, whether to show video
    'bufferTime': 3,        // seconds of data to buffer before playback begins (null = flash default of 0.1 seconds - if AAC playback is gappy, try increasing.)
    'serverURL': null,      // rtmp: FMS or FMIS server to connect to, required when requesting media via RTMP or one of its variants
    'onconnect': null       // rtmp: callback for connection to flash media server
/*
    'duration': null,       // rtmp: song duration (msec)
    'totalbytes': null      // rtmp: byte size of the song
*/
  };

  this.version = null;
  this.versionNumber = 'V2.96a.20100606';
  this.movieURL = null;
  this.url = (smURL || null);
  this.altURL = null;
  this.swfLoaded = false;
  this.enabled = false;
  this.o = null;
  this.movieID = 'sm2-container';
  this.id = (smID || 'sm2movie');
  this.swfCSS = {
    swfDefault: 'movieContainer',
    swfError: 'swf_error', // SWF loaded, but SM2 couldn't start (other error)
    swfTimedout: 'swf_timedout',
    swfUnblocked: 'swf_unblocked', // or loaded OK
    sm2Debug: 'sm2_debug',
    highPerf: 'high_performance',
    flashDebug: 'flash_debug'
  };
  this.oMC = null;
  this.sounds = {};
  this.soundIDs = [];
  this.muted = false;
  this.isFullScreen = false; // set later by flash 9+
  this.isIE = (navigator.userAgent.match(/MSIE/i));
  this.isSafari = (navigator.userAgent.match(/safari/i));
  this.debugID = 'soundmanager-debug';
  this.debugURLParam = /([#?&])debug=1/i;
  this.specialWmodeCase = false;
  this.didFlashBlock = false;

  this.filePattern = null;
  this.filePatterns = {
    flash8: /\.mp3(\?.*)?$/i,
    flash9: /\.mp3(\?.*)?$/i
  };

  this.baseMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; // mp3
  this.netStreamMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; // mp3, mp4, aac etc.
  this.netStreamTypes = ['aac', 'flv', 'mov', 'mp4', 'm4v', 'f4v', 'm4a', 'mp4v', '3gp', '3g2']; // Flash v9.0r115+ "moviestar" formats
  this.netStreamPattern = new RegExp('\\.(' + this.netStreamTypes.join('|') + ')(\\?.*)?$', 'i');
  this.mimePattern = this.baseMimeTypes;

  this.features = {
    buffering: false,
    peakData: false,
    waveformData: false,
    eqData: false,
    movieStar: false
  };

  this.sandbox = {
    'type': null,
    'types': {
      'remote': 'remote (domain-based) rules',
      'localWithFile': 'local with file access (no internet access)',
      'localWithNetwork': 'local with network (internet access only, no local access)',
      'localTrusted': 'local, trusted (local+internet access)'
    },
    'description': null,
    'noRemote': null,
    'noLocal': null
  };

  this.hasHTML5 = null; // switch for handling logic
  this.html5 = { // stores canPlayType() results, etc. read-only.
    // mp3: boolean
    // mp4: boolean
    usingFlash: null // set if/when flash fallback is needed
  }; 
  this.ignoreFlash = false; // used for special cases (eg. iPad/iPhone/palm OS?)

  // --- private SM2 internals ---

  var SMSound,
  _s = this, _sm = 'soundManager', _id, _ua = navigator.userAgent, _wl = window.location.href.toString(), _fV = this.flashVersion, _doNothing, _init, _onready = [], _debugOpen = true, _debugTS, _didAppend = false, _appendSuccess = false, _didInit = false, _disabled = false, _windowLoaded = false, _wDS, _wdCount, _initComplete, _mergeObjects, _addOnReady, _processOnReady, _initUserOnload, _go, _waitForEI, _setVersionInfo, _handleFocus, _beginInit, _strings, _initMovie, _dcLoaded, _didDCLoaded, _getDocument, _createMovie, _setPolling, _debugLevels = ['log', 'info', 'warn', 'error'], _defaultFlashVersion = 8, _disableObject, _failSafely, _normalizeMovieURL, _oRemoved = null, _oRemovedHTML = null, _str, _flashBlockHandler, _getSWFCSS, _toggleDebug, _loopFix, _complain, _idCheck, _waitingForEI = false, _initPending = false, _smTimer, _onTimer, _startTimer, _stopTimer, _needsFlash = null, _featureCheck, _html5OK, _html5Only = false, _html5CanPlay, _html5Ext,  _dcIE, _testHTML5,
  _is_pre = _ua.match(/pre\//i),
  _iPadOrPhone = _ua.match(/(ipad|iphone)/i),
  _isMobile = (_ua.match(/mobile/i) || _is_pre || _iPadOrPhone),
  _hasConsole = (typeof console !== 'undefined' && typeof console.log !== 'undefined'),
  _isFocused = (typeof document.hasFocus !== 'undefined'?document.hasFocus():null),
  _tryInitOnFocus = (typeof document.hasFocus === 'undefined' && this.isSafari),
  _okToDisable = !_tryInitOnFocus;

  this._use_maybe = (_wl.match(/sm2\-useHTML5Maybe\=1/i)); // temporary feature: #sm2-useHTML5Maybe=1 forces loose canPlay() check
  this._overHTTP = (document.location?document.location.protocol.match(/http/i):null);
  this.useAltURL = !this._overHTTP; // use altURL if not "online"

  if (_iPadOrPhone || _is_pre) {
    // might as well force it on Apple + Palm, flash support unlikely
    _s.useHTML5Audio = true;
    _s.ignoreFlash = true;
  }

  if (_is_pre || this._use_maybe) {
    // less-strict canPlayType() checking option
    _s.html5Test = /^(probably|maybe)$/i;
  }

  // Temporary feature: allow force of HTML5 via URL: #sm2-usehtml5audio=0 or 1
  // <d>
  (function(){
    var a = '#sm2-usehtml5audio=', l = _wl, b = null;
    if (l.indexOf(a) !== -1) {
      b = (l.substr(l.indexOf(a)+a.length) === '1');
      if (typeof console !== 'undefined' && typeof console.log !== 'undefined') {
        console.log((b?'Enabling ':'Disabling ')+'useHTML5Audio via URL parameter');
      }
      _s.useHTML5Audio = b;
    }
  }());
  // </d>

  // --- public API methods ---

  this.supported = function() {
    return (_needsFlash?(_didInit && !_disabled):(_s.useHTML5Audio && _s.hasHTML5));
  };

  this.getMovie = function(smID) {
    return _s.isIE?window[smID]:(_s.isSafari?_id(smID) || document[smID]:_id(smID));
  };

  this.loadFromXML = function(sXmlUrl) {
    try {
      _s.o._loadFromXML(sXmlUrl);
    } catch(e) {
      _failSafely();
      return true;
    }
  };

  this.createSound = function(oOptions) {
    var _cs = 'soundManager.createSound(): ',
    thisOptions = null, oSound = null, _tO = null;
    if (!_didInit) {
      throw _complain(_cs + _str('notReady'), arguments.callee.caller);
    }
    if (arguments.length === 2) {
      // function overloading in JS! :) ..assume simple createSound(id,url) use case
      oOptions = {
        'id': arguments[0],
        'url': arguments[1]
      };
    }
    thisOptions = _mergeObjects(oOptions); // inherit SM2 defaults
    _tO = thisOptions; // alias
    // <d>
    if (_tO.id.toString().charAt(0).match(/^[0-9]$/)) {
      _s._wD(_cs + _str('badID', _tO.id), 2);
    }
    _s._wD(_cs + _tO.id + ' (' + _tO.url + ')', 1);
    // </d>
    if (_idCheck(_tO.id, true)) {
      _s._wD(_cs + _tO.id + ' exists', 1);
      return _s.sounds[_tO.id];
    }

    function make() {
      thisOptions = _loopFix(thisOptions);
      _s.sounds[_tO.id] = new SMSound(_tO);
      _s.soundIDs.push(_tO.id);
      return _s.sounds[_tO.id];
    }
	
    if (_html5OK(_tO)) {
      oSound = make();
      _s._wD('Loading sound '+_tO.id+' from HTML5');
      oSound._setup_html5(_tO);
    } else {
      if (_fV > 8 && _s.useMovieStar) {
        if (_tO.isMovieStar === null) {
          _tO.isMovieStar = ((_tO.serverURL || (_tO.type?_tO.type.match(_s.netStreamPattern):false)||_tO.url.match(_s.netStreamPattern))?true:false);
        }
        if (_tO.isMovieStar) {
          _s._wD(_cs + 'using MovieStar handling');
        }
        if (_tO.isMovieStar) {
          if (_tO.usePeakData) {
            _wDS('noPeak');
            _tO.usePeakData = false;
          }
          if (_tO.loops > 1) {
            _wDS('noNSLoop');
          }
        }
      }
      oSound = make();
      // flash AS2
      if (_fV === 8) {
        _s.o._createSound(_tO.id, _tO.onjustbeforefinishtime, _tO.loops||1);
      } else {
        _s.o._createSound(_tO.id, _tO.url, _tO.onjustbeforefinishtime, _tO.usePeakData, _tO.useWaveformData, _tO.useEQData, _tO.isMovieStar, (_tO.isMovieStar?_tO.useVideo:false), (_tO.isMovieStar?_tO.bufferTime:false), _tO.loops||1, _tO.serverURL, _tO.duration||null, _tO.totalBytes||null, _tO.autoPlay, true);
        if (!_tO.serverURL) {
          // We are connected immediately
          oSound.connected = true;
          if (_tO.onconnect) {
            _tO.onconnect.apply(oSound);
          }
        }
      }
    } 

    if (_tO.autoLoad || _tO.autoPlay) {
      if (oSound) {
        if (_s.isHTML5) {
          oSound.autobuffer = 'auto'; // early HTML5 implementation (non-standard)
          oSound.preload = 'auto'; // standard
        } else {
          oSound.load(_tO);
        }
      }
    }
    if (_tO.autoPlay) {
      oSound.play();
    }
    return oSound;
  };

  this.createVideo = function(oOptions) {
    var fN = 'soundManager.createVideo(): ';
    if (arguments.length === 2) {
      oOptions = {
        'id': arguments[0],
        'url': arguments[1]
      };
    }
    if (_fV >= 9) {
      oOptions.isMovieStar = true;
      oOptions.useVideo = true;
    } else {
      _s._wD(fN + _str('f9Vid'), 2);
      return false;
    }
    if (!_s.useMovieStar) {
      _s._wD(fN + _str('noMS'), 2);
    }
    return _s.createSound(oOptions);
  };

  this.destroySound = function(sID, bFromSound) {
    // explicitly destroy a sound before normal page unload, etc.
    if (!_idCheck(sID)) {
      return false;
    }
    for (var i = 0; i < _s.soundIDs.length; i++) {
      if (_s.soundIDs[i] === sID) {
        _s.soundIDs.splice(i, 1);
        continue;
      }
    }
    _s.sounds[sID].unload();
    if (!bFromSound) {
      // ignore if being called from SMSound instance
      _s.sounds[sID].destruct();
    }
    delete _s.sounds[sID];
  };

  this.destroyVideo = this.destroySound;

  this.load = function(sID, oOptions) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].load(oOptions);
  };

  this.unload = function(sID) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].unload();
  };

  this.play = function(sID, oOptions) {
    var fN = 'soundManager.play(): ';
    if (!_didInit) {
      throw _complain(fN + _str('notReady'), arguments.callee.caller);
    }
    if (!_idCheck(sID)) {
      if (!(oOptions instanceof Object)) {
        oOptions = {
          url: oOptions
        }; // overloading use case: play('mySound','/path/to/some.mp3');
      }
      if (oOptions && oOptions.url) {
        // overloading use case, creation+playing of sound: .play('someID',{url:'/path/to.mp3'});
        _s._wD(fN + 'attempting to create "' + sID + '"', 1);
        oOptions.id = sID;
        return _s.createSound(oOptions).play();
      } else {
        return false;
      }
    }
    return _s.sounds[sID].play(oOptions);
  };

  this.start = this.play; // just for convenience

  this.setPosition = function(sID, nMsecOffset) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].setPosition(nMsecOffset);
  };

  this.stop = function(sID) {
    if (!_idCheck(sID)) {
      return false;
    }
    _s._wD('soundManager.stop(' + sID + ')', 1);
    return _s.sounds[sID].stop();
  };

  this.stopAll = function() {
    _s._wD('soundManager.stopAll()', 1);
    for (var oSound in _s.sounds) {
      if (_s.sounds[oSound] instanceof SMSound) {
        _s.sounds[oSound].stop(); // apply only to sound objects
      }
    }
  };

  this.pause = function(sID) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].pause();
  };

  this.pauseAll = function() {
    for (var i = _s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].pause();
    }
  };

  this.resume = function(sID) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].resume();
  };

  this.resumeAll = function() {
    for (var i = _s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].resume();
    }
  };

  this.togglePause = function(sID) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].togglePause();
  };

  this.setPan = function(sID, nPan) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].setPan(nPan);
  };

  this.setVolume = function(sID, nVol) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].setVolume(nVol);
  };

  this.mute = function(sID) {
    var fN = 'soundManager.mute(): ',
    i = 0;
    if (typeof sID !== 'string') {
      sID = null;
    }
    if (!sID) {
      _s._wD(fN + 'Muting all sounds');
      for (i = _s.soundIDs.length; i--;) {
        _s.sounds[_s.soundIDs[i]].mute();
      }
      _s.muted = true;
    } else {
      if (!_idCheck(sID)) {
        return false;
      }
      _s._wD(fN + 'Muting "' + sID + '"');
      return _s.sounds[sID].mute();
    }
  };

  this.muteAll = function() {
    _s.mute();
  };

  this.unmute = function(sID) {
    var fN = 'soundManager.unmute(): ', i;
    if (typeof sID !== 'string') {
      sID = null;
    }
    if (!sID) {
      _s._wD(fN + 'Unmuting all sounds');
      for (i = _s.soundIDs.length; i--;) {
        _s.sounds[_s.soundIDs[i]].unmute();
      }
      _s.muted = false;
    } else {
      if (!_idCheck(sID)) {
        return false;
      }
      _s._wD(fN + 'Unmuting "' + sID + '"');
      return _s.sounds[sID].unmute();
    }
  };

  this.unmuteAll = function() {
    _s.unmute();
  };

  this.toggleMute = function(sID) {
    if (!_idCheck(sID)) {
      return false;
    }
    return _s.sounds[sID].toggleMute();
  };

  this.getMemoryUse = function() {
    if (_fV === 8) {
      // not supported in Flash 8
      return 0;
    }
    if (_s.o) {
      return parseInt(_s.o._getMemoryUse(), 10);
    }
  };

  this.disable = function(bNoDisable) {
    // destroy all functions
    if (typeof bNoDisable === 'undefined') {
      bNoDisable = false;
    }
    if (_disabled) {
      return false;
    }
    _disabled = true;
    _wDS('shutdown', 1);
    for (var i = _s.soundIDs.length; i--;) {
      _disableObject(_s.sounds[_s.soundIDs[i]]);
    }
    _initComplete(bNoDisable); // fire "complete", despite fail
    if (window.removeEventListener) {
      window.removeEventListener('load', _initUserOnload, false);
    }
    // _disableObject(_s); // taken out to allow reboot()
  };

  this.canPlayMIME = function(sMIME) {
    var result;
    if (_s.hasHTML5) {
      result = _html5CanPlay({type:sMIME});
    }
    if (!_needsFlash || result) {
      // no flash, or OK
      return result;
    } else {
      return (sMIME?(sMIME.match(_s.mimePattern)?true:false):null);
    }
  };

  this.canPlayURL = function(sURL) {
    var result;
    if (_s.hasHTML5) {
      result = _html5CanPlay(sURL);
    }
    if (!_needsFlash || result) {
      // no flash, or OK
      return result;
    } else {
      return (sURL?(sURL.match(_s.filePattern)?true:false):null);
    }
  };

  this.canPlayLink = function(oLink) {
    if (typeof oLink.type !== 'undefined' && oLink.type) {
      if (_s.canPlayMIME(oLink.type)) {
        return true;
      }
    }
    return _s.canPlayURL(oLink.href);
  };

  this.getSoundById = function(sID, suppressDebug) {
    if (!sID) {
      throw new Error('SoundManager.getSoundById(): sID is null/undefined');
    }
    var result = _s.sounds[sID];
    if (!result && !suppressDebug) {
      _s._wD('"' + sID + '" is an invalid sound ID.', 2);
      // soundManager._wD('trace: '+arguments.callee.caller);
    }
    return result;
  };

  this.onready = function(oMethod, oScope) {
    /*
    soundManager.onready(function(oStatus) {
      console.log('SM2 init success: '+oStatus.success);
    });
    */
    if (oMethod && oMethod instanceof Function) {
      if (_didInit) {
        _wDS('queue');
      }
      if (!oScope) {
        oScope = window;
      }
      _addOnReady(oMethod, oScope);
      _processOnReady();
      return true;
    } else {
      throw _str('needFunction');
    }
  };

  this.oninitmovie = function() {
    // called after SWF has been appended to the DOM via JS (or retrieved from HTML)
    // this is a stub for your own scripts.
  };

  this.onload = function() {
    // window.onload() equivalent for SM2, ready to create sounds etc.
    // this is a stub for your own scripts.
    _s._wD('soundManager.onload()', 1);
  };

  this.onerror = function() {
    // stub for user handler, called when SM2 fails to load/init
  };

  this.getMoviePercent = function() {
    return (_s.o && typeof _s.o.PercentLoaded !== 'undefined'?_s.o.PercentLoaded():null);
  };

  this._writeDebug = function(sText, sType, bTimestamp) {
    // pseudo-private console.log()-style output
    // <d>
    var sDID = 'soundmanager-debug', o, oItem, sMethod;
    if (!_s.debugMode) {
      return false;
    }
    if (typeof bTimestamp !== 'undefined' && bTimestamp) {
      sText = sText + ' | ' + new Date().getTime();
    }
    if (_hasConsole && _s.useConsole) {
      sMethod = _debugLevels[sType];
      if (typeof console[sMethod] !== 'undefined') {
        console[sMethod](sText);
      } else {
        console.log(sText);
      }
      if (_s.useConsoleOnly) {
        return true;
      }
    }
    try {
      o = _id(sDID);
      if (!o) {
        return false;
      }
      oItem = document.createElement('div');
      if (++_wdCount % 2 === 0) {
        oItem.className = 'sm2-alt';
      }
      // sText = sText.replace(/\n/g,'<br />');
      if (typeof sType === 'undefined') {
        sType = 0;
      } else {
        sType = parseInt(sType, 10);
      }
      oItem.appendChild(document.createTextNode(sText));
      if (sType) {
        if (sType >= 2) {
          oItem.style.fontWeight = 'bold';
        }
        if (sType === 3) {
          oItem.style.color = '#ff3333';
        }
      }
      // o.appendChild(oItem); // top-to-bottom
      o.insertBefore(oItem, o.firstChild); // bottom-to-top
    } catch(e) {
      // oh well
    }
    o = null;
    // </d>
  };
  this._wD = this._writeDebug; // alias

  this._debug = function() {
    // <d>
    _wDS('currentObj', 1);
    for (var i = 0, j = _s.soundIDs.length; i < j; i++) {
      _s.sounds[_s.soundIDs[i]]._debug();
    }
    // </d>
  };

  this.reboot = function() {
    // attempt to reset and init SM2
    _s._wD('soundManager.reboot()');
    if (_s.soundIDs.length) {
      _s._wD('Destroying ' + _s.soundIDs.length + ' SMSound objects...');
    }
    for (var i = _s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].destruct();
    }
    // trash ze flash
    try {
      if (_s.isIE) {
        _oRemovedHTML = _s.o.innerHTML;
      }
      _oRemoved = _s.o.parentNode.removeChild(_s.o);
      _s._wD('Flash movie removed.');
    } catch(e) {
      // uh-oh.
      _wDS('badRemove', 2);
    }
    // actually, force recreate of movie.
    _oRemovedHTML = null;
    _oRemoved = null;
    _s.enabled = false;
    _didInit = false;
    _waitingForEI = false;
    _initPending = false;
    _didAppend = false;
    _appendSuccess = false;
    _disabled = false;
    _s.swfLoaded = false;
    _s.soundIDs = {};
    _s.sounds = [];
    _s.o = null;
    for (i = _onready.length; i--;) {
      _onready[i].fired = false;
    }
    _s._wD(_sm + ': Rebooting...');
    window.setTimeout(function() {
      _s.beginDelayedInit();
    }, 20);
  };

  this.destruct = function() {
    _s._wD('soundManager.destruct()');
    _s.disable(true);
  };

  this.beginDelayedInit = function() {
    // _s._wD('soundManager.beginDelayedInit()');
    _windowLoaded = true;
   _dcLoaded();
    setTimeout(_waitForEI, 500);
    setTimeout(_beginInit, 20);
  };

  // --- private SM2 internals ---

  _html5OK = function(iO) {
    return ((iO.type?_html5CanPlay({type:iO.type}):false)||_html5CanPlay(iO.url));
  };

  _html5CanPlay = function(sURL) {
    // try to find MIME, test and return truthiness
    if (!_s.useHTML5Audio || !_s.hasHTML5) {
      return false;
    }
    var result, mime, fileExt, item, aF = _s.audioFormats;
    if (!_html5Ext) {
      _html5Ext = [];
      for (item in aF) {
        if (aF.hasOwnProperty(item)) {
          _html5Ext.push(item);
          if (aF[item].related) {
            _html5Ext = _html5Ext.concat(aF[item].related);
          }
        }
      }
      _html5Ext = new RegExp('\\.('+_html5Ext.join('|')+')','i');
    }
    mime = (typeof sURL.type !== 'undefined'?sURL.type:null);
    fileExt = (typeof sURL === 'string'?sURL.match(_html5Ext):null); // TODO: Strip URL queries, etc.
    if (!fileExt || !fileExt.length) {
      if (!mime) {
        return false;
      }
    } else {
      fileExt = fileExt[0].substr(1); // "mp3", for example
    }
    if (fileExt && typeof _s.html5[fileExt] !== 'undefined') {
      // result known
      return _s.html5[fileExt];
    } else {
      if (!mime) {
        if (fileExt && _s.html5[fileExt]) {
          return _s.html5[fileExt];
        } else {
          // best-case guess, audio/whatever-dot-filename-format-you're-playing
          mime = 'audio/'+fileExt;
        }
      }
      result = _s.html5.canPlayType(mime);
      _s.html5[fileExt] = result;
      // _s._wD('canPlayType, found result: '+result);
      return result;
    }
  };

  _testHTML5 = function() {
    if (!_s.useHTML5Audio || typeof Audio === 'undefined') {
      return false;
    }
    var a = (typeof Audio !== 'undefined' ? new Audio():null), item, support = {}, aF, i;

    function _cp(m) {
      var canPlay, i, j, isOK = false;
      if (!a || typeof a.canPlayType !== 'function') {
        return false;
      }
      if (m instanceof Array) {
        // iterate through all mime types, return any successes
        for (i=0, j=m.length; i<j && !isOK; i++) {
          if (_s.html5[m[i]] || a.canPlayType(m[i]).match(_s.html5Test)) {
            isOK = true;
            _s.html5[m[i]] = true;
          }
        }
        return isOK;
      } else {
        canPlay = (a && typeof a.canPlayType === 'function' ? a.canPlayType(m) : false);
        return (canPlay && (canPlay.match(_s.html5Test)?true:false));
      }
    }

    // test all registered formats + codecs
    aF = _s.audioFormats;
    for (item in aF) {
      if (aF.hasOwnProperty(item)) {
        support[item] = _cp(aF[item].type);
        // assign result to related formats, too
        if (aF[item] && aF[item].related) {
          for (i=0; i<aF[item].related.length; i++) {
            _s.html5[aF[item].related[i]] = support[item];
          }
        }
      }
    }
    support.canPlayType = (a?_cp:null);

    _s.html5 = _mergeObjects(_s.html5, support);

  };

  _strings = {
    notReady: 'Not loaded yet - wait for soundManager.onload() before calling sound-related methods',
    appXHTML: _sm + '::createMovie(): appendChild/innerHTML set failed. May be app/xhtml+xml DOM-related.',
    spcWmode: _sm + '::createMovie(): Removing wmode, preventing win32 below-the-fold SWF loading issue',
    swf404: _sm + ': Verify that %s is a valid path.',
    tryDebug: 'Try ' + _sm + '.debugFlash = true for more security details (output goes to SWF.)',
    checkSWF: 'See SWF output for more debug info.',
    localFail: _sm + ': Non-HTTP page (' + document.location.protocol + ' URL?) Review Flash player security settings for this special case:\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/',
    waitFocus: _sm + ': Special case: Waiting for focus-related event..',
    waitImpatient: _sm + ': Getting impatient, still waiting for Flash%s...',
    waitForever: _sm + ': Waiting indefinitely for Flash (will recover if unblocked)...',
    needFunction: _sm + '.onready(): Function object expected',
    badID: 'Warning: Sound ID "%s" should be a string, starting with a non-numeric character',
    fl9Vid: 'flash 9 required for video. Exiting.',
    noMS: 'MovieStar mode not enabled. Exiting.',
    currentObj: '--- ' + _sm + '._debug(): Current sound objects ---',
    waitEI: _sm + '::initMovie(): Waiting for ExternalInterface call from Flash..',
    waitOnload: _sm + ': Waiting for window.onload()',
    docLoaded: _sm + ': Document already loaded',
    onload: _sm + '::initComplete(): calling soundManager.onload()',
    onloadOK: _sm + '.onload() complete',
    init: '-- ' + _sm + '::init() --',
    didInit: _sm + '::init(): Already called?',
    flashJS: _sm + ': Attempting to call Flash from JS..',
    noPolling: _sm + ': Polling (whileloading()/whileplaying() support) is disabled.',
    secNote: 'Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html',
    badRemove: 'Warning: Failed to remove flash movie.',
    noPeak: 'Warning: peakData features unsupported for movieStar formats',
    shutdown: _sm + '.disable(): Shutting down',
    queue: _sm + '.onready(): Queueing handler',
    smFail: _sm + ': Failed to initialise.',
    smError: 'SMSound.load(): Exception: JS-Flash communication failed, or JS error.',
    fbTimeout: 'No flash response, applying .'+_s.swfCSS.swfTimedout+' CSS..',
    fbLoaded: 'Flash loaded',
    manURL: 'SMSound.load(): Using manually-assigned URL',
    onURL: _sm + '.load(): current URL already assigned.',
    badFV: 'soundManager.flashVersion must be 8 or 9. "%s" is invalid. Reverting to %s.',
    as2loop: 'Note: Setting stream:false so looping can work (flash 8 limitation)',
    noNSLoop: 'Note: Looping not implemented for MovieStar formats',
    needfl9: 'Note: Switching to flash 9, required for MP4 formats.'
  };

  _id = function(sID) {
    return document.getElementById(sID);
  };

  _wdCount = 0;

  _str = function() { // o [,items to replace]
    var params = Array.prototype.slice.call(arguments), // real array, please
    o = params.shift(), // first arg
    str = (_strings && _strings[o]?_strings[o]:''), i, j;
    if (str && params && params.length) {
      for (i = 0, j = params.length; i < j; i++) {
        str = str.replace('%s', params[i]);
      }
    }
    return str;
  };

  _loopFix = function(sOpt) {
    // flash 8 requires stream = false for looping to work.
    if (_fV === 8 && sOpt.loops > 1 && sOpt.stream) {
      _wDS('as2loop');
      sOpt.stream = false;
    }
    return sOpt;
  };

  _complain = function(sMsg, oCaller) {
    // Try to create meaningful custom errors, w/stack trace to the "offending" line
    var sPre = 'Error: ', errorDesc;
    if (!oCaller) {
      return new Error(sPre + sMsg);
    }
    if (typeof console !== 'undefined' && typeof console.trace !== 'undefined') {
      console.trace();
    }
    errorDesc = sPre + sMsg + '. \nCaller: ' + oCaller.toString();
    // See JS error/debug/console output for real error source, stack trace / message detail where possible.
    return new Error(errorDesc);
  };

  _doNothing = function() {
    return false;
  };

  _disableObject = function(o) {
    for (var oProp in o) {
      if (o.hasOwnProperty(oProp) && typeof o[oProp] === 'function') {
        o[oProp] = _doNothing;
      }
    }
    oProp = null;
  };

  _failSafely = function(bNoDisable) {
    // general failure exception handler
    if (typeof bNoDisable === 'undefined') {
      bNoDisable = false;
    }
    if (_disabled || bNoDisable) {
      _wDS('smFail', 2);
      _s.disable(bNoDisable);
    }
  };

  _normalizeMovieURL = function(smURL) {
    var urlParams = null;
    if (smURL) {
      if (smURL.match(/\.swf(\?\.*)?$/i)) {
        urlParams = smURL.substr(smURL.toLowerCase().lastIndexOf('.swf?') + 4);
        if (urlParams) {
          return smURL; // assume user knows what they're doing
        }
      } else if (smURL.lastIndexOf('/') !== smURL.length - 1) {
        smURL = smURL + '/';
      }
    }
    return (smURL && smURL.lastIndexOf('/') !== - 1?smURL.substr(0, smURL.lastIndexOf('/') + 1):'./') + _s.movieURL;
  };

  _setVersionInfo = function() {
    if (_fV !== 8 && _fV !== 9) {
      _s._wD(_str('badFV', _fV, _defaultFlashVersion));
      _s.flashVersion = _defaultFlashVersion;
    }
    var isDebug = (_s.debugMode || _s.debugFlash?'_debug.swf':'.swf'); // debug flash movie, if applicable
    if (_s.flashVersion < 9 && _s.useHTML5Audio && _s.audioFormats.mp4.required) {
      _s._wD(_str('needfl9'));
      _s.flashVersion = 9;
    }
    _fV = _s.flashVersion; // short-hand for internal use
    _s.version = _s.versionNumber + (_html5Only?' (HTML5-only mode)':(_fV === 9?' (AS3/Flash 9)':' (AS2/Flash 8)'));
    // set up default options
    if (_fV > 8) {
      _s.defaultOptions = _mergeObjects(_s.defaultOptions, _s.flash9Options);
      _s.features.buffering = true;
    }
    if (_fV > 8 && _s.useMovieStar) {
      // flash 9+ support for movieStar formats as well as MP3
      _s.defaultOptions = _mergeObjects(_s.defaultOptions, _s.movieStarOptions);
      _s.filePatterns.flash9 = new RegExp('\\.(mp3|' + _s.netStreamTypes.join('|') + ')(\\?.*)?$', 'i');
      _s.mimePattern = _s.netStreamMimeTypes;
      _s.features.movieStar = true;
    } else {
      _s.features.movieStar = false;
    }
    _s.filePattern = _s.filePatterns[(_fV !== 8?'flash9':'flash8')];
    _s.movieURL = (_fV === 8?'soundmanager2.swf':'soundmanager2_flash9.swf').replace('.swf',isDebug);
    _s.features.peakData = _s.features.waveformData = _s.features.eqData = (_fV > 8);
  };

  _getDocument = function() {
    return (document.body?document.body:(document.documentElement?document.documentElement:document.getElementsByTagName('div')[0]));
  };

  _setPolling = function(bPolling, bHighPerformance) {
    if (!_s.o || !_s.allowPolling) {
      return false;
    }
    _s.o._setPolling(bPolling, bHighPerformance);
  };

  function _initDebug() {
    if (_s.debugURLParam.test(_wl)) {
      _s.debugMode = true; // allow force of debug mode via URL
    }
    // <d>
    var oD, oDebug, oTarget, oToggle, tmp;
    if (_s.debugMode) {

      oD = document.createElement('div');
      oD.id = _s.debugID + '-toggle';
      oToggle = {
        position: 'fixed',
        bottom: '0px',
        right: '0px',
        width: '1.2em',
        height: '1.2em',
        lineHeight: '1.2em',
        margin: '2px',
        textAlign: 'center',
        border: '1px solid #999',
        cursor: 'pointer',
        background: '#fff',
        color: '#333',
        zIndex: 10001
      };

      oD.appendChild(document.createTextNode('-'));
      oD.onclick = _toggleDebug;
      oD.title = 'Toggle SM2 debug console';

      if (_ua.match(/msie 6/i)) {
        oD.style.position = 'absolute';
        oD.style.cursor = 'hand';
      }

      for (tmp in oToggle) {
        if (oToggle.hasOwnProperty(tmp)) {
          oD.style[tmp] = oToggle[tmp];
        }
      }

    }
    if (_s.debugMode && !_id(_s.debugID) && ((!_hasConsole || !_s.useConsole) || (_s.useConsole && _hasConsole && !_s.consoleOnly))) {
      oDebug = document.createElement('div');
      oDebug.id = _s.debugID;
      oDebug.style.display = (_s.debugMode?'block':'none');
      if (_s.debugMode && !_id(oD.id)) {
        try {
          oTarget = _getDocument();
          oTarget.appendChild(oD);
        } catch(e2) {
          throw new Error(_str('appXHTML'));
        }
        oTarget.appendChild(oDebug);
      }
    }
    oTarget = null;
    _initDebug = function(){}; // one-time function
    // </d>
  }

  _createMovie = function(smID, smURL) {

    var specialCase = null,
    remoteURL = (smURL?smURL:_s.url),
    localURL = (_s.altURL?_s.altURL:remoteURL),
    oEmbed, oMovie, oTarget, tmp, movieHTML, oEl, extraClass, s, x, sClass, side = '100%';
    smID = (typeof smID === 'undefined'?_s.id:smID);
    if (_didAppend && _appendSuccess) {
      return false; // ignore if already succeeded
    }

    function _initMsg() {
      _s._wD('-- SoundManager 2 ' + _s.version + (!_html5Only && _s.useHTML5Audio?(_s.hasHTML5?' + HTML5 audio':', no HTML5 audio support'):'') + (_s.useMovieStar?', MovieStar mode':'') + (_s.useHighPerformance?', high performance mode, ':', ') + ((_s.useFastPolling?'fast':'normal') + ' polling') + (_s.wmode?', wmode: ' + _s.wmode:'') + (_s.debugFlash?', flash debug mode':'') + (_s.useFlashBlock?', flashBlock mode':'') + ' --', 1);
    }
    if (_html5Only) {
      _setVersionInfo();
      _initMsg();
      _s.oMC = _id(_s.movieID);
      _init();
      // prevent multiple init attempts
      _didAppend = true;
      _appendSuccess = true;
      return false;
    }

    _didAppend = true;

    // safety check for legacy (change to Flash 9 URL)
    _setVersionInfo();
    _s.url = _normalizeMovieURL(this._overHTTP?remoteURL:localURL);
    smURL = _s.url;

    if (_s.useHighPerformance && _s.useMovieStar && _s.defaultOptions.useVideo === true) {
      specialCase = 'soundManager note: disabling highPerformance, not applicable with movieStar mode+useVideo';
      _s.useHighPerformance = false;
    }

    _s.wmode = (!_s.wmode && _s.useHighPerformance && !_s.useMovieStar?'transparent':_s.wmode);

    // TODO: revisit
    // if (_s.wmode !== null && _s.flashLoadTimeout !== 0 && (!_s.useHighPerformance || _s.debugFlash) && !_s.isIE && navigator.platform.match(/win32/i)) {

    if (_s.wmode !== null && !_s.isIE && !_s.useHighPerformance && navigator.platform.match(/win32/i)) {
      _s.specialWmodeCase = true;
      // extra-special case: movie doesn't load until scrolled into view when using wmode = anything but 'window' here
      // does not apply when using high performance (position:fixed means on-screen), OR infinite flash load timeout
      _wDS('spcWmode');
      _s.wmode = null;
    }

    if (_fV === 8) {
      _s.allowFullScreen = false;
    }

    oEmbed = {
      name: smID,
      id: smID,
      src: smURL,
      width: side,
      height: side,
      quality: 'high',
      allowScriptAccess: _s.allowScriptAccess,
      bgcolor: _s.bgColor,
      pluginspage: 'http://www.macromedia.com/go/getflashplayer',
      type: 'application/x-shockwave-flash',
      wmode: _s.wmode,
      allowfullscreen: (_s.allowFullScreen?'true':'false')
    };

    if (_s.debugFlash) {
      oEmbed.FlashVars = 'debug=1';
    }

    if (!_s.wmode) {
      delete oEmbed.wmode; // don't write empty attribute
    }

    if (_s.isIE) {
      // IE is "special".
      oMovie = document.createElement('div');
      movieHTML = '<object id="' + smID + '" data="' + smURL + '" type="' + oEmbed.type + '" width="' + oEmbed.width + '" height="' + oEmbed.height + '"><param name="movie" value="' + smURL + '" /><param name="AllowScriptAccess" value="' + _s.allowScriptAccess + '" /><param name="quality" value="' + oEmbed.quality + '" />' + (_s.wmode?'<param name="wmode" value="' + _s.wmode + '" /> ':'') + '<param name="bgcolor" value="' + _s.bgColor + '" /><param name="allowFullScreen" value="' + oEmbed.allowFullScreen + '" />' + (_s.debugFlash?'<param name="FlashVars" value="' + oEmbed.FlashVars + '" />':'') + '<!-- --></object>';
    } else {
      oMovie = document.createElement('embed');
      for (tmp in oEmbed) {
        if (oEmbed.hasOwnProperty(tmp)) {
          oMovie.setAttribute(tmp, oEmbed[tmp]);
        }
      }
    }

    _initDebug();

    extraClass = _getSWFCSS();
    oTarget = _getDocument();

    if (oTarget) {
      _s.oMC = _id(_s.movieID)?_id(_s.movieID):document.createElement('div');
      if (!_s.oMC.id) {
        _s.oMC.id = _s.movieID;
        _s.oMC.className = _s.swfCSS.swfDefault + ' ' + extraClass;
        // "hide" flash movie
        s = null;
        oEl = null;
        if (!_s.useFlashBlock) {
          if (_s.useHighPerformance) {
            s = {
              position: 'fixed',
              width: '8px',
              height: '8px',
              // >= 6px for flash to run fast, >= 8px to start up under Firefox/win32 in some cases. odd? yes.
              bottom: '0px',
              left: '0px',
              overflow: 'hidden'
              // zIndex:-1 // sit behind everything else - potentially dangerous/buggy?
            };
          } else {
            s = {
              position: 'absolute',
              width: '6px',
              height: '6px',
              top: '-9999px',
              left: '-9999px'
            };
          }
        }
        x = null;
        if (!_s.debugFlash) {
          for (x in s) {
            if (s.hasOwnProperty(x)) {
              _s.oMC.style[x] = s[x];
            }
          }
        }
        try {
          if (!_s.isIE) {
            _s.oMC.appendChild(oMovie);
          }
          oTarget.appendChild(_s.oMC);
          if (_s.isIE) {
            oEl = _s.oMC.appendChild(document.createElement('div'));
            oEl.className = 'sm2-object-box';
            oEl.innerHTML = movieHTML;
          }
          _appendSuccess = true;
        } catch(e) {
          throw new Error(_str('appXHTML'));
        }
      } else {
        // it's already in the document.
        sClass = _s.oMC.className;
        _s.oMC.className = (sClass?sClass+' ':_s.swfCSS.swfDefault) + (extraClass?' '+extraClass:'');
        _s.oMC.appendChild(oMovie);
        if (_s.isIE) {
          oEl = _s.oMC.appendChild(document.createElement('div'));
          oEl.className = 'sm2-object-box';
          oEl.innerHTML = movieHTML;
        }
        _appendSuccess = true;
      }
    }

    if (specialCase) {
      _s._wD(specialCase);
    }

    _initMsg();
    _s._wD('soundManager::createMovie(): Trying to load ' + smURL + (!this._overHTTP && _s.altURL?' (alternate URL)':''), 1);

  };

  _idCheck = this.getSoundById;

  // <d>
  _wDS = function(o, errorLevel) {
    if (!o) {
      return '';
    } else {
      return _s._wD(_str(o), errorLevel);
    }
  };

  if (_wl.indexOf('debug=alert') + 1 && _s.debugMode) {
    _s._wD = function(sText) {alert(sText);};
  }

  _toggleDebug = function() {
    var o = _id(_s.debugID),
    oT = _id(_s.debugID + '-toggle');
    if (!o) {
      return false;
    }
    if (_debugOpen) {
      // minimize
      oT.innerHTML = '+';
      o.style.display = 'none';
    } else {
      oT.innerHTML = '-';
      o.style.display = 'block';
    }
    _debugOpen = !_debugOpen;
  };

  _debugTS = function(sEventType, bSuccess, sMessage) {
    // troubleshooter debug hooks
    if (typeof sm2Debugger !== 'undefined') {
      try {
        sm2Debugger.handleEvent(sEventType, bSuccess, sMessage);
      } catch(e) {
        // oh well  
      }
    }
  };
  // </d>

  _mergeObjects = function(oMain, oAdd) {
    // non-destructive merge
    var o1 = {}, // clone o1
    i, o2, o;
    for (i in oMain) {
      if (oMain.hasOwnProperty(i)) {
        o1[i] = oMain[i];
      }
    }
    o2 = (typeof oAdd === 'undefined'?_s.defaultOptions:oAdd);
    for (o in o2) {
      if (o2.hasOwnProperty(o) && typeof o1[o] === 'undefined') {
        o1[o] = o2[o];
      }
    }
    return o1;
  };

  _initMovie = function() {
    if (_html5Only) {
      _createMovie();
      return false;
    }
    // attempt to get, or create, movie
    if (_s.o) {
      return false; // may already exist
    }
    _s.o = _s.getMovie(_s.id); // (inline markup)
    if (!_s.o) {
      if (!_oRemoved) {
        // try to create
        _createMovie(_s.id, _s.url);
      } else {
        // try to re-append removed movie after reboot()
        if (!_s.isIE) {
          _s.oMC.appendChild(_oRemoved);
        } else {
          _s.oMC.innerHTML = _oRemovedHTML;
        }
        _oRemoved = null;
        _didAppend = true;
      }
      _s.o = _s.getMovie(_s.id);
    }
    if (_s.o) {
      _s._wD('soundManager::initMovie(): Got '+_s.o.nodeName+' element ('+(_didAppend?'created via JS':'static HTML')+')');
      _wDS('waitEI');
    }
    if (typeof _s.oninitmovie === 'function') {
      setTimeout(_s.oninitmovie, 1);
    }
  };

  _go = function(sURL) {
    // where it all begins.
    if (sURL) {
      _s.url = sURL;
    }
    _initMovie();
  };

  _waitForEI = function() {
    if (_waitingForEI) {
      return false;
    }
    _waitingForEI = true;
    if (_tryInitOnFocus && !_isFocused) {
      _wDS('waitFocus');
      return false;
    }
    var p;
    if (!_didInit) {
      p = _s.getMoviePercent();
      _s._wD(_str('waitImpatient', (p === 100?' (SWF loaded)':(p > 0?' (SWF ' + p + '% loaded)':''))));
    }
    setTimeout(function() {
      p = _s.getMoviePercent();
      if (!_didInit) {
        _s._wD(_sm + ': No Flash response within expected time.\nLikely causes: ' + (p === 0?'Loading ' + _s.movieURL + ' may have failed (and/or Flash ' + _fV + '+ not present?), ':'') + 'Flash blocked or JS-Flash security error.' + (_s.debugFlash?' ' + _str('checkSWF'):''), 2);
        if (!this._overHTTP && p) {
          _wDS('localFail', 2);
          if (!_s.debugFlash) {
            _wDS('tryDebug', 2);
          }
        }
        if (p === 0) {
          // if 0 (not null), probably a 404.
          _s._wD(_str('swf404', _s.url));
        }
        _debugTS('flashtojs', false, ': Timed out' + this._overHTTP?' (Check flash security or flash blockers)':' (No plugin/missing SWF?)');
      }
      // give up / time-out, depending
      if (!_didInit && _okToDisable) {
        if (p === null) {
          // SWF failed. Maybe blocked.
          if (_s.useFlashBlock || _s.flashLoadTimeout === 0) {
            if (_s.useFlashBlock) {
              _flashBlockHandler();
            }
            _wDS('waitForever');
          } else {
            // old SM2 behaviour, simply fail
            _failSafely(true);
          }
        } else {
          // flash loaded? Shouldn't be a blocking issue, then.
          if (_s.flashLoadTimeout === 0) {
             _wDS('waitForever');
          } else {
            _failSafely(true);
          }
        }
      }
    }, _s.flashLoadTimeout);
  };

  _getSWFCSS = function() {
    var css = [];
    if (_s.debugMode) {
      css.push(_s.swfCSS.sm2Debug);
    }
    if (_s.debugFlash) {
      css.push(_s.swfCSS.flashDebug);
    }
    if (_s.useHighPerformance) {
      css.push(_s.swfCSS.highPerf);
    }
    return css.join(' ');
  };

  _flashBlockHandler = function() {
    // *possible* flash block situation.
    var name = 'soundManager::flashBlockHandler()', p = _s.getMoviePercent();
    if (!_s.supported()) {
      if (_needsFlash) {
        // make the movie more visible, so user can fix
        _s.oMC.className = _getSWFCSS() + ' ' + _s.swfCSS.swfDefault + ' ' + (p === null?_s.swfCSS.swfTimedout:_s.swfCSS.swfError);
        _s._wD(name+': '+_str('fbTimeout')+(p?' ('+_str('fbLoaded')+')':''));
      }
      _s.didFlashBlock = true;
      _processOnReady(true); // fire onready(), complain lightly
      // onerror?
      if (_s.onerror instanceof Function) {
        _s.onerror.apply(window);
      }
    } else {
      // SM2 loaded OK (or recovered)
      if (_s.didFlashBlock) {
        _s._wD(name+': Unblocked');
      }
      if (_s.oMC) {
        _s.oMC.className = _getSWFCSS() + ' ' + _s.swfCSS.swfDefault + (' '+_s.swfCSS.swfUnblocked);
      }
    }
  };

  _handleFocus = function() {
    if (_isFocused || !_tryInitOnFocus) {
      return true;
    }
    _okToDisable = true;
    _isFocused = true;
    _s._wD('soundManager::handleFocus()');
    if (_tryInitOnFocus) {
      // giant Safari 3.1 hack - assume window in focus if mouse is moving, since document.hasFocus() not currently implemented.
      window.removeEventListener('mousemove', _handleFocus, false);
    }
    // allow init to restart
    _waitingForEI = false;
    setTimeout(_waitForEI, 500);
    // detach event
    if (window.removeEventListener) {
      window.removeEventListener('focus', _handleFocus, false);
    } else if (window.detachEvent) {
      window.detachEvent('onfocus', _handleFocus);
    }
  };

  _initComplete = function(bNoDisable) {
    if (_didInit) {
      return false;
    }
    if (_html5Only) {
      // all good.
      _s._wD('-- SoundManager 2: loaded --');
      _didInit = true;
      _processOnReady();
      _initUserOnload();
      return true;
    }
    var sClass = _s.oMC.className,
    wasTimeout = (_s.useFlashBlock && _s.flashLoadTimeout && !_s.getMoviePercent());
    if (!wasTimeout) {
      _didInit = true;
    }
    _s._wD('-- SoundManager 2 ' + (_disabled?'failed to load':'loaded') + ' (' + (_disabled?'security/load error':'OK') + ') --', 1);
    if (_disabled || bNoDisable) {
      if (_s.useFlashBlock) {
        _s.oMC.className = _getSWFCSS() + ' ' + (_s.getMoviePercent() === null?_s.swfCSS.swfTimedout:_s.swfCSS.swfError);
      }
      _processOnReady();
      _debugTS('onload', false);
      if (_s.onerror instanceof Function) {
        _s.onerror.apply(window);
      }
      return false;
    } else {
      _debugTS('onload', true);
    }
    if (_s.waitForWindowLoad && !_windowLoaded) {
      _wDS('waitOnload');
      if (window.addEventListener) {
        window.addEventListener('load', _initUserOnload, false);
      } else if (window.attachEvent) {
        window.attachEvent('onload', _initUserOnload);
      }
      return false;
    } else {
      if (_s.waitForWindowLoad && _windowLoaded) {
        _wDS('docLoaded');
      }
      _initUserOnload();
    }
  };

  _addOnReady = function(oMethod, oScope) {
    _onready.push({
      'method': oMethod,
      'scope': (oScope || null),
      'fired': false
    });
  };

  _processOnReady = function(ignoreInit) {
    if (!_didInit && !ignoreInit) {
      // not ready yet.
      return false;
    }
    var status = {
      success: (ignoreInit?_s.supported():!_disabled)
    },
    queue = [], i, j,
    canRetry = (!_s.useFlashBlock || (_s.useFlashBlock && !_s.supported()));
    for (i = 0, j = _onready.length; i < j; i++) {
      if (_onready[i].fired !== true) {
        queue.push(_onready[i]);
      }
    }
    if (queue.length) {
      _s._wD(_sm + ': Firing ' + queue.length + ' onready() item' + (queue.length > 1?'s':''));
      for (i = 0, j = queue.length; i < j; i++) {
        if (queue[i].scope) {
          queue[i].method.apply(queue[i].scope, [status]);
        } else {
          queue[i].method(status);
        }
        if (!canRetry) { // flashblock case doesn't count here
          queue[i].fired = true;
        }
      }
    }
  };

  _initUserOnload = function() {
    window.setTimeout(function() {
      if (_s.useFlashBlock) {
        _flashBlockHandler();
      }
      _processOnReady();
      _wDS('onload', 1);
      // call user-defined "onload", scoped to window
      _s.onload.apply(window);
      _wDS('onloadOK', 1);
    },1);
  };

  _featureCheck = function() {
    var needsFlash, item,
    isBadSafari = (!_wl.match(/usehtml5audio/i) && _s.isSafari && _ua.match(/OS X 10_6_3/i) && _ua.match(/531\.22\.7/i)), // https://bugs.webkit.org/show_bug.cgi?id=32159
    isSpecial = (_ua.match(/iphone os (1|2|3_0|3_1)/i)?true:false); // iPhone <= 3.1 is broken (OS 4 reported to work.)
    if (isSpecial) {
      _s.hasHTML5 = false; // has Audio(), but is broken; let it load links directly.
      _html5Only = true; // ignore flash case, however
      if (_s.oMC) {
        _s.oMC.style.display = 'none';
      }
      return false;
    }
    if (_s.useHTML5Audio) {
      if (!_s.html5 || !_s.html5.canPlayType) {
        _s._wD('SoundManager: No HTML5 Audio() support detected.');
        _s.hasHTML5 = false;
        return true;
      } else {
        _s.hasHTML5 = true;
      }
      if (isBadSafari) {
        _s._wD('Note: Buggy HTML5 in this version of Safari, see https://bugs.webkit.org/show_bug.cgi?id=32159 - disabling HTML5',1);
        _s.useHTML5Audio = false;
        _s.hasHTML5 = false;
        return true;
      }
    } else {
      // flash required.
      return true;
    }
    for (item in _s.audioFormats) {
      if (_s.audioFormats.hasOwnProperty(item)) {
        if (_s.audioFormats[item].required && !_s.html5.canPlayType(_s.audioFormats[item].type)) {
          // may need flash for this format?
          needsFlash = true;
        }
      }
    }
    // sanity check..
    if (_s.ignoreFlash) {
      needsFlash = false;
    }
    _html5Only = (_s.useHTML5Audio && _s.hasHTML5 && !needsFlash);
    return needsFlash;
  };

  _init = function() {
    var item, tests = [];
    _wDS('init');
    // called after onload()

    if (_didInit) {
      _wDS('didInit');
      return false;
    }

    function _cleanup() {
      if (window.removeEventListener) {
        window.removeEventListener('load', _s.beginDelayedInit, false);
      } else if (window.detachEvent) {
        window.detachEvent('onload', _s.beginDelayedInit);
      }
    }

    if (_s.hasHTML5) {
      for (item in _s.audioFormats) {
        if (_s.audioFormats.hasOwnProperty(item)) {
          tests.push(item+': '+_s.html5[item]);
        }
      }
      _s._wD('-- SoundManager 2: HTML5 support tests ('+_s.html5Test+'): '+tests.join(', ')+' --',1);
    }

    if (_html5Only) {
      if (!_didInit) {
        // we don't need no steenking flash!
        _cleanup();
        _s.enabled = true;
        _initComplete();
      }
      return true;
    } else {
}

    // flash path
    _initMovie();
    try {
      _wDS('flashJS');
      _s.o._externalInterfaceTest(false); // attempt to talk to Flash
      if (!_s.allowPolling) {
        _wDS('noPolling', 1);
      } else {
        _setPolling(true, _s.useFastPolling?true:false);
      }
      if (!_s.debugMode) {
        _s.o._disableDebug();
      }
      _s.enabled = true;
      _debugTS('jstoflash', true);
    } catch(e) {
      _s._wD('js/flash exception: ' + e.toString());
      _debugTS('jstoflash', false);
      _failSafely(true); // don't disable, for reboot()
      _initComplete();
      return false;
    }
    _initComplete();
    // event cleanup
    _cleanup();
  };

  _beginInit = function() {
    if (_initPending) {
      return false;
    }
    _createMovie();
    _initMovie();
    _initPending = true;
    return true;
  };

  _dcLoaded = function() {
    if (_didDCLoaded) {
      return false;
    }
    _didDCLoaded = true;
    _initDebug();
    _testHTML5();
    _s.html5.usingFlash = _featureCheck();
    _needsFlash = _s.html5.usingFlash;
    _didDCLoaded = true;
    _go();
  };

  _startTimer = function(oSound) {
    if (!oSound._hasTimer) {
      oSound._hasTimer = true;
    }
  };

  _stopTimer = function(oSound) {
    if (oSound._hasTimer) {
      oSound._hasTimer = false;
    }
  };

  // "private" methods called by Flash

  this._setSandboxType = function(sandboxType) {
    var sb = _s.sandbox;
    sb.type = sandboxType;
    sb.description = sb.types[(typeof sb.types[sandboxType] !== 'undefined'?sandboxType:'unknown')];
    _s._wD('Flash security sandbox type: ' + sb.type);
    if (sb.type === 'localWithFile') {
      sb.noRemote = true;
      sb.noLocal = false;
      _wDS('secNote', 2);
    } else if (sb.type === 'localWithNetwork') {
      sb.noRemote = false;
      sb.noLocal = true;
    } else if (sb.type === 'localTrusted') {
      sb.noRemote = false;
      sb.noLocal = false;
    }
  };

  this._externalInterfaceOK = function(flashDate) {
    // callback from flash for confirming that movie loaded, EI is working etc.
    // flashDate = approx. timing/delay info for JS/flash bridge
    if (_s.swfLoaded) {
      return false;
    }
    var eiTime = new Date().getTime();
    _s._wD('soundManager::externalInterfaceOK()' + (flashDate?' (~' + (eiTime - flashDate) + ' ms)':''));
    _debugTS('swf', true);
    _debugTS('flashtojs', true);
    _s.swfLoaded = true;
    _tryInitOnFocus = false;
    if (_s.isIE) {
      // IE needs a timeout OR delay until window.onload - may need TODO: investigating
      setTimeout(_init, 100);
    } else {
      _init();
    }
  };

  this._onfullscreenchange = function(bFullScreen) {
    _s._wD('onfullscreenchange(): ' + bFullScreen);
    _s.isFullScreen = (bFullScreen === 1?true:false);
    if (!_s.isFullScreen) {
      // attempt to restore window focus after leaving full-screen
      try {
        window.focus();
        _s._wD('window.focus()');
      } catch(e) {
        // oh well
      }
    }
  };

  // --- SMSound (sound object) instance ---

  SMSound = function(oOptions) {
    var _t = this, _resetProperties, _add_html5_events, _stop_html5_timer, _start_html5_timer, _get_html5_duration, _a;
    this.sID = oOptions.id;
    this.url = oOptions.url;
    this.options = _mergeObjects(oOptions);
    this.instanceOptions = this.options; // per-play-instance-specific options
    this._iO = this.instanceOptions; // short alias
    // assign property defaults (volume, pan etc.)
    this.pan = this.options.pan;
    this.volume = this.options.volume;
    // this.autoPlay = oOptions.autoPlay ? oOptions.autoPlay : false;
    this._lastURL = null;
    this.isHTML5 = false;

    // --- public methods ---

    this.id3 = {
      /* 
        Name/value pairs eg. this.id3.songname set via Flash when available - download docs for reference
        http://livedocs.macromedia.com/flash/8/
      */
    };

    this._debug = function() {
      // <d>
      // pseudo-private console.log()-style output
      if (_s.debugMode) {
        var stuff = null, msg = [], sF, sfBracket, maxLength = 64;
        for (stuff in _t.options) {
          if (_t.options[stuff] !== null) {
            if (_t.options[stuff] instanceof Function) {
              // handle functions specially
              sF = _t.options[stuff].toString();
              sF = sF.replace(/\s\s+/g, ' '); // normalize spaces
              sfBracket = sF.indexOf('{');
              msg.push(' ' + stuff + ': {' + sF.substr(sfBracket + 1, (Math.min(Math.max(sF.indexOf('\n') - 1, maxLength), maxLength))).replace(/\n/g, '') + '... }');
            } else {
              msg.push(' ' + stuff + ': ' + _t.options[stuff]);
            }
          }
        }
        _s._wD('SMSound() merged options: {\n' + msg.join(', \n') + '\n}');
      }
      // </d>
    };

    this._debug();

    this.load = function(oOptions) {
      var oS = null;
      if (typeof oOptions !== 'undefined') {
        _t._iO = _mergeObjects(oOptions);
        _t.instanceOptions = _t._iO;
      } else {
        oOptions = _t.options;
        _t._iO = oOptions;
        _t.instanceOptions = _t._iO;
        if (_t._lastURL && _t._lastURL !== _t.url) {
          _wDS('manURL');
          _t._iO.url = _t.url;
          _t.url = null;
        }
      }
      if (typeof _t._iO.url === 'undefined') {
        _t._iO.url = _t.url;
      }
      _s._wD('soundManager.load(): ' + _t._iO.url, 1);
      if (_t._iO.url === _t.url && _t.readyState !== 0 && _t.readyState !== 2) {
        _wDS('onURL', 1);
        return _t;
      }
      _t.url = _t._iO.url;
      _t._lastURL = _t._iO.url;
      _t.loaded = false;
      _t.readyState = 1;
      _t.playState = 0; // (oOptions.autoPlay?1:0); // if autoPlay, assume "playing" is true (no way to detect when it actually starts in Flash unless onPlay is watched?)
      if (_html5OK(_t._iO)) {
        _s._wD('HTML 5 load: '+_t._iO.url);
        oS = _t._setup_html5(_t._iO);
        // if autoplay..
        if (_t._iO.autoPlay) {
          // oS.load(); // required? Uncertain.
          _t.play();
        }
      } else {
        try {
          _t.isHTML5 = false;
          _t._iO = _loopFix(_t._iO);
          if (_fV === 8) {
            _s.o._load(_t.sID, _t._iO.url, _t._iO.stream, _t._iO.autoPlay, (_t._iO.whileloading?1:0), _t._iO.loops||1);
          } else {
            _s.o._load(_t.sID, _t._iO.url, _t._iO.stream?true:false, _t._iO.autoPlay?true:false, _t._iO.loops||1); // ,(_tO.whileloading?true:false)
            if (_t._iO.isMovieStar && _t._iO.autoLoad && !_t._iO.autoPlay) {
              // special case: MPEG4 content must start playing to load, then pause to prevent playing.
              _t.pause();
            }
          }
        } catch(e) {
          _wDS('smError', 2);
          _debugTS('onload', false);
          _s.onerror();
          _s.disable();
        }
      }
      return _t;
    };

    this.unload = function() {
      // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3
      // Flash 9/AS3: Close stream, preventing further load
      if (_t.readyState !== 0) {
        _s._wD('SMSound.unload(): "' + _t.sID + '"');
        if (_t.readyState !== 2) { // reset if not error
          _t.setPosition(0, true); // reset current sound positioning
        }
        if (!_t.isHTML5) {
          if (_fV === 8) {
            _s.o._unload(_t.sID, _s.nullURL);
          } else {
            _t.setAutoPlay(false); // ?
            _s.o._unload(_t.sID);
          }
        } else {
          _stop_html5_timer();
          if (_a) {
            // abort()-style method here, stop loading? (doesn't exist?)
            _a.pause();
            _a.src = _s.nullURL; // needed? does nulling object work? any better way to cancel/unload/abort?
            _a.load();
            _t._audio = null;
            _a = null;
            // delete _t._audio;
          }
        } 
        // reset load/status flags
        _resetProperties();
      }
      return _t;
    };

    this.destruct = function() {
      _s._wD('SMSound.destruct(): "' + _t.sID + '"');
      if (!_t.isHTML5) {
        // kill sound within Flash
        // Disable the onfailure handler
        _t._iO.onfailure = null;
        _s.o._destroySound(_t.sID);
      } else {
        _stop_html5_timer();
        if (_a) {
          _a.pause();
          _a.src = 'about:blank';
          _a.load();
          _t._audio = null;
          _a = null;
          // delete _t._audio;
        }
      }
      _s.destroySound(_t.sID, true); // ensure deletion from controller
    };

    this.play = function(oOptions) {
      var fN = 'SMSound.play(): ', allowMulti;
      if (!oOptions) {
        oOptions = {};
      }
      _t._iO = _mergeObjects(oOptions, _t._iO);
      _t._iO = _mergeObjects(_t._iO, _t.options);
      _t.instanceOptions = _t._iO;
      if (_t._iO.serverURL) {
        if (!_t.connected) {
          _s._wD(fN+' Netstream not connected yet - setting autoPlay');
          _t.setAutoPlay(true);
          return _t;
        }
      }
      if (_html5OK(_t._iO)) {
        _t._setup_html5(_t._iO);
        _start_html5_timer();
      }
      if (_t.playState === 1) {
        allowMulti = _t._iO.multiShot;
        if (!allowMulti) {
          _s._wD(fN + '"' + _t.sID + '" already playing (one-shot)', 1);
          return _t;
        } else {
          _s._wD(fN + '"' + _t.sID + '" already playing (multi-shot)', 1);
          if (_t.isHTML5) {
            // TODO: BUG?
            _t.setPosition(_t._iO.position);
          }
        }
      }
      if (!_t.loaded) {
        if (_t.readyState === 0) {
          _s._wD(fN + 'Attempting to load "' + _t.sID + '"', 1);
          // try to get this sound playing ASAP
          //_t._iO.stream = true; // breaks stream=false case?
          if (!_t.isHTML5) {
            // HTML5 double-play bug otherwise.
            if (!_t._iO.serverURL) {
              _t._iO.autoPlay = true;
              _t.load(_t._iO); // try to get this sound playing ASAP
            }
          } else {
            _t.readyState = 1;
          }
          // if (typeof oOptions.autoPlay=='undefined') _tO.autoPlay = true; // only set autoPlay if unspecified here
          // _t.load(_t._iO); // moved into flash-only block
        } else if (_t.readyState === 2) {
          _s._wD(fN + 'Could not load "' + _t.sID + '" - exiting', 2);
          return _t;
        } else {
          _s._wD(fN + '"' + _t.sID + '" is loading - attempting to play..', 1);
        }
      } else {
        _s._wD(fN + '"' + _t.sID + '"');
      }
      if (_t.paused) {
        _s._wD(fN + '"' + _t.sID + '" is resuming from paused state',1);
        _t.resume();
      } else {
        _s._wD(fN+'"'+ _t.sID+'" is starting to play');
        _t.playState = 1;
        if (!_t.instanceCount || (_fV > 8 && !_t.isHTML5)) {
          _t.instanceCount++;
        }
        _t.position = (typeof _t._iO.position !== 'undefined' && !isNaN(_t._iO.position)?_t._iO.position:0);
        _t._iO = _loopFix(_t._iO);
        if (_t._iO.onplay) {
          _t._iO.onplay.apply(_t);
        }
        _t.setVolume(_t._iO.volume, true); // restrict volume to instance options only
        _t.setPan(_t._iO.pan, true);
        if (!_t.isHTML5) {
          if (_fV === 9 && _t._iO.serverURL) {
            // autoPlay for RTMP case
            _t.setAutoPlay(true);
          }
          _s.o._start(_t.sID, _t._iO.loops || 1, (_fV === 9?_t.position:_t.position / 1000));
        } else {
          _start_html5_timer();
          _t._setup_html5().play();
        }
      }
      return _t;
    };

    this.start = this.play; // just for convenience

    this.stop = function(bAll) {
      if (_t.playState === 1) {
        _t._onbufferchange(0);
        _t.resetOnPosition(0);
        if (!_t.isHTML5) {
          _t.playState = 0;
        }
        _t.paused = false;
        if (_t._iO.onstop) {
          _t._iO.onstop.apply(_t);
        }
        if (!_t.isHTML5) {
          _s.o._stop(_t.sID, bAll);
          // hack for netStream: just unload
          if (_t._iO.serverURL) {
            _t.unload();
          }
        } else {
          if (_a) {
            _t.setPosition(0); // act like Flash, though
            _a.pause(); // html5 has no stop()
            _t.playState = 0;
            _t._onTimer(); // and update UI
            _stop_html5_timer();
            _t.unload();
          }
        }
        _t.instanceCount = 0;
        _t._iO = {};
        // _t.instanceOptions = _t._iO;
      }
      return _t;
    };

    this.setAutoPlay = function(autoPlay) {
      _s._wD('setAutoPlay('+autoPlay+')');
      _t._iO.autoPlay = autoPlay;
      _s.o._setAutoPlay(_t.sID, autoPlay);
      if (autoPlay) {
        // _t.playState = 1; // ?
        if (!_t.instanceCount) {
          _t.instanceCount++;
        }
      }
    };

    this.setPosition = function(nMsecOffset, bNoDebug) {
      if (typeof nMsecOffset === 'undefined') {
        nMsecOffset = 0;
      }
      var offset = (_t.isHTML5 ? Math.max(nMsecOffset,0) : Math.min(_t.duration, Math.max(nMsecOffset, 0))); // position >= 0 and <= current available (loaded) duration
      _t._iO.position = offset;
      _t.resetOnPosition(_t._iO.position);
      if (!_t.isHTML5) {
        _s.o._setPosition(_t.sID, (_fV === 9?_t._iO.position:_t._iO.position / 1000), (_t.paused || !_t.playState)); // if paused or not playing, will not resume (by playing)
      } else if (_a) {
        _s._wD('setPosition(): setting position to '+(_t._iO.position / 1000));
        if (_t.playState) {
          // DOM/JS errors/exceptions to watch out for:
          // if seek is beyond (loaded?) position, "DOM exception 11"
          // "INDEX_SIZE_ERR": DOM exception 1
          try {
            _a.currentTime = _t._iO.position / 1000;
          } catch(e) {
            _s._wD('setPosition('+_t._iO.position+'): WARN: Caught exception: '+e.message, 2);
          }
        } else {
          _s._wD('HTML 5 warning: cannot set position while playState == 0 (not playing)',2);
        }
        if (_t.paused) { // if paused, refresh UI right away
          _t._onTimer(true); // force update
          // TODO: resume for movieStar only?
          if (_t._iO.useMovieStar) {
            _t.resume();
          }
        }
      }
      return _t;
    };

    this.pause = function(bCallFlash) {
      // if (_t.paused || _t.playState === 0) {
      if (_t.paused || (_t.playState === 0 && _t.readyState !== 1)) { // TODO: Verify vs. old
        return _t;
      }
      _s._wD('SMSound.pause()');
      _t.paused = true;
      if (!_t.isHTML5) {
        if (bCallFlash || bCallFlash === undefined) {
          _s.o._pause(_t.sID);
        }
      } else {
        _t._setup_html5().pause();
        _stop_html5_timer();
      }
      if (_t._iO.onpause) {
        _t._iO.onpause.apply(_t);
      }
      return _t;
    };

    this.resume = function() {
      if (!_t.paused || _t.playState === 0) {
        return _t;
      }
      _s._wD('SMSound.resume()');
      _t.paused = false;
      _t.playState = 1; // TODO: verify that this is needed.
      if (!_t.isHTML5) {
        _s.o._pause(_t.sID); // flash method is toggle-based (pause/resume)
      } else {
        _t._setup_html5().play();
        _start_html5_timer();
      }
      if (_t._iO.onresume) {
        _t._iO.onresume.apply(_t);
      }
      return _t;
    };

    this.togglePause = function() {
      _s._wD('SMSound.togglePause()');
      if (_t.playState === 0) {
        _t.play({
          position: (_fV === 9 && !_t.isHTML5 ? _t.position:_t.position / 1000)
        });
        return _t;
      }
      if (_t.paused) {
        _t.resume();
      } else {
        _t.pause();
      }
      return _t;
    };

    this.setPan = function(nPan, bInstanceOnly) {
      if (typeof nPan === 'undefined') {
        nPan = 0;
      }
      if (typeof bInstanceOnly === 'undefined') {
        bInstanceOnly = false;
      }
      if (!_t.isHTML5) {
        _s.o._setPan(_t.sID, nPan);
      } else {
        // no HTML 5 pan?
      }
      _t._iO.pan = nPan;
      if (!bInstanceOnly) {
        _t.pan = nPan;
      }
      return _t;
    };

    this.setVolume = function(nVol, bInstanceOnly) {
      if (typeof nVol === 'undefined') {
        nVol = 100;
      }
      if (typeof bInstanceOnly === 'undefined') {
        bInstanceOnly = false;
      }
      if (!_t.isHTML5) {
        _s.o._setVolume(_t.sID, (_s.muted && !_t.muted) || _t.muted?0:nVol);
      } else if (_a) {
        _a.volume = nVol/100;
      } 
      _t._iO.volume = nVol;
      if (!bInstanceOnly) {
        _t.volume = nVol;
      }
      return _t;
    };

    this.mute = function() {
      _t.muted = true;
      if (!_t.isHTML5) {
        _s.o._setVolume(_t.sID, 0);
      } else if (_a) {
        _a.muted = true;
      }
      return _t;
    };

    this.unmute = function() {
      _t.muted = false;
      var hasIO = typeof _t._iO.volume !== 'undefined';
      if (!_t.isHTML5) {
        _s.o._setVolume(_t.sID, hasIO?_t._iO.volume:_t.options.volume);
      } else if (_a) {
        _a.muted = false;
      }
      return _t;
    };

    this.toggleMute = function() {
      return (_t.muted?_t.unmute():_t.mute());
    };

    this.onposition = function(nPosition, oMethod, oScope) {
      // todo: allow for ranges, too? eg. (nPosition instanceof Array)
      _t._onPositionItems.push({
        position: nPosition,
        method: oMethod,
        scope: (typeof oScope !== 'undefined'?oScope:_t),
        fired: false
      });
      return _t;
    };

    this.processOnPosition = function() {
      // sound currently playing?
      var i, item, j = _t._onPositionItems.length;
      if (!j || !_t.playState || _t._onPositionFired >= j) {
        return false;
      }
      for (i=j; i--;) {
        item = _t._onPositionItems[i];
        if (!item.fired && _t.position >= item.position) {
          item.method.apply(item.scope,[item.position]);
          item.fired = true;
          _s._onPositionFired++;
        }
      }
    };

    this.resetOnPosition = function(nPosition) {
      // reset "fired" for items interested in this position
      var i, item, j = _t._onPositionItems.length;
      if (!j) {
        return false;
      }
      for (i=j; i--;) {
        item = _t._onPositionItems[i];
        if (item.fired && nPosition <= item.position) {
          item.fired = false;
          _s._onPositionFired--;
        }
      }
    };

    // pseudo-private soundManager reference

    this._onTimer = function(bForce) {
      // HTML 5-only _whileplaying() etc.
      if (_t._hasTimer || bForce) {
        var time;
        if (_a && (bForce || ((_t.playState > 0 || _t.readyState === 1) && !_t.paused))) { // TODO: May not need to track readyState (1 = loading)
          _t.duration = _get_html5_duration();
          _t.durationEstimate = _t.duration;
          time = _a.currentTime?_a.currentTime*1000:0;
          _t._whileplaying(time,{},{},{},{});
          return true;
        } else {
         // beta testing
         _s._wD('_onTimer: Warn for "'+_t.sID+'": '+(!_a?'Could not find element. ':'')+(_t.playState === 0?'playState bad, 0?':'playState = '+_t.playState+', OK'));
          return false;
        }
      }
    };

    // --- private internals ---

    _get_html5_duration = function() {
      var d = (_a?_a.duration*1000:undefined);
      if (d) {
        return (!isNaN(d)?d:null);
      }
    };

    _start_html5_timer = function() {
      if (_t.isHTML5) {
        _startTimer(_t);
      }
    };

    _stop_html5_timer = function() {
      if (_t.isHTML5) {
        _stopTimer(_t);
      }
    };

    _resetProperties = function(bLoaded) {
      _t._onPositionItems = [];
      _t._onPositionFired = 0;
      _t._hasTimer = null;
      _t._added_events = null;
      _t._audio = null;
      _a = null;
      _t.bytesLoaded = null;
      _t.bytesTotal = null;
      _t.position = null;
      _t.duration = null;
      _t.durationEstimate = null;
      _t.failures = 0;
      _t.loaded = false;
      _t.playState = 0;
      _t.paused = false;
      _t.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success
      _t.muted = false;
      _t.didBeforeFinish = false;
      _t.didJustBeforeFinish = false;
      _t.isBuffering = false;
      _t.instanceOptions = {};
      _t.instanceCount = 0;
      _t.peakData = {
        left: 0,
        right: 0
      };
      _t.waveformData = {
        left: [],
        right: []
      };
      _t.eqData = [];
      // dirty hack for now: also have left/right arrays off this, maintain compatibility
      _t.eqData.left = [];
      _t.eqData.right = [];
    };

    _resetProperties();

    // pseudo-private methods used by soundManager

    this._setup_html5 = function(oOptions) {
      var _iO = _mergeObjects(_t._iO, oOptions);
      if (_a) {
        if (_t.url !== _iO.url) {
          _s._wD('setting new URL on existing object: '+_iO.url);
          _a.src = _iO.url;
        }
      } else {
        _s._wD('creating HTML 5 audio element with URL: '+_iO.url);
        _t._audio = new Audio(_iO.url);
        _a = _t._audio;
        _t.isHTML5 = true;
        _add_html5_events();
      }
      _a.loop = (_iO.loops>1?'loop':'');
      return _t._audio;
    };

    // related private methods

    _add_html5_events = function() {
      if (_t._added_events) {
        return false;
      }
      _t._added_events = true;

      function _add(oEvt, oFn, bBubble) {
        return (_a ? _a.addEventListener(oEvt, oFn, bBubble||false) : null);
      }

      _add('load', function(e) {
        _s._wD('HTML5::load: '+_t.sID);
        if (_a) {
          _t._onbufferchange(0);
		if(e.loaded == undefined){
		  	_t._whileloading(_a.buffered.end(), _a.duration, _get_html5_duration());
		 }else{
			_t._whileloading(e.loaded||0, e.total||1, _get_html5_duration());
		 }
          _t._onload(1);
        }
      }, false);

      _add('canplay', function(e) {
        _s._wD('HTML5::canplay: '+_t.sID);
        // enough has loaded to play
        _t._onbufferchange(0);
      },false);

      _add('waiting', function(e) {
        _s._wD('HTML5::waiting: '+_t.sID);
        // playback faster than download rate, etc.
        _t._onbufferchange(1);
      },false);

      _add('progress', function(e) { // not supported everywhere yet..
        _s._wD('HTML5::progress: '+_t.sID+': loaded/total: '+(e.loaded||0)+','+(e.total||1));
        if (!_t.loaded && _a) {
          _t._onbufferchange(0); // if progress, likely not buffering
		 if(e.loaded == undefined){
		  	_t._whileloading(_a.buffered.end(), _a.duration, _get_html5_duration());
		 }else{
			_t._whileloading(e.loaded||0, e.total||1, _get_html5_duration());
		 }
        }
      }, false);

      _add('end', function(e) {
        _s._wD('HTML5::end: '+_t.sID);
        _t._onfinish();
      }, false);

      _add('error', function(e) {
        if (_a) {
          _s._wD('HTML5::error: '+_a.error.code);
          // call load with error state?
          _t._onload(0);
        }
      }, false);

      _add('loadstart', function(e) {
        _s._wD('HTML5::loadstart: '+_t.sID);
        // assume buffering at first
        _t._onbufferchange(1);
      }, false);

      _add('play', function(e) {
        _s._wD('HTML5::play: '+_t.sID);
        // once play starts, no buffering
        _t._onbufferchange(0);
      }, false);

      // TODO: verify if this is actually implemented anywhere yet.
      _add('playing', function(e) {
        _s._wD('HTML5::playing: '+_t.sID);
        // once play starts, no buffering
        _t._onbufferchange(0);
      }, false);

      _add('timeupdate', function(e) {
        _t._onTimer();
      }, false);

      // avoid stupid premature event-firing bug in Safari(?)
      setTimeout(function(){
        if (_t && _a) {
          _add('ended',function(e) {
            _s._wD('HTML5::ended: '+_t.sID);
            _t._onfinish();
          }, false);
        }
      }, 250);

    };

    // --- "private" methods called by Flash ---

    this._whileloading = function(nBytesLoaded, nBytesTotal, nDuration, nBufferLength) {
      _t.bytesLoaded = nBytesLoaded;
      _t.bytesTotal = nBytesTotal;
      _t.duration = Math.floor(nDuration);
      if (!_t._iO.isMovieStar) {
        _t.durationEstimate = parseInt((_t.bytesTotal / _t.bytesLoaded) * _t.duration, 10);
        if (_t.durationEstimate === undefined) {
          // reported bug?
          _t.durationEstimate = _t.duration;
        }
        _t.bufferLength = nBufferLength;
        if ((_t._iO.isMovieStar || _t.readyState !== 3) && _t._iO.whileloading) {
          _t._iO.whileloading.apply(_t);
        }
      } else {
        _t.durationEstimate = _t.duration;
        if (_t.readyState !== 3 && _t._iO.whileloading) {
          _t._iO.whileloading.apply(_t);
        }
      }
    };

    this._onid3 = function(oID3PropNames, oID3Data) {
      // oID3PropNames: string array (names)
      // ID3Data: string array (data)
      _s._wD('SMSound._onid3(): "' + this.sID + '" ID3 data received.');
      var oData = [], i, j;
      for (i = 0, j = oID3PropNames.length; i < j; i++) {
        oData[oID3PropNames[i]] = oID3Data[i];
        // _s._wD(oID3PropNames[i]+': '+oID3Data[i]);
      }
      _t.id3 = _mergeObjects(_t.id3, oData);
      if (_t._iO.onid3) {
        _t._iO.onid3.apply(_t);
      }
    };

    this._whileplaying = function(nPosition, oPeakData, oWaveformDataLeft, oWaveformDataRight, oEQData) {

      if (isNaN(nPosition) || nPosition === null) {
        return false; // Flash may return NaN at times
      }
      if (_t.playState === 0 && nPosition > 0) {
        // can happen at the end of a video where nPosition === 33 for some reason, after finishing.???
        // can also happen with a normal stop operation. This resets the position to 0.
        // _s._writeDebug('Note: Not playing, but position = '+nPosition);
        nPosition = 0;
      }
      _t.position = nPosition;
      _t.processOnPosition();
      if (_fV > 8 && !_t.isHTML5) {
        if (_t._iO.usePeakData && typeof oPeakData !== 'undefined' && oPeakData) {
          _t.peakData = {
            left: oPeakData.leftPeak,
            right: oPeakData.rightPeak
          };
        }
        if (_t._iO.useWaveformData && typeof oWaveformDataLeft !== 'undefined' && oWaveformDataLeft) {
          _t.waveformData = {
            left: oWaveformDataLeft.split(','),
            right: oWaveformDataRight.split(',')
          };
        }
        if (_t._iO.useEQData) {
          if (typeof oEQData !== 'undefined' && oEQData && oEQData.leftEQ) {
            var eqLeft = oEQData.leftEQ.split(',');
            _t.eqData = eqLeft;
            _t.eqData.left = eqLeft;
            if (typeof oEQData.rightEQ !== 'undefined' && oEQData.rightEQ) {
              _t.eqData.right = oEQData.rightEQ.split(',');
            }
          }
        }
      }
      if (_t.playState === 1) {
        // special case/hack: ensure buffering is false (instant load from cache, thus buffering stuck at 1?)
        if (!_t.isHTML5 && _t.isBuffering) {
          _t._onbufferchange(0);
        }
        if (_t._iO.whileplaying) {
          _t._iO.whileplaying.apply(_t); // flash may call after actual finish
        }

        // if (_t.loaded && _t._iO.onbeforefinish && _t._iO.onbeforefinishtime && !_t.didBeforeFinish && _t.duration - _t.position <= _t._iO.onbeforefinishtime) {
        if ((_t.loaded || (!_t.loaded && _t._iO.isMovieStar)) && _t._iO.onbeforefinish && _t._iO.onbeforefinishtime && !_t.didBeforeFinish && _t.duration - _t.position <= _t._iO.onbeforefinishtime) {
          _s._wD('duration-position &lt;= onbeforefinishtime: ' + _t.duration + ' - ' + _t.position + ' &lt= ' + _t._iO.onbeforefinishtime + ' (' + (_t.duration - _t.position) + ')');
          _t._onbeforefinish();
        }
      }
    };

    this._onconnect = function(bSuccess) {
      var fN = 'SMSound._onconnect(): ';
      bSuccess = (bSuccess === 1);
      _s._wD(fN+'"'+_t.sID+'"'+(bSuccess?' connected.':' failed to connect? - '+_t.url), (bSuccess?1:2));
      _t.connected = bSuccess;
      if (bSuccess) {
        _t.failures = 0;
        if (_t._iO.autoLoad || _t._iO.autoPlay) {
          _t.load(_t._iO);
        }
        if (_t._iO.autoPlay) {
          _t.play();
        }
        if (_t._iO.onconnect) {
          _t._iO.onconnect.apply(_t,[bSuccess]);
        }
      }
    };

    this._onload = function(nSuccess) {
      var fN = 'SMSound._onload(): ';
      nSuccess = (nSuccess === 1?true:false);
      _s._wD(fN + '"' + _t.sID + '"' + (nSuccess?' loaded.':' failed to load? - ' + _t.url), (nSuccess?1:2));
      // <d>
      if (!nSuccess && !_t.isHTML5) {
        if (_s.sandbox.noRemote === true) {
          _s._wD(fN + _str('noNet'), 1);
        }
        if (_s.sandbox.noLocal === true) {
          _s._wD(fN + _str('noLocal'), 1);
        }
      }
      // </d>
      _t.loaded = nSuccess;
      _t.readyState = nSuccess?3:2;
      if (_t._iO.onload) {
        _t._iO.onload.apply(_t);
      }
    };

    // Only fire the onfailure callback once because after one failure we often get another.
    // At this point we just recreate failed sounds rather than trying to reconnect.
    this._onfailure = function(msg) {
      _t.failures++;
      _s._wD('SMSound._onfailure(): "'+_t.sID+'" count '+_t.failures);
      if (_t._iO.onfailure && _t.failures === 1) {
        _t._iO.onfailure(_t, msg);
      } else {
        _s._wD('SMSound._onfailure(): ignoring');
      }
    };

    this._onbeforefinish = function() {
      if (!_t.didBeforeFinish) {
        _t.didBeforeFinish = true;
        if (_t._iO.onbeforefinish) {
          _s._wD('SMSound._onbeforefinish(): "' + _t.sID + '"');
          _t._iO.onbeforefinish.apply(_t);
        }
      }
    };

    this._onjustbeforefinish = function(msOffset) {
      // msOffset: "end of sound" delay actual value (eg. 200 msec, value at event fire time was 187)
      if (!_t.didJustBeforeFinish) {
        _t.didJustBeforeFinish = true;
        if (_t._iO.onjustbeforefinish) {
          _s._wD('SMSound._onjustbeforefinish(): "' + _t.sID + '"');
          _t._iO.onjustbeforefinish.apply(_t);
        }
      }
    };

    this._onfinish = function() {
      // sound has finished playing
      // TODO: calling user-defined onfinish() should happen after setPosition(0)
      // OR: onfinish() and then setPosition(0) is bad.
      _t._onbufferchange(0); // ensure buffer has ended
      _t.resetOnPosition(0);
      if (_t._iO.onbeforefinishcomplete) {
        _t._iO.onbeforefinishcomplete.apply(_t);
      }
      // reset some state items
      _t.didBeforeFinish = false;
      _t.didJustBeforeFinish = false;
      if (_t.instanceCount) {
        _t.instanceCount--;
        if (!_t.instanceCount) {
          // reset instance options
          // _t.setPosition(0);
          _t.playState = 0;
          _t.paused = false;
          _t.instanceCount = 0;
          _t.instanceOptions = {};
          _stop_html5_timer();
        }
        // KJV May interfere with multi-shot events, but either way, instanceCount is sometimes 0 when it should not be.
        if (!_t.instanceCount || _t._iO.multiShotEvents) {
          // fire onfinish for last, or every instance
          if (_t._iO.onfinish) {
            _s._wD('SMSound._onfinish(): "' + _t.sID + '"');
            _t._iO.onfinish.apply(_t);
          }
        }
        if (_t.isHTML5) {
          _t.unload();
        }
      }
    };

    this._onmetadata = function(oMetaData) {
      // movieStar mode only
      var fN = 'SMSound.onmetadata()';
      _s._wD(fN);
      // Contains a subset of metadata. Note that files may have their own unique metadata.
      // http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000267.html
      if (!oMetaData.width && !oMetaData.height) {
        _wDS('noWH');
        oMetaData.width = 320;
        oMetaData.height = 240;
      }
      _t.metadata = oMetaData; // potentially-large object from flash
      _t.width = oMetaData.width;
      _t.height = oMetaData.height;
      if (_t._iO.onmetadata) {
        _s._wD(fN + ': "' + _t.sID + '"');
        _t._iO.onmetadata.apply(_t);
      }
      _s._wD(fN + ' complete');
    };

    this._onbufferchange = function(nIsBuffering) {
      var fN = 'SMSound._onbufferchange()';
      if (_t.playState === 0) {
        // ignore if not playing
        return false;
      }
      if ((nIsBuffering && _t.isBuffering) || (!nIsBuffering && !_t.isBuffering)) {
        // _s._wD(fN + ': Note: buffering already = '+nIsBuffering);
        return false;
      }
      _t.isBuffering = (nIsBuffering === 1?true:false);
      if (_t._iO.onbufferchange) {
        _s._wD(fN + ': ' + nIsBuffering);
        _t._iO.onbufferchange.apply(_t);
      }
    };

    this._ondataerror = function(sError) {
      // flash 9 wave/eq data handler
      if (_t.playState > 0) { // hack: called at start, and end from flash at/after onfinish().
        _s._wD('SMSound._ondataerror(): ' + sError);
        if (_t._iO.ondataerror) {
          _t._iO.ondataerror.apply(_t);
        }
      }
    };

  }; // SMSound()


  // register a few event handlers
  
  if (!_s.hasHTML5 || _needsFlash) {
    // only applies to Flash mode.
    if (window.addEventListener) {
      window.addEventListener('focus', _handleFocus, false);
      window.addEventListener('load', _s.beginDelayedInit, false);
      window.addEventListener('unload', _s.destruct, false);
      if (_tryInitOnFocus) {
        window.addEventListener('mousemove', _handleFocus, false); // massive Safari focus hack
      }
    } else if (window.attachEvent) {
      window.attachEvent('onfocus', _handleFocus);
      window.attachEvent('onload', _s.beginDelayedInit);
      window.attachEvent('unload', _s.destruct);
    } else {
      // no add/attachevent support - safe to assume no JS -> Flash either.
      _debugTS('onload', false);
      soundManager.onerror();
      soundManager.disable();
    }
  }

  _dcIE = function() {
    if (document.readyState === 'complete') {
      _dcLoaded();
      document.detachEvent('onreadystatechange', _dcIE);
    }
  };

  if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', _dcLoaded, false);
  } else if (document.attachEvent) {
    document.attachEvent('onreadystatechange', _dcIE);
  }

  if (document.readyState === 'complete') {
    setTimeout(_dcLoaded,100);
  }

} // SoundManager()

// var SM2_DEFER = true;
// un-comment here or define in your own script to prevent immediate SoundManager() constructor call+start-up.

// if deferring, construct later with window.soundManager = new SoundManager(); followed by soundManager.beginDelayedInit();

if (typeof SM2_DEFER === 'undefined' || !SM2_DEFER) {
  soundManager = new SoundManager();
}

// expose public interfaces
window.SoundManager = SoundManager; // SoundManager constructor
window.soundManager = soundManager; // public instance: API, Flash callbacks etc.

}(window)); // invocation closure

;

/**** /js/nanoplayer.min.js ****/
(function(){var p=navigator.userAgent.toLowerCase();$.browser.chrome=/chrome/.test(p);$.browser.chrome5=/chrome\/5/.test(p);$.browser.safari5=$.browser.safari&&(/version\/5/).test(p);$.extend($.fn,{tag:function(){return this[0]&&this[0].tagName?this[0].tagName.toLowerCase():null},indexOf:function(e){for(var i=0,l=this.length;i<l;i++){if(this[i]==e)return i}return-1},offsetWidth:function(){return this[0].offsetWidth},offsetHeight:function(){return this[0].offsetHeight},ancestor:function(a){var b=this;if(b.isRemoved())return null;while(b.tag()!='html'){if(b.is(a))return b;b=b.parent()}return null},isRemoved:function(){var a=this;while(1){if(a.tag()=='html')return false;if(!a.parent().length)return true;a=a.parent()}return false},dispose:function(){if(!this[0]||!this[0].parentNode)return this;this[0].parentNode.removeChild(this[0]);return this}});soundManager.useHighPerformance=true;soundManager.flashVersion=9;soundManager.url='./swf1/';soundManager.debugMode=false;soundManager.html5Test=/^(probably|maybe)$/i;soundManager.onerror=function(){soundManager.flashLoadTimeout=0;soundManager.onerror={};soundManager.reboot()};this.NanoPlayer={version:'1.109',urls:{search:"/search?q=:?",searchWithPage:"/search?q=:?&page=:?",download:"/download/:?",create:"/lists/create/",rename:"/lists/rename/",save:"/lists/copy/",del:"/lists/del/",select:"/lists/select/",order:"/lists/order/",deltrack:"/lists/track_del/",movetrack:"/lists/track_move/",addtrack:"/lists/track_add/",scrobble:"/scrobbling/play",scrobbled:"/scrobbling/played",autocomplete:"/search_suggest/",trackrename:"/track/rename/"},getUrl:function(a){for(var i=1,l=arguments.length;i<l;i++){var b=String(arguments[i]);b=b.replace(/ /g,'+');b=this.encodeUrl(b);a=a.replace(':?',b)};return a},encodeUrl:function(a){var b=true;var c=false;var i,character;if($.browser.safari){for(i=1040;i<=1103;i++){character=String.fromCharCode(i);a=a.replace(new RegExp(character,'g'),encodeURIComponent(character))}}try{if(decodeURIComponent(a)!=a)b=false}catch(e){c=e}if(c||b)a=encodeURIComponent(a).replace(/%2B/g,'+');if($.browser.chrome){for(i=1040;i<=1103;i++){character=String.fromCharCode(i);a=a.replace(new RegExp(encodeURIComponent(character),'g'),character)}}return a},fixHash:function(){var c=document.location.hash;if($.browser.opera){try{decodeURIComponent(c)}catch(e){var d,last,yo,YO;if(/mac/.test(navigator.userAgent.toLowerCase())){d=parseInt('B0',16);last=parseInt('EF',16);yo=parseInt('F1',16);YO=parseInt('A1',16)}else if(/win/.test(navigator.userAgent.toLowerCase())){d=parseInt('C0',16);last=parseInt('FF',16);yo=parseInt('B8',16);YO=parseInt('A8',16)}function fix(i,a){var b='%'+i.toString(16).toUpperCase();a=a||String.fromCharCode(i+(1040-d));c=c.replace(new RegExp(b,'g'),encodeURIComponent(a).replace(/%/g,'@'))}for(var i=d;i<=last;i++){fix(i)}fix(yo,'ё');fix(YO,'Ё');c=c.replace(/@/g,'%');document.location.hash=c}}},start:function(a){$.extend(this,a);$('#page').css({'position':'static'});this.bound={};this.scripts={};this.sounds=[];this.musicLis=[];this.hist=[];this.prev=-1;this.historyLimit=15;this.memoryLimit=3;this.shuffle=[];this.input=$('.search .search-line input');this.searchButton=$('#search-btn input').css('float','left');this.hint=$('.search-line-wrapper .hint');this.temp=$('<div></div>');this.overlay=$('<div class="overlay"></div>').appendTo(document.body);this.loaded={};this.initLists();this.events();this.fixHash();this.loadFromHash();this.initSlider();this.initHistory();this.restoreVolume();this.initProgressBar();this.initPlayButtons();this.initPagination();this.initIndicator();this.initDrag();this.hideInvisible();this.addOnLoad();this.initBrowserHistory();this.initTitle();this.initTips();this.installFlashAlert();this.initStaticScroller();this.initAutoComplete();this.addToList();this.initRenameTrack();this.initKeyboard()},installFlashAlert:function(){var a=!!navigator.plugins['Shockwave Flash'];if($.browser.msie){try{new ActiveXObject('ShockwaveFlash.ShockwaveFlash');a=true}catch(e){a=false}};if(a)return;if($.browser.safari){soundManager.useHTML5Audio=true}else{this.popup($('#install-player-alert').attr('desc'))}},popup:function(a){this.showOverlay();var b=this;if(!this.popupHTML){this.popupHTML=$('<div class="popup"></div>').appendTo(document.body);this.popupMsg=$('<p></p>').appendTo(this.popupHTML);this.popupButton=$('<button>OK</button>').appendTo(this.popupHTML);this.popupButton.bind('click',function(){b.hideOverlay();b.popupHTML.hide('fast')})};this.popupHTML.show('fast');this.popupMsg.html(a);this.popupButton.focus()},confirm:function(a,b,c){this.showOverlay();var d=this;this.confirmOk=b;this.confirmCancel=c;if(!this.confirmHTML){this.confirmHTML=$('<div class="popup confirm"></div>').appendTo(document.body);this.confirmMsg=$('<p></p>').appendTo(this.confirmHTML);this.confirmBtnOk=$('<button>OK</button>').appendTo(this.confirmHTML);this.confirmBtnOk.bind('click',function(){d.hideOverlay();d.confirmHTML.hide('fast');if(d.confirmOk)d.confirmOk()});this.confirmBtnCancel=$('<button>Cancel</button>').appendTo(this.confirmHTML);this.confirmBtnCancel.bind('click',function(){d.hideOverlay();d.confirmHTML.hide('fast');if(d.confirmCancel)d.confirmCancel()})}this.confirmHTML.show('fast');this.confirmMsg.html(a);this.confirmBtnOk.focus()},showOverlay:function(){this.overlay.show()},hideOverlay:function(){this.overlay.hide()},loadFromHash:function(){var a=document.location.href.split('#')[1];var b=/^\/?search\?q=(.*?)(?:&page=(.*))?$/.exec(a);var c;if(!b)return this.load(a);try{c=decodeURIComponent(b[1]).replace(/\+/g,' ')}catch(e){c=b[1].replace(/\+/g,' ')}this.load(a);if(this.parseQuery(c).advanced){$('.advanced-search-link').click();this.fillSearch(c)}return null},load:function(f){var g=NanoPlayer;if(!f)return;var h=/^\/?search\?q=(.*?)(?:&page=(.*))?$/.exec(f);if(h){var i=h[1];var j=h[2];f=j?g.getUrl(g.urls.searchWithPage,i,j):g.getUrl(g.urls.search,i);if(g.requestUrl==f)return;g.requestUrl=f;g.query=i}else{g.requestUrl=f}if(h&&g.loaded[f]){g.processLoadResult(g.loaded[f],f);if(!h)g.scrollToResult();if(g.playNextPage){g.play($('.results .playlist li:first-child'))}return};if(h){g.searchRequest(f);try{i=decodeURIComponent(h[1]).replace(/\+/g,' ')}catch(e){i=h[1].replace(/\+/g,' ')}g.fillSearch(i)}else{$.ajax({url:f,data:{rand:new Date().getTime()},type:'get',dataType:'text',success:function(a){g.requestUrl=null;var b=eval('('+a+')');var c=b.success;if(c){var d=b.html;g.processLoadResult(d,f);g.scrollToResult();g.loaded[f]=$('.results').eq(0).children(':first-child')}else{g.popup(b.error)}}})};try{pageTracker._trackPageview(f);new Image().src = "//counter.yadro.ru/hit?r"+escape(document.referrer)+((typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth))+";u"+escape('http://prostopleer.com'+f)+";"+Math.random();}catch(e){};g.adv()},searchRequest:function(e){if(this.searching)return;this.searching=true;this.requestUrl=e;var f=$('.search input[type="image"]:visible').hide();var g=f.next().show().css('cursor','wait');$('.search').css('cursor','wait');$('.search input').css('cursor','wait');var h=g.attr('src');g.attr('src','').attr('src',h);var i=this;$.ajax({url:e,type:'get',dataType:'text',success:function(a){var b=eval('('+a+')');var c=b.success;f.show();g.hide().css('cursor','');$('.search').css('cursor','');$('.search input').css('cursor','');i.searching=false;if(c){var d=b.html;i.processLoadResult(d,e);i.loaded[e]=$('.results').eq(0).children(':first-child');if(i.playNextPage){i.play($('.results .playlist li:first-child'))}$.history.load(e)}else{i.popup(b.error)}}})},fillSearch:function(a){a=this.parseQuery(a);$('.search form')[0].reset();if(a.advanced&&!$('.advanced-search-expanded').length){$('.search .search-line input[type="text"]').val(a.query);return}$('.search .search-line input[type="text"]').val(a.value);if(a.text)$('#text').attr('checked','checked');var b,value,type;if(a.bitrate){type=a.bitrate.type;var c=$('#bitrate-options');c.find('[value="'+type+'"]').attr('selected','selected');c.change();b=$('#bitrate-option-'+type).find('input');value=a.bitrate.value;if($.isArray(value)){b.eq(0).attr('value',value[0]);b.eq(1).attr('value',value[1])}else{b.attr('value',value)}}if(a.size){b=$('#file-size input');value=a.size.value;if($.isArray(value)){b.eq(0).attr('value',value[0]);b.eq(1).attr('value',value[1])}else{b.eq(a.size.type=='gt'?0:1).attr('value',value)}}if(a.length){b=$('#track-length input');value=a.length.value;if($.isArray(value)){b.eq(0).attr('value',value[0]);b.eq(1).attr('value',value[1])}else{b.eq(a.length.type=='gt'?0:1).attr('value',value)}}if(a.track){$('#track').val(a.track.value)}if(a.artist){$('#artist').val(a.artist.value)}},events:function(){var f=this;$('.search form, .create-playlist form').live('submit',function(a){a.preventDefault()});$('.search form, .create-playlist form').live('click',function(a){if(!$(a.target).is('input[type=image]'))return;if(a.which&&a.which!=1)return;a.preventDefault()});this.searchButton.bind('click',this,this.search);$('.search form input').bind('keypress',f,function(a){if(a.keyCode==13){a.preventDefault();if($('.advanced-search-expanded').length){f.advancedSearch(a)}else{f.search(a)}}});this.hint.bind('mousedown',function(){f.input.val($(this).text())});$('.advanced-search .hint').bind('click',function(){f.fillSearch($(this).text())});$('.advanced-search-link').bind('click',function(){var a=$(this).ancestor('.search');var b=a.find('.input-wrap2 input');if(a.hasClass('advanced-search-expanded')){a.removeClass('advanced-search-expanded');b.val(f.createQuery());$('#search-btn-advanced').find('input, img').prependTo($('#search-btn'))}else{a.addClass('advanced-search-expanded');f.fillSearch(b.val());$('#search-btn').find('input, img').prependTo($('#search-btn-advanced'))}}).bind('mousedown',function(){return false}).bind('selectstart',function(){return false});$('.playlist').live('click',function(a){var b=$(a.target);var c=b.ancestor('li');if(!c&&b.ancestor('.i-play-queue')){c=i.ancestor('li')}if(!c)return false;var d=b.tag();if(b.ancestor('.track-play')||b.ancestor('.i-play-queue')){a.preventDefault();var e=f.getSound(c[0]);if(e){if(b.hasClass('i-pause')){e.pause()}else if(b.hasClass('i-play')){if(e.stoped||e.li[0]!=c[0]){f.shuffle=[];f.play(c)}else{e.resume()}}}else if(b.hasClass('i-play')){f.play(c)}if(b.hasClass('i-play-queue')){f.addToQueue(c)}};if(/icon-download.gif$/.test(b.attr('src'))){a.preventDefault();f.download(c)};return null});var g=$('.pl-repeat');g.bind('click',function(){if(g.hasClass('pl-repeat-disabled')){g.removeClass('pl-repeat-disabled');f.loop=true}else{g.addClass('pl-repeat-disabled');f.loop=false}f.updateNext()});var h;var i;var j;var k;function scroll(){if($.browser.opera){var a=$('#accordion .visible ol');var b=a.scrollTop()};if(!$.browser.opera||b!=k){$(h).dispose();clearTimeout(j)}if($.browser.opera){a.scrollTop(b)}}$('.i-play-queue').live('mouseover',function(a){if(!$(this).ancestor('ol'))return;if($.browser.opera){var b=$('#accordion .visible ol');var c=b.scrollTop();k=c};clearTimeout(j);$(h).dispose();f.playButtons=$(this);i=$(this).parent();var d=$(this).offset();var e=$(this).ancestor('.playlist');h=$(this).clone();f.playButtonsClone=h;e.css('overflow','visible');j=setTimeout(function(){h.css({position:'absolute',top:d.top-e.offset().top,left:d.left-e.offset().left,zIndex:10}).addClass('hover').appendTo(e);e.find('ol').bind('scroll',scroll)},100);if($.browser.opera){b.scrollTop(c)}}).live('mouseout',function(a){clearTimeout(j);if($.browser.opera){var b=$('#accordion .visible ol');var c=b.scrollTop()};if($(a.relatedTarget).ancestor('.i-play-queue')||$(this).ancestor('ol'))return;$(h).ancestor('.playlist').find('ol').unbind('scroll',scroll);if($(h).ancestor('#accordion'))$(h).ancestor('.playlist').css('overflow','hidden');$(h).dispose();if($.browser.opera){b.scrollTop(c)}})},toTime:function(a){var b=parseInt(a/60,10);var c=parseInt(a-b*60,10);if(String(b).length==1)b='0'+b;if(String(c).length==1)c='0'+c;var d=b+':'+c;return d},createQuery:function(){var a=jQuery.trim(this.input.val());var b=$.trim($('#artist').val());if(b)a+=' artist:'+b;var c=$.trim($('#track').val());if(c)a+=' track:'+c;var d=$('#bitrate-options');var e=d.find(':selected');var f=e.val();var g=$('#bitrate-option-'+f).find('input');var h='';var i,val2;if(g.length==2){i=$.trim(g.eq(0).val()).replace(/[^0-9.,]+/g,'');val2=$.trim(g.eq(1).val()).replace(/[^0-9.,]+/g,'');if(i&&val2){a+=' bitrate:'+i+'-'+val2}else{h=i||val2;f=i?'gt':'lt'}}if(g.length==1||h){h=h||$.trim(g.val()).replace(/[^0-9.,]+/g,'');if(h){var j='';if(f=='gt')j='>';if(f=='lt')j='<';a+=' bitrate:'+j+h}}g=$('#file-size input');i=$.trim(g.eq(0).attr('value')).replace(/[^0-9.,]+/g,'');val2=$.trim(g.eq(1).attr('value')).replace(/[^0-9.,]+/g,'');if(i&&val2)a+=' size:'+i+'-'+val2;if(!i&&val2)a+=' size:<'+val2;if(i&&!val2)a+=' size:>'+i;g=$('#track-length input');i=$.trim(g.eq(0).attr('value')).replace(/[^0-9.,]+/g,'');val2=$.trim(g.eq(1).attr('value')).replace(/[^0-9.,]+/g,'');if(i&&val2)a+=' length:'+i+'-'+val2;if(!i&&val2)a+=' length:<'+val2;if(i&&!val2)a+=' length:>'+i;if($('#text').attr('checked'))a+=' text:true';return jQuery.trim(a)},parseQuery:function(a){var b={};var c=false;var d=(/((?: |^)(?:artist|track):)/g);var e=a.split(d);b.value='';for(var i=0,l=e.length;i<l;i++){if(!e[i].match(d)){b.value+=e[i];continue}c=true;var f=$.trim(e[i]).split(':')[0];var g=e[i+1];if(f=='text'){if(g=='true')b.text=true}else if(f=='bitrate'||f=='size'||f=='length'){if(g=='vbr'){b[f]={type:'vbr'}}else if(g.match(/^[0-9.,]+$/)){b[f]={type:'eq',value:g}}else if(g.match(/^>[0-9.,]+$/)){b[f]={type:'gt',value:g.split('>')[1]}}else if(g.match(/^<[0-9.,]+$/)){b[f]={type:'lt',value:g.split('<')[1]}}else if(g.match(/^[0-9.,]+-[0-9.,]+$/)){var h=g.split('-');b[f]={type:'between',value:[h[0],h[1]]}}}else{b[f]={value:g}}++i}b.value=$.trim(b.value);b.advanced=c;b.query=a;return b},search:function(a){a.preventDefault();var b=a.data;if($('.advanced-search-expanded').length){b.advancedSearch(a);return}var c=jQuery.trim(b.input.val());if(!c)return;b.query=c;var d=b.getUrl(b.urls.search,c);if(b.loaded[d])$.history.load(d);b.load(d)},advancedSearch:function(a){a.preventDefault();var b=a.data;var c=b.createQuery();if(!c)return;b.query=c;var d=b.getUrl(b.urls.search,c);if(b.loaded[d])$.history.load(d);b.load(d)},processLoadResult:function(a,b){var c;if(typeof a=='string'){$('.results').eq(0).html('<div>'+a+'</div>');c='';a.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){c+=arguments[1]+'\n';return''});this.scripts[b]=c}else{$('.results').eq(0).children(':first-child').dispose();$('.results').eq(0).append(a);c=this.scripts[b];if(!c)return;if(window.execScript){window.execScript(c)}else{var d=document.createElement('script');d.setAttribute('type','text/javascript');d.text=c;var e=$('head')[0];e.appendChild(d);e.removeChild(d)}}return},scrollToResult:function(){var a=$('.results');var b=a.offset();var c=$(document.body).hasClass('foot-player')?0:50;if(b.top-c<$(window).scrollTop()){window.scrollTo($(window).scrollLeft(),b.top-c-10)}},play:function(a,b){this.playNextPage=false;a=$(a);this.add(a);var c=a.attr('file_id');var d=this.get(c);var e=this.getSound(a[0]);if(!this.advancedPlay)$(document.body).removeClass('play-queue');if(this.advancedPlay&&!$(document.body).hasClass('play-queue')){if($.browser.opera){var f=$('#accordion .visible ol');var g=f.scrollTop()};$(document.body).addClass('play-queue');if($.browser.opera){f.scrollTop(g)}}if(this.li){if(this.li[0]!=a[0]){this.sound.Stop()}else{e.resume();return}};if(this.sound&&this.sound.sID&&!this.sound.loaded){if(!soundManager.userHTML5Audio)soundManager.unload(this.sound.sID);if(this.sound.loadingLi)this.sound.loadingLi.removeClass('loading')};if(this.prev>-1&&this.prev<this.hist.length-1&&(a[0]!=this.hist[this.prev])){this.hist.length=Math.max(0,this.prev+1)};if(!a.ancestor('#history')&&!b)this.addToHistory(c);this.showProgressBar();e=this.get(c).sound||false;if(e&&e.destroied)e=null;if(e){e.stop?e.stop():e.Stop()}else{e=this.createSound(a)}e.el=a.find('.track-play .i-play');e.li=a;e.play();var h=jQuery.inArray(a[0],this.musicLis);if(h==-1){this.sounds.push(e);this.musicLis.push(a[0])}else{this.sounds[h]=e};this.sound=e;this.li=a[0];this.updateNext()},createSound:function(a){return this.createSm2Sound(a)},createSm2Sound:function(d){var f=d.attr('file_id');var g=this.get(f);var h=g['singer'];var i=g['song'];var j=g['duration'];var k=this.toTime(j);var l=this;var m='./download/'+f;if(soundManager.useHTML5Audio)m+='.mp3';var n=soundManager.createSound({id:'id_'+f,url:m,onplay:function(){this.beginTime=new Date().getTime()/1000;this.resumeTime=this.beginTime;this.playTime=0;setTimeout(function(){$.ajax({type:'post',dataType:'text',url:l.urls.scrobble,data:{file_id:f},success:function(a){try{eval('('+a+')')}catch(e){}}})},3000);this.setVolume(l.volume);this.stoped=false;if(this.bytesLoaded==this.bytesTotal){l.loading.css('width',0)}else{l.loading.css('width',this.bytesLoaded/this.bytesTotal*100+'%')};var b=l.toTime(this.totalDuration);$('.now-playing').html('<span id="time">'+'00:00'+'</span> '+h+' &mdash; '+i+' ('+b+')');this.li.addClass('current');$('#play').addClass('pause').removeClass('play-disabled');l.setPause(this.el);l.updatePrev();l.newTitle(i,h);l.setPlayingFavicon()},onpause:function(){this.playTime+=new Date().getTime()/1000-this.resumeTime;l.setPlay(this.el);$('#play').removeClass('pause');document.title=l.title;l.setDefaultFavicon()},onresume:function(){this.resumeTime=new Date().getTime()/1000;l.setPause(this.el);$('#play').addClass('pause');l.newTitle(i,h);l.setPlayingFavicon()},onstop:function(){l.setPlay(this.el);this.li.removeClass('current');if(l.historyStack[l.historyStack.length-1].ancestor('li'))l.historyStack[l.historyStack.length-1].ancestor('li').removeClass('current');$('#play').removeClass('pause');l.progress.css('width','0px');document.title=l.title;l.setDefaultFavicon()},onfinish:function(){if(!l.hist.length||((l.prev==l.hist.length-1)&&l.hist[l.hist.length-1]!=this.li[0])){l.addToHist(this.li[0]);l.prev=l.hist.length-1}else if(l.prev!=l.hist.length-1){++l.prev};this.stoped=true;this.setPosition(0);l.updatePrev();l.updateNext();l.setPlay(this.el);this.li.removeClass('current');if(l.historyStack[l.historyStack.length-1].ancestor('li'))l.historyStack[l.historyStack.length-1].ancestor('li').removeClass('current');if(!l.hasNext()){$('#play').removeClass('pause').addClass('play-disabled');$(document.body).removeClass('play-queue')}l.hideProgressBar();l.hideIndicator();$('.now-playing').html('');document.title=l.title;l.setDefaultFavicon();this.playTime+=new Date().getTime()/1000-this.resumeTime;l.submit(this);setTimeout(function(){l.playNext()},0)},onload:function(){this.loadingLi=this.loadingLi||d;if(this.loadingLi&&(l.li==this.loadingLi[0]))l.loading.css('width',0);this.loadingLi.removeClass('loading');var a=this.loadingLi.ancestor('.drop');a.find('.playlist-title .download').css('display','block');if(Math.abs(j-this.duration/1000)>1){l.updateDuration(f,Math.floor(this.duration/1000));this.totalDuration=Math.floor(this.duration/1000)}},volume:this.getVolume(),whileplaying:function(){if(!this.totalDuration)this.totalDuration=j;var a=this.position/1000;var b=a/this.totalDuration;if(l.lastTime&&(new Date().getTime()-l.lastTime<500))return;l.lastTime=new Date().getTime();l.progress[0].style.width=Math.min(b,1)*l.progressWidth+'px';var c=l.toTime(a);$('#time').html(c);if(!l.indicatorDrag){l.indicatorHandler.css('left',l.progress.offsetWidth()-2+'px');l.indicatorTime.html(c)}},whileloading:function(){if(l.lastLoadTime&&(new Date().getTime()-l.lastLoadTime<500))return;l.lastLoadTime=new Date().getTime();this.loadingLi=this.loadingLi||d;this.loadingLi.addClass('loading');if(l.sound==this)l.loading.css('width',this.bytesLoaded/this.bytesTotal*100+'%')}});n.Stop=function(){if(this.stoped)return;this.pause();this.setPosition(0);l.setPlay(this.el);this.li.removeClass('current');if(l.historyStack[l.historyStack.length-1].ancestor('li'))l.historyStack[l.historyStack.length-1].ancestor('li').removeClass('current');$('#play').removeClass('pause');l.progress.css('width','0px');if(!l.hist.length||((l.prev==l.hist.length-1)&&(l.hist[l.hist.length-1]!=this.li[0]))){l.addToHist(this.li[0]);l.prev=l.hist.length-1}else if(l.prev!=l.hist.length-1){++l.prev};this.stoped=true;l.submit(this)};n.stoped=true;n.totalDuration=parseInt(g['duration'],10);g.sound=n;return n},hasNext:function(){if(this.loop&&!$('#play').hasClass('play-disabled'))return true;if(this.prev<this.hist.length-1)return true;if($(this.li).isRemoved())return false;if($(this.li).ancestor('#history')){return $(this.li).next().length?true:false}else if($(this.li).ancestor('#accordion')){var a=this.getMode();if(a=='line'){return $(this.li).next().length?true:false}else{return true}}else{var b=$('.results .pagination');if($(this.li).ancestor('.results')&&b.length&&b.find('strong').length){if($(this.li).next().length)return true;var c=b.find('strong');var d=c.parent().next();if(!d.find('span').length)return true;return false}else{return $(this.li).next().length?true:false}};return null},hasPrev:function(){return!!((this.prev>-1)&&this.getSound(this.hist[this.prev],true))},playNext:function(){if(!this.hasNext())return;if(this.loop){this.play(this.li);return};if(this.prev<this.hist.length-1){if(!this.sound.stoped){this.sound.Stop();--this.prev};++this.prev;if(this.li==this.hist[this.prev])++this.prev;this.play(this.hist[this.prev],true)}else{if(!this.li||$(this.li).isRemoved())return;var a=this.shuffle;this.shuffle=[];var b;if($(this.li).ancestor('#accordion')){var c=this.getMode();if(c=='line'){b=$(this.li).next()}else if(c=='loop'){b=$(this.li).next();if(!b.length){b=$(this.li).parent().children(':first-child')}}else{this.shuffle=a;var d=$(this.li).parent().children();var e=d.length-1;if(this.shuffle.length>=e){this.shuffle.length=e};var f=[];var g=this;d.each(function(){if(jQuery.inArray(this,g.shuffle)==-1){f.push(this)}});var h=f.length;if(!h)return;var i=Math.ceil(Math.random()*h)-1;b=$(f[i]);this.shuffle.unshift(b[0]);if(this.shuffle.length>=e){this.shuffle.length=e}}}else{var j=$('.results .pagination');if($(this.li).ancestor('.results')&&j.length){if($(this.li).next().length){b=$(this.li).next()}else{var k=j.find('strong');if(!k.length)return;b=k.parent().next();if(!b.find('span').length){this.playNextPage=true;this.goSearch(1)}return}}else{b=$(this.li).next();if(!b.length)return}};this.play(b)}},playPrev:function(){if(!this.hasPrev())return;if(!this.sound.stoped){this.sound.Stop();--this.prev};this.play(this.hist[this.prev],true);--this.prev;if(this.prev==-1){$('#rw').addClass('rw-disabled');return}},download:function(a){var b=a.attr('file_id');var c=this.getUrl(this.urls.download,b);if(!$.browser.opera){$(document.body).append('<iframe src="'+c+'" style="width:0;height:0;overflow:hidden;position:absolute;"></iframe>')}else{$('<a href="'+c+'"></a>')[0].click()}},initProgressBar:function(){var d=$('#progressbar').addClass('ui-progressbar ui-widget ui-widget-content ui-corner-all');var e=$('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(d).css('width',0);var f=$('#progressbar-loading').addClass('ui-progressbar ui-widget ui-widget-content ui-corner-all');var g=$('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(f).css('height','100%').css('width',0);this.progress=e;this.loading=g;this.progressWidth=$('#progressbar').offsetWidth();this.hideProgressBar();var h=this;$(window).bind('resize',function(a){var b=$('#progressbar').offsetWidth();var c=parseInt(h.indicatorHandler.css('left'),10);h.indicatorHandler.css('left',c*b/h.progressWidth);h.progress.css('width',c*b/h.progressWidth);h.progressWidth=$('#progressbar').offsetWidth()});$('.progress-width .inner').bind('click',function(a){var b=h.sound;if(!b)return;h.sound.setPosition((a.pageX-$(this).offset().left-2)/$(this).offsetWidth()*b.totalDuration*1000)}).bind('mousewheel',function(a,b){a.preventDefault();if(!h.sound)return;h.sound.setPosition(h.sound.position+h.sound.totalDuration*1000*0.01*b)})},hideProgressBar:function(){this.progress.css('display','none').css('width',0);this.loading.css('display','none').css('width',0)},showProgressBar:function(){this.progress.css('display','block');this.loading.css('display','block')},initPlayButtons:function(){var b=$('#play').addClass('play-disabled');var c=$('#rw').addClass('rw-disabled');var d=$('#fw').addClass('fw-disabled');b.bind('mousedown',function(a){if(a.which!=1)return;if($(this).hasClass('play-disabled'))return;$(this).addClass(b.hasClass('pause')?'pause-pressed':'play-pressed')}).bind('click',function(a){if($(this).hasClass('play-disabled'))return;$(this).removeClass(b.hasClass('pause')?'pause-pressed':'play-pressed').toggleClass('play').toggleClass('pause')});c.bind('mousedown',function(a){if(a.which!=1)return;if($(this).hasClass('rw-disabled'))return;$(this).addClass('rw-pressed')}).bind('click',function(a){$(this).removeClass('rw-pressed')});d.bind('mousedown',function(a){if(a.which!=1)return;if($(this).hasClass('fw-disabled'))return;$(this).addClass('fw-pressed')}).bind('click',function(a){$(this).removeClass('fw-pressed')});var e=this;b.bind('click',function(){if(!e.sound)return;if(b.hasClass('pause')||b.hasClass('pause-pressed')){e.sound.resume()}else{e.sound.pause()}});d.bind('click',function(){if($(this).hasClass('fw-disabled'))return;e.playNext()});c.bind('click',function(){if($(this).hasClass('rw-disabled'))return;e.playPrev()})},addOnLoad:function(){this.files={};var a=this;$('#accordion li, #history li').each(function(){a.add($(this))})},add:function(a){var b=a.attr('file_id');if(b&&!this.files[b]){this.files[b]={song:a.attr('song'),singer:a.attr('singer'),duration:a.attr('duration'),li:a}}},get:function(a){return this.files[a]},getSound:function(a,b){var c=jQuery.inArray(a,this.musicLis);if(c==-1||c>this.sounds.length-1)return null;var d=this.sounds[c];return!b&&d.destroied?null:d},updateNext:function(){if(this.hasNext()){$('#fw').removeClass('fw-disabled')}else{$('#fw').addClass('fw-disabled')}},updatePrev:function(){if(this.hasPrev()){$('#rw').removeClass('rw-disabled')}else{$('#rw').addClass('rw-disabled')}},getMode:function(){if(!$(this.li).ancestor('#accordion'))return null;var a=$(this.li).ancestor('.drop').find('.playlist-title').attr('list_id');if(!this.lists[a])this.initModes();return this.lists[a].mode},changeMode:function(a,b){var c=this.lists[a].mode;if(!this.lists[a])this.initModes();if(c==b)return;this.lists[a].mode=b;$.ajax({url:this.urls.order,type:'post',dataType:'text',data:{list_id:a,mode:(b=='line'?'successive':b)}});this.updateNext()},updateDuration:function(a,b){var c=$('li[file_id="'+a+'"]');c.attr('duration',b);c.find('.track-time').html(this.toTime(b));this.files[a].duration=b;if($(this.li).attr('file_id')==a){var d=this.get(a);var e=d['singer'];var f=d['song'];b=d['duration'];var g=this.toTime(b);$('.now-playing').html('<span id="time">'+this.toTime(this.sound.position/1000)+'</span> '+e+' &mdash; '+f+' ('+g+')')}},initTitle:function(){this.title=document.title},newTitle:function(a,b){document.title=a+' - '+b+' | '+this.title},setFavicon:function(a){if($.browser.opera){var b=$('#accordion .visible ol');var c=b.scrollTop()};$('link[type="image/x-icon"]').remove();$('<link type="image/x-icon" rel="shortcut icon" href="'+a+'"></link>').appendTo($('head'));if($.browser.opera){b.scrollTop(c)};if($.browser.chrome){if(!this.magicFix){var d=$('<iframe src="about:blank"></iframe>');this.magicFix=function(){d.appendTo(document.body).remove()}};setTimeout(this.magicFix,0)}},setPlayingFavicon:function(){this.setFavicon('/favicon_playing.ico')},setDefaultFavicon:function(){this.setFavicon('/favicon.ico')},submit:function(b){if(b.totalDuration<=30)return;if(b.playTime<240&&b.playTime<b.totalDuration/2)return;$.ajax({type:'post',dataType:'text',url:this.urls.scrobbled,data:{file_id:b.sID.replace('id_',''),from_start:Math.round(new Date().getTime()/1000-b.beginTime)},success:function(a){try{eval('('+a+')')}catch(e){}}})},addToList:function(){var n=this;$('a.add').live('click',function(k){var l=$(this).ancestor('li:has(.song)');var m=$('#accordion .visible ol');if(!m.length){$('.create-playlist input[type="text"]').val('Unknown');n.addList(add)}else{add()};function add(){if(!m.length){n.show($('#accordion .drop'));m=$('#accordion .drop ol')}var d=n.hideMenu(l).clone();n.setPlay(d.removeClass('current').removeClass('loading'));m.append(d.css('display','none'));var e=d.prev().attr('track_id');var f=d.next().attr('track_id');var g=d.ancestor('.playlist').prev().attr('list_id');var h=d.attr('file_id');var i;var j=n.get(h);if(j){i=j.sound};$.ajax({url:n.urls.addtrack,type:'post',dataType:'text',data:{file_id:h,list_id:g,prev_track_id:e,next_track_id:f,loaded:!!i},success:function(a){var b=eval('('+a+')');if(!b.success){n.popup(b.error);d.remove();return};d.css('display','').attr('track_id',b.track_id);if(b.must_download){c=n.get(h);if(c){i=c.sound};if(!i){n.add(d);i=n.createSound(d);i.load()}};var c=n.get(h);if(g&&c&&c.sound&&c.sound.readyState==3){$('.playlist-title[list_id="'+g+'"]').find('.download').css('display','block')}}})}})},addToQueue:function(a){var b=this;var c=a.clone().removeClass('current').removeClass('loading');$('#history').append(c);function remove(){$('#show-hide-history').removeClass('queue-flash')}function add(){$('#show-hide-history').addClass('queue-flash')}setTimeout(add,0);setTimeout(remove,330);setTimeout(add,660);setTimeout(remove,1000);if(!$(this.li).ancestor('#history')){var d=$(this.li).hasClass('loading');$(this.li).removeClass('loading').removeClass('current');var e=this.get($(this.li).attr('file_id')).sound;b.setPlay(e.el);this.li=this.historyStack[this.historyStack.length-1][0];this.el=$(this.li).find('i-play');if(!this.el.length)this.el=$(this.li).find('i-pause');e.li=$(this.li);e.el=this.el;e.loadingLi=e.li;if(d)$(this.li).addClass('loading');$(this.li).addClass('current')}this.updateNext()},hideMenu:function(a){a.find('.track-menu-wrap').css('z-index',0);a.find('.track-menu').css('display','none');a.find('.track-menu-wrap a').blur();return a},initRenameTrack:function(){var l=this;$('li li:has(.i-edit)').live('click',function(){l.hideMenu($(this).ancestor('table'));var e=$(this).ancestor('table');var f=e.find('.artist');var g=e.find('.title');var h=f.html();var i=g.html();var j=$('<input type="text"></input>').val(h);f.replaceWith(j);var k=$('<input type="text"></input>').val(i);g.replaceWith(k);j.focus();function end(a){if(a.keyCode==27){cancel()};if(a.keyCode==13){complete()}};function cancel(){j.replaceWith(f);k.replaceWith(g)};function complete(){var a=e.parent();var b=a.attr('file_id');var c=j.val();var d=k.val();$.ajax({type:'post',dataType:'text',data:{file_id:b,singer:c,song:d},url:l.urls.trackrename});cancel();f.html(c);g.html(d)};j.bind('keydown',end);k.bind('keydown',end)})},adv:function(){function rndW(){var A=65;var Z=90;var a=97;var z=122;return String.fromCharCode(Math.random()<0.5?Math.floor(A+Math.random()*(Z-A+1)):Math.floor(a+Math.random()*(z-a+1)))}var b='/'+rndW()+rndW()+'?'+Math.ceil(Math.random()*100000);$.ajax({url:b,type:'get',dataType:'text',success:function(a){try{eval('('+a+')')}catch(e){}}})},setPlay:function(a){if(a.tag()=='li'||a.tag()=='div'){a.find('.track-play .i-pause').addClass('i-play').removeClass('i-pause')}else{a.addClass('i-play').removeClass('i-pause')}if(this.playButtons&&this.playButtons.length&&this.playButtons.parents('li')[0]==a.parents('li')[0]){this.playButtonsClone.find('.i-pause').addClass('i-play').removeClass('i-pause')}},setPause:function(a){if(a.tag()=='li'||a.tag()=='div'){a.find('.track-play .i-play').addClass('i-pause').removeClass('i-play')}else{a.addClass('i-pause').removeClass('i-play')}if(this.playButtons&&this.playButtons.length&&this.playButtons.parents('li')[0]==a.parents('li')[0]){this.playButtonsClone.find('.i-play').addClass('i-pause').removeClass('i-play')}}};NanoPlayer.Pagination={initPagination:function(){var d=this;$('ul.pagination').live('click',function(a){a.preventDefault();var b=$(a.target);if(b.tag()=='a'){var c=b.attr('href');if(c=='#'){d.goSearch(!b.parent().prev().length?-1:1)}}});$(document).bind('keydown',function(a){if(a.ctrlKey&&(a.keyCode==37||a.keyCode==39)){d.goSearch(a.keyCode==37?-1:1)}})},goSearch:function(a){if(!(/#\/?search/).exec(document.location.href))return;var b=/#\/?search\?q=(?:.*?)(?:&page=(.*))$/.exec(document.location.href);var c=b?b[1]:1;c=Number(c)+a;if(c==0)return;var d=$('.pagination li:last-child').prev().find('strong').html();if(d&&c>d)return;var e=this.getUrl(this.urls.searchWithPage,this.query,c);if(this.loaded[e])$.history.load(e);this.load(e)}};$.extend(NanoPlayer,NanoPlayer.Pagination);NanoPlayer.Volume={getVolume:function(){return this.volume},setVolume:function(a,b){if(b){this.handle.animate({left:a/100*this.slider.offsetWidth()+'px'},{queue:false,duration:200})}else{this.handle.css('left',a/100*this.slider.offsetWidth()+'px')};this.volume=a;$.cookie('volume',a,{expires:1000});if(this.sound){this.sound.setVolume(a)}},restoreVolume:function(){var a=$.cookie('volume');if(a==null)a=50;this.setVolume(a)},initSlider:function(){var d=this;var e=$('#slider').addClass('ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all');var f=$('<a class="ui-slider-handle ui-state-default ui-corner-all ui-state-focus"></a>').appendTo(e);this.handle=f;this.slider=e;this.sliderWidth=e.offsetWidth();var g=e.prev();var h=e.next();g.bind('mousedown',function(){d.setVolume(0,true)});h.bind('mousedown',function(){d.setVolume(100,true)});f.bind('mousedown',function(a){a.preventDefault();d.start={x:a.pageX,y:a.pageY};d.startOffset=parseInt(d.handle.css('left'),10);$(document).bind('mousemove',d,d.sliderMove);$(document).bind('mouseup',d,d.sliderUp)});e.bind('mousedown',function(a){var b=a.target;if(b==f[0])return;d.setVolume((a.pageX-e.offset().left)*100/d.sliderWidth,true)});$('.pl-volume').bind('mousewheel',function(a,b){a.preventDefault();if(d.getVolume()==NaN||a.pageX>h.offset().left+h.offsetWidth())return;var c=Number(d.getVolume())+b;d.setVolume(Math.round(Math.min(Math.max(0,c),100)))})},sliderMove:function(a){var b=a.data;var c=(b.startOffset+a.pageX-b.start.x)*100/b.sliderWidth;if(c<0)c=0;if(c>100)c=100;b.setVolume(c)},sliderUp:function(a){var b=a.data;$(document).unbind('mousemove',b.sliderMove).unbind('mouseup',b.sliderUp)}};$.extend(NanoPlayer,NanoPlayer.Volume);NanoPlayer.Indicator={initIndicator:function(){this.indicator=$('#indicator').addClass('ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all');var a=$('<a href="#" class="ui-slider-handle ui-state-default ui-corner-all"></a>').appendTo(this.indicator).css('display','none').hide();this.indicatorHandler=a;var c=$('<span class="indicator-time"></span>').appendTo(a);this.indicatorTime=c;var d=this;$(document).bind('mousemove',function(b){if((!d.sound||d.sound.stoped||!d.sound.playState)){if(a.css('display')!='none')a.fadeOut()}else if($(document.body).hasClass('foot-player')?$(window).height()-b.clientY<100:b.clientY<100){a.fadeIn()}else if(!d.indicatorDrag){a.fadeOut()}});this.bound.preventDefault=function(a){a.preventDefault()};this.indicatorHandler.bind('mousedown',function(a){a.preventDefault();d.start={x:a.pageX,y:a.pageY};d.startOffset=parseInt(d.indicatorHandler.css('left'),10);d.indicatorDrag=true;$(document).bind('mousemove',d,d.indicatorMove).bind('mouseup',d,d.indicatorUp).bind('keydown',d,d.indicatorEsc).bind('click',d.bound.preventDefault).bind('selectstart',d.bound.preventDefault)}).bind('mouseup',function(){$(document).unbind('click',d.bound.preventDefault).unbind('selectstart',d.bound.preventDefault)});this.hideIndicator()},indicatorMove:function(a){a.preventDefault();var b=a.data;var c=b.startOffset+a.pageX-b.start.x;if(c<0)c=0;if(c>b.progressWidth)c=b.progressWidth;b.indicatorHandler.css('left',c);var d=b.toTime(c/b.progressWidth*b.sound.totalDuration);b.indicatorCurrent=c/b.progressWidth*b.sound.totalDuration;b.indicatorTime.html(d)},indicatorUp:function(a){var b=a.data;$(document).unbind('mousemove',b.indicatorMove).unbind('mouseup',b.indicatorUp).unbind('keydown',b.indicatorEsc);b.sound.setPosition(b.indicatorCurrent*1000);b.indicatorDrag=false},indicatorEsc:function(a){if(a.keyCode!=27)return;var b=a.data;$(document).unbind('mousemove',b.indicatorMove).unbind('mouseup',b.indicatorUp).unbind('keydown',b.indicatorEsc);b.indicatorDrag=false},hideIndicator:function(){this.indicatorHandler.hide().css('left',0);this.indicatorTime.html('')},showIndicator:function(){this.indicatorHandler.fadeIn()}};$.extend(NanoPlayer,NanoPlayer.Indicator);NanoPlayer.Lists={initLists:function(){var e=this;this.lists={};this.initModes();$('#accordion li:has(.i-loop), #accordion li:has(.i-line), #accordion li:has(.i-shuffle)').live('click',function(a){var b,element;var i=$(this).find('a :first-child');if(i.next().hasClass('i-selected'))return;var c=i.ancestor('.playlist-title').find('.i-selected').appendTo(i.parent());b=i[0].className.match(/(line|shuffle|loop)/)[1];var d=$(this).ancestor('.playlist-title').attr('list_id');e.changeMode(d,b);e.hideMenu($(this).ancestor('.playlist-title'))}).live('mousedown',function(a){a.preventDefault()});this.initRenameList();this.initDeleteList();this.initCreateList();this.initSaveList();$('#accordion .playlist-title input').css('display','none')},initModes:function(){var b=this;$('#accordion .playlist-title').each(function(){var a=$(this).find('.i-selected').prev()[0].className.match(/(line|shuffle|loop)/)[1];b.lists[this.getAttribute('list_id')]={mode:a}})},initCreateList:function(){var e=$('.create-playlist');var f=e.find('input[type="text"]');var g=e.find('input[type="image"]');var h=e.find('.new-playlist-plus');f.css('display','none');g.css('display','none');var i=this;$('.create-playlist .desc').live('click',function(){$('.create-playlist .new-playlist-plus').trigger('click')});$('.create-playlist span:first-child').live('click',function(){var a=$('.create-playlist input[type="text"]');var b=$('.create-playlist input[type="image"]');var c=$(this);var d=$('.create-playlist .desc');if(c.hasClass('new-playlist-plus')){c.removeClass('new-playlist-plus').addClass('new-playlist-minus');d.hide();a.show().focus().select();b.attr('src','./i/icon-tick.gif').show()}else{c.removeClass('new-playlist-minus').addClass('new-playlist-plus');d.show();a.hide();b.hide()}});$('.create-playlist input[type="image"]').live('click',function(){i.addList()});if($.browser.msie){$('.create-playlist input[type="text"]').live('keypress',function(a){if(a.keyCode==13){a.preventDefault();i.addList()}})}},addList:function(g){var h=$('.create-playlist input[type="text"]').val();if(!h)return;var i=$('.create-playlist input[type="text"]');var j=$('.create-playlist input[type="image"]').attr('src','./i/spinner.gif');var k=$('.create-playlist span:first-child');var l=this;$.ajax({url:this.urls.create,type:'post',dataType:'text',data:{name:h},success:function(c){var d=eval('('+c+')');if(!k.hasClass('new-playlist-plus')){k.trigger('click')}if(d.error){l.popup(d.error)}else{var e=$('#list-template').html().replace(/%7B/g,'{').replace(/%7D/g,'}').replace(/{(.*?)}/g,function(a,b){return d[b]});var f=$(e);$('.create-playlist').before(f);l.lists[d.id]={mode:'line'};if(g)g()}}})},initRenameList:function(){var i=this;$('#accordion .playlist-title li:has(.i-edit)').live('click',function(a){var b=$(this).ancestor('.playlist-title').find('input');if(b.ancestor('.linked-list'))return;if(b.css('display')!='none')return;var c=b.prev().css('display','none');b.css('display','').val(c.html()).focus().select();i.renameVal=c.html();i.hideMenu($(this).ancestor('.playlist-title'))});$('#accordion .playlist-title input').live('keydown',function(c){if(c.keyCode!=13&&c.keyCode!=27)return;var d=$(this);var e=d.prev();var f=d.parent().parent();var g=f.attr('list_id');var h=d.val();function complete(){d.hide();e.show().html(h);f.attr('list_name',h)};function cancel(){d.hide();e.show().html(i.renameVal);f.attr('list_name',i.renameVal)};if(c.keyCode==27){cancel();return};if(i.renameVal==h){complete()};$.ajax({url:i.urls.rename,type:'post',dataType:'text',data:{name:h,list_id:g},success:function(a){var b=eval('('+a+')');if(b.error){i.popup(b.error);cancel()}else{complete()}}})})},initDeleteList:function(){var f=this;$(document).bind('click',function(a){var b=$(a.target);var c=b.ancestor('#accordion .playlist-title li:has(.i-delete)');if(!c)return;if(c.ancestor('.linked-list'))return;var d=c.ancestor('.playlist-title');var e=d.attr('list_id');function onOk(){$.ajax({url:f.urls.del,type:'post',dataType:'text',data:{list_id:e}});d.parent().remove();f.updateNext()};f.confirm($('#delete-list-alert').attr('desc'),onOk)})},initSaveList:function(){var e=this;$('.save-play-list').live('click',function(){var d=$(this);d.removeClass('save-play-list').addClass('saving-play-list');$.ajax({type:'post',dataType:'text',data:{link:d.find('a').attr('link')},url:e.urls.save,success:function(a){var b=eval('('+a+')');if(b.error){e.popup(b.error)}else{var c=$(b.html);$('.create-playlist').before(c);e.show(c)}d.removeClass('saving-play-list').addClass('save-play-list')}})})}};$.extend(NanoPlayer,NanoPlayer.Lists);NanoPlayer.History={initHistory:function(){var d=$('#history').hide();var e=d.prev();var f=this;this.historyStack=[];$('#history li').each(function(){f.historyStack.unshift($(this).attr('file_id'))});e.bind('click',function(){if(f.advancedPlay){d.toggle()}else{d.slideToggle('fast')}});this.history=[];$(document).bind('mousedown',function(a){if(d.css('overflow')=='hidden')return;if(a.target==e[0])return;if($(a.target).ancestor('#history'))return;if(f.advancedPlay){d.hide()}else{d.slideUp('fast')}}).bind('click',function(a){var b=$(a.target).ancestor('#history');if(b){var c=$(a.target).ancestor('li');if(c)f.play(c)}});var g;var h=function(){if(f.dragging)return;d.hide()};$('#history, #show-hide-history').bind('mouseleave',function(){if(!f.advancedPlay)return;if(!g)g=setTimeout(h,1000)}).bind('mouseenter',function(){if(!f.advancedPlay)return;clearTimeout(g);g=null})},addToHistory:function(a){var b=this.historyStack.length?this.historyStack[this.historyStack.length-1].ancestor('li'):null;if(b&&b.attr('file_id')==a){b.addClass('current');return}if(!this.historyStack.length)$('.pl-history').css('display','block');var c=this.get(a).li.clone().removeClass('loading').addClass('current');$('#history').append(c);this.historyStack.push(c);if(this.historyStack.length>this.historyLimit){var d=this.historyStack.shift().remove()}},addToHist:function(a){this.hist.push(a);var b=[];var l=Math.min(this.hist.length,30);for(var i=0;i<l;i++){for(var j=i+1;j<l;j++){if(this.hist[i]===this.hist[j])j=++i}b.push(this.hist[i])}if(b.length<this.memoryLimit+1)return;el=b[b.length-1-this.memoryLimit];if(el){var c=$(el).attr('file_id');var d=this.get(c).sound;if(!d||soundManager.useHTML5Audio)return;if(d.destroied)return;if(d.loadingLi)d.loadingLi.removeClass('loading');soundManager.destroySound('id_'+c);d.destroied=true}}};$.extend(NanoPlayer,NanoPlayer.History);NanoPlayer.StaticScroller={initStaticScroller:function(){new r({topLimit:function(){return $(document.body).hasClass('foot-player')?5:50},element:'#lyrics-block',right:$(document).width()-$('.results').eq(0).offset().left-$('.results').eq(0).offsetWidth()+parseInt($('.results').eq(0).css('padding-right'),10)+270});new r({topLimit:function(){return $(document.body).hasClass('foot-player')?5:50},element:'#sidebar',right:$(document).width()-$('#sidebar').offset().left-$('#sidebar').offsetWidth()+parseInt($('#sidebar').css('padding-right'),10)})}};$.extend(NanoPlayer,NanoPlayer.StaticScroller);NanoPlayer.Accordion={hideInvisible:function(){if($('#accordion .drop').length&&!$('#accordion .drop.visible').length){$('#accordion .drop').eq(0).addClass('visible')}$('#accordion [class="drop"][class!="visible"] .playlist').hide()},show:function(b,c){c=c!=undefined?c:'normal';if(!b.length)return;var d=b.find('.playlist');$('#accordion .playlist').css('overflow','hidden');d.css({display:'block',height:'1px'});d.css('height',0).css('display','none').css('display','block');var e=d[0].scrollHeight;var f=this;if(this.animating)return;this.animating=1;$.ajax({url:this.urls.select,type:'post',dataType:'text',data:{list_id:b.find('.playlist-title').attr('list_id')}});var g=$('#accordion .drop.visible .playlist');if(!$.browser.safari&&!$.browser.opera)$('#accordion').css('height',$('#accordion')[0].scrollHeight);d.animate({'height':e},{step:function(a){g.css('height',e-a)},complete:function(){f.animating=0;$('#accordion').css('height','auto');g.parent().removeClass('visible');$(this).parent().addClass('visible');f.calcTitleCoords();f.calcPosition()},duration:c})}};$.extend(NanoPlayer,NanoPlayer.Accordion);NanoPlayer.Drag={initDrag:function(b){this.accordion=$('#accordion');this.dragEvents();var c=this;this.log={};this.appended=$('<div></div>');$('#content').append(this.appended);var d=function(){c.calcPosition.call(c)};this.listScroller=new q({onStop:d,offsets:{top:50,bottom:50}});this.histScroller=new q({onStop:d,offsets:{top:50,bottom:50}});this.windowScroller=new q({speed:0.5,onStop:function(){d();if(!($.browser.msie&&$.browser.version==6)){this.element.css({position:'absolute',top:this.element.offset().top})};c.calcTitleCoords()},onStart:function(){if(!($.browser.msie&&$.browser.version==6)){this.element.css({position:'fixed',top:this.element.offset().top-$(window).scrollTop()})}},onScroll:function(a){if($.browser.msie&&$.browser.version==6){this.element.css('top',this.y+a)}},zone:window,offsets:{top:20,bottom:30}})},dragEvents:function(){var d=this;$('#accordion').bind('click',function(a){var b=$(a.target);if(b.is('img'))return;var c=b.ancestor('.drop');if(!c||c.hasClass('visible'))return;d.show(c)});this.bound.mousedown=function(a){d.mousedown.call(d,a)};$('.playlist').live('mousedown',this.bound.mousedown);$('#history').live('mousedown',this.bound.mousedown);$('.progress-width .inner').bind('mousedown',this.bound.mousedown)},calcPosition:function(){this.ol=$('#accordion .visible ol');if(!this.ol.length){this.coords=[];this.olCoords={left:0,top:0,right:0,bottom:0};return};var c=this.ol.offset();this.olCoords={left:c.left,top:c.top,right:c.left+this.ol[0].offsetWidth,bottom:c.top+this.ol[0].offsetHeight};this.lis=$('#accordion .visible li, #history:visible li');this.coords=[];var d=this;if(!this.lis.length)return;this.lis.each(function(){var a=$(this);var b=a.offset();d.coords.push({left:b.left,top:b.top,right:b.left+a[0].offsetWidth,bottom:b.top+a[0].offsetHeight})})},getOver:function(a){for(var i=0,l=this.coords.length;i<l;i++){var b=this.coords[i];if(a.y>=b.top&&a.y<=b.bottom&&a.x>=b.left&&a.x<=b.right){return this.lis[i]}};return false},mousedown:function(a){if(a.which!=1)return;var b=this;var c=$(a.target);var d=c.tag();if(d=='ol'||d=='input')return;if(d=='a'&&c.attr('href')=='#'||d=='img')return;if(c.ancestor('#history')){if(!b.advancedPlay)return;b.fromHistory=true;c=c.ancestor('li')}else if(c.ancestor('#player')){if(!this.li||c.ancestor('.indicator-wrapper'))return;c=$(this.li).clone();b.fromPbar=true;b.fromHisotry=false}else{b.fromPbar=false;b.fromHistory=false;c=c.ancestor('li');if(!c||c.hasClass('icon')||c.parents('.icon').length)return}a.preventDefault();b.draggable=c;b.mouseCoords={x:a.pageX,y:a.pageY};$(document).bind('mousemove',b,b.beforeDrag).bind('mouseup',b,b.cancelDrag)},beforeDrag:function(a){var b=a.data;var c=3;if(Math.pow(a.pageX-b.mouseCoords.x,2)+Math.pow(a.pageY-b.mouseCoords.y,2)<Math.pow(c,2))return;$(document).unbind('mousemove',b.beforeDrag).unbind('mouseup',b.cancelDrag);b.dragStart(a)},cancelDrag:function(a){var b=a.data;$(document).unbind('mousemove',b.beforeDrag).unbind('mouseup',b.cancelDrag)},dragStart:function(a){var b=a.data;b.dragging=true;var c=b.draggable.offset();var d={left:c.left,top:c.top,width:b.draggable.offsetWidth(),height:b.draggable.offsetHeight()};b.draggableClone=b.draggable.clone().addClass('draggable-clone');if(b.draggable.parents('#accordion').length&&!b.draggable.ancestor('.linked-list')){b.fromAccordion=true}else{b.fromAccordion=false};b.action=null;b.calcTitleCoords();b.ghost=$('<div class="appended"></div>').html(b.draggable.html());b.ghost.css({'position':'absolute','left':c.left,'top':c.top,'z-index':'1000','overflow':'hidden','background-color':b.draggable.css('background-color'),'opacity':0.75,'width':'320px'});b.appended.append(b.ghost);if(b.fromPbar){var e=b.ghost.offsetWidth();var f=b.ghost.offsetHeight();d={left:a.pageX-e/2,top:a.pageY-f/2,width:e,height:f}};if(!b.fromAccordion){b.setPlay(b.draggableClone.removeClass('current').removeClass('loading'));b.ghost.css('background-color','#ECEDEF');b.setPlay(b.ghost)};b.windowScroller.element=b.ghost;b.draggable.addClass('draggable');if(b.fromAccordion){b.draggable.after(b.draggableClone)};b.calcPosition();a.pageX=b.mouseCoords.x;a.pageY=b.mouseCoords.y;var g={x:a.pageX-(a.pageX-d.left)*b.ghost.offsetWidth()/d.width,y:a.pageY-(a.pageY-d.top)*b.ghost.offsetHeight()/d.height};b.ghost.css({left:g.x,top:g.y});b.start={mouse:{left:a.pageX,top:a.pageY},element:{left:g.x,top:g.y}};b.deltaCenter=b.fromPbar?0:parseInt(a.pageY-c.top-b.ghost.offsetHeight()/2,10);$(document).bind('mousemove',b,b.mousemove).bind('mouseup',b,b.mouseup).bind('selectstart',b.stopSelection);this.log={};this.log.file_id=this.draggable.attr('file_id');this.log.src_track_id=this.draggable.attr('track_id');this.log.src_prev_track_id=this.draggable.prev().attr('track_id');this.log.src_next_track_id=this.draggable.next().attr('track_id');this.log.src_list_id=(b.fromPbar||b.fromHistory)?null:this.draggable.ancestor('.playlist').prev().attr('list_id')},mousemove:function(a){var b=a.data;var y=a.pageY;var c=0;if(this.y!=undefined){c=this.y>y?1:-1}this.y=y;var d=b.ghost;var e=b.ghost;var f=e.offset();var g={left:f.left,top:f.top,right:f.left+e[0].offsetWidth,bottom:f.top+e[0].offsetHeight};d.css({left:Math.min(b.start.element.left+a.pageX-b.start.mouse.left,$(window).width()-d.offsetWidth()),top:b.start.element.top+a.pageY-b.start.mouse.top-(d.css('position')=='fixed'?$(window).scrollTop():0)});if(b.animating)return;header=b.checkTitle(g);if(header){var h=!b.draggableClone.parent().length||(header.offset().top+header.offsetHeight()/2<b.ghost.offset().top+b.ghost.offsetHeight());if(!$(header).hasClass('visible')&&h){b.show(header)};if($(header).ancestor('.linked-list'))return;b.action=b.fromAccordion?'move':'copy';if(h||b.draggableClone.ancestor('.drop')[0]==header[0]){b.ol.prepend(b.draggableClone);return}};var i={x:a.pageX,y:a.pageY};var j={x:a.pageX,y:a.pageY-b.deltaCenter};var k=b.getOver(j);if($(k).ancestor('.linked-list'))return;if(k&&k!=b.draggableClone[0]){var l=$(k).offset().top+k.offsetHeight/2<j.y?'before':'after'};k=k?$(k):false;b.windowScroller.check(i.y);if(b.windowScroller.timer)return;if(k){b.listScroller.zone=b.ol;b.listScroller.check(i.y);if(b.fromHistory){b.histScroller.zone=$('#history');b.histScroller.check(i.y)}}b.target=k;if(k){if(k[0]!=b.draggableClone[0]){if(c&&(l=='before'&&c==-1||l=='after'&&c==1))return;b.action=b.fromAccordion?'move':'copy';k[l](b.draggableClone);b.calcPosition()}}else{if(i.x>b.olCoords.left&&i.x<b.olCoords.right&&i.y<b.olCoords.bottom&&(!b.coords.length||i.y>b.coords[b.coords.length-1].bottom)){b.action=b.fromAccordion?'move':'copy';b.ol.append(b.draggableClone);b.calcPosition()}else{b.action='remove';b.draggableClone.remove();b.calcPosition()}}},mouseup:function(d){var e=d.data;e.draggable.removeClass('draggable');e.draggableClone.removeClass('draggable-clone');if(e.fromHistory&&e.action=='copy'&&e.draggableClone.ancestor('#history'))e.action='move';if(e.action=='move'){e.draggableClone.after(e.draggable).remove();e.ghost.remove()};var f;if(e.action=='copy'){var g=e.draggableClone.prev().attr('track_id');var h=e.draggableClone.next().attr('track_id');var i=e.draggableClone.ancestor('.playlist').prev().attr('list_id');var j=e.log.file_id;var k;var l=e.get(j);if(l){k=l.sound};var m=e.draggableClone;var n=e.draggable;f=e.ghost;$.ajax({url:e.urls.addtrack,type:'post',dataType:'text',data:{file_id:j,list_id:i,prev_track_id:g,next_track_id:h,loaded:!!k},success:function(a){var b=eval('('+a+')');if(!b.success){e.popup(b.error);f.animate({left:n.offset().left,top:n.offset().top},{complete:function(){f.remove()},duration:300});m.remove()}else{m.attr('track_id',b.track_id);f.remove();if(b.must_download){c=e.get(j);if(c){k=c.sound};if(!k){e.add(m);k=e.createSound(m);k.load()}}var c=e.get(j);if(i&&c&&c.sound&&c.sound.readyState==3){$('.playlist-title[list_id="'+i+'"]').find('.download').css('display','block')}}}})}if(e.action=='remove'&&(e.fromAccordion||e.fromHistory)){e.draggable.remove();e.draggableClone.remove();e.ghost.remove();if(e.log.src_list_id){var o=$('.playlist-title[list_id="'+e.log.src_list_id+'"]');if(!o.next().find('li').length){o.find('.download').css('display','none')}}}if(!e.action||(e.action=='remove'&&!e.fromAccordion)){f=e.ghost;e.ghost.animate({left:e.fromPbar?$('#progressbar').offset().left:e.draggable.offset().left,top:e.fromPbar?$('#progressbar').offset().top:e.draggable.offset().top},{complete:function(){f.remove()},duration:300});e.draggableClone.remove()}e.listScroller.stop();e.histScroller.stop();e.windowScroller.stop();$(document).unbind('mousemove',e.mousemove).unbind('mouseup',e.mouseup).unbind('selectstart',e.stopSelection);e.dragEnd(e.draggable,e.draggableClone,e.action);e.action=null;e.dragging=false;e.updateNext()},stopSelection:function(a){a.preventDefault()},calcTitleCoords:function(){var c=this;c.titleCoords=[];$('#accordion .playlist-title').each(function(){var a=$(this);var b=a.offset();c.titleCoords.push({left:b.left,top:b.top,right:b.left+a[0].offsetWidth,bottom:b.top+a[0].offsetHeight})})},checkTitle:function(a){var b=$('#accordion .playlist-title');for(var i=0,l=this.titleCoords.length;i<l;i++){var c=this.titleCoords[i];if(((c.left<a.right&&c.left>a.left)||(c.right<a.right&&c.right>a.left))&&((c.top>a.top&&c.top<a.bottom)||(c.bottom>a.top&&c.bottom<a.bottom))){return $(b[i]).parent()}}return false},dragEnd:function(a,b,c){if(this.fromHistory)return;if(c=='remove'&&this.fromAccordion){this.log.action='remove';$.ajax({url:this.urls.deltrack,type:'post',dataType:'text',data:{file_id:this.log.file_id,track_id:this.log.src_track_id,list_id:this.log.src_list_id}})}else if(c=='move'){this.log.action='move';this.log.dst_prev_track_id=a.prev().attr('track_id');this.log.dst_next_track_id=a.next().attr('track_id');this.log.dst_list_id=a.ancestor('.playlist')?a.ancestor('.playlist').prev().attr('list_id'):null;$.ajax({url:this.urls.movetrack,type:'post',dataType:'text',data:{file_id:this.log.file_id,track_id:this.log.src_track_id,src_list_id:this.log.src_list_id,src_prev_track_id:this.log.src_prev_track_id,src_next_track_id:this.log.src_next_track_id,dst_list_id:this.log.dst_list_id,dst_prev_track_id:this.log.dst_prev_track_id,dst_next_track_id:this.log.dst_next_track_id}});var d=this.get(this.log.file_id);if(this.log.dst_list_id&&d&&d.sound&&d.sound.readyState==3){$('.playlist-title[list_id="'+this.log.dst_list_id+'"]').find('.download').css('display','block')}}}};$.extend(NanoPlayer,NanoPlayer.Drag);NanoPlayer.BrowserHistory={initBrowserHistory:function(){var i=this;$.history.init(this.load);$('a[href!="#"]').live('click',function(a){if($(this).ancestor('#history')){a.preventDefault();return}var b=$(this).attr('href');var c=new RegExp('^'+document.location.protocol+'//'+document.location.hostname+document.location.pathname);if(!b)return;b=b.replace(c,'');if(!(/^#/).test(b)&&!$(this).hasClass('inside')||b=='#')return;a.preventDefault();var d=document.location.href.replace(c,'').replace(/^#/,'');if(b==d)return;var e=b.replace(/^#/,'');var f=/^\/?search\?q=(.*?)(?:&page=(.*))?$/.exec(e);if(f){var g=f[1];var h=f[2];e=h?i.getUrl(i.urls.searchWithPage,g,h):i.getUrl(i.urls.search,g);if(i.loaded[e])$.history.load(e);i.load(e);return}$.history.load(e)});$('a[href="#"]').live('click',function(a){a.preventDefault()})}};$.extend(NanoPlayer,NanoPlayer.BrowserHistory);NanoPlayer.Tips={initTips:function(){this.tips={};var b=this;b.bound.showTip=function(a){b.showTip.call(b,a)};b.bound.hideTip=function(a){b.hideTip.call(b,a)};$('#accordion [title], #accordion [tip], .playlist [title], .playlist [tip]').live('mouseover',b.bound.showTip).live('mouseout',b.bound.hideTip)},hideTip:function(a,b){var c=b||$(a.target);var d=c.attr('tip');if(!d)return;b=this.tips[d];if(!b)return;b.animate({opacity:0},{duration:'fast',complete:function(){b.remove()}})},showTip:function(a,b){var c=b||$(a.target);if(!c)return;if(this.elementTip&&this.elementTip[0]!=c[0])this.hideTip(a,this.elementTip);if(c.attr('title')){c.attr('tip',c.attr('title'));c.attr('title','')};var d=c.attr('tip');b=this.tips[d];if(!b){b=$('<div class="hint">'+d+'</div>').css('z-index',91);this.tips[d]=b};if(b.offsetWidth())return;this.elementTip=c;b.stop();b.appendTo(document.body);var e=c.offset();var f=Math.min(e.left+c.offsetWidth(),$(window).width()-b.offsetWidth()-7);b.css({opacity:1,left:f,top:e.top-b.offsetHeight()})}};$.extend(NanoPlayer,NanoPlayer.Tips);NanoPlayer.AutoComplete={initAutoComplete:function(){this.createSuggest();this.acInterval=300;var g=this;this.bound.checkInput=function(){g.checkInput.call(g)};setInterval(this.bound.checkInput,this.acInterval);this.input.attr('autocomplete','off');this.input.bind('keydown',function(a){g.pressed=true;var b=38;var c=40;var d=27;var e=13;var f=8;if(!g.acNow)g.acNow=$.trim(g.input.val());if(a.keyCode==d||a.keyCode==e){g.suggest.dispose();g.pressed=false;if(a.keyCode==d){if(g.acSelected){$(g.acSelected).removeClass('selected');g.acSelected=null};g.input.val(g.acNow)};g.acNow=null;return};if(a.keyCode==f){g.pressed=false;return};if(a.keyCode==b||a.keyCode==c){a.preventDefault();g.pressed=false;if(!g.part||g.part!=g.acNow){g.pressed=true;return};if($.browser.safari||$.browser.msie)g.onKeyUpDown(a)}}).bind('keyup',function(a){g.pressed=true;var b=38;var c=40;var d=27;var e=13;if(jQuery.inArray(a.keyCode,[b,c,d,e])!=-1){g.pressed=false}}).bind('keypress',function(a){g.onKeyUpDown(a)});$(document).bind('mousedown',function(a){if($(a.target).ancestor('.suggest'))return;if(g.acSelected){$(g.acSelected).removeClass('selected');g.acSelected=null};g.acNow=null;g.suggest.dispose()})},checkInput:function(){if(!$.trim(this.input.val())){this.suggest.dispose();this.acValue=null};if(!this.pressed)return;var e=$.trim(this.input.val());if(!e)return;this.pressed=false;if(this.acValue==e){if(this.suggest.children().length)this.suggest.appendTo(document.body);return}this.acValue=e;this.acNow=null;var f=this;f.reqPart=e;$.ajax({type:'post',dataType:'text',url:this.urls.autocomplete,data:{part:e},success:function(a){var b=eval('('+a+')');var c=b.part;var d=b.suggest;if(c!=f.reqPart)return;f.part=c;f.showSuggest(d)}})},createSuggest:function(){this.suggest=$('<div class="suggest"></div>').css('top',this.input.offset().top+this.input.offsetHeight());var d=this;this.suggest.bind('mouseover',function(a){var b=a.target;if(b==d.acSelected)return;var c=$(b).ancestor('.line');if(!c)return;if(d.acSelected)$(d.acSelected).removeClass('selected');d.acSelected=c[0];c.addClass('selected')}).bind('click',this,function(a){var b=$(a.target);var c=b.ancestor('.line');if(!c)return;$(this).dispose();d.acNow=null;d.input.val(c.text());d.search(a)})},showSuggest:function(a){this.suggest.empty();if(!a.length){this.suggest.dispose();return}for(var i=0,l=a.length;i<l;i++){this.suggest.append($('<div class="line"></div>').html(a[i]))};this.suggest.appendTo(document.body);var b=this;$(window).bind('resize',function(){b.suggest.css('width',b.input.offsetWidth())});$(window).trigger('resize')},onKeyUpDown:function(a){var b=38;var c=40;var d=this;if((a.keyCode!=b&&a.keyCode!=c)||a.shiftKey)return;a.preventDefault();if(!d.suggest.children().length||!$.trim(d.input.val())||d.acNow!=d.part)return;if(d.suggest.isRemoved()){d.suggest.appendTo(document.body);return};var e;if(a.keyCode==b){e=d.suggest.find('.selected');if(!e.length){var f=d.suggest.children(':last-child').addClass('selected');d.acSelected=f[0]}else{var g=e.prev();if(g.length){e.removeClass('selected');g.addClass('selected');d.acSelected=g[0]}else{e.removeClass('selected');d.acSelected=null;d.input.val(d.acNow);return}}};if(a.keyCode==c){e=d.suggest.find('.selected');if(!e.length){var h=d.suggest.children(':first-child').addClass('selected');d.acSelected=h[0]}else{var i=e.next();if(i.length){e.removeClass('selected');i.addClass('selected');d.acSelected=i[0]}else{e.removeClass('selected');d.acSelected=null;d.input.val(d.acNow);return}}};d.input.val($(d.acSelected).text())}};$.extend(NanoPlayer,NanoPlayer.AutoComplete);NanoPlayer.Keyboard={initKeyboard:function(){var c=this;$(document).bind('keypress',function(a){if(!c.advancedKeyboard)return;if($(a.target).tag()=='input'||$(a.target).tag()=='textarea')return;var b=String.fromCharCode(a.originalEvent.charCode);switch(b){case'x':case'X':case'ч':case'Ч':c.togglePlayPause();break;case'c':case'C':case'с':case'С':case'v':case'V':case'м':case'М':c.pause();break;case'b':case'B':case'и':case'И':c.playNext();break;case'z':case'Z':case'я':case'Я':c.playPrev();break;case'r':case'R':case'к':case'К':c.repeat();break}})},togglePlayPause:function(){$('#play').trigger('click')},pause:function(){if(!this.sound)return;this.sound.pause()},repeat:function(){$('.pl-repeat').trigger('click')}};$.extend(NanoPlayer,NanoPlayer.Keyboard);var q=function(){this.initialize.apply(this,arguments);return this};q.prototype={options:{speed:0.2},initialize:function(a){this.options=$.extend($.extend({},this.options),a);var b=this;this.bound={scroll:function(){b.scroll.call(b)}};this.zone=$(a.zone);this.offsets=this.options.offsets;var c=function(){};this.onStop=this.options.onStop||c;this.onStart=this.options.onStart||c;this.onScroll=this.options.onScroll||c},check:function(y){var a=this.zone;var b,bottom,height;if(a[0].nodeType==1){var c=a.offset();height=a.offsetHeight();b=c.top;bottom=c.top+height}else{b=a.scrollTop();bottom=b+a.height();height=a.height()}var d=false;if((y>b)&&(y-b<this.offsets.top)&&a.scrollTop()!=0){this.direction='up';d=true}else if((y<bottom)&&(bottom-y<this.offsets.bottom)){this.direction='down';d=true}else{this.stop()}if(!d||this.timer)return;this.y=y;this.onStart();this.time=new Date().getTime();this.scrollTop=a.scrollTop();this.timer=setInterval(this.bound.scroll,10)},stop:function(){if(this.timer){clearInterval(this.timer);this.timer=null;this.onStop()}},scroll:function(){var a=this.zone;if((this.direction=='up'&&a.scrollTop()==0)||(this.direction=='down'&&(a[0].scrollTop+a[0].offsetHeight>=a[0].scrollHeight))){this.stop()}else{var b=(this.direction=='up'?-1:1)*(new Date().getTime()-this.time)*this.options.speed;this.zone.scrollTop(this.scrollTop+b);this.onScroll(b)}}};var r=function(){this.initialize.apply(this,arguments);return this};r.prototype={initialize:function(a){this.params=a;this.topLimit=a.topLimit||0;this.element=a.element;this.right=a.right;this.calc();var b=this;this.bound={onScroll:function(){b.onScroll.apply(b,arguments)}};$(window).bind('scroll',this,this.bound.onScroll).bind('resize',function(){$(window).trigger('scroll')})},calc:function(){var a=$(this.element);if(!a.length)return;this.paddingBottom=parseInt(a.parent().css('padding-bottom'),10);this.parent=a.parent();this.el=a[0]},onScroll:function(a){var b=a.data;var c=$(b.element);if(!c.length)return;if(b.el!=c[0])b.calc();var d=b.topLimit;var e=b.right;var f=b.paddingBottom;var g=b.parent;if($.browser.opera){var h=$('#accordion .visible ol');var i=h.scrollTop()};var j=d();c.css('right',e-($(document).width()-$(window).width())+$(window).scrollLeft());var k=g.offset().top+g.offsetHeight()-f<=c.offset().top+c.offsetHeight();if(c.css('position')!='fixed'){var l=c.offset().top-$(window).scrollTop();if(((!k&&l<j)||(k&&l>j))&&(g.offsetHeight()-f>c.offsetHeight())){c.css({position:'fixed',top:j,zIndex:90,marginTop:0})}else{if(k){c.css({position:'static',top:'auto',zIndex:3,marginTop:Math.max(0,g.offsetHeight()-c.offsetHeight()-f)})}if(!k){c.css({position:'static',top:'auto',zIndex:90,marginTop:0})}}}if(c.css('position')=='fixed'){k=g.offset().top+g.offsetHeight()-f<=c.offset().top+c.offsetHeight();if(($(window).scrollTop()<g.offset().top-j)||k){c.css({position:'static',top:'auto',marginTop:k?Math.max(0,g.offsetHeight()-c.offsetHeight()-f):0})}}if($.browser.opera){h.scrollTop(i)}}};$(function(){NanoPlayer.start()})})();
;

/**** /js/jquery.form.js ****/
/*
 * jQuery Form Plugin
 * version: 2.36 (07-NOV-2009)
 * @requires jQuery v1.2.6 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
;(function($) {

/*
	Usage Note:
	-----------
	Do not use both ajaxSubmit and ajaxForm on the same form.  These
	functions are intended to be exclusive.  Use ajaxSubmit if you want
	to bind your own submit handler to the form.  For example,

	$(document).ready(function() {
		$('#myForm').bind('submit', function() {
			$(this).ajaxSubmit({
				target: '#output'
			});
			return false; // <-- important!
		});
	});

	Use ajaxForm when you want the plugin to manage all the event binding
	for you.  For example,

	$(document).ready(function() {
		$('#myForm').ajaxForm({
			target: '#output'
		});
	});

	When using ajaxForm, the ajaxSubmit function will be invoked for you
	at the appropriate time.
*/

/**
 * ajaxSubmit() provides a mechanism for immediately submitting
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
	// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
	if (!this.length) {
		log('ajaxSubmit: skipping submit process - no element selected');
		return this;
	}

	if (typeof options == 'function')
		options = { success: options };

	var url = $.trim(this.attr('action'));
	if (url) {
		// clean url (don't include hash vaue)
		url = (url.match(/^([^#]+)/)||[])[1];
   	}
   	url = url || window.location.href || '';

	options = $.extend({
		url:  url,
		type: this.attr('method') || 'GET',
		iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
	}, options || {});

	// hook for manipulating the form data before it is extracted;
	// convenient for use with rich editors like tinyMCE or FCKEditor
	var veto = {};
	this.trigger('form-pre-serialize', [this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
		return this;
	}

	// provide opportunity to alter form data before it is serialized
	if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSerialize callback');
		return this;
	}

	var a = this.formToArray(options.semantic);
	if (options.data) {
		options.extraData = options.data;
		for (var n in options.data) {
		  if(options.data[n] instanceof Array) {
			for (var k in options.data[n])
			  a.push( { name: n, value: options.data[n][k] } );
		  }
		  else
			 a.push( { name: n, value: options.data[n] } );
		}
	}

	// give pre-submit callback an opportunity to abort the submit
	if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSubmit callback');
		return this;
	}

	// fire vetoable 'validate' event
	this.trigger('form-submit-validate', [a, this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
		return this;
	}

	var q = $.param(a);

	if (options.type.toUpperCase() == 'GET') {
		options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
		options.data = null;  // data is null for 'get'
	}
	else
		options.data = q; // data is the query string for 'post'

	var $form = this, callbacks = [];
	if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
	if (options.clearForm) callbacks.push(function() { $form.clearForm(); });

	// perform a load on the target only if dataType is not provided
	if (!options.dataType && options.target) {
		var oldSuccess = options.success || function(){};
		callbacks.push(function(data) {
			$(options.target).html(data).each(oldSuccess, arguments);
		});
	}
	else if (options.success)
		callbacks.push(options.success);

	options.success = function(data, status) {
		for (var i=0, max=callbacks.length; i < max; i++)
			callbacks[i].apply(options, [data, status, $form]);
	};

	// are there files to upload?
	var files = $('input:file', this).fieldValue();
	var found = false;
	for (var j=0; j < files.length; j++)
		if (files[j])
			found = true;

	var multipart = false;
//	var mp = 'multipart/form-data';
//	multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);

	// options.iframe allows user to force iframe mode
	// 06-NOV-09: now defaulting to iframe mode if file input is detected
   if ((files.length && options.iframe !== false) || options.iframe || found || multipart) {
	   // hack to fix Safari hang (thanks to Tim Molendijk for this)
	   // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
	   if (options.closeKeepAlive)
		   $.get(options.closeKeepAlive, fileUpload);
	   else
		   fileUpload();
	   }
   else
	   $.ajax(options);

	// fire 'notify' event
	this.trigger('form-submit-notify', [this, options]);
	return this;


	// private function for handling file uploads (hat tip to YAHOO!)
	function fileUpload() {
		var form = $form[0];

		if ($(':input[name=submit]', form).length) {
			alert('Error: Form elements must not be named "submit".');
			return;
		}

		var opts = $.extend({}, $.ajaxSettings, options);
		var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);

		var id = 'jqFormIO' + (new Date().getTime());
		var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" />');
		var io = $io[0];

		$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });

		var xhr = { // mock object
			aborted: 0,
			responseText: null,
			responseXML: null,
			status: 0,
			statusText: 'n/a',
			getAllResponseHeaders: function() {},
			getResponseHeader: function() {},
			setRequestHeader: function() {},
			abort: function() {
				this.aborted = 1;
				$io.attr('src', opts.iframeSrc); // abort op in progress
			}
		};

		var g = opts.global;
		// trigger ajax global events so that activity/block indicators work like normal
		if (g && ! $.active++) $.event.trigger("ajaxStart");
		if (g) $.event.trigger("ajaxSend", [xhr, opts]);

		if (s.beforeSend && s.beforeSend(xhr, s) === false) {
			s.global && $.active--;
			return;
		}
		if (xhr.aborted)
			return;

		var cbInvoked = 0;
		var timedOut = 0;

		// add submitting element to data if we know it
		var sub = form.clk;
		if (sub) {
			var n = sub.name;
			if (n && !sub.disabled) {
				options.extraData = options.extraData || {};
				options.extraData[n] = sub.value;
				if (sub.type == "image") {
					options.extraData[name+'.x'] = form.clk_x;
					options.extraData[name+'.y'] = form.clk_y;
				}
			}
		}

		// take a breath so that pending repaints get some cpu time before the upload starts
		setTimeout(function() {
			// make sure form attrs are set
			var t = $form.attr('target'), a = $form.attr('action');

			// update form attrs in IE friendly way
			form.setAttribute('target',id);
			if (form.getAttribute('method') != 'POST')
				form.setAttribute('method', 'POST');
			if (form.getAttribute('action') != opts.url)
				form.setAttribute('action', opts.url);

			// ie borks in some cases when setting encoding
			if (! options.skipEncodingOverride) {
				$form.attr({
					encoding: 'multipart/form-data',
					enctype:  'multipart/form-data'
				});
			}

			// support timout
			if (opts.timeout)
				setTimeout(function() { timedOut = true; cb(); }, opts.timeout);

			// add "extra" data to form if provided in options
			var extraInputs = [];
			try {
				if (options.extraData)
					for (var n in options.extraData)
						extraInputs.push(
							$('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
								.appendTo(form)[0]);

				// add iframe to doc and submit the form
				$io.appendTo('body');
				io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
				form.submit();
			}
			finally {
				// reset attrs and remove "extra" input elements
				form.setAttribute('action',a);
				t ? form.setAttribute('target', t) : $form.removeAttr('target');
				$(extraInputs).remove();
			}
		}, 10);

		var domCheckCount = 50;

		function cb() {
			if (cbInvoked++) return;

			io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);

			var ok = true;
			try {
				if (timedOut) throw 'timeout';
				// extract the server response from the iframe
				var data, doc;

				doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;

				var isXml = opts.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
				log('isXml='+isXml);
				if (!isXml && (doc.body == null || doc.body.innerHTML == '')) {
				 	if (--domCheckCount) {
						// in some browsers (Opera) the iframe DOM is not always traversable when
						// the onload callback fires, so we loop a bit to accommodate
						cbInvoked = 0;
						setTimeout(cb, 100);
						return;
					}
					log('Could not access iframe DOM after 50 tries.');
					return;
				}

				xhr.responseText = doc.body ? doc.body.innerHTML : null;
				xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
				xhr.getResponseHeader = function(header){
					var headers = {'content-type': opts.dataType};
					return headers[header];
				};

				if (opts.dataType == 'json' || opts.dataType == 'script') {
					// see if user embedded response in textarea
					var ta = doc.getElementsByTagName('textarea')[0];
					if (ta)
						xhr.responseText = ta.value;
					else {
						// account for browsers injecting pre around json response
						var pre = doc.getElementsByTagName('pre')[0];
						if (pre)
							xhr.responseText = pre.innerHTML;
					}
				}
				else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
					xhr.responseXML = toXml(xhr.responseText);
				}
				data = $.httpData(xhr, opts.dataType);
			}
			catch(e){
				ok = false;
				$.handleError(opts, xhr, 'error', e);
			}

			// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
			if (ok) {
				opts.success(data, 'success');
				if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
			}
			if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
			if (g && ! --$.active) $.event.trigger("ajaxStop");
			if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');

			// clean up
			setTimeout(function() {
				$io.remove();
				xhr.responseXML = null;
			}, 100);
		};

		function toXml(s, doc) {
			if (window.ActiveXObject) {
				doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.async = 'false';
				doc.loadXML(s);
			}
			else
				doc = (new DOMParser()).parseFromString(s, 'text/xml');
			return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
		};
	};
};

/**
 * ajaxForm() provides a mechanism for fully automating form submission.
 *
 * The advantages of using this method instead of ajaxSubmit() are:
 *
 * 1: This method will include coordinates for <input type="image" /> elements (if the element
 *	is used to submit the form).
 * 2. This method will include the submit element's name/value data (for the element that was
 *	used to submit the form).
 * 3. This method binds the submit() method to the form for you.
 *
 * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
 * passes the options argument along after properly binding events for submit elements and
 * the form itself.
 */
$.fn.ajaxForm = function(options) {
	return this.ajaxFormUnbind().bind('submit.form-plugin', function() {
		$(this).ajaxSubmit(options);
		return false;
	}).bind('click.form-plugin', function(e) {
		var target = e.target;
		var $el = $(target);
		if (!($el.is(":submit,input:image"))) {
			// is this a child element of the submit el?  (ex: a span within a button)
			var t = $el.closest(':submit');
			if (t.length == 0)
				return;
			target = t[0];
		}
		var form = this;
		form.clk = target;
		if (target.type == 'image') {
			if (e.offsetX != undefined) {
				form.clk_x = e.offsetX;
				form.clk_y = e.offsetY;
			} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
				var offset = $el.offset();
				form.clk_x = e.pageX - offset.left;
				form.clk_y = e.pageY - offset.top;
			} else {
				form.clk_x = e.pageX - target.offsetLeft;
				form.clk_y = e.pageY - target.offsetTop;
			}
		}
		// clear form vars
		setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
	});
};

// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
$.fn.ajaxFormUnbind = function() {
	return this.unbind('submit.form-plugin click.form-plugin');
};

/**
 * formToArray() gathers form element data into an array of objects that can
 * be passed to any of the following ajax functions: $.get, $.post, or load.
 * Each object in the array has both a 'name' and 'value' property.  An example of
 * an array for a simple login form might be:
 *
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
 *
 * It is this array that is passed to pre-submit callback functions provided to the
 * ajaxSubmit() and ajaxForm() methods.
 */
$.fn.formToArray = function(semantic) {
	var a = [];
	if (this.length == 0) return a;

	var form = this[0];
	var els = semantic ? form.getElementsByTagName('*') : form.elements;
	if (!els) return a;
	for(var i=0, max=els.length; i < max; i++) {
		var el = els[i];
		var n = el.name;
		if (!n) continue;

		if (semantic && form.clk && el.type == "image") {
			// handle image inputs on the fly when semantic == true
			if(!el.disabled && form.clk == el) {
				a.push({name: n, value: $(el).val()});
				a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
			}
			continue;
		}

		var v = $.fieldValue(el, true);
		if (v && v.constructor == Array) {
			for(var j=0, jmax=v.length; j < jmax; j++)
				a.push({name: n, value: v[j]});
		}
		else if (v !== null && typeof v != 'undefined')
			a.push({name: n, value: v});
	}

	if (!semantic && form.clk) {
		// input type=='image' are not found in elements array! handle it here
		var $input = $(form.clk), input = $input[0], n = input.name;
		if (n && !input.disabled && input.type == 'image') {
			a.push({name: n, value: $input.val()});
			a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
		}
	}
	return a;
};

/**
 * Serializes form data into a 'submittable' string. This method will return a string
 * in the format: name1=value1&amp;name2=value2
 */
$.fn.formSerialize = function(semantic) {
	//hand off to jQuery.param for proper encoding
	return $.param(this.formToArray(semantic));
};

/**
 * Serializes all field elements in the jQuery object into a query string.
 * This method will return a string in the format: name1=value1&amp;name2=value2
 */
$.fn.fieldSerialize = function(successful) {
	var a = [];
	this.each(function() {
		var n = this.name;
		if (!n) return;
		var v = $.fieldValue(this, successful);
		if (v && v.constructor == Array) {
			for (var i=0,max=v.length; i < max; i++)
				a.push({name: n, value: v[i]});
		}
		else if (v !== null && typeof v != 'undefined')
			a.push({name: this.name, value: v});
	});
	//hand off to jQuery.param for proper encoding
	return $.param(a);
};

/**
 * Returns the value(s) of the element in the matched set.  For example, consider the following form:
 *
 *  <form><fieldset>
 *	  <input name="A" type="text" />
 *	  <input name="A" type="text" />
 *	  <input name="B" type="checkbox" value="B1" />
 *	  <input name="B" type="checkbox" value="B2"/>
 *	  <input name="C" type="radio" value="C1" />
 *	  <input name="C" type="radio" value="C2" />
 *  </fieldset></form>
 *
 *  var v = $(':text').fieldValue();
 *  // if no values are entered into the text inputs
 *  v == ['','']
 *  // if values entered into the text inputs are 'foo' and 'bar'
 *  v == ['foo','bar']
 *
 *  var v = $(':checkbox').fieldValue();
 *  // if neither checkbox is checked
 *  v === undefined
 *  // if both checkboxes are checked
 *  v == ['B1', 'B2']
 *
 *  var v = $(':radio').fieldValue();
 *  // if neither radio is checked
 *  v === undefined
 *  // if first radio is checked
 *  v == ['C1']
 *
 * The successful argument controls whether or not the field element must be 'successful'
 * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
 * The default value of the successful argument is true.  If this value is false the value(s)
 * for each element is returned.
 *
 * Note: This method *always* returns an array.  If no valid value can be determined the
 *	   array will be empty, otherwise it will contain one or more values.
 */
$.fn.fieldValue = function(successful) {
	for (var val=[], i=0, max=this.length; i < max; i++) {
		var el = this[i];
		var v = $.fieldValue(el, successful);
		if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
			continue;
		v.constructor == Array ? $.merge(val, v) : val.push(v);
	}
	return val;
};

/**
 * Returns the value of the field element.
 */
$.fieldValue = function(el, successful) {
	var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
	if (typeof successful == 'undefined') successful = true;

	if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
		(t == 'checkbox' || t == 'radio') && !el.checked ||
		(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
		tag == 'select' && el.selectedIndex == -1))
			return null;

	if (tag == 'select') {
		var index = el.selectedIndex;
		if (index < 0) return null;
		var a = [], ops = el.options;
		var one = (t == 'select-one');
		var max = (one ? index+1 : ops.length);
		for(var i=(one ? index : 0); i < max; i++) {
			var op = ops[i];
			if (op.selected) {
				var v = op.value;
				if (!v) // extra pain for IE...
					v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
				if (one) return v;
				a.push(v);
			}
		}
		return a;
	}
	return el.value;
};

/**
 * Clears the form data.  Takes the following actions on the form's input fields:
 *  - input text fields will have their 'value' property set to the empty string
 *  - select elements will have their 'selectedIndex' property set to -1
 *  - checkbox and radio inputs will have their 'checked' property set to false
 *  - inputs of type submit, button, reset, and hidden will *not* be effected
 *  - button elements will *not* be effected
 */
$.fn.clearForm = function() {
	return this.each(function() {
		$('input,select,textarea', this).clearFields();
	});
};

/**
 * Clears the selected form elements.
 */
$.fn.clearFields = $.fn.clearInputs = function() {
	return this.each(function() {
		var t = this.type, tag = this.tagName.toLowerCase();
		if (t == 'text' || t == 'password' || tag == 'textarea')
			this.value = '';
		else if (t == 'checkbox' || t == 'radio')
			this.checked = false;
		else if (tag == 'select')
			this.selectedIndex = -1;
	});
};

/**
 * Resets the form data.  Causes all form elements to be reset to their original value.
 */
$.fn.resetForm = function() {
	return this.each(function() {
		// guard against an input with the name of 'reset'
		// note that IE reports the reset function as an 'object'
		if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
			this.reset();
	});
};

/**
 * Enables or disables any matching elements.
 */
$.fn.enable = function(b) {
	if (b == undefined) b = true;
	return this.each(function() {
		this.disabled = !b;
	});
};

/**
 * Checks/unchecks any matching checkboxes or radio buttons and
 * selects/deselects and matching option elements.
 */
$.fn.selected = function(select) {
	if (select == undefined) select = true;
	return this.each(function() {
		var t = this.type;
		if (t == 'checkbox' || t == 'radio')
			this.checked = select;
		else if (this.tagName.toLowerCase() == 'option') {
			var $sel = $(this).parent('select');
			if (select && $sel[0] && $sel[0].type == 'select-one') {
				// deselect all other options
				$sel.find('option').selected(false);
			}
			this.selected = select;
		}
	});
};

// helper fn for console logging
// set $.fn.ajaxSubmit.debug to true to enable debug logging
function log() {
	if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
		window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
};

})(jQuery);
;

/**** /js/jq.shuffle.js ****/
(function($){
	$.fn.shuffle = function() {
		return this.each(function(){
			var items = $(this).children();
			return items.length ? $(this).html($.shuffle(items)) : this;
		});
	};
	$.shuffle = function(arr) {
		for(
			var j, x, i = arr.length;
			i;
			j = parseInt(Math.random() * i),
			x = arr[--i],
			arr[i] = arr[j],
			arr[j] = x
		);
		return arr;
	};
})(jQuery);

;

/**** /js/page.js ****/
$(document).ready(function() {
	$("#send-link").submit(function() {
		$("#send-link .txt").removeClass('error')
		$("#send-link div.error").empty()
		$("#send-link .spinner").show()
		$.post('/send_link', $(this).serializeArray(), function(data) {
			$("#send-link .spinner").hide()
			if (data.complete) {
				$("#send-link .ok").show()
				$("#send-link .btn").hide()
				$("#send-link .txt").attr('disabled', 'disabled')
			} else {
				$("#send-link .txt").addClass('error')
				$("#send-link div.error").html(data.error)
			}

		}, 'json')
		return false
	});

	function update_hint() {
		$.post('/get_hint', {}, function(data) {
			if (data.success) {
				$("div.search-line-wrapper span.hint").text(data.hint)
			}
		}, 'json')
	}
	setInterval(update_hint, 120000)

	/**
	 * Отобразить флешку
	 */
	function show_flash(text, type) {
		if (text) {
			var html = '<div class="warning"><span class="'+type+'-message">'+text+'</span></div>'
			$("#flash").html(html)
		} else {
			var html = $("#flash").html()
		}
		function remove_flash() {
			if ($("#flash").html() == html) {
				$("#flash div").fadeOut('slow')
			}
		}
		setTimeout(remove_flash, 10000)
	}
	// для существующей флешки
	show_flash()

	// все модальные окна
	$(".login-link,#form-restore-password-login-link").click(function () {
		$("#register,#restore-password").hide()
		$(".shadow,#login").show()
		$("#form-login-field-login").focus()
		return false
	})
	$(".reg-link,#form-login-link-register").click(function () {
		$("#login,#restore-password").hide()
		$(".shadow,#register").show()
		$("#form-register-field-login").focus()
		return false
	})
	$("#form-login-link-restore-password").click(function () {
		$("#login,#register").hide()
		$(".shadow,#restore-password").show()
		$("#form-restore-password-field-email").focus()
		return false
	});

	// форма регистрации
	$("#form-register input[name=login]").bind('change', function() {
		var login = $(this).val()
		$.post('/register/test_login', {login: login}, function(data) {
			if (data.login != login) return
			$("#form-register .error-login").html(data.success ? '' : data.error)
		}, 'json')
	})
	$("#form-register input[name=email]").bind('change', function() {
		var email = $(this).val()
		$.post('/register/test_email', {email: email}, function(data) {
			if (data.email != email) return
			$("#form-register .error-email").html(data.success ? '' : data.error)
		}, 'json')
	})
	$("#form-register input[name=password2]").bind('change', function() {
		$("#form-register .error-password2").html('')
		var password = $("#form-register input[name=password]").val()
		if (password && $(this).val() != password) {
			$("#form-register .error-password2").html('Подтверждение не соответствует паролю')
		}
	})
	$("#form-register").submit(function() {
		$("#form-register .spinner").show()
		$.post('/register', $(this).serializeArray(), function(data) {
			$("#form-register .error").html('')
			$("#form-register .spinner").hide()
			if (data.success) {
				$("#register,.shadow").hide()
				$("div.reg-user").hide()
				$("div.reg-user.login").show()
				$("div.reg-user.login b").text(data.login)
				$(".user-link").hide()
				$("#lastfm-link").show()
				show_flash(data.message, 'success')
				var return_url = $("#form-register input[name=return_url]").val()
				if (return_url.length) {
					$('<a href="'+return_url+'" class="inside">link</a>').click()
				}
				$("#form-register input[type!=submit]").val('')
			} else if (data.errors) {
				for (var field in data.errors) {
					$("#form-register .error-"+field).html(data.errors[field])
				}
			}
		}, 'json')
		return false
	})
	$("#form-login").submit(function() {
		$("#form-login .spinner").show()
		$.post('/login', $(this).serializeArray(), function(data) {
			$("#form-login .error").html('')
			$("#form-login .spinner").hide()
			if (data.success) {
				$("#login,.shadow").hide()
				$("div.reg-user").hide()
				$("div.reg-user.login").show()
				var text = (data.premium ? '<img src="/i/premium-account-label.png" width="17" height="17" alt="Premium account" /> ' : '') + '<a href="/account" class="inside">'+data.login+'</a>';
				$("div.reg-user.login b").html(text)
				$("#accordion").html(data.playlists)
				$(".user-link").hide()
				$("#lastfm-link").show()
				show_flash(data.message, 'success')
				set_advanced(data.advanced_play, data.hotkeys);
				var return_url = $("#form-login input[name=return_url]").val()
				if (return_url.length) {
					$('<a href="'+return_url+'" class="inside">link</a>').click()
				}
				$("#form-login input[type!=submit]").val('')
			} else if (data.errors) {
				for (var field in data.errors) {
					$("#form-login .error-"+field).html(data.errors[field])
				}
			}
		}, 'json')
		return false
	})
	$("#form-restore-password").submit(function() {
		$("#form-restore-password .spinner").show()
		$.post('/login/restore_password', $(this).serializeArray(), function(data) {
			$("#form-restore-password .error").html('')
			$("#form-restore-password .spinner").hide()
			if (data.success) {
				$("#restore-password,.shadow").hide()
				show_flash(data.message, 'success')
				$("#form-restore-password input[type!=submit]").val('')
			} else if (data.errors) {
				for (var field in data.errors) {
					$("#form-restore-password .error-"+field).html(data.errors[field])
				}
			}
		}, 'json')
		return false
	})
	$("#logout-link").click(function() {
		$.post('/logout', $(this).serializeArray(), function(data) {
			if (data.success) {
				$("div.reg-user").hide()
				$("div.reg-user.unlogin").show()
				$("div.user-link").show()
				$("#lastfm-link").hide()
				$("#accordion").html(data.playlists)
				show_flash(data.message, 'success')
				set_advanced(false, false);
			}
		}, 'json')
		return false
	})

	//top links
	$('#top-link').bind('click', function() {
		var div = $(this).parent();
		div.toggleClass('top-active');
		$("#hd").toggleClass('zIndex201');
	});

	//mail user link
	$('.user-link-desc').hide();
	$('.user-link input.link').click(function() {
		$(this).select();
	});
	$('.user-link > a').click(function() {
		var li = $(this).parent();
		li.toggleClass('active-link');
		$('.user-link-desc').toggle();
		$('.warning').toggleClass('z-index1');
		if (li.hasClass('active-link')) {
			$('.user-link input.link').select().focus();
		}
		return false;
	});

	//hide top/mail/track-menu on outer mousedown
	$(document).mousedown(function(event){
		if($.browser.opera){
			var ol = $('#accordion .visible ol');
			var olTop = ol.scrollTop();
		};
		var target = $(event.target);
		if(!target.parents('.user-link').length){
			$('.user-link > a').parent().removeClass('active-link');
			$('.user-link-desc').hide();
			$('.warning').removeClass('z-index1');
		};
		if(!target.parents('div.top').length){
			$('a.top-link').parent().removeClass('top-active');
			$("#hd").removeClass('zIndex201');
		}
		if(!target.parents('.track-menu-wrap').length){
			$('.track-menu:visible').hide().parent().css('z-index', 0).parents('ol').css('z-index', 0);
		}
		if($.browser.opera){
			ol.scrollTop(olTop);
		};
	});

	// track menu
	$('.track-menu-wrap > a').live('click', function(){
		$('.track-menu:visible').hide().parent().css('z-index', 0).parents('ol').css('z-index', 0);
		this.blur();
		if(!$(this).next().find('ul').length){
			var li = $(this).parents('li');
			var data = {
				link: li.attr('link'),
				track_id: li.attr('track_id'),
				file_id: li.attr('file_id'),
				rate: li.attr('rate'),
				size: li.attr('size')
			};
			var html = $('#track-menu').html()
			.replace(/%7B/g, '{')
			.replace(/%7D/g, '}')
			.replace(/{(.*?)}/g, function(full, q1){
			    return data[q1];
			});
			$(this).next().html(html);
		}
		var olHeight;
		var ol = $(this).parents('ol');
		if(ol.length) {
			olHeight = $(this).parents('ol').offsetHeight() + $(this).parents('ol')[0].scrollTop;
		}
		var menu = $(this).next();
		if(menu.css('display') == 'block') return;
		menu.css('display', 'block').css('top', $(this).offsetHeight());
		var height = menu.offsetHeight();
		if(menu.parents('#accordion').length && ol.length){
			var parent = menu;
			var top = 0;
			while(!parent.is('ol')){
				top += parent[0].offsetTop;
				parent = $(parent[0].offsetParent);
			};
			if(top + height + 5 > olHeight){
				menu.css('top', -height);
			};
		}
		if(menu.offset().top + height + 5 > $(window).height() + $(window).scrollTop()){
			menu.css('top', Math.max(-(menu.offset().top - $(window).scrollTop() - $(this).offsetHeight()), -height));
		}
		menu.css('display', 'none');
		menu.show();
		$(this).parent().css('z-index', 2);
		$(this).parents('ol').css('z-index', 2);
	});

	$(".menu-embed-code").live('click', function() {
		var track_id = $(this).attr('track_id');
		$("#embed-code input").val('\<object width="411" height="28"\>'
			+ '\<param name="movie" value="http://embed.prostopleer.com/track?id='+track_id+'"\>\</param\>'
			+ '\<embed src="http://embed.prostopleer.com/track?id='+track_id+'" type="application/x-shockwave-flash" '
			+ 'width="411" height="28"\>\</embed\>\</object\>')
			.click(function() {
				$(this).select().focus();
			}).select().focus();
		$("#embed-code,.shadow").show();
		return false;
	});
	$(".list-embed-code").live('click', function() {
		var list_id = $(this).attr('list_id');
		$("#embed-code-list input").val('\<object width="419" height="115"\>'
			+ '\<param name="movie" value="http://embed.prostopleer.com/list?id='+list_id+'"\>\</param\>'
			+ '\<embed src="http://embed.prostopleer.com/list?id='+list_id+'" type="application/x-shockwave-flash" '
			+ 'width="419" height="115"\>\</embed\>\</object\>')
			.click(function() {
				$(this).select().focus();
			}).select().focus();
		$("#embed-code-list,.shadow").show();
		return false;
	});
	$(".menu-track-link").live('click', function() {
		var link = $(this).attr('href');
		$("#track-link input").val('http://prostopleer.com'+link)
			.click(function() {
				$(this).select().focus();
			}).select().focus();
		$("#track-link,.shadow").show();
		return false;
	});

	function set_advanced(play, hotkeys) {
		NanoPlayer.advancedPlay = play;
		NanoPlayer.advancedKeyboard = hotkeys;
	}

	// close all popup divs with Esc key
	$(document).keydown(function(event){
		if (event.keyCode != 27) return;
		$('.track-menu:visible').parent().css('z-index', 0).parents('ol').css('z-index', 0);
		$(".user-link-desc,#login,#register,#restore-password,#embed-code,#embed-code-list,#track-link,.shadow,.track-menu").hide();
		$('.user-link').removeClass('active-link');
		$('a.top-link').parent('div').removeClass('top-active');
		$('.warning').removeClass('z-index1');
		$("#hd").removeClass('zIndex201');
	});
	$('.shadow,#login,#register,#restore-password,#embed-code,#embed-code-list,#track-link').click(function (event) {
		var target = $(event.target);
		if( (target.parents('.modal').length && !target.is('.close')) || target.is('.modal')) return;
		$('#login,#register,#restore-password,#embed-code,#embed-code-list,#track-link,.shadow').hide()
	});
	
	//advanced search
	$(".advanced-search .cancel").click(function () {
		$(this).parents(".search").removeClass("advanced-search-expanded");
		$('#search-btn-advanced').find('input, img').appendTo($('#search-btn'));
		return false;
	});				
	$("#bitrate-options").change(function() {
		var bitrateOption = $("option:selected", this).val();
		$("#bitrate-option-"+bitrateOption).show();
		$("#bitrate-option-"+bitrateOption).nextAll("span[id^='bitrate-option-']").hide();
		$("#bitrate-option-"+bitrateOption).prevAll("span[id^='bitrate-option-']").hide();
	 }).change();

	// тексты
	$(".link-text").live('click', function() {
		var url = $(this).attr('href');
		$.post(url, {}, function(data) {
			if (data.complete) {
				$("#lyrics-block h3").html('<span class="artist">'+data.singer+'</span><br /><span class="title">'+data.song+'</span>');
				$("#lyrics-block div.lyrics-overflow").html(data.text);
				$("#lyrics-block").show();
				$(".results").parent().addClass("with-lyrics");
			}
		}, 'json');
		return false;
	});
	$("#lyrics-block .close").click(function() {
		$("#lyrics-block").hide();
		$(".results").parent().removeClass("with-lyrics");
		return false;
	});

	// настройки
	$("#account-settings").live('submit', function() {
		$.post('/account/settings', $(this).serializeArray(), function(data) {
			set_advanced(data.advanced_play, data.hotkeys);
			show_flash(data.message, 'success');
			$('<a href="/account" class="inside">link</a>').click();
		}, 'json');
		return false;
	});
});

;

/**** /js/billing.js ****/
$(document).ready(function() {
	// qiwi
	$("#payment-form-qiwi .payment-form").live('submit', function() {
		$(".payment-invoice-error").remove();
		$(".payment-spinner").show();
		$.post('/account/pay/qiwi', $(this).serialize(), function(data) {
			$(".payment-spinner").hide();
			if (data.success) {
				$("<a href=\"/account/history/"+data.id+"\" class=\"inside\">link</a>").click();
			}
			else {
				$(".payment").prepend("<div class=\"payment-invoice-error rounded5 clearfix\">"+data.error+"</div>");
			}
		}, 'json');
		return false;
	});

	// wm
	$("#payment-form-wm #currency").live('change', function() {
		$("<a href=\"/account/pay/wm?currency="+$(this).val()+"\" class=\"inside\">link</a>").click();
	});
	$("#payment-form-wm .payment-form").live('submit', function() {
		$(".payment-invoice-error").remove();
		$(".payment-spinner").show();
		$.post('/account/pay/wm', $(this).serialize(), function(data) {
			$(".payment-spinner").hide();
			if (data.success) {
				$("<a href=\"/account/history/"+data.id+"\" class=\"inside\">link</a>").click();
			}
			else {
				$(".payment").prepend("<div class=\"payment-invoice-error rounded5 clearfix\">"+data.error+"</div>");
			}
		}, 'json');
		return false;
	});

	// sms
	var sms_set_numbers = function(numbers) {
		var html = '';
		$.each(numbers, function (days, data) {
			html += '<li class="payment-sms-option">\
				<span class="sms-payment-period">'+data.days+'</span> &mdash; отправьте сообщение с текстом <strong class="sms-text">'+data.text+'</strong> на номер <strong class="sms-number">'+data.number+'</strong> чтобы продлить аккаунт на '+data.days+'.\
				<div class="h-sep"></div>\
				стоимость сообщения <span class="payment-price">'+data.cost+'</span> <span class="payment-currency">'+data.plural_rur+'</span> ('+data.orig+')\
			</li>';
		});
		$("#sms-numbers").html(html);
	}
	$("#payment-form-sms #sms-country").live('change', function() {
		var country = $(this).val();
		$.get('/account/pay/sms', {action: 'get_operators', country: country}, function(data) {
			var html = '';
			$.each(data.operators, function(id, name) {
				html += '<option value="'+id+'"'+(data.operator_selected == id ? ' selected' : '')+'>'+name+'</option>';
			})
			$("#sms-operator").html(html);
			sms_set_numbers(data.numbers);
		}, 'json');
	});
	$("#payment-form-sms #sms-operator").live('change', function() {
		var country = $("#sms-country").val();
		$.get('/account/pay/sms', {action: 'get_numbers', country: country, operator: $(this).val()}, function(data) {
			sms_set_numbers(data.numbers);
		}, 'json');
	});

	// liqpay
	$("#payment-form-liqpay #currency").live('change', function() {
		$("<a href=\"/account/pay/cards?currency="+$(this).val()+"\" class=\"inside\">link</a>").click();
	});
	$("#payment-form-liqpay .payment-form").live('submit', function() {
		$(".payment-invoice-error").remove();
		$(".payment-spinner").show();
		$.post('/account/pay/cards', $(this).serialize(), function(data) {
			$(".payment-spinner").hide();
			if (data.success) {
				$("<a href=\"/account/history/"+data.id+"\" class=\"inside\">link</a>").click();
			}
			else {
				$(".payment").prepend("<div class=\"payment-invoice-error rounded5 clearfix\">"+data.error+"</div>");
			}
		}, 'json');
		return false;
	});

	// all
	$(".payment-price-list label").live('click', function() {
		$(this).parent("li").siblings().removeClass("payment-current-price");
		$(this).parent("li").addClass("payment-current-price");
	});
})

;
